Numpy's
arctan2(y, x)
将计算出原点和
(x, y)
之间的逆时针角度(-π和π之间的弧度值)。
你可以对你的点
A
和
B
这样做,然后用第一个角度减去第二个角度,得到有符号的顺时针角度差。这个差值将在-2π和2π之间,所以为了得到0和2π之间的正角,你可以对2π进行调制。最后,你可以用以下方法将弧度转换为度数
np.rad2deg
.
import numpy as np
def angle_between(p1, p2):
ang1 = np.arctan2(*p1[::-1])
ang2 = np.arctan2(*p2[::-1])
return np.rad2deg((ang1 - ang2) % (2 * np.pi))
A = (1, 0)
B = (1, -1)
print(angle_between(A, B))
# 45.
print(angle_between(B, A))
# 315.
如果你不想使用numpy,你可以使用math.atan2
代替np.arctan2
,并使用math.degrees
(或者直接乘以180 / math.pi
),以便从弧度转换为度。numpy版本的一个优点是,你也可以传递两个(2, ...)
数组,用于p1
和p2
,以便以矢量的方式计算多对点之间的角度。