在3D中组合多个旋转矩阵

时间:2017-04-03 16:25:11

标签: matrix 3d rotation transformation

我计算了每个轴的轴角度旋转。如果我只应用三个旋转中的一个,则对象按预期旋转。

如果我乘以旋转矩阵,就像你通常那样组合旋转时我得不到所需的结果,导致第一次旋转影响其他旋转矩阵,因此最终结果不是我正在寻找的。

我想将每个旋转应用到对象,就像之前没有旋转一样。

我想这是一项简单的任务,但似乎我没有找到合适的关键字。 (标题也不完美......(可以提出建议))

感谢您的每一个提示/帮助。

2 个答案:

答案 0 :(得分:1)

您遇到了gimbal lock。这不是一个数学问题,这是一个逻辑上的谬误。为了便于说明,请尝试使用手机:

  1. 将它放在桌面上,底部充电连接器。
  2. 绕z旋转90度。所以充电连接器现在在左边。
  3. 围绕x旋转(假设充电端口位于顶部或底部,将是手机的长轴)180度。
  4. 手机现在倒置,左边是充电端口。
  5. 可是:

    1. 将它放在桌面上,底部充电连接器。
    2. 围绕x旋转180度。所以充电连接器现在位于顶部。
    3. 绕z旋转90度。
    4. 手机现在颠倒了,右侧充电端口
    5. 如果指令围绕x旋转180度,绕z顺时针旋转90度,那么哪一个是不正确的?两者都不正确。说明不明确。

      个人轮换的顺序总是很重要,因为第二个影响第一个完成的工作,第三个影响第一个和第二个完成的工作,等等。改变顺序只会改变影响哪个。

      方向通常直接存储为矩阵或四元数,因为它是明确的,因为它可以保持正确排序的操作顺序。

答案 1 :(得分:0)

旋转矩阵的组合不是微不足道的。我建议将您的旋转矩阵表示为quaternions。四元数具有非常有用的属性。将两个四元数相乘将得到第三个四元数,它以矩阵形式放回,是两个输入矩阵的精确组合。我认为Boost库有代码,但我没有亲自使用它。

编辑:你可以从(标准化的)轴向量和旋转角度得到一个腐蚀矩阵。在维基百科上查看此article