浏览量:275

1.1. 向量

本篇文章禁止用于任何商业目的,版权申明、版本说明等见《前言》。

PDF文档和源码下载地址:https://github.com/twinklingstar20/Programmers_Computational_Geometry

1.1. 向量

向量是计算机图形几何学中的一个基本概念,它的地位是不容忽视的,例如,物体的坐标、运动轨迹等都可以用向量来表示。本节会介绍向量定义,基本的线性运算,点积,叉积,以及向量空间上的一些重要概念。

1.1.1. 定义

向量是计算几何中的基本概念,指一个同时具有大小和方向的几何对象。直观上,向量通常被标示为一个带箭头的线段如图1.1所示,线段的长度可以表示向量的大小,向量的方向也就是箭头所指的方向。可以用一个多元组来表示一个向量,\(n\)个有次序的数\({x_1},\)\({x_2}, \cdots ,{x_n}\)所组成的数组称为n维向量,这\(n\)个数称为该向量的\(n\)个分量,第\(i\)个数\({x_i}\)称为第\(i\)个分量,如等式(1.1)所示。向量的大小称为模长,如等式(1.2)所示。

\[\vec u = ({x_1},{x_2},...,{x_n}) \tag{1.1}\]

\[\left\| {\vec u} \right\| = \sqrt {\sum\limits_{i = 1}^n {x_i^2} } \tag{1.2}\]

2015-3-21 13-56-39

图1.1 向量表示

\(n\)维向量可以写成一行,称为行向量;\(n\)维向量写成一列,称为列向量。分别如等式(1.1)和(1.3)所示,行向量和列向量总被看成是两个相同的向量。设\(n\)维的行向量是\(\vec u\),它的列向量可以表示为\({\vec u^T}\),反之也是可以的。

\[\vec v = \left( {\begin{array}{*{20}{c}}{{y_1}}\\{{y_2}}\\ \vdots \\{{y_n}}\end{array}} \right) \tag{1.3}\]

与数字一样,一个向量中也有反向量、零向量、等向量等。若一个向量与它的大小相同,但方向相反,则称它为反向量,一般记作\( - \vec v\)。如果向量\(\vec a\)是向量\(\vec b\)的反向量,那么\(\vec b\)也是\(\vec a\)的反向量。若一个向量的始点与终点重合,也就是重合点的向量,即\(\vec 0 = \overrightarrow {AA} = \overrightarrow {BB} \),则称它为零向量。零向量具有方向性,但方向不定。若两个向量长度、方向相等,即为等向量,缺一不可。规定长度为1的向量为单位向量,可以把一个非零向量归一化为一个单位向量,如等式(1.4)所示。

\[\hat u = \frac{{\vec u}}{{\left\| {\vec u} \right\|}} \tag{1.4}\]

1.1.2. 线性运算

1. 向量加减法

向量的加法满足平行四边形法则和三角形法则。具体地,两个矢量\(\vec a\)\(\vec b\)相加,得到的是另一个向量。这个向量可以表示为\(\vec a\)\(\vec b\)的起点重合后,以它们为邻边构成的平行四边形的一条对角线,或者表示为将\(\vec a\)的终点和\(\vec b\)的起点重合后,从\(\vec a\)的起点指向\(\vec b\)的终点的向量,如图1.2所示,图(a)是平行四边法法则,图(b)是三角形法则。

2015-3-21 14-04-24

图1.2 向量加法,(a)平行四边形法则,(b)三角形法则

2015-3-21 14-04-34

图1.3 多个向量的加法

当多个向量相加时,例如求\(k\)个向量\({\vec v_1},{\vec v_2},...,{\vec v_k}\)相加得到的向量,这个向量可以表示为将第\(i\left( {i{\rm{ }} < {\rm{ }}k} \right)\)个向量的起点和第\(i + 1\)个向量的终点重合后,从\({\vec v_1}\)的起点指向\({\vec v_1},{\vec v_2},...,{\vec v_k}\)的终点的向量,如图1.3所示。

2015-3-21 14-04-41

图1.4 向量减法

