我有一个 XYZ 坐标系,我按欧拉角旋转,从 X 开始,然后是 Y,然后是 Z。我需要将此旋转转换为等效的 XYZ 旋转,但相对于另一个坐标系,由四元数指定方向。不幸的是,我被困住了。
问问题
1445 次
1 回答
0
没有简单的方法可以做到这一点,因为欧拉角仅在它们的无穷小版本中与旋转矩阵的乘积兼容。
在给定条件下最简单的方法是将现有角度转换为旋转的四元数,将两个四元数相乘并从乘积中提取新的欧拉角。
一个有用的链接收集了许多(如果不是全部)轴旋转到四元数和反向变换:http ://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToQuaternion/index.htm
用 a,b,c 表示绕 X、Y、Z 轴旋转的半角,用 (ca,sa) 等表示相应的余弦-正弦对。然后绕 X 轴旋转 2a 角对应于四元数
ca+sa*i
其中 i,j,k 是 x,y,z 方向上的基四元数。旋转 Rz(2c)*Ry(2b)*Rx(2a) 对应四元数
r=(cc+sc*k)*(cb+sb*j)*(ca+sa*i)
如果 q 是另一个单位四元数,则对应于 q 的旋转的旋转基是 qiq', qiq', qkq',其中 q' 是 q 的共轭。目的是在这个新的基础上用轴旋转来表示 r。如果新的半角是 u,v,w,那么必须解决
r=(cw+sw*qkq')*(cv+sv*qjq')*(cu+su*qiq')
对于这些半角,由于 qq'=1=q'q 简化为
q'rq=(cw+sw*k)*(cv+sv*j)*(cu+su*i)
现在您可以再次使用网站上的公式。
于 2014-05-05T14:40:02.073 回答