该函数基于值域为
(
−
π
2
,
π
2
)
{\displaystyle \left(-{\frac {\pi }{2}},{\frac {\pi }{2}}\right)}
的反正切 函数,定义如下:
atan2
(
y
,
x
)
=
{
arctan
(
y
x
)
x
>
0
arctan
(
y
x
)
+
π
y
≥
0
,
x
<
0
arctan
(
y
x
)
−
π
y
<
0
,
x
<
0
+
π
2
y
>
0
,
x
=
0
−
π
2
y
<
0
,
x
=
0
undefined
y
=
0
,
x
=
0
{\displaystyle \operatorname {atan2} (y,x)={\begin{cases}\arctan \left({\frac {y}{x}}\right)&\qquad x>0\\\arctan \left({\frac {y}{x}}\right)+\pi &\qquad y\geq 0,x<0\\\arctan \left({\frac {y}{x}}\right)-\pi &\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}}}
说明:
该函数的值域为
(
−
π
,
π
]
{\displaystyle \left(-\pi ,\pi \right]}
,可以通过对负数结果加
2
π
{\displaystyle 2\pi }
的方法,将函数的结果映射到
[
0
,
2
π
)
{\displaystyle \left[0,2\pi \right)}
范围内。
不同计算机语言中该函数的实现各有差异。
vb6:
atan2(x,y)=
(x<>0+y<>0)*
(x<=0)*2*Atn(sgn(y)^sgn(y))/2^(x<>0)-
(x<>0)*Atn(y*x^(x<>0))
adodb.connect.execute:
SELECT (x<>0+y<>0)*(x<=0)*2*Atn(sgn(y)^sgn(y))/2^(x<>0)-(x<>0)*Atn(y*x^(x<>0)) AS AT_ FROM (SELECT Col1 AS x,Col2 AS y) T_
(x<>0+y<>0)可省略
单位圆内的atan2取值
旁边的图片显示内容是:在一个单位圆内
atan2
{\displaystyle \operatorname {atan2} }
函数在各点的取值。圆内标注代表各点的取值的幅度表示。
图片中,从最左端开始,角度的大小随着逆时针方向逐渐从
−
π
{\displaystyle -\pi }
增大到
+
π
{\displaystyle +\pi }
,并且角度大小在点位于最右端时,取值为0。
另外要注意的是,函数
atan2
(
y
,
x
)
{\displaystyle \operatorname {atan2} (y,x)}
中参数的顺序是倒置的,
atan2
(
y
,
x
)
{\displaystyle \operatorname {atan2} (y,x)}
计算的值相当于点
(
x
,
y
)
{\displaystyle (x,y)}
的角度值。
下方的图片显示的是单位圆上各点在atan2函数上的值,从原点射向
(
0
,
1
)
{\displaystyle (0,1)}
点的射线,开始绕逆时针方向可以与x轴正方向得到对应各点的复平面的复角,其中几个特殊点取值:
(
0
,
1
)
{\displaystyle (0,1)}
对应的复平面夹角为
π
2
{\displaystyle {\frac {\pi }{2}}}
,
(
−
1
,
0
)
{\displaystyle (-1,0)}
对应复平面的夹角为
π
{\displaystyle \pi }
,
(
0
,
−
1
)
{\displaystyle (0,-1)}
对应复平面的夹角为
3
π
2
{\displaystyle {\frac {3\pi }{2}}}
,
回到
(
1
,
0
)
{\displaystyle (1,0)}
复平面的夹角为
0
=
(
2
n
π
mod
2
π
)
{\displaystyle 0=(2n\pi \mod 2\pi )}
。
这些你可以直观地从图中看出。[ 3]
下面的插图分别显示的是
atan2
(
y
,
x
)
{\displaystyle \operatorname {atan2} (y,x)}
和
atan
(
y
x
)
{\displaystyle \operatorname {atan} ({\frac {y}{x}})}
在坐标平面的三维景象。
注意在
atan2
(
y
,
x
)
{\displaystyle \operatorname {atan2} (y,x)}
函数中,从原点辐射出的射线上有常数值,而在
atan
(
y
x
)
{\displaystyle \operatorname {atan} ({\frac {y}{x}})}
的函数中,经过原点的直线有常数值。
Organick, Elliott I. A FORTRAN IV Primer. Addison-Wesley. 1966: 42. Some processors also offer the library function called ATAN2, a function of two arguments (opposite and adjacent).
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."