两个向量\(\vec a\)\(\vec b\)的相减,则可以看成是向量\(\vec a\)加上一个与\(\vec b\)大小相等,方向相反的向量。或者,\(\vec a\)\(\vec b\)的相减得到的向量可以表示为\(\vec a\)\(\vec b\)的起点重合后,从\(\vec b\)的终点指向\(\vec a\)的终点的向量,如图1.4所示。

2.  向量数乘

一个标量\(k\)和一个向量\(\vec v\)之间可以做乘法,得出的结果是另一个与\(\vec v\)方向相同或相反,大小是\(\vec v\)的大小的\(\left| k \right|\)倍的向量,可以记成\(k\vec v\)。-1乘以任意向量会得到它的反向量,0乘以任何向量都会得到零矢量\(\vec 0\)。如图1.5所示,标量2与向量\(\vec v\)的数乘,得到\(2\vec v\),方向与\(\vec v\)相同,大小是它的两倍。

2015-3-21 14-21-38

图1.5 向量数乘

3. 向量加减法和数乘的性质

向量加法和数乘称为是向量的线性运算,它满足下列运算规则(设\(\vec a,\vec b,\vec c\)都是\(n\)维向量向量):

  1. 交换律:              \(\vec a + \vec b = \vec b + \vec a\)
  2. 结合律:              \((\vec a + \vec b) + \vec c = \vec a + (\vec b + \vec c)\)
  3. 有零元:              \(\vec a + \vec 0 = \vec a\)
  4. 有负元:              \(\vec a + ( - \vec a) = \vec 0\)
  5. \(1\vec a = \vec a\)
  6. \(\lambda (\mu \vec a) = (\lambda \mu )\vec a = \mu (\lambda )\vec a\)
  7. \(\lambda (\vec a + \vec b) = \lambda \vec a + \lambda \vec b\)
  8. \((\lambda + \mu )\vec a = \lambda \vec a + \mu \vec a\)

1.1.3. 点积

点积通常又称为数量积以及内积,是接受在实数\(R\)上的两个向量并返回一个实数标量的二元运算,两个向量的点积写作\(\vec a \cdot \vec b\)

两个向量\(\vec a = ({a_1},{a_2},...,{a_n})\)\(\vec b = ({b_1},{b_2},...,{b_n})\)的点积定义为:

\(\vec a \cdot \vec b = \sum\limits_{i = 1}^n {{a_i}{b_i}} = {a_1}{b_1} + {a_2}{b_2},...,{a_n}{b_n} \tag{1.5}\)

例如,两个三维向量(1,3,2)和(-1,3,4)的点积是

\[\left( {1,3,2} \right) \cdot \left( { - 1,3,4} \right) = (1)( - 1) + (3)(3) + (2)(4) = 16\]

点积满足下列的性质(设\(\vec a,\vec b,\vec c\)都是\(n\)维向量):

  1. 满足交换律:              \(\vec a \cdot \vec b = \vec b \cdot \vec a\)
  2. 满足分配律:              \(\vec a \cdot (\vec b + \vec c) = \vec a \cdot \vec b + \vec a \cdot \vec c\)
  3. 双线性:                     \(\vec a \cdot (\lambda \vec b + \vec c) = \lambda (\vec a \cdot \vec b) + (\vec a \cdot \vec c)\)
  4. 乘以标量时满足:       \((\lambda \vec a) \cdot (\mu \vec b) = (\lambda \mu )(\vec a \cdot \vec b)\)
  5. 正定性:                     \(\forall \vec a \ne \vec 0,\vec a \cdot \vec a \succ 0\)

从几何解释来理解点积,如图1.6所示,它可以直观地定义为

\[\vec a \cdot \vec b = \left\| {\vec a} \right\| \cdot \left\| {\vec b} \right\|\cos \theta \tag{1.6}\]

其中,\(\theta \)表示向量\(\vec a\)\(\vec b\)之间的角度。

2015-3-21 14-22-02

图1.6 向量的点积

若两个向量\(\vec a\)\(\vec b\)是单位长度,它们的点积就是它们的夹角的余弦。若给定两个向量,它们之间的夹角可以通过下列公式得到:

