The Atan2 Function

June 16, 2018

The inverse tangent function, `Math.atan()`, is useful to calculate the angle of a provided ratio of a sides of a triangle (like a velocity vector's `x` and `y` values). This can be useful to find the angle an object should be rotated to face in the direction it's moving, `Math.atan(velocity.y/velocity.x)`.

The normal arctangent function has a couple issues though for this use case:

• In other programming languages, dividing by zero will cause an error if the x value of the vector (when moving horizontally). In JavaScript, this division returns the `Inifinity` number which `Math.atan()` can actually handle correctly.
• The arctangent function's domain is -π/2 to π/2 radians (-90° to 90°). This means it cannot distinguish between `{x: 1, y: 1}` and `{x: -1, y: -1}`. `Math.atan(y/x)` both evalute to 0.785 radians (45°).

This is where the arctangent2 function comes in handy. `Math.atan2(y, x)` functions the same way as the `Math.atan(y/x)` function with a special exception. This function has a domain of -π to π radians (-180° to 180°). Revisiting the earlier example, `{x: 1, y: 1}` and `{x: -1, y: -1}` evaluate to 0.785 radians (45°) and -2.356 radians (-135°) respectively. This allows you to correctly orient an object to any velocity vector in a circle.

#examples

`// Returns an angle in degrees representing the facing of an object with the given velocityfunction convertVelocityToAngle(velocity) {  const { x, y } = velocity;  return Math.atan2(y, x) * (180 / Math.PI);}`