部分矩阵变换

时间:2016-02-09 10:43:42

标签: matrix transform

如果我有一个代表2d旋转,平移或缩放(或那些的某种组合)的3x3矩阵,有一种方法可以将它与常数或其他矩阵相乘来计算部分变换矩阵。

例如,如果我知道矩阵是一个平移矩阵,我可以简单地将m[0][2]m[1][2]乘以一些常数(例如0.25)来创建1/4(m)平移矩阵

是否存在一种通用方法,无论矩阵如何都可以使用?如果没有,是否有一个单独的方法适用于列出的每种类型(旋转和比例)。

1 个答案:

答案 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

的复合转换
  1. 缩放向量
  2. 翻译
  3. 现在让我们思考以相反顺序执行的转换: S * T

    1. 翻译矢量
    2. 缩放
    3. 请注意,缩放现在也会缩放翻译的坐标 - 与第一种情况不同。

      现在您要求的是一个转换操作的操作,而不是矢量。我会尝试这样做:获取一个向量 v3

      1. 执行倒转操作
      2. 翻译倒置的缩放矢量
      3. 缩放
      4. 这将导致矢量处于原始比例,翻译为"缩放翻译"。这通常写成:

        v3 = S -1 * T * S * v

        其中 S -1 逆矩阵 S -1 执行相反操作的* S = I ,单位矩阵)。

        S -1 * T * S 是您正在寻找的转型。这种方法很一般。