\[\cos \theta = \frac{{\vec a \cdot \vec b}}{{\left\| {\vec a} \right\| \cdot \left\| {\vec b} \right\|}} \tag{1.7}\]

因此有,两个非零向量\(\vec a\)\(\vec b\)是垂直的,当且仅当\(\vec a \cdot \vec b = 0\)

点积运算不服从消去律,不像数的乘法一样,如果\(ab = ac,a \ne 0\),则有b=c。而对于点积来说,如果\(\vec a \cdot \vec b = \vec a \cdot \vec c,\vec a \ne \vec 0\),则通过移项和点积分配律可得\(\vec a \cdot (\vec b - \vec c) = 0\)。至此,可以得出下列至少一条结论成立:(1)向量\(\vec a\)与向量\((\vec b - \vec c)\)垂直;(2)向量\((\vec b - \vec c)\)是零向量,则有\(\vec b = \vec c\)

2015-3-21 14-27-00

图1.7 向量\(\vec a\)到单位向量\(\vec b\)上的投影,(a)方向相同,(b)方向相反

如果向量\(\vec b\)是单位向量,则点积\(\vec a \cdot \vec b\)给出\(\vec a\)在方向\(\vec b\)上投影的大小,如果方向相反,则带有负号,如图1.7所示。

1.1.4. 叉积

叉积是一种向量的二元运算符,与点积不同,它的运算结果还是一个向量而不是一个标量(二维叉积除外),叉积也称为叉乘、外积或者向量积,两个向量的叉积写作\(\vec a \times \vec b\)。在图形学几何上的应用,只考虑二维和三维情况下的向量叉积。

对于二维向量来说,叉积的定义是:

\[\vec a \times \vec b = ({a_1},{a_2}) \times ({b_1},{b_2}) = \left| {\begin{array}{*{20}{c}}{{a_1}}&{{a_2}}\\{{b_1}}&{{b_2}}\end{array}} \right| = {a_1}{b_2} - {a_2}{b_1} \tag{1.8}\]

二维向量叉积是一种特殊情况,它的结果是一个标量而非向量,从几何上定义为:

\[\vec a \times \vec b = \left\| {\vec a} \right\| \cdot \left\| {\vec b} \right\|\sin \theta \tag{1.9}\]

其中,\(\theta \)表示向量\(\vec a\)\(\vec b\)之间逆时针方向的夹角大小。

2015-3-21 14-44-29

图1.8 平面四边形的面积

因此,二维向量叉积的结果是以\(\vec a\)\(\vec b\)为边的平行四边形的面积,如图1.8所示。叉积的顺序影响结果的正负号,如果置换叉积的顺序,即\(\vec b \times \vec a\),那么结果是一个负数。

2015-3-21 14-44-38

图1.9 点与直线位置关系的判定

叉积还可以用在判断点与直线的位置关系上,设直线可以表示为\(P + t\vec d\),待判定点是\(Q\)。若有\(\vec d \times (Q - P) \succ 0\),则点\(Q\)在直线的逆时针方向上;若有\(\vec d \times (Q - P) = 0\),则点\(Q\)在直线上;若有\(\vec d \times (Q - P) \prec 0\),则点\(Q\)在直线的顺时针方向上。如图1.9所示,\({Q_0},{Q_1}\)\({Q_2}\)分别在直线的逆时针方向上,顺时针方向上和直线上。

对于三维向量来说,设直角坐标系的三个单位向量分别是\(\vec i,\vec j,\vec k\),满足等式:\(\vec i \times \vec j = \vec k\),\(\vec j \times \vec k = \vec i,\vec k \times \vec i = \vec j\)。通过这些规则,两个向量的叉积的坐标可以用很方便的方法计算出来,设\(\vec a = {a_1}\vec i + {a_2}\vec j + {a_3}\vec k,\vec b = {b_1}\vec i + {b_2}\vec j + {b_3}\vec k\),则向量\(\vec a\)\(\vec b\)叉积可以表示成矩阵的行列式:

