我有四元数数据,我试图从右手Y-up坐标空间切换到左手Z-up坐标空间。通过阅读本文,我需要做的是switch the chirality
。
我能找到的唯一信息是this
我无法绕过它。
说我的四元数为:
public static float[] quat= new float[4](0.70711,0.70711,0,0);
在c#代码中,我如何切换手性?
我尝试否定轴,只是交换Z
和Y
值。我已经尝试将四元数乘以另一个等于90度的四元数,如该链接所示。仍然看到不正确的轮换。
谢谢。
答案 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
。