Could someone please help with this Rotating RECT [Resolved]
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.