The Full Wiki

Atan2: Wikis


Note: Many of our articles have direct quotes from sources you can cite, within the Wikipedia article! This article doesn't yet, but we're working on it! See more info or our list of citable articles.


(Redirected to atan2 article)

From Wikipedia, the free encyclopedia

In trigonometry, the two-argument function atan2 is a variation of the arctangent function. For any real arguments x and y not both equal to zero, atan2(yx) is the angle in radians between the positive x-axis of a plane and the point given by the coordinates (xy) on it. The angle is positive for counter-clockwise angles (upper half-plane, y > 0), and negative for clockwise angles (lower half-plane, y < 0).

The atan2 function was first introduced in computer programming languages, but now it is also common in other fields of science and engineering. It dates back at least as far as the FORTRAN programming language and is currently found in C's math.h standard library, the Java Math library, the C# static Math class, and elsewhere. Many scripting languages, such as Perl, include the C-style atan2 function.[1]

In mathematical terms, atan2 computes the principal value of the argument function applied to the complex number x+iy. That is atan2(yx) = Pr arg(x+i y) = Arg(x+iy). The argument can be changed by 2π (corresponding to a complete turn around the origin) without making any difference to the angle, but to define atan2 uniquely one uses the principal value in the range (-π,π]. That is, -π < atan2(yx) ≤ π.

The atan2 function is useful in many applications involving vectors in Euclidean space, such as finding the direction from one point to another. A principal use is in computer graphics rotations, for converting rotation matrix representations into Euler angles.

In some computer programming languages, the order of the parameters is reversed or a different name is used for the function. On scientific calculators the function can often be calculated as the angle given when (xy) is converted from rectangular coordinates to polar coordinates.



The one-argument arctangent function does not distinguish between diametrically opposite directions. For example, the anticlockwise angle from the x-axis to the vector <1, 1>, calculated in the usual way as arctan(1/1), is π/4 (radians), or 45°. However, the angle between the x-axis and the vector <−1, −1> appears, by the same method, to be arctan(−1/−1), again π/4, even though the answer clearly should be −3π/4, or −135°.

The "atan2" function takes into account the signs of both vector components, and places the angle in the correct quadrant. Thus, atan2(1, 1) = π/4 and atan2(−1, −1) = −3π/4.

Additionally, the ordinary arctangent method breaks down when required to produce an angle of ±π/2 (or ±90°). For example, an attempt to find the angle between the x-axis and the vector <0,1> requires evaluation of arctan(1/0), which fails on division by zero. In contrast, atan2(1,0) gives the correct answer of π/2.

When calculations are performed manually, the necessary quadrant corrections and exception handling can be done by inspection, but in computer programs it is extremely useful to have a single function that always gives an unambiguous correct result.


In terms of the standard arctan function, that is with range of (−π/2, π/2), it can be expressed as follows:

\operatorname{atan2}(y, x) = \begin{cases} \arctan(\frac y x) & \qquad x > 0 \ \pi + \arctan(\frac y x) & \qquad y \ge 0 , x < 0 \ -\pi + \arctan(\frac y x) & \qquad y < 0 , x < 0 \ \frac{\pi}{2} & \qquad y > 0 , x = 0 \ -\frac{\pi}{2} & \qquad y < 0 , x = 0 \ \text{undefined} & \qquad y = 0, x = 0 \end{cases}


  • This produces results in the range (-π,π], which can be mapped to [0,2π) by adding 2π to negative values.
  • Traditionally, atan2(0,0) is undefined.
    • The C function, and most other computer implementations, are designed to reduce the effort of transforming cartesian to polar coordinates and so always define atan2(0,0). On implementations without signed zero, or when given positive zero arguments, it is normally defined as 0. It will always return a value in the range [-π,π] rather than raising an error or returning a NaN (Not a Number).
    • Systems supporting symbolic mathematics normally return an undefined value for atan2(0,0) or otherwise signal that an abnormal condition has arisen.
  • For systems, for example IEEE floating point, implementing signed zero, infinities, or Not a Number it is usual to implement reasonable extensions which may extend the range of values produced to include -π and -0. These also may return NaN or raise an exception when given a NaN argument.

The free maths library FDLIBM (Freely Distributable LIBM) available from netlib has source code showing how it implements atan2 including handling the various IEEE exceptional values.

For systems without a hardware multiplier the function atan2 can be implemented in a numerically reliable manner by the CORDIC method. Thus implementations of atan(y) will probably choose to compute atan2(y,1).

