Can someone please help me with the code below? I'm trying to rotate a RECT structure (Sprite(iSpriteIndex1).dstRect) and then create a new RECT (S1) that will be just the right size to contain the rotated RECT. I thought I had it but I'm getting some strange results and I can't figure out why.
VB Code:
Dim Angle As Single Dim XCenter As Single Dim YCenter As Single Dim BL As POINTAPI Dim TL As POINTAPI Dim BR As POINTAPI Dim TR As POINTAPI If Sprite(iSpriteIndex1).Angle = 0 Then S1 = Sprite(iSpriteIndex1).dstRect Else TempRect = Sprite(iSpriteIndex1).dstRect XCenter = TempRect.Left + ((TempRect.Right - TempRect.Left - 1) / 2) YCenter = TempRect.Top + ((TempRect.Bottom - TempRect.Top - 1) / 2) Angle = Sprite(iSpriteIndex1).Angle + (Pi / 2) If Angle >= 2 * Pi Then Angle = Angle - ((2 * Pi) * CInt(Angle / (2 * Pi))) If Angle < 4.714 And Angle > 4.71 Then Angle = 3 * Pi / 2 ElseIf Angle < 3.143 And Angle > 3.14 Then Angle = Pi ElseIf Angle < 6.284 And Angle > 6.282 Then Angle = 2 * Pi End If 'Bottom Left BL.x = XCenter + (TempRect.Left - XCenter) * Sin(Angle) + (TempRect.Bottom - YCenter) * Cos(Angle) BL.y = YCenter + (TempRect.Bottom - YCenter) * Sin(Angle) - (TempRect.Left - XCenter) * Cos(Angle) 'Top Left TL.x = XCenter + (TempRect.Left - XCenter) * Sin(Angle) + (TempRect.Top - YCenter) * Cos(Angle) TL.y = YCenter + (TempRect.Top - YCenter) * Sin(Angle) - (TempRect.Left - XCenter) * Cos(Angle) 'Bottom Right BR.x = XCenter + (TempRect.Right - XCenter) * Sin(Angle) + (TempRect.Bottom - YCenter) * Cos(Angle) BR.y = YCenter + (TempRect.Bottom - YCenter) * Sin(Angle) - (TempRect.Right - XCenter) * Cos(Angle) 'Top Right TR.x = XCenter + (TempRect.Right - XCenter) * Sin(Angle) + (TempRect.Top - YCenter) * Cos(Angle) TR.y = YCenter + (TempRect.Top - YCenter) * Sin(Angle) - (TempRect.Right - XCenter) * Cos(Angle) 'Set S1... SetRect R1, TL.x, TL.y, BL.x, BL.y SetRect R2, BL.x, BL.y, BR.x, BR.y SetRect R3, BR.x, BR.y, TR.x, TR.y SetRect R4, TR.x, TR.y, TL.x, TL.y UnionRect S1, R1, R2 UnionRect S1, R3, S1 UnionRect S1, R4, S1 'S1 is now the RECT for the area needed to paint the first sprite End If
I'd greatly appreciate any help anyone has.




)
Reply With Quote