切换四元数的轴和手性?

Switch axes and handedness of a quaternion?

我有一个四元数,来自具有以下内容的系统:

Right handed.
Forward direction: Y axis
Right direction: X axis
Up direction: Z axis

我需要将其转换为坐标系:

left-handed.
Forward direction: X axis
Right direction: Y axis
Up direction: Z axis

我试过取消轴和角度,我试过切换值,我无法让它工作。非常感谢所有帮助!我在 C# 中工作,

Microsoft.Xna.Quaternion.

四元数是四个值的结构(w, x, y, z)。如果表示旋转,则w = cos(phi/2)phi为旋转角度)和(x, y, z) = sin(phi/2) * (ax, ay, az)(ax, ay, az)为旋转轴)。

为了将四元数转换到另一个系统,只需转换旋转轴即可。对于您的示例,转换是:

    / 0  1  0 \
T = | 1  0  0 |
    \ 0  0  1 /

最后,由于你正在改变惯用手,你必须反转四元数,否则它会向错误的方向旋转。总结一下,转换后的四元数是:

(w*, x*, y*, z*) = (w, -y, -x, -z)

总的来说:

(x*, y*, z*) = det(T) T (x, y, z) //Assuming column vectors