第 5 章 矩阵与线性变换 (Matrices and Linear Transformations)
核心结论
-
旋转 (rotation):保持原点与距离;手性约定下"正方向"由对应手定则给出;2D 旋转一个角度参数、3D 旋转需要轴 + 角度。
-
缩放 (scale):沿卡迪尔轴缩放是对角矩阵;反射是某轴缩放因子为负;非均匀缩放使原本正交基向量夹角改变。
-
正交投影 (orthographic projection):把维度降一阶(3D → 2D);投影方向垂直于投影平面;丢弃平行于投影方向的分量。
-
反射 (reflection):沿轴 / 平面的镜像;本质是某轴 -1 缩放;行列式恒为 -1。
-
剪切 (shearing):把矩形变成平行四边形;保持面积(行列式 = 1)但改变角度;italic / skew 文字效果的核心。
-
变换组合 = 矩阵乘法;顺序敏感("先发生的事写在右边");可通过 §4.2 几何方法验证(看基向量去哪了)。
-
变换的分类树:线性 → 仿射(含平移的推广)→ 可逆(行列式 ≠ 0)→ 保角 → 正交(保长保角)→ 刚体(仅平移 + 旋转);每层都是上一层的子集。
|
本章主旨
本章用第 4 章"行 = 变换后基向量"的工具,逐个推导 5 类基本线性变换的矩阵:旋转 / 缩放 / 投影 / 反射 / 剪切。把每一类看成"基向量目标"的设定——读者掌握"如何用基向量构造任意变换矩阵"的方法论。第 6 章升级到 4×4 齐次矩阵后,平移加入变换树。本章中段给出变换组合的规则(矩阵乘法),末段给出变换分类树(线性 → 仿射 → … → 刚体)。 |
一、核心概念
本章围绕 7 个核心概念展开:从 5 类基本线性变换出发(旋转 / 缩放 / 投影 / 反射 / 剪切),加上变换组合规则(矩阵乘法),最后给出变换分类树。
| 概念 | 定义 + 重要性 | 实现提示 |
|---|---|---|
旋转 (rotation) |
保持原点与距离不变的角度移动。2D 一个参数 θ、3D 需要轴 + 角度。手性决定正方向(左手顺时针 / 右手逆时针)。绕任意轴的旋转矩阵可分解为"平行分量不动 + 垂直分量在垂直平面内做 2D 旋转"。 |
§5.1.1 / §5.1.2 / §5.1.3;库函数 |
缩放 (scale) |
沿某个轴拉长 / 缩短。沿卡迪尔轴 = 对角矩阵;对角元素为缩放因子。负因子 = 反射。 |
§5.2.1;均匀缩放(所有轴同因子)保持形状、不均匀缩放改变形状。沿任意方向缩放要构造投影 + 缩放 + 反投影矩阵。 |
正交投影 (orthographic projection) |
把维度降一阶(3D → 2D)。投影方向垂直于投影平面。结果是"丢弃平行于投影方向的分量"。最常用:把 3D 投影到 xy 平面(去掉 z)。 |
§5.3;与"透视投影"(perspective)相对——透视投影保留深度信息,正交投影丢弃。CAD / 工程制图常用正交投影。 |
反射 (reflection) |
沿某个轴 / 平面的镜像。行列式恒为 -1。本质 = 沿某轴 -1 缩放(其余方向 +1)。 |
§5.4;与旋转的区别:反射产生"手性反转"(左右颠倒),旋转保持手性。镜中物体是反射,不能用旋转重合。 |
剪切 (shearing) |
把矩形变平行四边形,保持面积(行列式 = 1)但改变角度。常见用途:italic 字体、3D 投影中的 z 倾斜、shadow skew。 |
§5.5;与投影的区别:投影是"丢维度",剪切是"维度不变但角度变"。 |
变换组合 |
多个原变换复合 = 矩阵乘法(顺序敏感)。先发生的事写在右边(行向量约定)。结合律保证可以链式复合。 |
§5.6;常见模式: |
变换分类树 |
6 类由宽到窄:linear(保直保平行,保原点) ⊂ affine(线性 + 平移) ⊂ invertible(det ≠ 0) ⊂ angle-preserving ⊂ orthogonal(保长保角,列正交) ⊂ rigid-body(仅平移 + 旋转)。每层是上一层的真子集。 |
§5.7;查表 §5.7.7。识别变换类别可快速判断其性质(如"行列式 < 0 ⇒ 不可保角 ⇒ 含反射")。 |
二、详细笔记
2.1 旋转 (Rotation)
What:保持原点与距离的角度移动。2D 一个参数 θ(绕原点),3D 需要 轴 + 角度(绕该轴旋转)。
Why:3D 图形 90% 的"动画 / 朝向"问题都涉及旋转;旋转矩阵是后续四元数 / 欧拉角(第 8 章)的代数基础。
How:
2D 旋转(§5.1.1)——绕原点逆时针 θ:
推导:把基向量 +x 与 +y 旋转 θ 后坐标 = (cosθ, sinθ) 与 (-sinθ, cosθ),写进矩阵行。
3D 旋转——绕卡迪尔轴(§5.1.2):
约定:绕哪条轴旋转,哪条轴对应行不变(行向量约定下,行 = 基向量)。
3D 旋转——绕任意轴(§5.1.3):
设单位轴 n̂、角度 θ。把向量 v 分解为 v∥ = (v · n̂) n̂(平行分量)与 v⊥ = v - v∥(垂直分量);绕 n̂ 旋转等价于"v∥ 不动 + v⊥ 在垂直平面内做 2D 旋转"。旋转后:
展开为矩阵(Rodrigues 旋转公式):
其中 c = cosθ, s = sinθ。
|
手性差异在旋转矩阵中的体现
绕 y 轴旋转矩阵中 |
When:所有朝向动画(角色 / 相机 / 光源);物理引擎中的刚体朝向更新。
Example:R_z(90°) 把 +x 转到 +y;R_z(-90°) 把 +x 转到 -y。
2.2 缩放 (Scale)
What:沿某个轴拉长 / 缩短。沿卡迪尔轴 = 对角矩阵;对角元素为缩放因子。
Why:建模(物体大小调整)、动画(弹性缩放)、UI(屏幕适配)、shader 调试(暂时缩到 0 隐藏某组件)。
How:
沿卡迪尔轴缩放(§5.2.1):
几何解释:行向量约定下,矩阵第 1 行 +x → (kx, 0, 0);第 2 行 +y → (0, ky, 0);第 3 行 +z → (0, 0, kz)。
沿任意方向缩放(§5.2.2):构造 投影 → 缩放 → 反投影 复合矩阵 M = P⁻¹ S P,其中 P 把任意方向对齐到某轴上。
负缩放 = 反射(§5.4):某因子 < 0 时该方向翻转。
|
行列式判断"反射存在"
缩放矩阵行列式 = |
When:模型导入时的单位统一(FBX 常用 cm,游戏常用 m);UI 缩放;shader 调试。
Example:S(2, 1, 1) 把所有 x 坐标乘 2,物体在 x 方向被拉伸 2 倍;S(1, -1, 1) = 沿 xz 平面反射(左右颠倒)。
2.3 正交投影 (Orthographic Projection)
What:把维度降一阶(3D → 2D)。投影方向垂直于投影平面,结果是"丢弃平行于投影方向的分量"。
Why:3D → 2D 屏幕渲染的第一阶段;CAD / 工程制图保留尺寸;与"透视投影"(保留深度)相对。
How:
投影到卡迪尔平面(§5.3.1):
-
投影到 xy 平面(丢 z):
P_xy = [[1, 0, 0], [0, 1, 0], [0, 0, 0]] -
投影到 xz 平面(丢 y):
P_xz = [[1, 0, 0], [0, 0, 0], [0, 0, 1]] -
投影到 yz 平面(丢 x):
P_yz = [[0, 0, 0], [0, 1, 0], [0, 0, 1]]
投影到任意平面(§5.3.2):构造 基变换 → 投影 → 反基变换。
|
正交投影 vs 透视投影
|
When:CAD / 工程图;2D 等距游戏渲染;shadow map 第一阶段(深度投影)。
Example:把 (1, 2, 3) 投影到 xy 平面 = (1, 2, 0);常用于把 3D 鼠标位置投影回 2D 屏幕。
2.4 反射 (Reflection)
What:沿某个轴 / 平面的镜像。行列式恒为 -1。本质 = 沿某轴 -1 缩放(其余方向 +1)。
Why:理解镜像变换是手性翻转的几何来源;镜中物体不可通过旋转重合(数学上证明:反射矩阵行列式为 -1,旋转矩阵行列式为 +1)。
How:
反射矩阵(沿某个平面 / 轴):
-
沿 yz 平面(沿 x 翻转):
Refl_x = [[-1, 0, 0], [0, 1, 0], [0, 0, 1]](行列式 = -1) -
沿 xz 平面:行
[1, -1, 1]对角。 -
沿 xy 平面:行
[1, 1, -1]对角。 -
沿任意平面反射:构造 基变换 → 反射 → 反基变换。
|
反射矩阵 vs 旋转矩阵
把右手坐标系下的矩阵直接搬到左手系,会从旋转"变成"反射(或反过来)。 |
When:镜子渲染;3D 物理中的"完全弹性碰撞"对称面;shadow plane 的镜像映射。
Example:Refl_x 把 (1, 2, 3) 变为 (-1, 2, 3)。
2.5 剪切 (Shearing)
What:把矩形变平行四边形,保持面积(行列式 = 1)但改变角度。
Why:italic 字体 / shadow skew / 3D 投影中 z 倾斜 / 图像变形。
How:
2D 剪切(沿 x 方向斜切,y 影响 x):
3D 剪切有 6 种组合(每个轴对每个轴的剪切),典型如:
即 x' = x + s·y;y, z 不变。其它类似。
|
行列式判断"是否剪切"
剪切矩阵行列式 = 1(保持面积 / 体积)。与缩放、旋转不同——剪切既不改变大小也不改变垂直性,但破坏角度。 |
When:italic 字体(沿 x 斜切);shadow skew(CSS transform: skew(20deg));3D 投影(错切矩阵模拟透视)。
Example:H_x(0.5) 把矩形 (0,0)-(1,1) 变为 (0,0)-(1.5,1)——x 方向被 y "拉"。
2.6 变换组合 (Combining Transformations)
What:多个原变换复合 = 矩阵乘法(顺序敏感)。先发生的事写在右边(行向量约定)。
Why:复合变换是 3D 引擎的核心——一个物体的最终位姿 = 平移 × 旋转 × 缩放;理解顺序才能避免"先缩放后平移"与"先平移后缩放"导致的位置偏移 bug。
How:
复合规则(§5.6,行向量约定):
其中 S = 缩放、R = 旋转、T = 平移。
顺序解读:从 v_local 开始,先 应用 S(缩放),再 R(旋转),再 T(平移)——但矩阵写在 右 边的先发生。
|
"先发生的事写在右边"的反直觉
直觉上"先缩放,再旋转,再平移"对应 |
When:场景图中所有父子变换链;相机栈;UI 层级变换。
Example:物体"先缩放为 2 倍再绕原点旋转 45° 再平移 (10, 0, 0)" = T(10,0,0) · R_z(45°) · S(2),应用顺序为 v → S(2) → R_z(45°) → T(10,0,0)。
2.7 变换分类树 (Classes of Transformations)
What:6 类由宽到窄的变换——linear ⊂ affine ⊂ invertible ⊂ angle-preserving ⊂ orthogonal ⊂ rigid-body。每层是上一层的真子集。
Why:识别变换类别可快速判断其性质("行列式 < 0 ⇒ 不可保角 ⇒ 含反射"),避免逐个矩阵检查。
How:
§5.7 分类树(每层是新约束 + 上层所有约束):
-
linear(线性变换):保直保平行,保原点;3×3 矩阵。
-
affine(仿射变换):linear + 平移;3×3 矩阵不够,需 4×4 齐次(第 6 章)。
-
invertible(可逆变换):行列式 ≠ 0;存在逆变换。
-
angle-preserving(保角变换):保持向量间夹角;行列式 > 0(不允许反射)。
-
orthogonal(正交变换):保长保角;矩阵列正交且单位长。
-
rigid-body(刚体变换):仅平移 + 旋转;保长保角保手性;矩阵 = 平移 × 旋转。
|
6 类变换的快速判定
|
When:判断变换是否可逆、是否保手性、是否可用于物理引擎(rigid-body 用于刚体仿真)。
Example:S(2, 1, 1) 是 linear(det = 2);S(2, -1, 1) 是 linear 但 非 angle-preserving(det < 0 含反射);S(2, 1, 1) + 平移 是 affine;T(1, 0, 0) · R_z(45°) 是 rigid-body。
三、关键图表
视觉图表
非可视化条目
|
非可视化条目(表 / 算法)
|
核心公式对照表
|
核心公式对照表
|
四、思维导图
mindmap
root((第 5 章 矩阵与线性变换))
旋转
2D绕原点
3D卡迪尔轴
3D任意轴
Rodrigues公式
缩放
沿卡迪尔轴
任意方向
负缩放即反射
正交投影
3D转2D
平行线保持
丢垂直分量
反射
沿轴或平面
行列式-1
改变手性
剪切
矩形变平行四边形
行列式1
italic效果
变换组合
矩阵乘法
顺序敏感
先发生写在右
变换分类树
线性
仿射
可逆
保角
正交
刚体
五、重点与易错点
-
手性决定旋转方向:左手系绕轴正方向旋转是顺时针,右手系是逆时针;跨引擎搬运旋转矩阵时第一件事是验证手性。
-
Rodrigues 公式的轴必须是单位向量:非单位向量需要预先
normalize,否则旋转角度会按比例放大。 -
缩放矩阵对角元素 = 缩放因子;非对角元素 = 0;负因子 = 反射。
-
行列式 = 缩放因子的乘积:
det = kx · ky · kz;负值说明含反射。 -
正交投影 vs 透视投影:正交保持平行线;透视使平行线收敛;CAD 用前者,电影渲染用后者。
-
反射改变手性:镜中物体不能通过旋转重合;本质是行列式 -1。
-
剪切保持行列式 = 1:与缩放不同,剪切不改变大小,但破坏角度。
-
变换组合顺序敏感:
T · R ≠ R · T;先缩放再平移 ≠ 先平移再缩放;行向量约定下"先发生写在右"。 -
6 类变换的真子集关系:rigid-body ⊂ orthogonal ⊂ angle-preserving ⊂ invertible ⊂ affine ⊂ linear;rigid-body 是最严苛的(仅平移 + 旋转)。
-
正交矩阵的关键性质:
M^T · M = I,即M^T = M^{-1};这是 §6 章正交矩阵逆变换的核心。 -
跨章衔接:第 6 章把"线性变换 + 平移"封装为 4×4 齐次矩阵;第 8 章把旋转矩阵推广为欧拉角 / 四元数 / 轴角;第 10 章用本节矩阵组合构造视图矩阵 + 投影矩阵。