Sub AT_MoveTo
' Another Turtle | Move to given position
' param x
' param y
Stack.PushValue("local", x)
Stack.PushValue("local", y)
x = x - AT_x
y = y - AT_y
Math_CartesianToPolar()
angle = a + 90 - AT_angle
distance = r
AT_Turn()
AT_Move()
y = Stack.PopValue("local")
x = Stack.PopValue("local")
EndSub
Sub AT_Turn
' Another Turtle | Turn Right
' param angle
If angle > 0 Then
sa = 1
Else
sa = -1
EndIf
For a = AT_angle To AT_angle + angle Step sa
Shapes.Rotate(AT_obj, a)
Program.Delay(5)
EndFor
AT_angle = AT_angle + angle
If AT_angle < 0 Then
AT_angle = AT_angle + 360
ElseIf 360 <= AT_angle Then
AT_angle = AT_angle - 360
EndIf
EndSub
Sub AT_TurnRight
' Another Turtle | Turn Right
For angle = AT_angle To AT_angle + 90
Shapes.Rotate(AT_obj, angle)
Program.Delay(5)
EndFor
AT_angle = angle - 1
EndSub
Sub Math_CartesianToPolar
' Math | convert cartesian coodinate to polar coordinate
' param x, y - cartesian coordinate
' return r, a - polar coordinate
r = Math.SquareRoot(x * x + y * y)
If x = 0 And y > 0 Then
a = 90 ' [degree]
ElseIf x = 0 And y < 0 Then
a = -90
Else
a = Math.ArcTan(y / x) * 180 / Math.Pi
EndIf
If x < 0 Then
a = a + 180
ElseIf x > 0 And y < 0 Then
a = a + 360
EndIf
EndSub