矩阵乘法:复合变换

一、复合变换:连续做两次变换

想象先做一次旋转,再做一次剪切——这就是复合变换(composition):一个变换接着另一个变换。

向量 v ──(先) T₁──► T₁(v) ──(后) T₂──► T₂(T₁(v))

关键问题:两次线性变换的复合,还是线性变换吗?

是的。 因为线性变换保持直线、保持平行等距,做两次仍然保持——所以复合结果仍是线性变换,一定可以用一个矩阵表示。这个矩阵就是两个矩阵的乘积

二、矩阵乘法的顺序:从右往左

设变换 T1T_1 的矩阵是 M1M_1,变换 T2T_2 的矩阵是 M2M_2。先应用 M1M_1、再应用 M2M_2,复合变换记为:

M2M1M_2 M_1

注意先作用的矩阵写在右边M2M1M_2 M_1 表示”先 M1M_1M2M_2”。

M₂M₁·v = M₂(M₁·v)
 └┬─┘ └┬┘
 先 M₁   后 M₂

几何直觉:函数记号 f(g(x))f(g(x)) 是先算 gg 再算 ff。矩阵乘法同理,最右边的矩阵最先作用。

三、矩阵乘法公式

M1=(abcd)M_1 = \begin{pmatrix} a & b \\ c & d \end{pmatrix}M2=(efgh)M_2 = \begin{pmatrix} e & f \\ g & h \end{pmatrix},则复合 M2M1M_2 M_1 为:

M2M1=(efgh)(abcd)=(ea+fceb+fdga+hcgb+hd)M_2 M_1 = \begin{pmatrix} e & f \\ g & h \end{pmatrix}\begin{pmatrix} a & b \\ c & d \end{pmatrix} = \begin{pmatrix} ea + fc & eb + fd \\ ga + hc & gb + hd \end{pmatrix}

记忆法

  • 结果的第 ii 行第 jj 列 = M2M_2ii 行 × M1M_1jj 列(逐项相乘相加)
  • 几何验证:乘积矩阵的第 1 列 = M1M_1ı^\hat{\imath}(a,c)(a,c) 经过 M2M_2 变换后的位置,即 M2(a,c)TM_2 \cdot (a,c)^T
例:M₁ = 旋转90° [[0,-1],[1,0]],M₂ = 剪切 [[1,1],[0,1]]
先旋转再剪切:
M₂M₁ = [[1,1],[0,1]]·[[0,-1],[1,0]]
     = [[1·0+1·1, 1·(-1)+1·0], [0·0+1·1, 0·(-1)+1·0]]
     = [[1, -1],[1, 0]]

四、交互演示:先 A 后 B 与先 B 后 A

操作与观察

  • 切换”先旋转再剪切”与”先剪切再旋转”
  • 对比两种顺序的最终网格——完全不同
  • 确认:先作用的矩阵写在乘积的右边

五、矩阵乘法的意义

视角含义
代数连续两次矩阵乘法的合并
几何复合变换(先右后左)
应用把多次变换合并成一次,提高计算效率

在图形学中的意义:一个物体可能先缩放、再旋转、再平移(实际是齐次坐标下的仿射变换),可以预先把这些矩阵相乘成一个矩阵,再对每个顶点只做一次矩阵乘法——这正是 GPU 渲染的原理之一

小结

  • 复合变换仍是线性变换,其矩阵 = 各矩阵的乘积
  • 先作用的矩阵写在右边M2M1M_2 M_1 = 先 M1M_1M2M_2
  • 乘积公式:行 × 列,逐项相乘相加
  • 矩阵乘法不交换M1M2M2M1M_1 M_2 \neq M_2 M_1(顺序很重要)
  • 实际应用:把多次变换预合并成一个矩阵

下一节:三维线性变换,把视角扩展到三维空间。