【发布时间】:2020-04-06 12:24:51
【问题描述】:
我想找到我的角度在0 到360 之间的度数。
我有一个包含 2 列的 DataFrame:cos 和 sin 值。
df['cos'] = vector values between 0 and 1
df['sin'] = vector values between 0 and 1
【问题讨论】:
标签: python trigonometry
我想找到我的角度在0 到360 之间的度数。
我有一个包含 2 列的 DataFrame:cos 和 sin 值。
df['cos'] = vector values between 0 and 1
df['sin'] = vector values between 0 and 1
【问题讨论】:
标签: python trigonometry
我猜你的意思是这样的:
import math
angle = math.degrees(math.acos(df['cos']))
要真正保持在 [0, 360] 中,您必须检查负 cos 并调整代码,例如:
import math
a_acos = math.acos(df['cos'])
if df['sin'] < 0:
angle = math.degrees(-a_acos) % 360
else:
angle = math.degrees(a_acos)
【讨论】:
不要搞乱签名检查。
你需要cos 和sin
import math
for i in range(360):
angle = i * math.pi / 180
cs = math.cos(angle)
sn = math.sin(angle)
angle2 = math.atan2(sn, cs) # ALWAYS USE THIS
angle2 *= 180 / math.pi
if angle2 < 0: angle2 += 360
print(angle2)
【讨论】:
numpy.arctac2() 的工作方式也一样。
最好的方法是使用np.angle 函数,该函数返回与复数关联的“角度”。理论上来说,任何复数z 的大小为r,角度为theta,由下式给出
z = r*cos(theta) + 1j * r*sin(theta)
np.angle 将一个复数作为输入,并以弧度返回从 $-pi$ 到 $pi$ 的角度(对应于 -180 到 180 度)。这意味着你要找的基本上就是这个
angle_negpi_to_pi = np.angle(df['cos'] + 1j*df['sin'])
angle = ((angle_negpi_to_pi + 2*np.pi) % (2*np.pi)) * 180/np.pi
【讨论】: