矩阵乘法:复合变换
一、复合变换:连续做两次变换
想象先做一次旋转,再做一次剪切——这就是复合变换(composition):一个变换接着另一个变换。
向量 v ──(先) T₁──► T₁(v) ──(后) T₂──► T₂(T₁(v))
关键问题:两次线性变换的复合,还是线性变换吗?
是的。 因为线性变换保持直线、保持平行等距,做两次仍然保持——所以复合结果仍是线性变换,一定可以用一个矩阵表示。这个矩阵就是两个矩阵的乘积。
二、矩阵乘法的顺序:从右往左
设变换 的矩阵是 ,变换 的矩阵是 。先应用 、再应用 ,复合变换记为:
注意:先作用的矩阵写在右边! 表示”先 后 ”。
M₂M₁·v = M₂(M₁·v)
└┬─┘ └┬┘
先 M₁ 后 M₂
几何直觉:函数记号 是先算 再算 。矩阵乘法同理,最右边的矩阵最先作用。
矩阵乘法不满足交换律
一般 。
例:先旋转 90° 再剪切 ≠ 先剪切再旋转 90°顺序不同,结果完全不同。这与普通数字乘法(a×b = b×a)有本质区别。
三、矩阵乘法公式
设 ,,则复合 为:
记忆法:
- 结果的第 行第 列 = 第 行 × 第 列(逐项相乘相加)
- 几何验证:乘积矩阵的第 1 列 = 的 像 经过 变换后的位置,即
例: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
变换 A:
变换 B:
矩阵乘法不可交换:先作用的矩阵在右边。切换顺序观察网格差异。
操作与观察:
- 切换”先旋转再剪切”与”先剪切再旋转”
- 对比两种顺序的最终网格——完全不同!
- 确认:先作用的矩阵写在乘积的右边
五、矩阵乘法的意义
| 视角 | 含义 |
|---|---|
| 代数 | 连续两次矩阵乘法的合并 |
| 几何 | 复合变换(先右后左) |
| 应用 | 把多次变换合并成一次,提高计算效率 |
在图形学中的意义:一个物体可能先缩放、再旋转、再平移(实际是齐次坐标下的仿射变换),可以预先把这些矩阵相乘成一个矩阵,再对每个顶点只做一次矩阵乘法——这正是 GPU 渲染的原理之一。
总结
本文出现的符号
| 符号 | 类型 | 读音/说明 | 在本文中的含义 |
|---|---|---|---|
| 数学符号 | T one, T two | 先后作用的两个线性变换 | |
| 数学符号 | M one, M two | 对应 的矩阵 | |
| 数学符号 | M two times M one | 复合变换的矩阵,先作用写在右边的 | |
| 数学符号 | not equal | 矩阵乘法一般不满足交换律 | |
| 数学符号 | matrix product | 行×列逐项相乘相加得到的乘积矩阵 | |
| 数学符号 | f of g of x | 函数复合记号,类比矩阵乘法”从右往左” |
中英对照
| 中文术语 | 英文术语 | 音标 | 说明 |
|---|---|---|---|
| 复合变换 | composition of transformations | /ˌkɒmpəˈzɪʃən/ | 一个线性变换接着另一个,结果仍可用一个矩阵表示 |
| 矩阵乘法 | matrix multiplication | /ˈmeɪtrɪks ˌmʌltɪplɪˈkeɪʃən/ | 把两次线性变换合并为一个矩阵 |
| 交换律 | commutativity | /kəˌmjuːtəˈtɪvəti/ | 一般 ,作用顺序很重要 |
| 行×列 | row times column | /rəʊ taɪmz ˈkɒləm/ | 乘积元素的计算规则:逐项相乘再相加 |
| 齐次坐标 | homogeneous coordinates | /ˌhɒməˈdʒiːniət koʊˈɔːdɪnəts/ | 图形学中把平移并入矩阵的技巧 |
| 仿射变换 | affine transformation | /əˈfaɪn ˌtrænsfəˈmeɪʃən/ | 线性变换加平移,GPU 渲染常用 |
| 旋转 | rotation | /rəʊˈteɪʃən/ | 网格整体转动的线性变换 |
| 剪切 | shear | /ʃɪə/ | 保持面积不变的斜切变形 |