\[\vec a \times \vec b = \left| {\begin{array}{*{20}{c}}{\vec i}&{\vec j}&{\vec k}\\{{a_1}}&{{a_2}}&{{a_3}}\\{{b_1}}&{{b_2}}&{{b_3}}\end{array}} \right| = ({a_2}{b_3} - {a_3}{b_2})\vec i + ({a_3}{b_1} - {a_1}{b_3})\vec j + ({a_1}{b_2} - {a_2}{b_1})\vec k \tag{1.10}\]

三维向量叉积的结果是一个三维的向量,它的几何定义如下所示:

\[\vec a \times \vec b = \left( {\left\| {\vec a} \right\| \cdot \left\| {\vec b} \right\|\sin \theta } \right)\vec n \tag{1.11}\]

其中,\(\theta \)表示向量\(\vec a\)\(\vec b\)之间的大小,\(\vec n\)是一个与\(\vec a\)\(\vec b\)所构成的平面垂直的单位向量。

2015-3-21 14-44-46

图1.10 右手法则

三维叉积的模长\(\left\| {\vec a \times \vec b} \right\|\)可以解释成以\(\vec a\)\(\vec b\)为边的平行四边形的面积,法向量\(\vec n\)的方向遵守右手法则,如图1.10所示。

叉积满足下列性质(设\(\vec a,\vec b,\vec c\)都是三个三维向量,\(\lambda ,\mu \)为任意实数):

  1. 反交换律:                    \(\vec a \times \vec b = - \vec b \times \vec a\)
  2. 加法分配律:              \(\vec a \times (\vec b + \vec c) = \vec a \times \vec b + \vec a \times \vec c\)
  3. 与标量乘法兼容:       \((\lambda \vec a) \times \vec b = \vec a \times (\lambda \vec b) = \lambda (\vec a \times \vec b)\)
  4. 不满足结合律,但满足雅可比恒等式:\(\vec a \times (\vec b \times \vec c) + \vec b \times (\vec c \times \vec a) + \vec c \times (\vec a \times \vec b) = \vec 0\)
  5. 若两个非零向量\(\vec a\)\(\vec b\)平行,当且仅当\(\vec a \times \vec b = \vec 0\)
  6. 拉格朗日公式:\(\vec a \times (\vec b \times \vec c) = \vec b(\vec a \cdot \vec c) - \vec c(\vec a \cdot \vec b)\),可以简单的记为“BAC – CAB”。

1.1.5. 向量空间

\(V\)\(n\)维向量的集合,如果集合\(V\)非空,且集合\(V\)对于向量的加法和数乘两种运算封闭,即

1)    如果\(\vec a \in V,\vec b \in V\),那么\(\vec a + \vec b \in V\)

2)    如果\(\vec a \in V,\lambda \)是任意实数,那么\(\lambda \vec a \in V\)

则称\(V\)向量空间,也称为线性空间

\({\vec a_1},{\vec a_2},...,{\vec a_m},\vec b\)是一个\(n\)维向量组,若存在一组实数\({\lambda _1},{\lambda _2},...,{\lambda _m}\),使得

\[\vec b = {\lambda _1}{\vec a_1} + {\lambda _2}{\vec a_2} + ... + {\lambda _m}{\vec a_m} \tag{1.12}\]

则称向量\(\vec b\)可由向量组\({\vec a_1},{\vec a_2},...,{\vec a_m}\)线性表示,或称向量\(\vec b\)是向量组\({\vec a_1},{\vec a_2},...,{\vec a_m}\)线性组合。例如,向量\({\vec a_1} = (1,2,3),{\vec a_2} = ( - 4,1, - 6)\),向量\(\vec b = ( - 2,5,0) = 2{\vec a_1} + {\vec a_2}\),则称\(\vec b\)\({\vec a_1},{\vec a_2}\)的线性组合。

对于向量组\({\vec a_1},{\vec a_2},...,{\vec a_m}\),若存在不全为零的数\({\lambda _1},{\lambda _2},...,{\lambda _m}\),使得\({\lambda _1}{\vec a_1} + {\lambda _2}{\vec a_2} + ... + \)\(.{\lambda _m}{\vec a_m} = \vec 0\),则称该向量组为线性相关

