Format
arctan(Num)
arctan(x, y)
arctan(Vector)
Args
Num
: A numberx, y
: 2D coordinatesVector
: A vector (only 2 dimensions are used)
Returns
The inverse tangent in degrees.
When arctan
is called with just one number argument, the number is a tangent, and the return value is the angle that produces that tangent. The resulting angle can range from -90 to 90.
The two-argument form returns a polar angle from -180 to 180. This angle starts at 0° for due east, and increases counter-clockwise from there. Therefore 1,0 has an arctangent of 0°, 0,1 is 90°, -1,0 is 180°, and so on. At point 0,0 the angle is undefined since it could be any angle, but arctan
will return 0.
Finally, you can use a vector instead of a number. Only the x and y components of a vector will be used.
mob/verb/test()
usr << arctan(0) // 0
usr << arctan(1) // 45
usr << arctan(sqrt(3)) // 60
// polar coordinates
usr << arctan(3, 4) // 53.1301
usr << arctan(-1, 1) // 135
usr << arctan(0, -5) // -90
Here’s another example, in which a rotating turret points to a target on another tile.
mob/turret
proc/PointAt(atom/target)
if(!target) return
var/dx = target.x - x
var/dy = target.y - y
// turret's icon normally faces east
transform = matrix().Turn(-arctan(dx, dy))