【问题标题】:How to flip only one axis of transformation matrix?如何只翻转变换矩阵的一个轴?
【发布时间】:2016-06-29 10:16:38
【问题描述】:

我有一个 4x4 变换矩阵。但是,在尝试转换后,我注意到 Y 轴的移动 旋转方向相反。其余的都是正确的。

我从其他一些 API 获得了这个矩阵,所以可能是坐标系的差异。那么,如何翻转变换矩阵的轴呢?

如果只有平移,我可以在 Y 平移上添加减号,但我不知道只有一个轴的相反旋转,因为所有旋转都表示在同一个 3x3 区域中。我认为可能有某种方式甚至可以同时影响平移和旋转。 (真正的翻转轴)

【问题讨论】:

    标签: opengl graphics computer-vision


    【解决方案1】:

    编辑:我很确定您正在寻找的操作是在保持 Z-up 或 Y-up 的同时更改坐标系。在这种情况下,请尝试将矩阵的第二列(或行)的所有元素设置为逆矩阵。


    这个问题对 Math StackExchange 来说会更好。首先,a really helpful read on rotation matrices

    第一个问题是轮换顺序的问题。我将假设 XYZ 旋转顺序。我们知道每个轴的旋转矩阵如下:

    给定一个从相同旋转顺序导出的矩阵,得到的矩阵如下,其中 alpha 是 X 角,beta 是 Y 角,而 gamma 是 Z 角:

    您可以从此矩阵导出每个轴角的各个分量。例如,您可以使用一些逆触发从-sin(beta) 导出 Y 角。给定 beta,您可以从 cos(beta)sin(alpha) 派生 alpha。您还可以从 cos(beta)sin(gamma) 导出 gamma。请注意,矩阵中的相同数字可以表示多个值(例如sin(0)=0sin(180)=0)。

    现在您已经了解了 alpha、beta 和 gamma,您可以反转 beta 并重新制作旋转矩阵。

    很有可能有更好的方法使用四元数来做到这一点,但您应该向 Math StackExchange 询问这些与语言无关的问题。

    【讨论】:

      【解决方案2】:

      更简短的答案:如果您不注意框架方向,您的管道中的许多事情可能会遇到糟糕的一天。原因是“平价”,又名“框架方向”,又名“right-handedness”(或很少使用左撇子)。大多数协同工作的 3D 几何工具和库通常隐含地假设所有正在运行的坐标系都是右手的(或至少是一致的)。在坐标系中仅反转一个轴的方向会将其方向从右手更改为左手,反之亦然。

      所以,建议您检查和尝试解决您的问题:

      • 检查您从 API 获得的帧是否是右手的。你这样做 通过计算 4x4 变换矩阵的 3x3 旋转部分的行列式:它必须是 +1 或非常接近它。

      • 如果是 -1,则如果它的轴翻转一个,即更改 3x3 旋转的列之一的符号。

      • 请注意:我说“列”是因为我假设您通过乘以 Q * x 将变换 Q 应用于点 x,x 是一个 4x1 列向量,最后一个分量等于 1。如果使用行向量左乘 Q,则需要翻转一行。

      • 如果该行列式是 +1,那么您在其他地方就有错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-29
        • 1970-01-01
        • 1970-01-01
        • 2016-06-12
        相关资源
        最近更新 更多