我的公式 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
为什么这两个结果不同?
答案 0 :(得分:28)
Atan采用单个参数,Atan2采用两个参数。使用两个参数而不是一个参数的目的是收集有关输入符号的信息,以便返回计算角度的适当象限,这对于单参数Atan
Atan2结果始终在-pi和pi之间。
答案 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。
所以非常清楚:由于ImZ
和ImR
的迹象,输出是不同的。与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)))