第 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 公式 ad − bc、3×3 用 Sarrus 法则或余子式展开。代码侧用 mat.det() 库函数。

      矩阵的逆 (M⁻¹)

      M · M⁻¹ = M⁻¹ · M = I;仅 det ≠ 0 时存在;几何 = 反向变换。

      §6.2;3×3 用伴随矩阵 / Cramer 法则。代码侧用 mat.inverse();注意矩阵是否可逆的预判。

      正交矩阵

      列向量两两正交且单位长;M^T · M = I,即 M^T = M⁻¹;保长保角。

      §6.3;旋转矩阵、反射矩阵是正交矩阵的特例。正交矩阵的逆 = 转置,避免 O(n³) 求逆。

      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;常见用法 T · R · S(缩放 → 旋转 → 平移),与 §5.6 一致。

      4×4 透视投影

      通过 w 分量实现"近大远小";把视锥体(视场角 + 近远平面定义的 4 棱台)映射到 NDC 立方体 [-1, 1]³

      §6.5;与正交投影(5.3)不同——正交保持平行线,透视使平行线收敛。游戏渲染默认透视,CAD / 2D 默认正交。

      二、详细笔记

      2.1 行列式 (Determinant)

      What:方阵的标量 |M|det M;几何 = 变换的 缩放倍数(绝对值)+ 手性保持(符号)。

      Why:判定矩阵是否可逆(det ≠ 0);判断变换是否保手性(det > 0);快速估算"变换把单位立方体撑成多大体积"。

      How

      2×2 矩阵(式 6-1):

      \[|\mathbf{M}| = \begin{vmatrix} m_{11} & m_{12} \\ m_{21} & m_{22} \end{vmatrix} = m_{11} m_{22} - m_{12} m_{21}\]

      记忆法:对角乘积 − 反对角乘积。

      3×3 矩阵(式 6-2,Sarrus 法则):

      \[|\mathbf{M}| = m_{11}m_{22}m_{33} + m_{12}m_{23}m_{31} + m_{13}m_{21}m_{32} - m_{13}m_{22}m_{31} - m_{12}m_{21}m_{33} - m_{11}m_{23}m_{32}\]

      记忆法:把矩阵前三列重写一次接在右边,沿 6 条对角线(3 正 + 3 反)乘积求和。

      n×n 矩阵(§6.1.3):用余子式 / 拉普拉斯展开递归。

      行列式的几何意义
      • |M| > 0:变换保持手性(无反射),单位立方体被放大 |M| 倍。

      • |M| < 0:变换反转手性(含奇数次反射),单位立方体被放大 |M| 倍但翻转。

      • |M| = 0:变换是 奇异的——把空间"压扁"到更低维度(如 3D → 2D 投影),不可逆。

      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 矩阵的逆(伴随矩阵法):

      \[\mathbf{M}^{-1} = \frac{1}{|\mathbf{M}|} \text{adj}(\mathbf{M}) = \frac{1}{|\mathbf{M}|} \mathbf{C}^T\]

      其中 C[i][j] = (-1)^{i+j} M[i][j] 的余子式矩阵(删去 i 行 j 列后的子矩阵的 det)。

      4×4 矩阵的逆:嵌套 3×3 逆 + 平移部分求逆;或用 块矩阵公式

      何时不要手算矩阵逆
      • 4×4 矩阵逆 O(n³),手算易错;代码侧用库(GLM inverse()、Eigen inverse())。

      • 病态矩阵(det 接近 0)数值不稳定;用 伪逆LU 分解 替代。

      • 正交矩阵的逆 = 转置,免去 O(n³) 求逆(§6.3)。

      When:相机逆变换;IK(反向动力学);解线性方程组 A x = bx = 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

      旋转矩阵与反射矩阵都是正交矩阵。

      正交矩阵的快速判定
      • det = ±1:旋转 det = +1、反射 det = -1。

      • 保长:|Mv| = |v|(任意 v)。

      • 保角:(Mv) · (Mw) = v · w(任意 v, w)。

      When:旋转 / 反射矩阵求逆(直接转置);相机正交基构造;IK 中刚性约束。

      ExampleR_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):

      \[\mathbf{H} = \begin{bmatrix} m_{11} & m_{12} & m_{13} & t_x \\ m_{21} & m_{22} & m_{23} & t_y \\ m_{31} & m_{32} & m_{33} & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix} \end{bmatrix} = \begin{bmatrix} \mathbf{M}_{3\times 3} & \mathbf{t} \\ \mathbf{0} & 1 \end{bmatrix}\]
      • 左上 3×3:线性变换(旋转 / 缩放 / 投影 / 反射 / 剪切)。

      • 右 1×3:平移向量 (tx, ty, tz)

      • 底行 [0, 0, 0, 1]:把"齐次点"还原为"3D 点"。

      平移矩阵:

      \[\mathbf{T}(t_x, t_y, t_z) = \begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix}\]

      点 vs 向量在齐次坐标下的区别:

      \[\mathbf{P}_{\text{point}} = [x, y, z, 1], \quad \mathbf{v}_{\text{vector}} = [x, y, z, 0]\]

      向量与平移无关(w=0 不受最后一行影响);点会被平移(w=1 受 t 影响)。

      齐次坐标的妙处
      • 平移被纳入矩阵乘法:复合变换 T · R · S 仍是 4×4 矩阵乘法。

      • 透视投影(§6.5)通过 w 分量实现"近大远小":变换后 w ≠ 1,归一化 ÷ w 即得 NDC 坐标。

      • w = 0 的"向量"在透视投影后仍是"向量"(不受 w 变化影响),与"点"区别处理——这与 §2.2 的"向量 vs 点"语义一致。

      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):

      \[\mathbf{P}_{\text{persp}} = \begin{bmatrix} \frac{1}{\text{aspect} \cdot \tan(\text{fovY}/2)} & 0 & 0 & 0 \\ 0 & \frac{1}{\tan(\text{fovY}/2)} & 0 & 0 \\ 0 & 0 & -\frac{\text{far} + \text{near}}{\text{far} - \text{near}} & -\frac{2 \cdot \text{far} \cdot \text{near}}{\text{far} - \text{near}} \\ 0 & 0 & -1 & 0 \end{bmatrix}\]
      • aspect:宽 / 高比

      • fovY:垂直视场角(弧度)

      • near, far:近远平面距离

      • 底行 [0, 0, -1, 0]:把 z 写入 w,后续归一化时实现透视除法。

      NDC 归一化:变换后 vec /= vec.w 把 w 归一为 1,x/y/z ∈ [-1, 1]

      透视投影 vs 正交投影
      • 透视:far 平面附近的物体被压缩到 NDC 中心附近——实现"远小"。视锥体是 4 棱台。

      • 正交:物体大小与距离无关——保持工程图意义。视锥体是长方体。

      • 两者都用 4×4 矩阵,但正交矩阵的底行是 [0, 0, 0, 1](不变 w),透视矩阵的底行是 [0, 0, -1, 0](把 z 写入 w)。

      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),坐标被压缩——视觉上"变小"。

      三、关键图表

      视觉图表

      图 6-1
      Figure 1. 图 6-1:行列式的几何意义(缩放倍数)
      图 6-2
      Figure 2. 图 6-2:行列式为负 = 反射
      图 6-3
      Figure 3. 图 6-3:4×4 齐次矩阵结构
      图 6-4
      Figure 4. 图 6-4:齐次坐标下点 vs 向量(w = 1 vs w = 0)
      图 6-5
      Figure 5. 图 6-5:透视投影(视锥体 → NDC 立方体)
      图 6-6
      Figure 6. 图 6-6:透视 vs 正交投影对比

      非可视化条目

      非可视化条目(表 / 算法)
      编号 内容摘要

      式 6-1, 6-2

      2×2 与 3×3 行列式公式;Sarrus 法则 + 余子式展开。

      式 6-3 至 6-5

      矩阵的逆:用伴随矩阵(余子式转置矩阵)除以 det;3×3 完整展开;4×4 块矩阵求逆公式。

      表 6.1

      正交矩阵的核心性质:M^T M = I、det = ±1、保长保角、列向量构成标准正交基。

      式 6-6 至 6-10

      4×4 齐次矩阵:平移、缩放、旋转(含绕任意轴)的齐次形式;嵌套 3×3 变换 + 平移。

      核心公式对照表

      核心公式对照表
      名称 公式

      2×2 行列式

      latexmath:[

      \mathbf{M}

      = m_{11}m_{22} - m_{12}m_{21}]

      3×3 行列式

      latexmath:[

      \mathbf{M}

      = \sum_{\text{cyc}} m_{11}m_{22}m_{33} - m_{13}m_{22}m_{31} \pm \ldots]

      矩阵的逆

      latexmath:[\mathbf{M}^{-1} = \frac{1}{

      \mathbf{M}

      } \text{adj}(\mathbf{M})]

      正交矩阵

      \(\mathbf{M}^T \mathbf{M} = \mathbf{I} \Rightarrow \mathbf{M}^{-1} = \mathbf{M}^T\)

      4×4 平移

      \(\mathbf{T}(t_x, t_y, t_z) = \begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix}\)

      4×4 透视投影

      \(\mathbf{P}_{\text{persp}} = \begin{bmatrix} \frac{1}{\text{aspect} \cdot \tan(\text{fovY}/2)} & 0 & 0 & 0 \\ 0 & \frac{1}{\tan(\text{fovY}/2)} & 0 & 0 \\ 0 & 0 & -\frac{\text{far} + \text{near}}{\text{far} - \text{near}} & -\frac{2 \cdot \text{far} \cdot \text{near}}{\text{far} - \text{near}} \\ 0 & 0 & -1 & 0 \end{bmatrix}\)

      四、思维导图

      mindmap
        root((第 6 章 矩阵进阶))
          行列式
            缩放倍数
            手性符号
            可逆判定
          矩阵的逆
            伴随矩阵
            反向变换
            O(n立方)
          正交矩阵
            M^T等于M逆
            保长保角
            旋转反射特例
          4x4齐次
            平移纳入
            点vs向量
            w分量
          4x4仿射
            3x3变换加平移
            GPU标准
            复合T乘R乘S
          4x4透视投影
            视锥体映射NDC
            透视除法
            近大远小

      五、重点与易错点

      1. 行列式 = 0 ⇒ 不可逆:奇异矩阵(det = 0)把空间"压扁"到更低维度(如 3D → 2D 投影);物理引擎遇到奇异矩阵会崩溃。

      2. 行列式符号 = 手性:正数保手性、负数含反射;快速判断"变换是否保角"。

      3. 3×3 矩阵逆用伴随矩阵:M⁻¹ = adj(M) / det(M);4×4 用块矩阵公式;n×n 用高斯消元。

      4. 正交矩阵的逆 = 转置:避免 O(n³) 求逆;旋转 / 反射矩阵的快速求逆用此性质。

      5. 4×4 齐次坐标是 3D 图形标准:所有 GPU / 引擎内部都把 3D 变换封装为 4×4 矩阵;点用 w=1、向量用 w=0。

      6. 底行 [0,0,0,1] = 仿射:保证变换 影响 w(除以 w 后仍得 3D 点);透视投影底行是 [0,0,-1,0],把 z 写入 w 实现透视除法。

      7. 透视投影的 w 分量:变换后 vec /= vec.w 把 w 归一为 1;近处物体 w 较小 → 除后坐标"放大",远处反之——这是"近大远小"的代数来源。

      8. 正交 vs 透视投影的选择:3D 场景渲染默认透视(电影 / 游戏);2D 渲染 / CAD 默认正交;UI 元素用正交(保持像素对齐)。

      9. det 接近 0 的病态矩阵:数值不稳定;IK 解算 / 约束求解遇到时要用伪逆或 SVD 分解。

      10. 跨章衔接:第 7 章把齐次坐标推广到齐次矩阵的逆 / 行列式;第 8 章把 4×4 旋转矩阵(齐次版)替换为四元数;第 10 章用本节 4×4 矩阵构造模型 / 视图 / 投影矩阵链。