如何使用 NumPy 计算角度?
How to compute angle using NumPy?
我有 x
和 y
像素坐标用于计算角度。最初我使用 math.atan2
方法,但它给了我一些问题,因为我将数据作为 array
传递。所以现在我正在使用下面的代码,但返回的值不在预期的度数范围内。我做错了什么?
angle1 = np.arctan2(angle1_x, angle1_y)
angle2 = np.arctan2(angle2_x, angle2_y)
degrees = np.degrees(angle1 - angle2)
您似乎在尝试求 (x1, y1)
和 (x2, y2)
两点之间的角度。对于初学者,如评论中所述,您的论点是错误的。但即便如此,您当前的解决方案也无法真正发挥作用。
angle1
和 angle2
可以在 [-pi, pi]
范围内的任何地方所以我们假设它们是 pi
和 -pi
(尽管它们代表相同值,这是可能的,因为 0.0
和 -0.0
是不同的浮点数)。
这给出了 2*pi
的 'difference',这不是您想要的。如果我们将它们调换一下,它将是 -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]
然而,由于这是对称的,因此不会给出角度的 方向 的指示。
我有 x
和 y
像素坐标用于计算角度。最初我使用 math.atan2
方法,但它给了我一些问题,因为我将数据作为 array
传递。所以现在我正在使用下面的代码,但返回的值不在预期的度数范围内。我做错了什么?
angle1 = np.arctan2(angle1_x, angle1_y)
angle2 = np.arctan2(angle2_x, angle2_y)
degrees = np.degrees(angle1 - angle2)
您似乎在尝试求 (x1, y1)
和 (x2, y2)
两点之间的角度。对于初学者,如评论中所述,您的论点是错误的。但即便如此,您当前的解决方案也无法真正发挥作用。
angle1
和 angle2
可以在 [-pi, pi]
范围内的任何地方所以我们假设它们是 pi
和 -pi
(尽管它们代表相同值,这是可能的,因为 0.0
和 -0.0
是不同的浮点数)。
这给出了 2*pi
的 'difference',这不是您想要的。如果我们将它们调换一下,它将是 -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]
然而,由于这是对称的,因此不会给出角度的 方向 的指示。