对于向量组\({\vec a_1},{\vec a_2},...,{\vec a_m}\),若仅当\({\lambda _1} = 0,{\lambda _2} = 0,...,{\lambda _m} = 0\)时,使得\({\lambda _1}{\vec a_1} + {\lambda _2}{\vec a_2} + ... + {\lambda _m}{\vec a_m} = \vec 0\)则称该向量组为线性无关

常见到的几个与“线性无关”、“线性相关”的推论如下所示:

  1. 单个向量\(\vec a\)是线性相关的充分必要条件是\(\vec a = \vec 0\)。两个以上的向量组\({\vec a_1},{\vec a_2},...,{\vec a_m}\)线性相关的充分必要条件是其中有一个向量是其余向量的线性组合。
  2. 如果向量组\({\vec a_1},{\vec a_2},...,{\vec a_m}\)是线性无关的,而且可以被向量组\({\vec b_1},{\vec b_2},...,{\vec b_k}\)线性表示出来,那么\(m \le k\)
  3. 如果向量组\({\vec a_1},{\vec a_2},...,{\vec a_m}\)是线性无关的,但是向量组\({\vec a_1},{\vec a_2},...,{\vec a_m},\vec b\)是线性相关的,那么向量\(\vec b\)可以被\({\vec a_1},{\vec a_2},...,{\vec a_m}\)线性表示出,而且表法是唯一的。
  4. \(n\)维向量空间上,有且只能找个\(n\)个线性无关的向量。因此,在二维空间上只能有两个线性无关的向量,在三维空间上只能有三个线性无关的向量。

例如,在二维向量空间上,向量\({\vec a_1} = (1,0)\)\({\vec a_2} = (0,1)\)是线性无关的,不存在两个不全为零的常量,使得\({\lambda _1}{\vec a_1} + {\lambda _2}{\vec a_2} = \vec 0\);但是向量\({\vec b_1} = (1,0)\)\({\vec b_2} = (0,1)\)\({\vec b_2} = (2,1)\)是线性相关的,因为存在\({\lambda _1} = - 2,{\lambda _2} = - 1,{\lambda _3} = 1\),使得\({\lambda _1}{\vec b_1} + {\lambda _2}{\vec b_2} + {\lambda _3}{\vec b_3} = \vec 0\)

1.1.6. 向量组的秩

一向量组的一个部分组称为一个极大线性无关组,如果这个部分组本身是线性无关的,并且从这向量组中任意添一个向量(如果还有的话),所得的部分向量组都线性相关。

例如,向量组\({\vec a_1} = (2, - 1,3),{\vec a_2} = (4, - 2,5),{\vec a_3} = (2, - 1,4)\)中,由\({\vec a_1},{\vec a_2}\)组成的部分组就是一个极大线性无关组。首先,\({\vec a_1},{\vec a_2}\)线性无关,因为由\({\lambda _1}{\vec a_1} + {\lambda _2}{\vec a_2} = {\lambda _1}(2, - 1,3) + {\lambda _2}(4, - 2,5) = 0\)就有\({\lambda _1} = {\lambda _2} = 0\),同时我们知道\({\vec a_1},{\vec a_2},{\vec a_3}\)线性相关,不难看出,\({\vec a_2},{\vec a_3}\)也是一个极大线性无关组。

一个线性无关向量组的极大线性无关组就是这个向量组自身。任意一个向量组的极大线性无关组都含有相同个数的向量。因此,我们称向量组的极大线性无关向量组所含向量的个数为向量组的秩。换句话说,秩就是从一个向量组里最多可以取出的线性无关向量的个数。

例如,向量组\({\vec a_1} = (2, - 1,3),{\vec a_2} = (4, - 2,5),{\vec a_3} = (2, - 1,4)\)的秩就是2。

因为线性无关的向量组就是它自身的极大线性无关组,所以一向量组线性无关的充分必要条件为它的秩与它所含向量的个数相同。对于全部由零向量组成的向量组,没有极大线性无关组,规定这样的向量组的秩为零。

spacer

Leave a reply