如何使用python求2个向量之间的角度,最好是
numpy
或scipy
;就绕 x,y,z
轴旋转的分量而言?
例如在下面的代码中,利用this,我们可以找到两个向量之间的角度。
import numpy as np
a = np.array([5,7,5])-np.array([1,2,3])
b = np.array([3.25842, 8.14983, 4.44192])-np.array([1,2,3])
def angle(v1, v2, acute):
angle = np.arccos(np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)))
if (acute == True):
return angle
else:
return 2 * np.pi - angle
print(np.rad2deg(angle(v1=a, v2=b, acute=True)))
# returns: 18.531657948873978
所需的角度是
alpha_
x,y,z
分量。
我建议使用 SciPy Rotation API。
如果有两个向量,您可以使用
Rotation.align_vectors()
求出它们之间的旋转。然后,SciPy 为您提供了如何表示旋转的六种选择。 (请参阅文档以及以 as_
开头的六种方法,了解可以使用的输出格式的列表。)
与您的问题最相似的是欧拉角。
from scipy.spatial.transform import Rotation
rot, rssd = Rotation.align_vectors(a, b)
print(rot.as_euler('XYZ', degrees=True))
输出:
[ 6.7385178 0.60887791 -17.29830824]
备注: