Matrix 如何基于同源矩阵的原点/世界空间进行翻译
我不知道这是否是问这个问题的正确地方,因为我想问的可能是基本原则(及其实现),而不是特定于代码的。我事先道歉 目前,我尝试用自己的知识和生锈的线性代数来制作自己的SDL和C++引擎。我目前被困在转换部分。我已经编写了自己的向量和矩阵类(Vector2、Vector3、Matrix2x2、Matrix3x3)。并将Matrix3x3导出为变换类,以保存场景中对象的变换。所以,要得到位置,它是从x=元素[0][2],y=元素[1][2],而角度是从atan(元素[1][0],元素[0][0]) 现在假设我对对象进行了以下变换:Matrix 如何基于同源矩阵的原点/世界空间进行翻译,matrix,linear-algebra,matrix-multiplication,Matrix,Linear Algebra,Matrix Multiplication,我不知道这是否是问这个问题的正确地方,因为我想问的可能是基本原则(及其实现),而不是特定于代码的。我事先道歉 目前,我尝试用自己的知识和生锈的线性代数来制作自己的SDL和C++引擎。我目前被困在转换部分。我已经编写了自己的向量和矩阵类(Vector2、Vector3、Matrix2x2、Matrix3x3)。并将Matrix3x3导出为变换类,以保存场景中对象的变换。所以,要得到位置,它是从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 |
提前感谢。在这种情况下,请尝试应用左乘法。你可能知道,矩阵乘法通常是不可交换的。AB和BA不一样。如果你用左边的平移矩阵和右边的对象变换相乘,你很可能会得到它。如果是这样,那么平移矩阵就是我的对象变换,而我的对象变换就是平移矩阵,这不是我想要做的。我认为正确的方法应该是将旋转矩阵与其逆矩阵相乘(或转置?我忘了),然后将其与我的平移矩阵相乘,再将其与旋转矩阵相乘。但现在,我接受了添加翻译值的漂亮的哈克斯方法P无论如何,我想我会结束这个问题,因为我已经“多少”解决了它。不公平地:POk,试了一段时间后,你完全正确。与左侧的变换相乘确实产生了全局变换。这是一种通用的全局变换对象的方法。我(缺乏)向量和矩阵知识,这一点让我失望。谢谢