Matrix 如何基于同源矩阵的原点/世界空间进行翻译

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]) 现在

我不知道这是否是问这个问题的正确地方,因为我想问的可能是基本原则(及其实现),而不是特定于代码的。我事先道歉

目前,我尝试用自己的知识和生锈的线性代数来制作自己的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,试了一段时间后,你完全正确。与左侧的变换相乘确实产生了全局变换。这是一种通用的全局变换对象的方法。我(缺乏)向量和矩阵知识,这一点让我失望。谢谢