《3D图形的数学》第1章笔记 向量
对于成功的3D程序猿,掌握如何进行向量运算是一种基本的技能要求。
原书:《3D游戏与计算机图形学中的数学方法》 by Eric.Lengyel
1 向量的形式
一个n维向量V可以表示为:
系数a和向量V的乘积可以定义为:
向量加减运算:
【定理1.1】对于给定的任何两个系数a和b,以及任何三个向量P、Q和R,有以下运算规律:
- \(\textbf{P} + \textbf{Q} = \textbf{Q} + \textbf{P}\)
- \((\textbf{P} + \textbf{Q}) + \textbf{R} = \textbf{P} + (\textbf{Q} + \textbf{R})\)
- \((ab)\textbf{P} = a(b\textbf{P})\)
- \(a(\textbf{P} + \textbf{Q}) = a\textbf{P} + a\textbf{Q}\)
- \((a + b)\textbf{P} = a\textbf{P} + b\textbf{P}\)
n维向量V的模,||V||:
模也称为向量的范数或者长度,模为1的向量称为单位向量。
设向量V表示一个三维点或方向,则公式(1.6)可以展开为:
如果向量V至少有至少有一个非零分量,可以通过乘 \(1/\textbf{||V||}\) 得到V方向上的一个单位向量,也叫做单位化、规格化。
【定理1.2】 对于任意给定系数a,任意的两个向量P和Q,有以下性质:
- \( \textbf{||P||} \geq 0 \)
- 当且仅当 \( \textbf{||P||}=<0, 0, …, 0> \)时,\( \textbf{||P||}=0 \)
- \( \textbf{||aP||}=|a|\textbf{||P||} \)
- \( \textbf{||P + Q||} \leq \textbf{||P||} + \textbf{||Q||} \)
其中的第4条,可以由三角不等式得到。
2 点积
向量间的点积,也叫做数量积或内积,3D图形中经常用点积来度量两个向量指向的差异。
【定理1.3】 两个n维向量P和Q的点积,记作P·Q,即:
向量的点积等于两个向量的对应分量乘积之和。
在三维空间中,有:
【定理1.4】 对于给定的两个向量P和Q,点积满足公式:
\(\alpha\)是向量P和Q之间的夹角(详细的说是P和Q的起点、终点决定的平面夹角)。
Tips:定理1.4的证明要用到余弦定理,一个三角形有三条边\(a,b,c\),\(a,b\)夹角是\(\alpha\)时,三边满足等式关系\(c^{2} = a^{2} + b^{2} - 2abcos\alpha\)。
定理1.4可以得出两个结论:
- 当且仅当 \(\textbf{P} \cdot \textbf{Q} = 0\) 时, 向量P和向量Q相互垂直。点积为0的向量称为正交向量,零向量和任意向量正交;
- 点积正负号说明两个向量的方向情况,例如在看平面法线和平面外一点,可以查看点相对于平面的位置,是在法线同侧(点积为正)还是在不同侧(点积为负)。
【定理1.5】 对于任意给定系数a,任意的两个向量P和Q,有以下性质:
- \( \textbf{P} \cdot \textbf{Q} = \textbf{Q} \cdot \textbf{P} \)
- \( (a\textbf{P}) \cdot \textbf{Q} = a(\textbf{P} \cdot \textbf{Q}) \)
- \( \textbf{P} \cdot (\textbf{Q} + \textbf{R}) = \textbf{P} \cdot \textbf{Q} + \textbf{P} \cdot \textbf{R} \)
- \( \textbf{P} \cdot \textbf{P} = \textbf{||P||}^{2} \)
- \( | \textbf{P} \cdot \textbf{Q} | \leq \textbf{||P||} \cdot \textbf{||Q||} \)
向量P在向量Q上的投影长度:
如果再乘以单位向量 \( \frac{\textbf{Q}}{\textbf{||Q||}} \),就可以得到具有该长度并且平行于Q的一个向量,即表示向量P到向量Q的投影,记作\( proj_{\textbf{Q}} \textbf{P} \):
P到Q的投影也可以看作是一个线性变换过程,所以可以表示为矩阵和向量乘积,三维情况下,\( proj_{\textbf{Q}} \textbf{P} \) 也可以用下面的公式计算:
向量P相对于向量Q的垂直分量记作\( perp_{\textbf{Q}} \textbf{P} \),可以用向量P减去投影分量得到垂直分量:
3 叉积
两个三维向量的叉积又称为向量积,结果是一个新的向量,这个向量垂直于原来的两个向量。
在3D图形学中,已知曲面上一点的两个不同方向的切向量,就可以通过求叉积得到曲面在该点的法向量。
【定义1.6】 两个3D向量P和Q的叉积记作 \(\textbf{P} \times \textbf{Q}\),结果向量为:
便于记忆的一个工具是伪行列式:
这里i,j,k是x,y,z轴的单位向量:
叉积\(\textbf{P} \times \textbf{Q}\)也可以用线性变换的形式表示,变换矩阵派生于P,作用于Q:
Tips:原书P7的公式(1.25)有疏漏,变换矩阵中出现了Q的分量。
对于任意给定的三个3D向量P、Q和R,等式 \((\textbf{P} \times \textbf{Q}) \cdot \textbf{R}\) 的值可以通过伪行列式乘以R得到:
Tips:行列式表达我在这里书写了两种表达形式,第一种是延续之前伪行列式的写法,只是将R替代了ijk的位置,第二种写法来自于书上,遵循PQR的出现次序的记忆法,两者的值根据初等变化法则是相等的。
如果P、Q和R中任何一个可以表示为其他两个向量的线性组合,则行列式的值为0(根据垂直法则和点积定理推导)。
【定理1.8】 对于给定的两个3D向量P和Q,叉积\(\textbf{P} \times \textbf{Q}\)满足下面公式:
\(\alpha\)为P和Q的夹角。
由定理1.8可知,叉积\(\textbf{P} \times \textbf{Q}\)的模等于由向量P和Q组成的平行四边形的面积。因此,一个三角形的顶点\(V_{1}, V_{2}, V_{3}\),可以计算其面积A:
叉积得到的非零向量一定垂直于原本的两个向量,但满足要求的有两种方向,为了确定叉积方向,引入叉积遵循的右手法则。例如,使用右手手指指向P方向,手心朝向Q反向,则大拇指就是叉积\(\textbf{P} \times \textbf{Q}\)的方向。
空间轴的单位向量ijk,按照圆形循环的方式排序,i在j之前,j在k之前,k在i之前,则这样的顺序叉积乘等于第三个向量:
反之,按照相反的顺序相接的叉乘等于第三个向量的负值。
【定理1.9】 对于给定系数a,b和任意三个3D向量P、Q和R,有以下性质:
- \( \textbf{P} \times \textbf{Q} = - (\textbf{Q} \times \textbf{P}) \)
- \( (a\textbf{P}) \times \textbf{Q} = a(\textbf{P} \times \textbf{Q}) \)
- \( \textbf{P} \times (\textbf{Q} + \textbf{R}) = \textbf{P} \times \textbf{Q} + \textbf{P} \times \textbf{R} \)
- \( \textbf{P} \times \textbf{P} = \textbf{0} = <0, 0, 0> \)
- \( (\textbf{P} \times \textbf{Q}) \cdot \textbf{R} = (\textbf{R} \times \textbf{P}) \cdot \textbf{Q} = (\textbf{Q} \times \textbf{R}) \cdot \textbf{P} \) (注意顺序,满足圆形循环)
- \( \textbf{P} \times (\textbf{Q} \times \textbf{P}) = \textbf{P} \times \textbf{Q} \times \textbf{P} = \textbf{P}^{2}\textbf{Q} - (\textbf{P} \cdot \textbf{Q}) \textbf{P} \)
前五条都比较容易证明,稍微说一下最后一条的证明方式:
后面的具体计算式,是通过对三个分量分别求值得到的结果,不再赘述。
由定理1.9可以得到 叉积不满足交换律和结合律。
4 向量空间
【定理1.10】 向量空间是一个集合V,元素成为向量,下面定义向量空间中的加法和乘数,并介绍一些性质:
- V对于加法运算封闭;
- V对于乘数运算封闭;
- V中存在一个零元素 \(\textbf{0}\);
- V中任意向量P存在向量Q使其 \( \textbf{P} + \textbf{Q} = \textbf{0}\);
- 加法满足结合律;
- 乘数满足结合律;
- 乘数对于加法满足分配率,\( a(\textbf{P} + \textbf{Q}) = a\textbf{P} + a\textbf{Q}\);
- 系数加法对于乘数满足分配率,\( (a + b)\textbf{P} = a\textbf{P} + b\textbf{P}\)。
将由n元组组成的向量空间记作 \(R^{n}\),比如三维的向量空间记作\(R^{3}\)。
每一个向量空间都可以由一组向量的线性组合来生成,生成向量空间的向量组成为基。
【定义1.11】 对于一组向量 {\( \textbf{e}_{1}, \textbf{e}_{2}, …, \textbf{e}_{n} \)},如果不存在这样一组实数 {\(a_{1}, a_{2}, …, a_{n}\)},其中至少有一个 \(a_{i}\) 不为0,使得下式成立:
则称这组向量线性无关,否则称向量组线性相关。
一个n维向量空间可以由n个线性无关的向量组成的向量集合生成,这个向量组成为基。
【定义1.12】 向量空间V的基B是一个由n个线性无关的向量组成的集合,即 \(\textbf{B}\)={\(\textbf{e}_{1}, \textbf{e}_{2}, …, \textbf{e}_{n} \)},对于向量空间V中的任意一个元素P,都存在一组实数使得:
任意空间向量\(R^{n}\)都具有无限个基,对基的形式进行一些限定后,可以使基具有特定的性质。
【定义1.13】 对于向量空间的基\(\textbf{B}\)={\(\textbf{e}_{1}, \textbf{e}_{2}, …, \textbf{e}_{n} \)},如果对于任意 \(i \neq j\) 都有 \(\textbf{e}_{i} \cdot \textbf{e}_{j} = 0\),则该基为正交基。
【定理1.14】 对于给定的两个向量 \(\textbf{e}_{1}\) 和 \(\textbf{e}_{2}\), 如果\(\textbf{e}_{1} \cdot \textbf{e}_{2} = 0\),则\(\textbf{e}_{1}\) 和 \(\textbf{e}_{2}\)线性无关。
对基的另一个形式限定就是基的所有向量都具有单位长度(更简单化了),引入Kronecker delta符号 \(\delta_{ij}\),定义如下:
【定理1.15】 如果对于每一对 \((i, j)\) 有 \(\textbf{e}_{i} \cdot \textbf{e}_{j} = \delta_{ij}\),则基 \(\beta\)={\(\textbf{e}_{1}, \textbf{e}_{2}, …, \textbf{e}_{n} \)}称为向量空间的正交规范基。
显然向量组{\(\textbf{i}, \textbf{j}, \textbf{k}\)}是\(R^{3}\)的一个正交规范基。
有一个方法可以将具有n个线性无关向量的向量组转换为向量空间\(R^{n}\)的正交基,基本思想是减去向量在前面每个向量上的投影,结果肯定和前面所有的向量正交。
【定理1.16】 Gram-Schmidt 正交规范化: 对于由n个线性无关想了组成的向量组\(\textbf{B}\)={\(\textbf{e}_{1}, \textbf{e}_{2}, …, \textbf{e}_{n} \)},算法可以产生向量组\(\beta\)={\(\textbf{e}_{1}^{‘}, \textbf{e}_{2}^{‘}, …, \textbf{e}_{n}^{‘} \)},当 \(i \neq j\)时,\(\textbf{e}_{i}^{i} \cdot \textbf{e}_{j}^{i} = 0\)。
- 设 \(\textbf{e}_{1}^{‘} = \textbf{e}_{1}\);
- 从i=2开始;
- 从\(\textbf{e}_{i}\)中减去\(\textbf{e}_{i}\)在向量\(\textbf{e}_{1}^{‘}, \textbf{e}_{2}^{‘}, …, \textbf{e}_{i-1}^{‘} \)上地投影,结果为\(\textbf{e}_{i}^{‘}\),即
- 如果i < n,i加1,重复步骤3。
- 如果需要进一步生成正交规范基,就对每个\(\textbf{e}_{i}^{‘}\)进行规范化。
《3D图形的数学》第1章笔记 向量