Python atan或atan2,我应该使用什么?

时间:2016-03-02 13:57:30

标签: python math

我的公式 F =反正切(IMZ / REZ)

有两种选择:

选项1(atan):

ImZ=-4.593172163003
ImR=-4.297336384845

>>> z=y/x
>>> f1=math.atan(z)
>>> f1
0.8186613519278327

选项2(atan2)

>>> f=math.atan2(y,x)
>>> f
-2.3229313016619604

为什么这两个结果不同?

3 个答案:

答案 0 :(得分:28)

Atan采用单个参数,Atan2采用两个参数。使用两个参数而不是一个参数的目的是收集有关输入符号的信息,以便返回计算角度的适当象限,这对于单参数Atan

enter image description here

Atan2结果始终在-pi和pi之间。

参考: https://en.wikipedia.org/wiki/Atan2

答案 1 :(得分:8)

math.atan的docstring:

  

ATAN(x)的   返回x的反正切(以弧度表示)。

math.atan2的文档字符串:

  

atan2(y,x)   返回y / x的反正切(以弧度表示)。与atan(y / x)不同,   考虑x和y的符号。

要非常完整,请参阅以下文档:atan2:

  

math.atan2(y,x)以弧度为单位返回atan(y / x)。结果介于两者之间   -pi和pi。从原点到点(x,y)的平面中的矢量使该角度为正X轴。 atan2()的意思是   两个输入的符号都是已知的,所以它可以计算出   正确的角度象限。例如,atan(1)和atan2(1,1)   都是pi / 4,但是atan2(-1,-1)是-3 * pi / 4。

所以非常清楚:由于ImZImR的迹象,输出是不同的。与atan2不同,atan会返回相应的象限。

答案 2 :(得分:0)

一个公式,该公式具有一个相对于0的逆时针角度,即x的正轴,

将x和y的任何值

到2pi。对于x = y = 0,结果是不确定的。

f(x,y)= pi()-pi()/ 2 *(1+符号(x))*(1-符号(y ^ 2))-pi()/ 4 *(2+符号(x))* sign(y)

    -sign(x*y)*atan((abs(x)-abs(y))/(abs(x)+abs(y)))