《3D 数学基础:图形与游戏开发》七、矩阵

335 阅读4分钟

矩阵是 3D 数学的重要基础。它主要用来描述两个坐标系统间的关系,通过定义一种运算而将一个坐标系中的向量转换到另一个坐标系中。

7.1 矩阵——数学定义

7.1.1 矩阵的维度和记法

矩阵的维度被定义为它包含了多少行和多少列。一个 r×cr\times c 矩阵有 r 行 c 列。下面是一个 4×34\times 3 矩阵的例子

[4012543124/31520]\begin{bmatrix} 4&0&12 \\ -5&\sqrt{4}&3 \\ 12&-4/3&1 \\ 5&2&0 \\ \end{bmatrix}

需要引用矩阵的分量时,采用下标法

M=[m11m12m13m21m22m23m31m32m33]M=\begin{bmatrix} m_\mathit{11}&m_\mathit{12}&m_\mathit{13} \\ m_\mathit{21}&m_\mathit{22}&m_\mathit{23} \\ m_\mathit{31}&m_\mathit{32}&m_\mathit{33} \\ \end{bmatrix}

矩阵的下标从 1 开始。如 m12m_\mathit{12} 读作 m 一二,是 1 行 2 列的元素

7.1.2 方阵

  • 行列数相同的矩阵称作方阵

  • 方阵的对角线元素就是行号和列号相同的元素。如上面矩阵 M 中的 m11m_\mathit{11}m22m_\mathit{22}m33m_\mathit{33} 。其他元素均为非对角线元素

  • 若所有非对角线元素都为 0,这种矩阵为对角矩阵

  • 单位矩阵是一种特殊的对角矩阵。nn 维单位矩阵记作 InI_n,是 n×nn\times n 矩阵,对角线元素均为 1,其他元素均为 0

    I3=[100010001]I_3=\begin{bmatrix} 1&0&0 \\ 0&1&0 \\ 0&0&1 \\ \end{bmatrix}

  • 单位矩阵是矩阵的乘法单位元。任意一个矩阵乘以单位矩阵,都将得到原矩阵

7.1.3 向量作为矩阵使用

一个 n 维向量能被当作 1×n1\times n 矩阵或 n×1n\times 1 矩阵。前者称作行向量,后者称作列向量

[4012]\begin{bmatrix} 4&0&12 \end{bmatrix} [4221]\begin{bmatrix}42\\2\\1\\ \end{bmatrix}

7.1.4 转置

矩阵 M 的转置记作 MTM^T,它的列由 M 的行组成,MijT=MjiM^T_{ij}=M_{ji},即沿着矩阵对角线翻折

对于向量来说,转置将使行向量和列向量转换成对方

7.1.5 标量和矩阵的乘法

结果是一个和 M 维数相同的矩阵,每个分量与标量相乘

7.1.6 矩阵乘法

A(rA×cAr_A\times c_A)、B(rB×cBr_B\times c_B) 两矩阵可以相乘的条件

  • cAc_A (A 的列数) 等于 rBr_B (B 的行数)

结果是行数为 rAr_A 列数为 cBc_B 的矩阵

将 AB 记为 C,C 的任意元素 CijC_{ij} 等于 A 的第 i 行向量与 B 的第 j 列向量点乘的结果

对于在几何中的应用,我们特别关注方阵的相乘——特别是 2x2 矩阵和 3x3 矩阵

注意:

  • 任意矩阵 M 乘以方阵 S(满足相乘前提),无论是左乘还是右乘,都将得到与原矩阵 M 大小相同的矩阵

  • 矩阵乘法不满足交换律。ABBAAB\neq BA

  • 矩阵乘法满足结合律。(AB)C=A(BC)(AB)C=A(BC)

  • 矩阵乘法也满足与标量或向量的结合律

    (kA)B=k(AB)=A(kB)(kA)B=k(AB)=A(kB)

    (vA)B=v(AB)(vA)B=v(AB)

  • 矩阵积的转置相当于先转置矩阵然后以相反的顺序乘。(AB)T=BTAT(AB)^T=B^TA^T

7.1.7 向量与矩阵的乘法

因向量可被当作一行或一列的矩阵,所以能与矩阵相乘

  • 行向量不能右乘矩阵,列向量不能左乘矩阵
  • 矩阵与向量的乘法满足对向量加法的分配律。(v+w)M=vM+wM(v+w)M=vM+wM

7.1.8 行向量与列向量

看看行向量左乘矩阵与列向量右乘矩阵的结果

各分量的值是完全不同的!!

本书中仅在行向量与列向量区别不那么重要时使用列向量,否则使用行向量

有多条理由支持我们使用行向量而不是列向量:

  • 在文字中的形式会更好一些
  • 当讨论怎样用矩阵乘法实现坐标系转换时,向量左乘矩阵的形式更方便。如用矩阵 ABC 转换向量 v,用行向量记法记作 vABC。若用列向量的话,则会记作 CBAv
  • DirectX 使用的是行向量

7.2 矩阵——几何解释

7.2.1 矩阵是怎样变换向量的

有向量 v=[x, y, z] ,分别将 p,g 和 r 定义为指向 +x,+y 和 +z 方向的单位向量

v=xp+yq+zrv=xp+yq+zr

现在向量 v 就被表示成向量 p,q,r 的线性变换了。它们称作基向量,以它们为行构建一个 3×33\times 3 矩阵 M

M=[pqr]=[pxpypzqxqyqzrxryrz]M=\begin{bmatrix}p\\q\\r\end{bmatrix} =\begin{bmatrix} p_x&p_y&p_z \\ q_x&q_y&q_z \\ r_x&r_y&r_z \\ \end{bmatrix}

用一个向量乘以该矩阵

这和前面计算转换后的 v 的等式相同。我们发现关键点是:

如果把矩阵的行解释为坐标系的基向量,那么乘以该矩阵就相当于执行了一次坐标转换。若有 aM=b,我们就可以说,M将a转换到 b

从这一点看,术语“转换”和“乘法”是等价的

7.2.2 矩阵的形式

矩阵表达坐标转换,当我们观察矩阵时,其实是在观察转换,观察新的坐标系。但这个转换看起来像什么?特定的 3D 转换和矩阵之间有什么关系?

先看一下基向量乘以任意矩阵 M 时的情况

关键发现:

矩阵的每一行都能解释为转换后的基向量

这个强有力的概念有两条重要性质:

  • 有了一种简单的方法来形象化解释矩阵所代表的变换
  • 有了反向建立矩阵的可能

7.2.3 总结

本节主要概念:

  • 方阵的行能被解释为坐标系的基向量
  • 为了将向量从原坐标系变换到新坐标系,用它乘以一个矩阵
  • 从原坐标系到这些基向量定义的新坐标系的变换是一种线性变换
  • 零向量乘以任何矩阵仍然得到零向量
  • 可以通过想象变换后的坐标系的基向量来想象矩阵