A point is that which has no part.
A line is a breadthless length.
The extremities of a line are points.
A straight line is a line which lies evenly with the points on itself.*
—The first four definitions from Elements by Euclid [320]
本部分内容主要讲解计算机图形学中大量使用的线性代数的基本概念。我们讲述的方式不会像一般的线性代数书籍那样描述一些抽象的数学,而是重点关注与计算机图形学最相关的内容。对于那么没有深入学习线性代数的读者,这部分内容可以作为一个简单的介绍,而对于已经完全掌握线性代数的读者,也可以作为复习。
在第一节我们将会介绍欧几里得空间。一开始可能会觉得很抽象,但是在该节之后,我们会讨论与之关联的几何应用,向量基和矩阵概念。因此咬牙坚持学完第一节的内容,在附录的其他章节以及本书的大部分章节中你将到收获更多的回报。
如果你对本书中使用的数学记号不太熟悉,请查看第一章1.2节。
表示 n 维实时的欧几里得空间的记号为 Rn 。在该空间中,向量 v 是一个 n 元组,即一个实数的有序列表:
注:该有序列表的下标从 0 开始,到 n−1 结束,这种编号方式与大部分编程语言,如C和C++的数组索引下标相同。因此可以简单的把公式转换成代码。在某些计算机图形和线性代数书籍中该下标值从 1 到 n 。
该向量也可以使用一种行向量的形式表示,但是大多数计算图形书籍中都是使用列向量,称为列主向量形式。我们可以把 v0,…,vn−1 称为向量 v 的元素,系数或分量。所有小写粗体字母表示位于 Rn 空间的向量,而小写斜体字母表示 R 空间的标量。例如,一个二维的向量可以表示为 v=(v0,v1)T∈R2 。位于欧几里得空间的向量可以执行两种运算,加法和标量乘法,这两种运算过程与我们预期的一样,分别对应于公式A.2和A.3:
其中记号“ ∈R ”表示执行加法和标量乘法运算的向量位于同一个空间中。从上面的公式中可以看出,向量加法是对逐个分量相加,向量与标量的乘法是对向量的每一个元素与标量 a 相乘。
欧几里得空间运算具有一系列的定律。在欧几里得空间的向量加法运算与预期的一样,具有交换律和结合律:
注:实际上这些定律就是欧几里得空间的定义。
在欧几里得空间中有一个唯一的向量称为零向量, 0=(0,0,⋯,0) ,向量中每一个元素都为0,并具有如下的性质:
另外还有一个相反向量 −v=(−v0,−v1,…,−vn−1) ,具有如下性质:
向量与标量的乘法运算具有以下性质定律:
在欧几里得空间中,我们可能还会计算两个向量 u 和 v 的点积。点积的表示为 u⋅v ,定义如下:
注:点积也称为内积或标量积
点积具有如下性质定律:
点积的最后一个定理公式表示,如果两个向量的点积为0,那么这两个向量互相垂直(正交)。一个向量范数可以表示为记号 ∥u∥ ,这是一个非负数值,可以使用以下的点积表达式运算得到:
这一节,我们开始讲解向量(上一节)的几何意义。首先,我们需要介绍向量的线性无关和向量基的概念。
注:线性无关和向量基的概念与任何几何空间无关。
如下所示:
例如,向量 u0=(4,3) 和 u1=(8,6) 是线性相关的,因为在 v0=2 和 v1=−1 的情况下公式A.12成立。只有相互平行的向量才是线性相关的。
如果一组向量 u0,⋯,un1∈Rn 是线性无关的,并且任意的向量 v∈Rn 可以表示为
例如,向量 u0=(4,3) 和 u1=(2,6) 构成了一个线性无关基。在这个二维空间 R2 中,任何向量都可以由这两个向量唯一的组合表示。比如,向量 (−5,−6) 可以由 v0=−1 和 v1=−0.5 描述,并且只有这一种组合方式。
要完整定义一个向量 v ,我们需要使用公式A.13,即要同时使用向量的分量 vi 和向量基 ui 。但是这种方法通常是不实用的,因此在所有的向量都使用相同的基向量时可以在数学操作中操作基向量。在这种情况下,向量 v 可以描述为:
注:这种映射方式在数学中称为同构
如图A.1所示,阐述了一个三维向量对应的几何形式。
图A.1 使用 R3 中的向量基 u0,u1,u2 表示的一个三维向量 v=(v0,v1,v2) 。注意这是一个右手坐标系。
一个向量 v 可以代表一个坐标点,或一个带有方向的线段(限方向向量)。在A.1节向量的所有定律在几何向量中同样适用。例如,公式A.2中的加法和标量乘法运算如图A.2所示。另外,一组基向量也具有不同的“左右手坐标系”。使用右手系表示一个三维的基向量, x 轴沿着拇指方向, y 轴沿着食指方向,而 z 轴则沿着中指方向。如果使用左手进行笔划,就会得到一个左手系基向量。请查阅901页了解更多左右手系的定义形式。
图A.2 左边两幅图中显示了向量与向量的加法运算。这种方法称为三角形法则(head-to-tail定理)和平行四边形法则。最右边的两幅图分别表示使用一个正值 a 和一个负值 −a 执行标量-向量乘法运算。
一个向量的范数(见公式A.10)可以看成是向量的长度。比如,一个二维向量 u 的长度为 ∥u∥=u20+u21−−−−−−√ ,这是基于Pythagorean theorem(毕达哥拉斯定理)。要创建一个单位向量,即向量长度为1,需要对向量执行规范化。这是通过除以向量的长度进行计算的: q=1∥p∥p ,其中 q 就是规范化向量,也称为单位向量。
对于 R2 和 R3 ,二维和三维向量空间,也可以使用以下的公式表示点积,这与公式A.8相等:
图A.3 左图中显示了几何向量的点积运算的符号。右图中显示了正交投影的几何表示,其中向量 u 正交(垂直)投影到向量 v ,产生了向量 w 。
现在我们再回过头来讨论向量基,并介绍一种特殊的标准正交基。对于标准正交基,组成该基的向量组 u0,⋯,un−1 必须要具有如下性质:
设向量 p=(p0,⋯,pn−1) ,那么对于标准正交基的情况还可以表示为 pi=p⋅ui 。意思是,如果有一个向量$mathbf{p}和一个基(基向量组分别为 u0,⋯,un−1 ),那么通过把向量$mathbf{p}与每一个基向量简单地执行点积运算,就可以得到该向量的每一个元素值。最常用的向量基是标准基,其中基向量表示为 ei 。第 i 个基向量除了第 i 个位置的元素值为1外其他的元素值全为0。对于三维的标准基,对应的基向量分别为 e=(1,0,0),e1=(0,1,0),e2=(0,0,1) 。另外,我们还可以把这三个向量表示为 ex,ey,ez ,这就是我们平常所用的 x,y 和 z$ 轴。
点积运算的一个非常有用的特点是计算一个向量在另一个向量上的正交投影。如图A.3所示,右图中向量 u 在向量 v 上的正交投影(向量)为 w 。
对于任意的向量 u 和向量 v ,可以使用如下公式计算向量 w :
叉积也称为向量积,叉积与前面介绍的点积是向量中的两个非常重要的运算操作。
在 R3 中,向量 u 和向量 u 的叉积可以使用一个唯一的向量 w 表示为 w=u×v ,并具有以下性质:
图A.4 向量叉积的几何表示。
从该定义中可以得出,当且仅当 u∥v (即向量 u 与向量 v 平行)时, u×v=0 ,此时 sinϕ=0 。与其他运算操作一样,点积运算也具有以下运算律: