我不知道这是否是正确的问题,因为我想要问的可能是基本原则(及其实现),而不是特定于代码。我提前道歉。
目前,我正在尝试使用SDL& amp; C ++与我有限的知识和生锈的线性代数。我目前停留在转型部分。我编写了自己的矢量和矩阵类(Vector2,Vector3,Matrix2x2,Matrix3x3)。并将Matrix3x3导出为Transform类,以保存场景中对象的变换。因此,为了获得位置,它来自这些x =元素[0] [2],y =元素[1] [2],而角度来自atan(元素[1] [0],元素[0] [ 0])。
现在假设我对该对象进行了这种转换:
| 0.86602540378 -0.5 50 |
| 0.5 0.86602540378 -70 |
| 0 0 1 |
或位置= 50,-70;旋转= 30度。
现在,如果我有一个翻译矩阵:
| 1 0 40 |
| 0 1 20 |
| 0 0 1 |
如何根据旋转的相对空间而不是基于世界/全球空间来翻译对象?所以对象的最终变换将是这样的:
| 0.86602540378 -0.5 90 |
| 0.5 0.86602540378 -50 |
| 0 0 1 |
提前致谢。
答案 0 :(得分:0)
在这种情况下,尝试应用左乘法。您可能已经意识到,矩阵乘法通常不是可交换的。 AB与BA不同。如果您乘以左侧的平移矩阵和右侧的对象变换,您很可能会得到它。