【问题标题】:Can i switch X Y Z in a quaternion?我可以在四元数中切换 X Y Z 吗?
【发布时间】:2013-04-12 13:45:01
【问题描述】:

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

【问题讨论】:

    标签: matrix 3d rotation quaternions


    【解决方案1】:

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

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

    在哪里

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

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

    【讨论】:

    • 所以,这告诉我的是 new.w = old.w ;新的.x = -old.x;新的.y=-旧的.z;新的.z=新的.y; ?假设 NEW = Z UP, X RIGHT, Y 朝向屏幕,OLD = Y UP, X RIGHT, Z 朝向我?
    • 这是否也适用于四元数的 W 值?
    • 嗯,其实我得考虑一下。 W“包含”旋转角度,所以从技术上讲(如果我没记错的话)你应该否定 only W 并保持其他元素的符号不变。
    • @CaptainGouLash:坦率地说,到目前为止,我从未在实践中切换过四元数的手性。我绝对知道这是一个完全反对称的操作,你可以通过使用 Levi-Cevita 符号来做到这一点。
    • 否定四元数的所有 4 个分量对旋转没有影响。如果您想通过否定事物来翻转手性,则需要采用共轭,它仅否定 i/j/k 部分(或者,等效地,仅否定实部......)。
    【解决方案2】:

    我正在修改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°。坐标系的手性保持不变。

    手性变化

    首先考虑第一种情况。更改坐标系对您的角度和轴有什么影响?好吧,轴坐标与您的点经历相同的坐标交换,并且角度改变了它的符号。所以你有

    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° 所以你在四元数中得到平方根,表示坐标系的变化。

    【讨论】:

      【解决方案3】:

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

      ,我不得不交换 Z 和 Y

      【讨论】:

        【解决方案4】:

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

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

        newX = oldZ
        newY = oldX
        newZ = oldY
        

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

        【讨论】:

        • 好吧,如果根据 Levi-Cevita 张量缩放四元数,从技术上讲,您可以交换 Y 和 Z 或进行任何其他完全反对称的排列。
        • 不知道置换张量。谢谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-26
        • 2011-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多