如果我有一个代表2d旋转,平移或缩放(或那些的某种组合)的3x3矩阵,有一种方法可以将它与常数或其他矩阵相乘来计算部分变换矩阵。
例如,如果我知道矩阵是一个平移矩阵,我可以简单地将m[0][2]
和m[1][2]
乘以一些常数(例如0.25)来创建1/4(m)平移矩阵
是否存在一种通用方法,无论矩阵如何都可以使用?如果没有,是否有一个单独的方法适用于列出的每种类型(旋转和比例)。
答案 0 :(得分:1)
这与OpenGL 3D transformations同源。是的,只需省略 z 行/列,就可以用3x3矩阵产品表示2D平移,旋转和缩放。
例如:
文:
|1 0 Tx| |x| | x+Tx |
|0 1 Ty|*|y| = | y+Ty |
|0 0 1 | |1| | 1 |
转速:
|cos(w) -sin(w) 0| |x| | x*cos(w)-y*sin(w) |
|sin(w) cos(w) 0|*|y| = | x*sin(w)+y*cos(w) |
| 0 0 1| |1| | 1 |
规模:
|Sx 0 0| |x| | Sx*x |
|0 Sy 0|*|y| = | Sy*y |
|0 0 1| |1| | 1 |
如果您想要结合更多变换,可以应用更多变换。假设您有缩放操作, S 和翻译, T 。
现在给出了一个向量 v0 ,您可以对其进行缩放: v1 = S * v0
你可以翻译它:
v2 = T * v1
即:
v2 = T * S * v0
T * S 是
的复合转换现在让我们思考以相反顺序执行的转换: S * T
请注意,缩放现在也会缩放翻译的坐标 - 与第一种情况不同。
现在您要求的是一个转换操作的操作,而不是矢量。我会尝试这样做:获取一个向量 v3 :
这将导致矢量处于原始比例,翻译为"缩放翻译"。这通常写成:
v3 = S -1 * T * S * v 强>
其中 S -1 是逆矩阵( S -1 执行相反操作的* S = I ,单位矩阵)。
S -1 * T * S 是您正在寻找的转型。这种方法很一般。