atan2
![](http://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Arctangent2.svg/220px-Arctangent2.svg.png)
In
The function first appeared in the programming language
If x > 0, the desired angle measure is However, when x < 0, the angle is diametrically opposite the desired angle, and ±π (a half turn) must be added to place the point in the correct quadrant.[1] Using the function does away with this correction, simplifying code and mathematical formulas.
Motivation
![](http://upload.wikimedia.org/wikipedia/commons/thumb/5/5b/Atan2_argument_sign_graph.svg/220px-Atan2_argument_sign_graph.svg.png)
The ordinary single-argument
To determine an angle measure using the arctangent function given a point or vector mathematical formulas or computer code must handle multiple cases; at least one for positive values of and one for negative values of and sometimes additional cases when is negative or one coordinate is zero. Finding angle measures and converting Cartesian to polar coordinates are common in scientific computing, and this code is redundant and error-prone.
To remedy this, computer
The atan2 function is useful in many applications involving
The atan2 function is now included in many other programming languages, and is also commonly found in mathematical formulas throughout science and engineering.
Argument order
In 1961, Fortran introduced the atan2 function with argument order so that the argument (phase angle) of a complex number is This follows the left-to-right order of a fraction written so that for positive values of However, this is the opposite of the conventional component order for complex numbers, or as coordinates See section Definition and computation.
Some other programming languages (see § Realizations of the function in common computer languages) picked the opposite order instead. For example Microsoft Excel uses OpenOffice Calc uses and
Definition and computation
The function atan2 computes the principal value of the argument function applied to the complex number x + i y. That is, atan2(y, x) = Pr arg(x + i y) = Arg(x + i y). The argument could be changed by an arbitrary multiple of 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(y, x) ≤ π.
In terms of the standard arctan function, whose range is (−π/2, π/2), it can be expressed as follows to define a surface that has no discontinuities except along the semi-infinite line x<0 y=0:
A compact expression with four overlapping half-planes is
The Iverson bracket notation allows for an even more compact expression:[note 1]
Formula without apparent conditional construct:
The following expression derived from the tangent half-angle formula can also be used to define atan2:
A variant of the last formula that avoids these inflated rounding errors:
![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/d6/The_principal_value_of_the_argument_%28-atan2-_in_some_circles%29.svg/220px-The_principal_value_of_the_argument_%28-atan2-_in_some_circles%29.svg.png)
Notes:
- This produces results in the range (−π, π].[note 2]
- As mentioned above, the principal value of the argument atan2(y, x) can be related to arctan(y/x) by trigonometry. The derivation goes as follows: If (x, y) = (r cos θ, r sin θ), then tan(θ/2) = y / (r + x). It follows that Note that √x2 + y2 + x ≠ 0 in the domain in question.
Derivative
As the function atan2 is a function of two variables, it has two partial derivatives. At points where these derivatives exist, atan2 is, except for a constant, equal to arctan(y/x). Hence for x > 0 or y ≠ 0,
Thus the gradient of atan2 is given by
Informally representing the function atan2 as the angle function θ(x, y) = atan2(y, x) (which is only defined up to a constant) yields the following formula for the
While the function atan2 is discontinuous along the negative x-axis, reflecting the fact that angle cannot be continuously defined, this derivative is continuously defined except at the origin, reflecting the fact that infinitesimal (and indeed local) changes in angle can be defined everywhere except the origin. Integrating this derivative along a path gives the total change in angle over the path, and integrating over a closed loop gives the winding number.
In the language of
The partial derivatives of atan2 do not contain trigonometric functions, making it particularly useful in many applications (e.g. embedded systems) where trigonometric functions can be expensive to evaluate.
Illustrations
![](http://upload.wikimedia.org/wikipedia/commons/thumb/0/03/Atan2_60.svg/300px-Atan2_60.svg.png)
This figure shows values of atan2 along selected rays from the origin, labelled at the unit circle. The values, in radians, are shown inside the circle. The diagram uses the standard mathematical convention that angles increase counterclockwise from zero along the ray to the right. Note that the order of arguments is reversed; the function atan2(y, x) computes the angle corresponding to the point (x, y).
![](http://upload.wikimedia.org/wikipedia/commons/thumb/c/c7/Atan2atan.png/300px-Atan2atan.png)
This figure shows the values of along with for . Both functions are odd and periodic with periods and , respectively, and thus can easily be supplemented to any region of real values of . One can clearly see the
The two figures below show 3D views of respectively atan2(y, x) and arctan(y/x) over a region of the plane. Note that for atan2(y, x), rays in the X/Y-plane emanating from the origin have constant values, but for arctan(y/x) lines in the X/Y-plane passing through the origin have constant values. For x > 0, the two diagrams give identical values.
![]() |
![]() |
Angle sum and difference identity
The sum or difference of multiple angles to be computed by can alternately be computed by composing them as complex numbers. Given two coordinate pairs and , their angles from the positive axis will be composed (and lengths multiplied) if they are treated as complex numbers and then multiplied together, . The resulting angle can be found using a single operation, so long as the as long as the resulting angle lies in :
and likewise for more than two coordinate pairs. If the composed angle crosses the negative -axis (i.e. exceeds the range ), then the crossings can be counted and the appropriate integer multiple of added to the final result to correct it.
This difference formula is frequently used in practice to compute the angle between two planar vectors, since the resulting angle is always in the range .
East-counterclockwise, north-clockwise and south-clockwise conventions, etc.
The function was originally designed for the convention in pure mathematics that can be termed east-counterclockwise. In practical applications, however, the north-clockwise and south-clockwise conventions are often the norm. In atmospheric sciences, for instance, the wind direction can be calculated using the function with the east- and north-components of the wind vector as its arguments;[4] the solar azimuth angle can be calculated similarly with the east- and north-components of the solar vector as its arguments. The wind direction is normally defined in the north-clockwise sense, and the solar azimuth angle uses both the north-clockwise and south-clockwise conventions widely.[5] These different conventions can be realized by swapping the positions and changing the signs of the x- and y-arguments as follows:
- (East-Counterclockwise Convention)
- (North-Clockwise Convention)
- . (South-Clockwise Convention)
As an example, let and , then the east-counterclockwise format gives , the north-clockwise format gives , and the south-clockwise format gives .
Changing the sign of the x- and/or y-arguments and/or swapping their positions can create 8 possible variations of the function and they, interestingly, correspond to 8 possible definitions of the angle, namely, clockwise or counterclockwise starting from each of the 4 cardinal directions, north, east, south and west.
Realizations of the function in common computer languages
The realization of the function differs from one computer language to another:
- In the 2-argument arctangent function has the two arguments in the standard sequence (reversed relative to the convention used in the discussion above).
- In Mathematica, the form
ArcTan[x, y]
is used where the one parameter form supplies the normal arctangent. Mathematica classifiesArcTan[0, 0]
as an indeterminate expression. - On most TI graphing calculators (excluding the TI-85 and TI-86), the equivalent function is called R►Pθ and has the arguments .
- On TI-85 the arg function is called
angle(x,y)
and although it appears to take two arguments, it really only has one complex argument which is denoted by a pair of numbers: x + i y = (x, y).
The convention is used by:
- The C function
atan2
, and most other computer implementations, are designed to reduce the effort of transforming cartesian to polar coordinates and so always defineatan2(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). - In Common Lisp, where optional arguments exist, the
atan
function allows one to optionally supply the x coordinate:(atan y x)
.[10] - In Julia, the situation is similar to Common Lisp: instead of
atan2
, the language has a one-parameter and a two-parameter form foratan
.[11] However, it has many more than two methods, to allow for aggressive optimisation at compile time (see the section "Why don't you compile Matlab/Python/R/… code to Julia?" [12]). - For systems implementing IEEE floating point), it is common to implement reasonable extensions which may extend the range of values produced to include −π and −0 when y = −0. These also may return NaN or raise an exception when given a NaN argument.
- In the It can deal with infinities and results lie in the closed interval [−π, π], e.g.
atan2(∞, x)
= +π/2 for finite x. Particularly,FPATAN
is defined when both arguments are zero:atan2(+0, +0)
= +0;atan2(+0, −0)
= +π;atan2(−0, +0)
= −0;atan2(−0, −0)
= −π.
- This definition is related to the concept of signed zero.
- In mathematical writings other than source code, such as in books and articles, the notations Arctancomplex argument notation, such that Atan(y, x) = Arg(x + i y).
- On HP calculators, treat the coordinates as a complex number and then take the
ARG
. Or<< C->R ARG >> 'ATAN2' STO
. - On scientific calculators the function can often be calculated as the angle given when (x, y) is converted from polar coordinates.
- Systems supporting symbolic mathematics normally return an undefined value for atan2(0, 0) or otherwise signal that an abnormal condition has arisen.
- The free math 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).
See also
- hypot
References
- ^ "The argument of a complex number" (PDF). Santa Cruz Institute for Particle Physics. Winter 2011.
- ^ Organick, Elliott I. (1966). A FORTRAN IV Primer. Addison-Wesley. p. 42.
Some processors also offer the library function called ATAN2, a function of two arguments (opposite and adjacent).
- ^ "Wolf Jung: Mandel, software for complex dynamics". www.mndynamics.com. Retrieved 20 April 2018.
- ^ "Wind Direction Quick Reference". NCAR UCAR Earth Observing Laboratory.
- S2CID 233631040.
- ^ "Microsoft Excel Atan2 Method". Microsoft.
- ^ "LibreOffice Calc ATAN2". Libreoffice.org.
- ^ "Functions and formulas – Docs Editors Help". support.google.com.
- ^ "Numbers' Trigonometric Function List". Apple.
- ^ "CLHS: Function ASIN, ACOS, ATAN". LispWorks.
- ^ "Mathematics · The Julia Language". docs.julialang.org.
- ^ "Frequently Asked Questions · The Julia Language". docs.julialang.org.
- ^ IA-32 Intel Architecture Software Developer’s Manual. Volume 2A: Instruction Set Reference, A-M, 2004.
- ISBN 978-1-84800-191-6. Retrieved 20 April 2018 – via Google Books.
- ISBN 9789048194438. Retrieved 20 April 2018 – via Google Books.
External links
- ATAN2 Online calculator
- Java 1.6 SE JavaDoc
- atan2 at Everything2
- PicBasic Pro solution atan2 for a PIC18F
- Other implementations/code for atan2
- "Bearing Between Two Points". Archived from the original on 18 November 2020. Retrieved 21 February 2022.
- "Arctan and Polar Coordinates". Archived from the original on 18 October 2018. Retrieved 21 February 2022.
- "What's 'Arccos'?". Archived from the original on 6 September 2017. Retrieved 21 February 2022.