我有x
和y
个像素坐标,用于计算角度。最初,我使用math.atan2
方法,但是当我以array
的身份传递数据时,它给我带来了一些问题。所以现在我使用下面的代码,但是返回的值不在期望的度数范围内。我在做什么错了?
angle1 = np.arctan2(angle1_x, angle1_y)
angle2 = np.arctan2(angle2_x, angle2_y)
degrees = np.degrees(angle1 - angle2)
答案 0 :(得分:0)
似乎您正在尝试查找(x1, y1)
和(x2, y2)
两点之间的角度。对于初学者,如评论中所述,您的论点是错误的。但是即使那样,您当前的解决方案也无法真正起作用。
angle1
和angle2
可以在[-pi, pi]
范围内的任何位置,因此我们假设它们分别是pi
和-pi
(尽管它们表示相同的值,这是有可能的,因为0.0
和-0.0
是不同的浮点数。
这给出了2*pi
的“差异”,这并不是您想要的。如果我们将它们切换为-2*pi
。因此我们的值现在在[-2*pi, 2*pi]
范围内,这意味着同一答案可以由多个值表示。我们该如何解决?通过做
angle_difference = (angle2 - angle1) % np.pi # range == [0, 2*pi)
您需要做更多的工作才能进入[-pi,pi]范围。
angle_difference = angle_difference if angle_difference < np.pi else -2*np.pi + angle_difference
还有另一种方式:https://math.stackexchange.com/questions/227014/find-the-angle-between-two-vectors
import numpy as np
from numpy.linalg import norm
v1 = np.array([x1, y1])
v2 = np.array([x2, y2])
angle_difference = np.arccos((v1 @ v2) / (norm(v1) * norm(v2))) # in range [0, pi]
但是,由于这是对称的,因此不会给出角度的方向。