10-04-2024, 10:24 PM
(10-04-2024, 10:04 PM)NakedApe Wrote: Also Terry I was checking out your library and noticed a Vec2Deg function that was longer than the one I use. Is this simpler version as useful?
Code: (Select All)Dim As Single Vx, Vy, angle
start:
Cls
Print "Type in vectors, Vx, Vy"
Input Vx: Input Vy
angle = Vec2Deg(Vx, Vy)
Print: Print "The answer is "; Using "###.###"; angle;: Print " degrees."
If Vx = 0 Or Vy = 0 Then System
Sleep
GoTo start:
Function Vec2Deg (Vx As Single, Vy As Single) '
' ** Turns vector pairs into degrees **
Dim As Double radian
Dim As Single degrees
radian = _Atan2(Vx, Vy) '
degrees = _R2D(radian) '
If degrees < 0 Then degrees = 360 + degrees '
Vec2Deg = degrees '
End Function
If all you need is integer values, you can also use something really simple such as this:
Code: (Select All)
Dim As Single Vx, Vy, angle
For Vx = -5 To 5
For Vy = -5 To 5
angle = Vec2Deg(Vx, Vy)
Print Vec2Deg(Vx, Vy), V2D(Vx, Vy)
Next
Next
Function Vec2Deg (Vx As Single, Vy As Single) '
' ** Turns vector pairs into degrees **
Dim As Double radian
Dim As Single degrees
radian = _Atan2(Vx, Vy) '
degrees = _R2D(radian) '
If degrees < 0 Then degrees = 360 + degrees '
Vec2Deg = degrees '
End Function
Function V2D (Vx As Single, Vy As Single) '
' ** Turns vector pairs into degrees **
V2D = (360## + _R2D(_Atan2(Vx, Vy))) Mod 360## '
End Function
No IFs to process. Just one simple line of math to keep your angle between 0 and 360. If you need decimal precision (44.587 degrees instead of 45 degrees, for example), this wouldn't work. But if you want something speedy and *close enough* is close enough, it might serve you better in many use cases.