从欧拉角求角位移

时间:2021-01-27 16:08:14

标签: python math vector rotation euler-angles

我有一系列欧拉角,用于描述粒子在旋转视频中的角度。我希望使用这些来找到粒子旋转的角速度,但是作为一个不起眼的生物化学家,我发现欧拉角和旋转矩阵的数学非常混乱。原始角度是指相对于原始位置的旋转,但由于这是一个时间序列的角度,我想查看相对于前一个和下一个旋转的旋转,以找到单个位移角度并允许在一个角度上绘制角度球体。

我尝试通过以下方式在 python 中实现:

from scipy.spatial.transform import Rotation as R
import math as math
import numpy as np
import matplotlib.pyplot as plt


initial_vector = [1,1,1]
r = R.from_euler('xyz',[65.670724, 137.900493, 154.793946] , degrees=True)
vector_1=r.apply(initial_vector)
r2 = R.from_euler('xyz', [-170.114621, 36.254552, -106.685806], degrees=True)
vector_2=r2.apply(initial_vector)

这应用欧拉角系列 (test_angles_1&2) 来旋转 [1,1,1] 的向量,它为每组欧拉角 (vector_1&2) 提供一个新向量。然后我找到这两个结果向量之间的单个角度如下:

def find_angular_displacement(vector_1, vector_2):
    unit_vector_1 = vector_1 / np.linalg.norm(vector_1)
    unit_vector_2 = vector_2 / np.linalg.norm(vector_2)
    dot_product = np.dot(unit_vector_1, unit_vector_2)
    angle = np.arccos(dot_product)
    return math.degrees(angle)

这将返回两个向量之间的角度。但是,当我将起始向量从 [1,1,1] 更改为除具有不同幅度 (i.e. [2,2,2]) 的相同方向之外的任何内容时,角度会发生变化。例如,如果我运行 initial_vector = [1,1,1],我的结果角度为 {{1 }},而如果我用 33.1 运行代码,角度是 [1,0,1]

为什么使用的初始向量会改变这个角度,因为我认为对同一个向量进行两次旋转应该总是在两次旋转之间给出相同的角度?如果我的想法不正确,我应该从哪个初始向量开始?

或者,如果这一切都不正确,有人可以提出更好的方法吗?

非常感谢

0 个答案:

没有答案
相关问题