首页 > 解决方案 > 在本地和世界坐标系中旋转

问题描述

让我们考虑一个简单的情况,我们有一个带有变换矩阵的对象,然后我们进行简单的变换:

  1. 将 x 轴旋转 X1 角度 -> 一个矩阵
  2. 通过 Y1 角度旋转 y 轴 -> B 矩阵
  3. 通过 X2 角度旋转 x 轴 -> C 矩阵

在通常情况下,我会做 C * B * A ,这将是一个故事的结尾。但正如我们所知,它所做的是在由先前变换创建的局部坐标系中应用新变换。我不喜欢它。

在某些情况下,我想做的是在本地和其他时间在世界坐标系中旋转。我的意思是,如果我有矩阵 M = B * A(但我没有可用的 X1 和 Y1 角度;我只有 M)并且我想在世界坐标系中应用 C,然后输出新的变换矩阵将具有以下内容:

有没有办法实现它?

编辑

我想我解释错了。

假设我们在矩阵 M 描述的位置有一个对象 A。M 具有旋转、缩放和平移。我想沿着位于对象 A 中心但平行于基本坐标系的轴的轴旋转对象。毕竟我还希望对象在基本坐标系中停留在 (x,y,z) 处。

标签: mathgraphicsrotationlinear-algebra

解决方案


在通常情况下,我会做 C * B * A ,这将是一个故事的结尾。但正如我们所知,它所做的是在由先前变换创建的局部坐标系中应用新变换。

不正确。

考虑一个测试点p。的B * A * p局部坐标系中的坐标B * A只是 的世界空间分量p——因为变换只是坐标系的变化。

因此,替换p为在本地C * p应用转换,即:

  • C * (B * A)适用C世界坐标系
  • (B * A) * C适用C局部坐标系B * A

编辑

围绕其位置旋转对象p

  • 翻译者-p
  • 应用所需的旋转矩阵C
  • 翻译+p为恢复原来的位置

最终矩阵是T * C * inv(T) * M,其中T是 的平移p,并且M是原始矩阵。p由 的最后一列给出M


推荐阅读