在本地和世界坐标系中旋转

时间:2019-01-25 16:25:09

标签: math graphics rotation linear-algebra

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

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

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

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

  • x旋转= X1 + X2
  • y旋转= Y1

有什么方法可以实现?

编辑

我想我解释错了。

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

1 个答案:

答案 0 :(得分:1)

  

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

不正确。

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

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

  • C * (B * A)世界坐标系中应用C
  • (B * A) * CC
  • 局部坐标系中应用B * A

编辑

要围绕对象p的位置旋转对象:

  • -p进行翻译
  • 应用所需的旋转矩阵C
  • +p进行翻译以恢复原始位置

最终矩阵为T * C * inv(T) * M,其中Tp的翻译,而M是原始矩阵。 pM的最后一列给出。