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

Matrix 我可以在四元数中切换X Y Z吗?,matrix,3d,rotation,quaternions,Matrix,3d,Rotation,Quaternions,我有一个Y轴向上的坐标系。我需要把它转换成Z向上的坐标系。我的旋转存储在四元数中,所以我的问题是:如果我有一个四元数X,Y,Z,我能用Z切换Y,得到Z实际向上的结果吗?不,你不能交换Y和Z——如果它是右手坐标系,它会变成左手坐标系(反之亦然) 但是,您可以执行以下替换操作: newX = oldZ newY = oldX newZ = oldY 我怀疑你真正想要的是绕x轴的简单旋转。如果这就是为什么要切换y和z,那么应该改为围绕+x轴旋转-90度(假设有右手坐标系)。只是在四元数中切换两个轴?

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

不,你不能交换Y和Z——如果它是右手坐标系,它会变成左手坐标系(反之亦然)

但是,您可以执行以下替换操作:

newX = oldZ
newY = oldX
newZ = oldY

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

只是在四元数中切换两个轴?不,这不起作用,因为它翻转了手性。然而,如果你翻转了手性,否定了四元数的实部,那么你就回到了原来的手性。一般来说,你可以这样写

Q'(Q,i'j'k')=εi'j'k'Qw_w+Qi_i+Qj_j+Qk_k

在哪里

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

这并不奇怪,因为四元数的i²、j²、k²规则也是由同一个完全反对称张量定义的。

试试:
四元数旋转=新的四元数(X,Z,Y,-W)//我不得不交换Z和Y,因为我正在修改我的答案,因为这里的答案更老,可能更通用

在你如何将角度和轴转换成四元数的情况下,最好考虑这个问题。在中,你们可以读到,你们用单位方向向量(x,y,z)来描述绕轴旋转的角度θ

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

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

  • 要么你用Z↦ 在这种情况下,在左手坐标系和右手坐标系之间切换,转换本质上是反射
  • 或者你用Z↦ −Y、 然后它只是绕X轴旋转90°。坐标系的惯用手保持不变
  • 手性变化 先考虑第一个案例。更改坐标系会对角度和轴产生什么影响?轴坐标与点的坐标交换相同,角度也会改变符号。你有吗

    因为(−θ/2)+sin(−θ/2)(xi+zj+yk)

    与上述情况相比,实际部分没有变化(因为cos(x)=cos(−x) )但除了顺序的变化外,虚部的符号也发生了变化。由此推广,描述旧坐标系中旋转的四元数
    a+bi+cj+dk
    将变成
    a− 毕− 流行音乐播音员− 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°,这样你就得到了表示坐标系变化的四元数的平方根。

    好吧,从技术上来说,你可以交换Y和Z或者做任何其他完全反对称的排列,如果你根据Levi Cevita张量缩放四元数,我不知道置换张量。谢谢所以,这告诉我的是类似于new.w=old.w;new.x=-old.x;new.y=-old.z;new.z=new.y?假设NEW=Z向上,X向右,Y朝向屏幕,OLD=Y向上,X向右,Z朝向我?这也适用于四元数的W值吗?嗯,实际上我必须考虑一下。W“包含”旋转角度,所以从技术上讲(如果我没有错的话),你应该只否定W,并保持其他元素的符号不变。@CaptainGouLash:坦率地说,到目前为止,我在实践中从未改变过四元数的手性。我肯定知道这是一个完全反对称的运算,你可以用Levi Cevita符号来做,四元数的四个分量都取反,对旋转没有影响。如果你想通过否定事物来翻转手性,你需要共轭,它只否定i/j/k部分(或者,等价地,只否定实部…)。