如何使用NumPy计算角度?

时间:2018-08-29 15:00:03

标签: python math trigonometry

我有xy个像素坐标,用于计算角度。最初,我使用math.atan2方法,但是当我以array的身份传递数据时,它给我带来了一些问题。所以现在我使用下面的代码,但是返回的值不在期望的度数范围内。我在做什么错了?

angle1 = np.arctan2(angle1_x, angle1_y)
angle2 = np.arctan2(angle2_x, angle2_y)
degrees = np.degrees(angle1 - angle2)

1 个答案:

答案 0 :(得分:0)

似乎您正在尝试查找(x1, y1)(x2, y2)两点之间的角度。对于初学者,如评论中所述,您的论点是错误的。但是即使那样,您当前的解决方案也无法真正起作用。

angle1angle2可以在[-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]

但是,由于这是对称的,因此不会给出角度的方向