gpt4 book ai didi

math - 如何将方向向量转换为欧拉角?

转载 作者:行者123 更新时间:2023-12-03 02:07:43 38 4
gpt4 key购买 nike

我正在寻找一种将方向矢量(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,否则 UU0 之间的角度就是倾斜角 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) ) .

如果UD标准化,标准化因子就会相互抵消。

关于math - 如何将方向向量转换为欧拉角?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21622956/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com