第 6 章 矩阵进阶 (More on Matrices)
核心结论
-
行列式 (determinant, |M| 或 det M):方阵专有标量;几何意义 = 变换的 缩放倍数(绝对值)+ 手性保持(符号,正数保手性,负数含反射)。
-
矩阵的逆 (inverse, M⁻¹):仅当 det ≠ 0 时存在;几何意义 = 反向变换;列向量约定下用余子式矩阵 / Cramer 法则构造。
-
正交矩阵 (orthogonal matrix):列向量两两正交且单位长;
M^T · M = I,即M^T = M⁻¹;保长保角;旋转 / 反射是正交变换的特例。 -
4×4 齐次矩阵 (homogeneous matrix):在 3×3 变换矩阵上加一行一列容纳 平移;第四分量 w 是"开关",通常为 1。
-
4×4 仿射变换 (4×4 affine transform):3D 图形标准形式——3×3 线性变换 + 1×3 平移向量;可同时表达旋转 / 缩放 / 平移 / 投影。
-
4×4 透视投影 (perspective projection):通过 w 分量实现"近大远小";把视锥体(frustum)映射到 NDC(标准化设备坐标)立方体 [-1, 1]³。
|
本章主旨
本章补全矩阵的"工具箱":行列式(判定可逆 / 手性)、矩阵的逆(构造反向变换)、正交矩阵(高效求逆)、4×4 齐次矩阵(容纳平移与透视)。最关键的工程意义是——4×4 矩阵成为 3D 图形的事实标准,所有 GPU / 引擎内部都用 4×4 矩阵表达 3D 变换。 |
一、核心概念
本章围绕 6 个核心概念展开:行列式 → 矩阵的逆 → 正交矩阵 → 4×4 齐次坐标 → 4×4 仿射变换 → 4×4 透视投影。每一步都在补完"矩阵能做什么"的工具集。
| 概念 | 定义 + 重要性 | 实现提示 |
|---|---|---|
行列式 (det) |
方阵的标量;几何 = 缩放倍数(绝对值)+ 手性(符号)。det = 0 ⇒ 矩阵 奇异(不可逆)。 |
§6.1;2×2 公式 |
矩阵的逆 (M⁻¹) |
|
§6.2;3×3 用伴随矩阵 / Cramer 法则。代码侧用 |
正交矩阵 |
列向量两两正交且单位长; |
§6.3;旋转矩阵、反射矩阵是正交矩阵的特例。正交矩阵的逆 = 转置,避免 |
4×4 齐次坐标 |
用 4×4 矩阵表达 3D 变换(含平移);第 4 分量 w = 1 为"普通点"、w = 0 为"向量"、w ≠ 0/1 为"投影后归一化"。 |
§6.4;所有 3D 引擎的"世界变换矩阵"都是 4×4 齐次矩阵。OpenGL / DirectX / Vulkan 均如此。 |
4×4 仿射变换 |
3D 图形标准形式:3×3 线性变换(旋转 / 缩放 / 投影 / 反射 / 剪切)+ 1×3 平移向量;统一表达所有"线性 + 平移"。 |
§6.4;常见用法 |
4×4 透视投影 |
通过 w 分量实现"近大远小";把视锥体(视场角 + 近远平面定义的 4 棱台)映射到 NDC 立方体 |
§6.5;与正交投影(5.3)不同——正交保持平行线,透视使平行线收敛。游戏渲染默认透视,CAD / 2D 默认正交。 |
二、详细笔记
2.1 行列式 (Determinant)
What:方阵的标量 |M| 或 det M;几何 = 变换的 缩放倍数(绝对值)+ 手性保持(符号)。
Why:判定矩阵是否可逆(det ≠ 0);判断变换是否保手性(det > 0);快速估算"变换把单位立方体撑成多大体积"。
How:
2×2 矩阵(式 6-1):
记忆法:对角乘积 − 反对角乘积。
3×3 矩阵(式 6-2,Sarrus 法则):
记忆法:把矩阵前三列重写一次接在右边,沿 6 条对角线(3 正 + 3 反)乘积求和。
n×n 矩阵(§6.1.3):用余子式 / 拉普拉斯展开递归。
|
行列式的几何意义
|
When:判断可逆性;判断变换是否保角(含反射则 |M| < 0);数值稳定性分析(接近 0 的 det 暗示病态矩阵)。
Example:[[2, 1], [-1, 2]] 的 det = 2·2 − 1·(−1) = 5,单位正方形被放大为原面积 5 倍且无反射。
2.2 矩阵的逆 (Inverse)
What:满足 M · M⁻¹ = M⁻¹ · M = I 的矩阵;几何 = 反向变换;仅 det ≠ 0 时存在。
Why:把"还原到变换前"是 3D 图形核心需求(如相机逆变换把世界点变回相机坐标);可逆矩阵才有逆变换。
How:
存在条件:det ≠ 0(否则不可逆)。
3×3 矩阵的逆(伴随矩阵法):
其中 C[i][j] = (-1)^{i+j} M[i][j] 的余子式矩阵(删去 i 行 j 列后的子矩阵的 det)。
4×4 矩阵的逆:嵌套 3×3 逆 + 平移部分求逆;或用 块矩阵公式。
|
何时不要手算矩阵逆
|
When:相机逆变换;IK(反向动力学);解线性方程组 A x = b ⇒ x = A⁻¹ b。
Example:[[1, 2], [3, 4]] 的 det = -2;其逆 = (-1/2) · [[4, -2], [-3, 1]] = [[-2, 1], [1.5, -0.5]]。
2.3 正交矩阵 (Orthogonal Matrices)
What:列向量两两正交且单位长的方阵;满足 M^T · M = I,即 M^T = M⁻¹。
Why:正交矩阵的逆 = 转置,O(n²) 而非 O(n³);旋转 / 反射矩阵都是正交的,物理引擎 / 图形管线广泛使用。
How:
判别条件(行向量约定下"行"也满足):
-
M · M^T = I(等价于M^T = M⁻¹) -
M的所有列向量长度 = 1 -
M的任意两列点积 = 0
旋转矩阵与反射矩阵都是正交矩阵。
|
正交矩阵的快速判定
|
When:旋转 / 反射矩阵求逆(直接转置);相机正交基构造;IK 中刚性约束。
Example:R_z(90°) = [[0, -1, 0], [1, 0, 0], [0, 0, 1]](行向量约定下)——列向量 [(0,1,0), (-1,0,0), (0,0,1)] 两两正交且单位长,故正交。其逆 = 转置 = [[0, 1, 0], [-1, 0, 0], [0, 0, 1]] = R_z(-90°)。
2.4 4×4 齐次坐标与仿射变换 (4×4 Homogeneous Coordinates & Affine Transforms)
What:在 3×3 变换矩阵上加一行一列容纳 平移;第四分量 w 是"开关"——w = 1 是"普通点"、w = 0 是"向量"、w ≠ 0/1 是"投影后归一化"。
Why:3×3 矩阵只能表达线性变换(含旋转 / 缩放 / 投影 / 反射 / 剪切),无法表达 平移;升级到 4×4 后,平移也成为矩阵乘法,所有 3D 变换统一为 4×4 矩阵乘法。
How:
4×4 齐次矩阵的标准形式(§6.4):
-
左上 3×3:线性变换(旋转 / 缩放 / 投影 / 反射 / 剪切)。
-
右 1×3:平移向量
(tx, ty, tz)。 -
底行
[0, 0, 0, 1]:把"齐次点"还原为"3D 点"。
平移矩阵:
点 vs 向量在齐次坐标下的区别:
向量与平移无关(w=0 不受最后一行影响);点会被平移(w=1 受 t 影响)。
|
齐次坐标的妙处
|
When:所有 3D 变换都该用 4×4 齐次矩阵;GPU / 引擎 API 内部都如此。
Example:把点 (1, 2, 3) 平移 (10, 0, 0) = (11, 2, 3, 1)(用 4×4 平移矩阵右乘);向量 (1, 2, 3, 0) 经同一平移仍是 (1, 2, 3, 0)(不受影响)。
2.5 4×4 透视投影 (4×4 Perspective Projection)
What:通过 w 分量实现"近大远小";把视锥体(视场角 fovY + 近远平面定义的 4 棱台)映射到 NDC(标准化设备坐标)立方体 [-1, 1]³。
Why:3D 渲染核心——把 3D 场景"投影"到 2D 屏幕;透视投影产生"近大远小"的真实感。
How:
透视投影矩阵(OpenGL 风格,§6.5):
-
aspect:宽 / 高比 -
fovY:垂直视场角(弧度) -
near,far:近远平面距离 -
底行
[0, 0, -1, 0]:把 z 写入 w,后续归一化时实现透视除法。
NDC 归一化:变换后 vec /= vec.w 把 w 归一为 1,x/y/z ∈ [-1, 1]。
|
透视投影 vs 正交投影
|
When:所有 3D 渲染管线(游戏 / 仿真 / VR);CAD 默认正交投影,电影渲染默认透视投影。
Example:相机 fovY = 60°、aspect = 16/9、near = 0.1、far = 100。把世界点 (0, 0, -5)(相机前方 5 米)投影到 NDC ≈ (0, 0, z_normalized);把世界点 (0, 0, -50) 投影到 NDC ≈ (0, 0, 接近 1),坐标被压缩——视觉上"变小"。
三、关键图表
视觉图表
非可视化条目
|
非可视化条目(表 / 算法)
|
核心公式对照表
|
核心公式对照表
|
四、思维导图
mindmap
root((第 6 章 矩阵进阶))
行列式
缩放倍数
手性符号
可逆判定
矩阵的逆
伴随矩阵
反向变换
O(n立方)
正交矩阵
M^T等于M逆
保长保角
旋转反射特例
4x4齐次
平移纳入
点vs向量
w分量
4x4仿射
3x3变换加平移
GPU标准
复合T乘R乘S
4x4透视投影
视锥体映射NDC
透视除法
近大远小
五、重点与易错点
-
行列式 = 0 ⇒ 不可逆:奇异矩阵(det = 0)把空间"压扁"到更低维度(如 3D → 2D 投影);物理引擎遇到奇异矩阵会崩溃。
-
行列式符号 = 手性:正数保手性、负数含反射;快速判断"变换是否保角"。
-
3×3 矩阵逆用伴随矩阵:M⁻¹ = adj(M) / det(M);4×4 用块矩阵公式;n×n 用高斯消元。
-
正交矩阵的逆 = 转置:避免
O(n³)求逆;旋转 / 反射矩阵的快速求逆用此性质。 -
4×4 齐次坐标是 3D 图形标准:所有 GPU / 引擎内部都把 3D 变换封装为 4×4 矩阵;点用 w=1、向量用 w=0。
-
底行
[0,0,0,1]= 仿射:保证变换 不 影响 w(除以 w 后仍得 3D 点);透视投影底行是[0,0,-1,0],把 z 写入 w 实现透视除法。 -
透视投影的 w 分量:变换后 vec /= vec.w 把 w 归一为 1;近处物体 w 较小 → 除后坐标"放大",远处反之——这是"近大远小"的代数来源。
-
正交 vs 透视投影的选择:3D 场景渲染默认透视(电影 / 游戏);2D 渲染 / CAD 默认正交;UI 元素用正交(保持像素对齐)。
-
det 接近 0 的病态矩阵:数值不稳定;IK 解算 / 约束求解遇到时要用伪逆或 SVD 分解。
-
跨章衔接:第 7 章把齐次坐标推广到齐次矩阵的逆 / 行列式;第 8 章把 4×4 旋转矩阵(齐次版)替换为四元数;第 10 章用本节 4×4 矩阵构造模型 / 视图 / 投影矩阵链。