我可以在四元数中切换X Y Z吗?

时间:2013-04-19 07:58:44

标签: matrix 3d rotation quaternions

我有一个Y轴为UP的坐标系。我需要将它转换为Z为UP的坐标系。我将旋转存储在四元数中,所以我的问题是:如果我有一个四元数X,Y,Z我可以用Z切换Y并得到Z实际上是UP的结果吗?

4 个答案:

答案 0 :(得分:9)

只需在四元数中打开两个轴?不,这不起作用,因为这会颠覆手性。然而,如果你翻转手性并否定四元数的真实部分,那么你就会恢复原始的手性。一般来说,您可以将其写为

Q'(Q,i'j'k')=ε i'j'k' Q w _w + Q i _i + Q j _j + Q k _k

其中

Levi-Cevita Symbol Definition

是完全反对称的张量,称为Levi-Cevita符号。

这不应该是一个惊喜,因为四元数的i²,j²,k²规则也由相同的完全反对称张量定义。

答案 1 :(得分:3)

我正在调整this post的答案,因为这里的答案较旧且可能更通用。

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

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

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

你的帖子只告诉我们Y↦Z,即旧的Y方向是新的Z方向。其他方向呢?你可能想要保留X↦X,但这仍然有两个选择。

  1. 您使用Z↦Y。在这种情况下,您可以在左手坐标系和右手坐标系之间切换,转换本质上是一种反映。
  2. 或者您使用Z↦-Y,然后它绕X轴旋转90°。坐标系的灵活性保持不变。
  3. 手性的变化

    首先考虑第一个案例。更改坐标系对角度和轴的影响是什么?嗯,轴坐标经历与点相同的坐标交换,角度改变其符号。你有

      

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

    与上面相比,实部不会改变(因为cos( x )= cos( - x ))但是虚部改变了它们的符号,除了改变顺序。由此推广,描述旧坐标系中旋转的四元数a + bi + cj + dk将在新坐标系中变为a − bi − dj − ck。或者进入−a + bi + dj + ck,这是对同一旋转的不同描述(因为它将θ改变360°但θ/ 2改变180°)。

    保留的手性

    与此相比,Z↦-Y的第二种情况保持θ的符号,因此您只需调整轴。新的 Z 坐标是旧的 Y 坐标,新的 Y 坐标是否定的旧 Z 坐标。因此a + bi + cj + dk会转换为a + bi − dj + ck(或其否定)。请注意,这只是四元数乘以i−i,具体取决于您将其乘以哪一边。如果你想把它写成一个共轭,你有θ=±45°所以你得到了表示坐标系变化的四元数的平方根。

答案 2 :(得分:2)

尝试: 四元数旋转=新四元数(X,Z,Y,-W); //由于

,我不得不交换Z和Y.

答案 3 :(得分:1)

不,你不能交换y和z - 它会变成左手坐标系,如果它是右手(反之亦然)。

但是,您可以进行以下替换:

newX = oldZ
newY = oldX
newZ = oldY

我怀疑你真正想要的是围绕x轴的简单旋转。如果这就是你想要切换y和z的原因,那么你应该对+ x轴应用-90度的旋转(假设你有一个右手坐标系)。