Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to map atan2() to degrees 0-360

People also ask

Is atan2 in degrees or radians?

ATAN2(y,x) returns the arc tangent of the two numbers x and y. It is similar to calculating the arc tangent of y / x, except that the signs of both arguments are used to determine the quadrant of the result. The result is an angle expressed in radians. To convert from radians to degrees, use the DEGREES function.

What is the range of atan2?

Return Value The atan() function returns a value in the range -π/2 to π/2 radians. The atan2() function returns a value in the range -π to π radians.

What is the range of returned angle from atan2 function?

Calculates the angle from a specified point to the coordinate origin as measured from the positive x-axis. When angleMode is "degrees" (the default), the values returned range from 180 to -180.


Solution using Modulo

A simple solution that catches all cases.

degrees = (degrees + 360) % 360;  // +360 for implementations where mod returns negative numbers

Explanation

Positive: 1 to 180

If you mod any positive number between 1 and 180 by 360, you will get the exact same number you put in. Mod here just ensures these positive numbers are returned as the same value.

Negative: -180 to -1

Using mod here will return values in the range of 180 and 359 degrees.

Special cases: 0 and 360

Using mod means that 0 is returned, making this a safe 0-359 degrees solution.


(x > 0 ? x : (2*PI + x)) * 360 / (2*PI)

Just add 360° if the answer from atan2 is less than 0°.


Or if you don't like branching, just negate the two parameters and add 180° to the answer.

(Adding 180° to the return value puts it nicely in the 0-360 range, but flips the angle. Negating both input parameters flips it back.)