查找 2 个向量之间的角度分量

问题描述 投票:0回答:1

如何使用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
分量。

python-3.x numpy vector scipy linear-algebra
1个回答
0
投票

我建议使用 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]

备注:

  • as_euler()
    接受角度顺序,以不同的顺序进行旋转可能会得到不同的结果。我建议阅读维基百科页面以了解原因。
  • align_vectors()
    返回的rssd变量表示旋转后向量之间的距离。请参阅文档了解更多信息。
© www.soinside.com 2019 - 2024. All rights reserved.