在代码中切换四元数的手征?

时间:2016-08-23 10:05:48

标签: c# math rotation quaternions

我有四元数数据,我试图从右手Y-up坐标空间切换到左手Z-up坐标空间。通过阅读本文,我需要做的是switch the chirality

我能找到的唯一信息是this

我无法绕过它。

说我的四元数为:

public static float[] quat= new float[4](0.70711,0.70711,0,0);

在c#代码中,我如何切换手性?

我尝试否定轴,只是交换ZY值。我已经尝试将四元数乘以另一个等于90度的四元数,如该链接所示。仍然看到不正确的轮换。

谢谢。

1 个答案:

答案 0 :(得分:1)

假设你的原始坐标系A有X向右,Y向上,Z到相机。新坐标系B的X右,Y到摄像机,Z向上。所以基本上你需要交换Y轴和Z轴。到目前为止?你有一个四元数 q ,它描述了系统A中的一些旋转。你想找到一个四元数 r ,它描述了系统B中的相同旋转。

最好在将角度和轴转换为四元数的上下文中考虑这一点。在Wikipedia中,您可以读到使用

描述围绕具有单位方向矢量(x,y,z)的轴的角度θ的旋转
  

q = cos(θ/ 2)+ sin(θ/ 2)(xi + yj + zk)

更改坐标系对角度和轴的影响是什么?嗯,轴坐标经历与点相同的坐标交换,角度改变其符号。你有

  

cos(-θ/ 2)+ sin(-θ/ 2)(xi + zj + yk)

与上面相比,实部不会改变(因为cos( x )= cos( - x ))但是虚部改变了它们的符号,除了改变顺序。由此推广,描述旧坐标系中旋转的四元数a + bi + cj + dk将在新坐标系中变为a - bi - dj - ck