我正在寻找一种将方向矢量(X,Y,Z)转换为欧拉角(航向,俯仰,倾斜)的方法。我知道方向向量本身不足以获得倾斜角度,所以还有另一个所谓的向上向量。
有了方向向量 (X,Y,Z) 和向上向量 (X,Y,Z),如何将其转换为欧拉角?
最佳答案
看看我的理解是否正确。这是关于三维空间中刚体的方向,就像飞行中的飞机一样。该飞机的机头指向方向矢量
D=(XD,YD,ZD) .
朝向屋顶的是向上向量
U=(XU,YU,ZU) .
那么航向 H
将是投影到地球表面的方向向量D
:
H=(XD,YD,0) ,
带有相关的角度
angle_H=atan2(YD,XD) .
俯仰 P 是机头相对于地平线的上/下角度,如果方向向量 D
已归一化,则可以从
ZD=sin(angle_P)
结果
angle_P=asin(ZD) .
最后,对于倾斜角,我们考虑机翼的方向,假设机翼垂直于 body 。如果飞机直线飞向D
,机翼垂直于D
并平行于地球表面:
W0 = ( -YD, XD, 0 )
这将是 0 度的倾斜角。预期的向上矢量将垂直于 W0
并垂直于 D
U0 = W0 × D
其中×
表示叉积。如果倾斜角为零,U
等于 U0
,否则 U
和 U0
之间的角度就是倾斜角 angle_B
,可以通过以下方式计算
cos(angle_B) = Dot(U0,U) / abs(U0) / abs(U)
sin(angle_B) = Dot(W0,U) / abs(W0) / abs(U) .
这里“abs”计算向量的长度。由此你可以得到倾斜角度为
angle_B = atan2( Dot(W0,U) / abs(W0), Dot(U0,U) / abs(U0) ) .
如果U
和D
标准化,标准化因子就会相互抵消。
关于math - 如何将方向向量转换为欧拉角?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21622956/