The following expression derived from the tangent half-angle formula can also be used to define atan2.

 \operatorname{atan2} (y, x)=2 \arctan \frac{y}{\sqrt{x^2+y^2}+x}.

This expression may be more suited for symbolic use than the definition above. However it is unsuitable for floating point computational use as it is undefined for y=0,x<0 and may overflow near these regions. The formula gives an NaN or raises an error for atan2(0,0), but this is not an issue since atan2(0,0) is not defined.

A variant of the last formula is sometimes used in high precision computation. This avoids overflow but is always undefined when y=0:

 \operatorname{atan2} (y, x)=2 \arctan \frac{\sqrt{x^2+y^2}-x}{y}.


  • In Common Lisp, where optional arguments exist, the atan function allows one to optionally supply the x coordinate: (atan y x).[2]
  • In Mathematica, the form ArcTan[x, y] is used where the one parameter form supplies the normal arctangent. Mathematica classifies ArcTan[0, 0] as an indeterminate expression.
  • In Microsoft Excel, the atan2 function has the two arguments reversed.[3] Calc also reverses the arguments, as does the Google Spreadsheets atan2 function[4].
  • In the Intel Architecture assembler code, atan2 is known as FPATAN (floating-point partial arctangent) instruction.[5] It can deal with infinities and results range from [ − π, + π] (closed interval), e.g. \operatorname{atan2}(\infty, x)=+\pi. Particularly, FPATAN is defined when both arguments are zero:
    \operatorname{atan2}(+0, +0) = +0
    \operatorname{atan2}(+0, -0) = +\pi
    \operatorname{atan2}(-0, +0) = -0
    \operatorname{atan2}(-0, -0) = -\pi
    This definition is related with the concept of signed zero, i.e.  \pm 0\; \overset{def}{=} \lim_{\;x\rightarrow 0^\pm} x
  • On the TI-89 calculator, the equivalent function is called R►Pθ and has the arguments reversed.


The diagram below shows values of atan2 at selected points on the unit circle. The values, in radians, are shown in blue inside the circle. The four points (1,0), (0,1), (-1,0), and (0,-1) are labeled outside the circle. Note that the order of arguments is reversed; the function atan2(y,x) computes the angle corresponding to the point (x,y).

Atan2 circle.svg

The diagram below shows values of atan2 for points of unit circle. On X axis is complex angle of point. It starts from 0 ( point (0,1) ) and goes in anticlockwise (counterclockwise) direction through points :

  • (0,1) with complex angle pi/2 in radians,
  • (-1,0) with complex angle pi,
  • (-1,-1) with complex angle 3pi/2,

to (1,0) with complex angle 0 = 2pi modulo 2pi On this diagram one can clearly see the discontinuity of function atan2. When a point z is crossing the negative real axis, for example point z goes from (0,1) through (-1,0) to (0,-1). Its argument should go from pi/2 through pi to 3pi/2, but the output of atan2 ( principal value of argument) goes from pi/2 to pi, jumps to -pi (discontinuity), and goes to -pi/2.[6]

For anyone wondering about using atan2 to transform x and y coordinates into bearings from grid North, you can use bearing = atan2(x,y). The arguments in the above example are reversed to suit the preferences of the person who drew the diagram. Ironically, its a somewhat circular argument. Looking at the above diagram you can imagine that if you were to rotate it 90 degrees to anticlockwise and then flip it left to right, it would make a lot more sense from a geographic point of view.


The diagrams below show 3D view of respectively atan2 and \arctan\left(\frac y x\right) over a region of the plane.

Note that for atan2, rays emanating from the origin have constant values, but for atan lines passing through the origin have constant values.

Atan2Diagram.png AtanDiagram.png


  1. ^ The Linux Programmer's Manual [1] says:
    "The atan2() function calculates the arc tangent of the two variables y and x. 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."
  2. ^ "CLHS: Function ASIN, ACOS, ATAN". LispWorks.  
  3. ^ "Atan2 Method". Microsoft.  
  4. ^ "Function list". Google.  
  5. ^ IA-32 Intel Architecture Software Developer’s Manual. Volume 2A: Instruction Set Reference, A-M, 2004.
  6. ^ Computation of the external argument by Wolf Jung

See also

External links


Other implementations/code for atan2


Got something to say? Make a comment.
Your name
Your email address