© 2015-2020 Jacob Ström、Kalle Åström 与 Tomas Akenine-Möller

正在加载并构建本章……

第 3 章:点积





3.1 引言


本章介绍一种强大的工具——点积。 点积是计算机图形学的基础构件之一。交互式图解 3.1展示了一个称为光线追踪器的计算机图形程序。光线追踪器在场景中放置虚拟相机和若干光源;相机由位置、视场角和朝向确定。 光线追踪器从相机位置向成像平面上的每个像素发射一条射线,计算射线首先击中的物体,并判断交点能否直接接收到光源照明;若不能,该点便处于阴影中。程序还可以继续追踪反射射线,从而生成具有反射效果的物体,例如交互式图解 3.1中间的球体。单击图解下方的开始,亲自试用光线追踪程序。
交互式图解 3.1: 光线追踪程序可以生成如上图所示的图像。程序先进行“粗略渲染”,快速生成一幅质量较低的图像,以保持交互流畅。按住鼠标或手指并左右移动,可以从另一个视点重新渲染场景。粗略渲染之后,程序会进行“精细渲染”,以更高质量再次渲染各个像素,从而消除球体轮廓上的锯齿等问题。在此阶段,一个白色像素会标示当前进度;渲染从顶部开始,自左向右逐行向下进行。
交互式图解 3.1: 光线追踪程序可以生成如上图所示的图像。程序先进行“粗略渲染”,快速生成一幅质量较低的图像,以保持交互流畅。按住鼠标或手指并左右移动,可以从另一个视点重新渲染场景。粗略渲染之后,程序会进行“精细渲染”,以更高质量再次渲染各个像素,从而消除球体轮廓上的锯齿等问题。在此阶段,一个白色像素会标示当前进度;渲染从顶部开始,自左向右逐行向下进行。
在上面的光线追踪程序中,点积既用于计算射线与球面的交点,也用于测量到交点的距离。此外,用于计算反射效果的反射定律也用点积实现。理解点积的工作原理后,我们将在第 3.7 节再次讨论这两个主题。

一般来说,点积本质上与度量有关,也就是如何测量向量的夹角和长度。接下来先用两个简短部分讨论夹角和长度,然后进入本章的主体:定义点积、说明引入它的动机,并在第 3.2.3 节给出点积的法则和性质。 第 3.3 节介绍标准正交基第 3.4 节给出一组常用不等式,第 3.5 节通过例子展示点积的用法。随后讨论直线平面,最后再回到光线追踪。
3.2 定义与应用


向量 $\vc{u}$ 与 $\vc{v}$ 之间的最小夹角记作 $[\vc{u},\vc{v}]$。 右图用绿色圆弧表示各对向量之间的最小夹角,其中一处用绿色方框表示直角。此时夹角为 $90^\circ$,即 $\pi/2$ 弧度,因而 $[\vc{u},\vc{v}]=\pi/2$。也可记作 $\vc{u} \perp \vc{v}$,表示两个向量正交,也就是相互垂直。 注意左下角的夹角为 $0$,而底行中间的夹角为 $\pi$ 弧度。两种情形下,向量都位于同一条直线上,因而共线且平行。左下角的两个向量方向相同,底行中间的两个向量方向相反。两向量平行记作 $\vc{u}\, || \,\vc{v}$。若 $\vc{u}$ 与 $\vc{v}$ 平行,则必存在某个 $k$,使 $\vc{v} = k \vc{u}$。

现在可以正式定义点积了:

定义 3.1: 点积
两个向量 $\vc{u}$ 和 $\vc{v}$ 的点积记作 $\vc{u}\cdot \vc{v}$,定义为标量
\begin{equation} \vc{u}\cdot \vc{v} = \left\{ \begin{array}{ll} \ln{\vc{u}}\ \ln{\vc{v}} \cos[\vc{u},\vc{v}], & \text{若 } \vc{u}\neq \vc{0} \text{ 且 } \vc{v}\neq \vc{0},\\ 0, & \text{若 } \vc{u}=\vc{0} \text{ 或 } \vc{v}=\vc{0}. \end{array} \right. \end{equation} (3.1)
回顾第 2 章,$||\vc{v}||$ 表示向量 $\vc{v}$ 的长度。由于向量长度总是非负,点积为正当且仅当 $\cos[\vc{u},\vc{v}]$ 为正。由此可推出下列点积判定:
\begin{align} \vc{u} \cdot \vc{v}>0 \ \ \ &\Longleftrightarrow\ \ \ \ 0 < [\vc{u},\vc{v}] < \pi/2,\\ \vc{u} \cdot \vc{v}<0 \ \ \ &\Longleftrightarrow\ \ \ \ \pi/2 < [\vc{u},\vc{v}] \leq \pi, \\ \vc{u} \cdot \vc{v}=0 \ \ \ &\Longleftrightarrow\ \ \ \vc{u} \perp \vc{v}, \mathrm{\ 即\ } [\vc{u},\vc{v}]=\pi/2 \mathrm{\ 或\ } \vc{u} = 0 \mathrm{\ 或\ } \vc{v} = 0. \\ \end{align} (3.2)
最后一条尤其重要:如果向量 $\vc{u}$ 与 $\vc{v}$ 相互正交(垂直),那么 $\vc{u}\cdot \vc{v} = 0$。本章稍后将看到,正交性往往能简化计算,非常有用。

点积的结果是标量,因此有时也称为数量积。

例 3.1: 简单的点积示例
设有两个向量 $\vc{u}$ 和 $\vc{v}$,其中 $\vc{u}$ 的长度为 $4$,$\vc{v}$ 的长度为 $3$,二者夹角为 $\frac{\pi}{4}$。求点积 $\vc{u} \cdot \vc{v}$。 两个向量的长度都不为零。根据定义 3.1,$\vc{u}$ 与 $\vc{v}$ 的点积为
\begin{align} \vc{u} \cdot \vc{v} &= \ln{\vc{u}} \ln{\vc{v}} \cos[\vc{u},\vc{v}]\\ &= 4 \cdot 3 \cos\Big(\frac{\pi}{4}\Big) \\ &= 12 \frac{1}{\sqrt{2}} \\ &= 6 \sqrt{2}. \end{align} (3.3)

3.2.1 单位向量与归一化



单位向量是长度为 $1$ 的向量;也就是说,若 $\ln{\vc{v}}=1$,则 $\vc{v}$ 为单位向量。 任意非零向量 $\vc{v}$ 都可以转化为单位向量,这一操作称为对向量进行归一化,其过程也称归一化。用 $\vc{v}$ 除以自身长度 $\ln{\vc{v}}$,得到归一化向量 $\vc{n}$:
\begin{equation} \vc{n} = \frac{1}{\ln{\vc{v}}}\vc{v}. \end{equation} (3.4)
下面验证 $\vc{n}$ 确实是单位向量,即 $\ln{\vc{n}}=1$。令 $l=1/\ln{\vc{v}}$,则 $\ln{\vc{n}} = \ln{l\vc{v}} = \abs{l}\,\ln{\vc{v}}=\frac{1}{\ln{\vc{v}}}\ln{\vc{v}}=1$。

若两个向量都已归一化,即 $\ln{\vc{u}}=\ln{\vc{v}}=1$,则点积可简化为 $\vc{u} \cdot \vc{v} = \cos[\vc{u},\vc{v}]$。计算机图形学的明暗计算经常需要两个向量夹角的余弦,因此这一性质非常实用。事实上,交互式图解 3.1 在追踪射线和计算明暗时就大量使用了归一化向量。

3.2.2 投影



由三角学可知,在直角三角形中,一个锐角的余弦与斜边及其一条直角边的长度有关。
$a$
$c$
$\theta$
更准确地说,它可表示为
\begin{equation} \cos \theta= \frac{a}{c}, \end{equation} (3.5)
其中 $c$ 是斜边的长度,$a$ 是与斜边夹角为 $\theta$ 的直角边的长度,如右图所示。 因此,在这一特定情形下,已知 $a$ 和 $c$ 的长度便可求出夹角;反之,已知夹角和一条边的长度,也可求出另一条边的长度

$\vc{u}$
$\vc{v}$
$\vc{w}$
$[\vc{u},\vc{v}]$
设要把向量 $\vc{u}$ 正交投影到向量 $\vc{v}$ 上,得到新向量 $\vc{w}$,如右图所示。 由于 $\vc{u}$ 与 $\vc{w}$ 构成直角三角形,必有 $\cos [\vc{u},\vc{v}] = \ln{\vc{w}} / \ln{\vc{u}}$;这正是上式 (3.5) 的应用。因此 $\vc{w}$ 的长度为 $\ln{\vc{w}} = \ln{\vc{u}}\cos [\vc{u},\vc{v}]$。若 $\vc{v}$ 的长度为 $1$,即 $\ln{\vc{v}}=1$,则投影向量可写为
\begin{equation} \vc{w} = \ln{\vc{w}}\ \vc{v} = \ln{\vc{u}} \cos [\vc{u},\vc{v}]\ \vc{v}. \end{equation} (3.6)
要确认 $\ln{\vc{w}}\vc{v}$ 的确等于 $\vc{w}$,只需注意它既有正确的方向(即 $\vc{v}$ 的方向,因为 $\ln{\vc{w}}$ 只是一个标量),也有正确的长度(由于 $\vc{v}$ 的长度为 $1$,结果的长度恰为 $\ln{\vc{w}}$)。 我们还希望处理 $\vc{v}$ 的长度不为 $1$ 的情形。为此,可将 $\vc{v}$ 乘以 $\frac{1}{\ln{\vc{v}}}$ 进行归一化,使其长度变为 $1$。 在上式 (3.6) 中用 $\frac{1}{\ln{\vc{v}}}\vc{v}$ 替换 $\vc{v}$,可得
\begin{equation} \vc{w} = \frac{\ln{\vc{u}} \cos [\vc{u},\vc{v}]}{\ln{\vc{v}}} \vc{v}. \end{equation} (3.7)
这里用到了归一化不改变方向这一事实,因此仍可使用 $\cos[\vc{u},\vc{v}]$,而不必改写为 $\cos[\vc{u}, \frac{\vc{v}}{\ln{\vc{v}}}]$。 接着将分子、分母同时乘以 $\ln{\vc{v}}$,便得到一般的正交投影公式
\begin{equation} \vc{w} = \frac{\ln{\vc{u}}\ \ln{\vc{v}} \cos [\vc{u},\vc{v}] }{ \ln{\vc{v}}^2 } \vc{v}. \end{equation} (3.8)
最后这一步的用意在于,分子 $\ln{\vc{u}}\ \ln{\vc{v}} \cos[\vc{u},\vc{v}]$ 正好就是点积的定义,因此公式可进一步简写为
\begin{equation} \vc{w} = \frac{\vc{u} \cdot \vc{v} }{ \ln{\vc{v}}^2 } \vc{v}. \end{equation} (3.9)
由此证明了下面的公式:

定义 3.2: 正交投影
若 $\vc{v}$ 为非零向量,则 $\vc{u}$ 在 $\vc{v}$ 上的正交投影记作 $\proj{\vc{v}}{\vc{u}}$,定义为
\begin{equation} \proj{\vc{v}}{\vc{u}} = \frac{\vc{u} \cdot \vc{v}}{ \ln{\vc{v}}^2 } \vc{v}. \end{equation} (3.10)
注意,若 $\ln{\vc{v}}=1$,即 $\vc{v}$ 已归一化,则投影公式可简化为 $\proj{\vc{v}}{\vc{u}} = (\vc{u} \cdot \vc{v})\vc{v}$.

3.2.3 法则与性质



借助点积的定义和投影公式,可以推导出下列法则:

定理 3.1: 点积运算法则
点积满足下列常用法则:
\begin{align} \begin{array}{llr} (i) & \vc{u} \cdot \vc{v} = \vc{v} \cdot \vc{u} & \spc\text{(交换律)} \\ (ii) & k(\vc{u} \cdot \vc{v}) = (k\vc{u}) \cdot \vc{v} & \spc\text{(结合律)} \\ (iii) & \vc{v} \cdot (\vc{u} +\vc{w}) = \vc{v} \cdot \vc{u} + \vc{v} \cdot \vc{w} & \spc\text{(分配律)} \\ (iv) & \vc{v} \cdot \vc{v} = \ln{\vc{v}}^2 \geq 0, \mathrm{且仅当\ } \vc{v}=\vc{0}\mathrm{\ 时等号成立}. & \spc\text{(长度的平方)} \\ \end{array} \end{align} (3.11)

$(i)$ 由定义 3.1,$\vc{u} \cdot \vc{v} = \ln{\vc{u}}\ \ln{\vc{v}} \cos[\vc{u},\vc{v}]$,而 $\vc{v} \cdot \vc{u} = \ln{\vc{v}}\ \ln{\vc{u}} \cos[\vc{v},\vc{u}]$。由于 $[\vc{u},\vc{v}]$ 与 $[\vc{v},\vc{u}]$ 都表示 $\vc{u}$ 和 $\vc{v}$ 之间的最小夹角,两式相等。
$(ii)$ 同样由定义 3.1,等号左边为 $k(\vc{u} \cdot \vc{v}) =$ $k\ln{\vc{u}}\,\ln{\vc{v}} \cos[\vc{u},\vc{v}]$,右边为 $(k\vc{u}) \cdot \vc{v} =$ $\ln{k\vc{u}}\,\ln{\vc{v}} \cos[k\vc{u},\vc{v}]$。 若 $k>0$,则 $\cos[k\vc{u},\vc{v}]=$ $\cos[\vc{u},\vc{v}]$ 且 $\ln{k\vc{u}}=k\ln{\vc{u}}$,因而等式成立。若 $k<0$,等号左边可改写为 $k\ln{\vc{u}}\ \ln{\vc{v}} \cos[\vc{u},\vc{v}] = - \abs{k}\,\ln{\vc{u}}\ \ln{\vc{v}} \cos[\vc{u},\vc{v}]$. 等号右边可改写为 $\ln{k\vc{u}}\,\ln{\vc{v}} \cos[k\vc{u},\vc{v}] = \abs{k}\ln{\vc{u}}\,\ln{\vc{v}} \cos(\pi-[\abs{k}\vc{u},\vc{v}])$, 最后一步利用了 $k<0$ 时 $[k\vc{u},\vc{v}]=[-\vc{u},\vc{v}]=\pi-[\vc{u},\vc{v}]$。由三角学可知 $\cos (\pi-[\vc{u},\vc{v}]) = -\cos [\vc{u},\vc{v}]$,故等号右边变为 $-\abs{k}\,\ln{\vc{u}}\ \ln{\vc{v}} \cos[\vc{u},\vc{v}]$,从而证明 $k<0$ 时法则也成立。 最后,当 $k=0$ 时,等号两边显然都为零。
$(iii)$
$\vc{u}$
$\vc{v}$
$\vc{w}$
$\proj{\vc{v}}{\vc{u}}$
$\proj{\vc{v}}{\vc{w}}$
$\vc{v}$
$\vc{u}+\vc{w}$
$\proj{\vc{v}}{(\vc{u}+\vc{w})}$
先设 $\vc{v}\neq \vc{0}$(若 $\vc{v}=\vc{0}$,该法则显然成立)。 这里采用几何证明,并利用“投影之和等于和的投影”这一事实,即
\begin{equation} \proj{\vc{v}}{\vc{u}} + \proj{\vc{v}}{\vc{w}} = \proj{\vc{v}}{(\vc{u}+\vc{w})}. \end{equation} (3.12)
等号左边如图 3.5上半部分所示(图中的 $\vc{u}$ 和 $\vc{w}$ 可以移动),等号右边则绘于同一幅图的下半部分。 利用定义 3.2,上式可改写为
\begin{gather} \frac{\vc{u} \cdot \vc{v}}{ \ln{\vc{v}}^2 } \vc{v} + \frac{\vc{w} \cdot \vc{v}}{ \ln{\vc{v}}^2 } \vc{v} = \frac{(\vc{u}+\vc{w}) \cdot \vc{v}}{ \ln{\vc{v}}^2 } \vc{v} \\ \Longleftrightarrow \\ (\underbrace{\vc{u} \cdot \vc{v}}_{\text{标量}}) \vc{v} + (\underbrace{\vc{w} \cdot \vc{v}}_{\text{标量}})\vc{v} = \bigl(\underbrace{(\vc{u}+\vc{w}) \cdot \vc{v}}_{\text{标量}}\bigr)\vc{v}. \\ \end{gather} (3.13)
注意最后一步中有三个标量,且都与 $\vc{v}$ 相乘。因此可约去向量 $\vc{v}$,只保留标量,得到 $\vc{u}\cdot\vc{v} + \vc{w}\cdot\vc{v} =$ $(\vc{u}+\vc{w})\cdot\vc{v}$. 再利用法则 $(i)$,可将其改写为 $\vc{v}\cdot\vc{u} + \vc{v}\cdot\vc{w} =$ $\vc{v}\cdot(\vc{u}+\vc{w})$,由此证明法则 $(iii)$。
$(iv)$ 由定义 3.1,$\vc{v}\cdot\vc{v}=\ln{\vc{v}}\,\ln{\vc{v}}\cos[\vc{v},\vc{v}]=\ln{\vc{v}}^2$,因为 $\cos[\vc{v},\vc{v}]=\cos 0 = 1$。
证明完毕。
$\square$


定理 3.1中的法则十分直观,因为它们与标量加法和标量乘法的法则相同。 第 3.5 节将通过若干例子说明这些法则的用法。

例 3.2: 余弦定理
$a$
$b$
$c$
$\theta$
$\vc{u}$
$\vc{v}$
$\vc{w}=\vc{u}-\vc{v}$
$[\vc{u},\vc{v}]$
余弦定理的公式有时不太容易记忆,但借助点积,推导起来其实非常简单。右侧图 3.6展示了相应的几何关系:向量 $\vc{u}$ 和 $\vc{v}$ 从同一点出发,差向量 $\vc{u} - \vc{v}$ 从 $\vc{v}$ 的终点指向 $\vc{u}$ 的终点,即 $\vc{w} = \vc{u} - \vc{v}$。 只需记住,推导余弦定理要从 $\vc{w}$ 的长度平方出发,再用点积法则展开。首先由法则 $(iv)$ 得
\begin{equation} \ln{\vc{w}}^2 = \vc{w} \cdot \vc{w}. \end{equation} (3.14)
由于 $\vc{w} = (\vc{u} - \vc{v})$,上式可改写为
\begin{equation} \ln{\vc{w}}^2 = (\vc{u} - \vc{v}) \cdot (\vc{u} - \vc{v}). \end{equation} (3.15)
再利用上面的法则 $(i)$ 和 $(iii)$ 展开,得到
\begin{equation} \ln{\vc{w}}^2 = \vc{u} \cdot \vc{u} - \vc{u} \cdot \vc{v} - \vc{v} \cdot \vc{u} + \vc{v} \cdot \vc{v}. \end{equation} (3.16)
由法则 $(i)$,$\vc{u} \cdot \vc{v} = \vc{v} \cdot \vc{u}$;由法则 $(iv)$,$\vc{u} \cdot \vc{u} = \ln{\vc{u}}^2$。因此
\begin{equation} \ln{\vc{w}}^2 = \ln{\vc{u}}^2 + \ln{\vc{v}}^2 - 2\vc{u} \cdot \vc{v}. \end{equation} (3.17)
最后应用点积的定义,得到
\begin{equation} \ln{\vc{w}}^2 = \ln{\vc{u}}^2 + \ln{\vc{v}}^2 - 2\ \ln{\vc{u}}\ \ln{\vc{v}}\cos[\vc{u},\vc{v}]. \end{equation} (3.18)
改用图上半部分更为熟悉的记号,便有
\begin{equation} c^2 = a^2 + b^2 - 2ab \cos \theta, \end{equation} (3.19)
这就是余弦定理,与式 (1.5) 相同。
3.3 标准正交基


本节介绍一种简便的点积计算方法。设有两个三维向量 $\vc{u} = (u_1, u_2, u_3)$ 和 $\vc{v} = (v_1, v_2, v_3)$,它们在同一个下表示为
\begin{align} \vc{u} & = u_1 \vc{e}_1 + u_2 \vc{e}_2 + u_3 \vc{e}_3,\\ \vc{v} & = v_1 \vc{e}_1 + v_2 \vc{e}_2 + v_3 \vc{e}_3. \end{align} (3.20)
此时点积 $\vc{u} \cdot \vc{v}$ 可写为
\begin{align} \vc{u} \cdot \vc{v} & = (u_1 \vc{e}_1 + u_2 \vc{e}_2 + u_3 \vc{e}_3) \cdot (v_1 \vc{e}_1 + v_2 \vc{e}_2 + v_3 \vc{e}_3),\\ \end{align} (3.21)
展开得
\begin{align} \vc{u} \cdot \vc{v} & = u_1 v_1 \vc{e}_1 \cdot \vc{e}_1 + u_1 v_2 \vc{e}_1 \cdot \vc{e}_2 + u_1 v_3 \vc{e}_1 \cdot \vc{e}_3 \\ & + u_2 v_1 \vc{e}_2 \cdot \vc{e}_1 + u_2 v_2 \vc{e}_2 \cdot \vc{e}_2 + u_2 v_3 \vc{e}_2 \cdot \vc{e}_3 \\ & + u_3 v_1 \vc{e}_3 \cdot \vc{e}_1 + u_3 v_2 \vc{e}_3 \cdot \vc{e}_2 + u_3 v_3 \vc{e}_3 \cdot \vc{e}_3. \end{align} (3.22)
这个式子看起来冗长而复杂。但若 $i \neq j$ 时 $\vc{e}_i \cdot \vc{e}_j=0$,也就是说,每条轴都与其他基轴正交,则除三项外其余各项都消失。 再假设对所有 $i$ 都有 $\vc{e}_i \cdot \vc{e}_i = 1$,也就是每个向量的长度均为 $1$,那么剩余各项也可化简为
\begin{equation} \vc{u} \cdot \vc{v} = u_1 v_1 + u_2 v_2 + u_3 v_3. \end{equation} (3.23)
现在可以定义任意维数的标准正交基了。

定义 3.3: 标准正交基
一个 $n$ 维标准正交基由一组向量 $\{\vc{e}_1, \dots, \vc{e}_n\}$ 组成,并满足
\begin{equation} \vc{e}_i \cdot \vc{e}_j = \begin{cases} 1 & \text{若 } i=j, \\ 0 & \text{若 } i\neq j. \\ \end{cases} \end{equation} (3.24)
这意味着各向量均为单位长度,即都已归一化,并且两两正交
还可将上述简化的点积公式推广到任意维数的向量:

定义 3.4: 标准正交基下的点积计算
在任意标准正交基下,两个 $n$ 维向量 $\vc{u}$ 与 $\vc{v}$ 的点积可按下式计算:
\begin{equation} \vc{u}\cdot\vc{v} = \sum_{i=1}^{n} u_i v_i, \end{equation} (3.25)
即各对应分量乘积之和。二维和三维点积分别为
\begin{align} \mathrm{二维\ } &:\ \ \vc{u}\cdot\vc{v} = u_xv_x + u_yv_y, \\ \mathrm{三维\ } &:\ \ \vc{u}\cdot\vc{v} = u_xv_x + u_yv_y +u_zv_z. \\ \end{align} (3.26)
注意上文使用了两种不同的向量分量下标方式,例如 $\vc{v}=(v_1, v_2, v_3) = (v_x, v_y, v_z)$.

对于 $\R^1$、$\R^2$ 和 $\R^3$ 中的向量,夹角具有自然的几何含义。我们据此按照定义 3.1定义点积。若标准正交基,便得到上面的简式 $\vc{u} \cdot \vc{v} = u_1 v_1 + u_2 v_2 + u_3 v_3 $ 来计算点积。高维向量则没有先验的几何夹角概念。在标准正交基下,可以反过来用定义 3.4中的点积简式推导出夹角的概念。于是,两个非零向量 $\vc{u}$ 和 $\vc{v}$ 的夹角定义如下。

定义 3.5: 高维空间中的夹角
$\R^n$ 中两个非零向量 $\vc{u} = (u_1, u_2, \ldots, u_n)$ 与 $\vc{v} = (v_1, v_2, \ldots, v_n)$ 的夹角 $[\vc{u}, \vc{v}]$ 定义为
\begin{equation} [\vc{u}, \vc{v}] = \arccos \frac{\vc{u} \cdot \vc{v}}{\ln{\vc{u}}\ \ln{\vc{v}}} \end{equation} (3.27)
下面用一个简单的例子说明定义 3.4中的简便点积计算方法:

例 3.3: 简单计算
在下图所示的标准正交基中,$\vc{u} = (1,2)$,$\vc{v} = (3,1.5)$。求 $\ln{\vc{u}}\ \ln{\vc{v}}\cos[\vc{u}, \vc{v}]$。

注意到 $\ln{\vc{u}}\ \ln{\vc{v}}\cos[\vc{u}, \vc{v}]$ 就是点积 $\vc{u} \cdot \vc{v}$。又因该标准正交基,可用定义 3.4中的简式计算 $\vc{u} \cdot \vc{v}$,即
\begin{align} \ln{\vc{u}}\ \ln{\vc{v}}\cos[\vc{u}, \vc{v}] & = \vc{u} \cdot \vc{v}\\ & = u_1 v_1 + u_2 v_2 \\ & = 1 \cdot 3 + 2 \cdot 1.5 \\ & =3 + 3 = 6. \end{align} (3.28)
$\vc{u}$
$\vc{v}$
$\vc{e}_1$
$\vc{e}_2$
交互式图解 3.7: 由于 $\vc{e}_1$ 与 $\vc{e}_2$ 正交且长度均为 $1$,可以用简式计算 $\vc{u} \cdot \vc{v}$。注意,这幅图其实并不能交互。
交互式图解 3.7: 由于 $\hid{\vc{e}_1}$ 与 $\hid{\vc{e}_2}$ 正交且长度均为 $1$,可以用简式计算 $\hid{\vc{u} \cdot \vc{v}}$。注意,这幅图其实并不能交互。

例 3.4: 夹角计算
在一个标准正交基中,$\vc{u} = (1,2)$,$\vc{v} = (3,1)$。求 $\vc{u}$ 与 $\vc{v}$ 的最小夹角。

最小夹角 $[\vc{u}, \vc{v}]$ 出现在点积 $\ln{\vc{u}}\ \ln{\vc{v}}\cos[\vc{u}, \vc{v}]$ 中。因此,只要算出点积,再除以 $\vc{u}$ 和 $\vc{v}$ 的长度,即可得到两向量最小夹角的余弦。 由于该标准正交基,可用简式计算所需的各个点积:
\begin{align} \ln{\vc{u}}\ \ln{\vc{v}}\cos[\vc{u}, \vc{v}] &= \vc{u} \cdot \vc{v} = u_1 v_1 + u_2 v_2 = 1 \cdot 3 + 2 \cdot 1 = 3 + 2 = 5,\\ \ln{\vc{u}}^2 & = \vc{u} \cdot \vc{u} = u_1 u_1 + u_2 u_2 = 1^2 + 2^2 = 5, \\ \ln{\vc{v}}^2 & = \vc{v} \cdot \vc{v} = v_1 v_1 + v_2 v_2 = 3^2 + 1^2 = 10.\\ \end{align} (3.29)
由此得到 $\ln{\vc{u}} = \sqrt{5}$ 以及 $\ln{\vc{v}} = \sqrt{10} = \sqrt{5}\sqrt{2}$,于是
\begin{equation} \cos [\vc{u}, \vc{v}] =\frac{\vc{u} \cdot \vc{v}}{\ln{\vc{u}}\ \ln{\vc{v}}} =\frac{5}{\sqrt{5}\sqrt{5}\sqrt{2}} = \frac{1}{\sqrt{2}}, \end{equation} (3.30)
最终夹角为
\begin{equation} [\vc{u}, \vc{v}] = \arccos\Big(\frac{1}{\sqrt{2}}\Big) = \frac{\pi}{4}. \end{equation} (3.31)
为了更直观地体会点积所表达的信息,建议先操作下面的交互式图解 3.8
$\vc{u}$
$\vc{v}$
$\ln{\vc{u}}$
$\ln{\vc{v}}$
$\cos [\vc{u},\vc{v}]$
$\vc{u} \cdot \vc{v}$
交互式图解 3.8: 图中显示了标准基下两个可拖动向量 $\vc{u}$、$\vc{v}$ 的点积及其各项。回顾 $\vc{u}\cdot\vc{v} = \ln{\vc{u}}\,\ln{\vc{v}} \cos [\vc{u},\vc{v}]$。当两向量的夹角从小于 $\pi/2$ 变为大于 $\pi/2$ 时,请留意点积与 $\cos [\vc{u},\vc{v}]$ 的符号。还要注意,当 $\vc{u}$ 和 $\vc{v}$ 都是单位向量,即 $\ln{\vc{u}}=\ln{\vc{v}}=1$ 时,$\vc{u}\cdot\vc{v} = \cos [\vc{u},\vc{v}]$。将一个向量移动到使 $\vc{u}=\vc{v}$,还会发现另一条规律。
交互式图解 3.8: 图中显示了标准基下两个可拖动向量 $\hid{\vc{u}}$、$\hid{\vc{v}}$ 的点积及其各项。回顾 $\hid{\vc{u}\cdot\vc{v} = \ln{\vc{u}}\,\ln{\vc{v}} \cos [\vc{u},\vc{v}]}$。当两向量的夹角从小于 $\hid{\pi/2}$ 变为大于 $\hid{\pi/2}$ 时,请留意点积与 $\hid{\cos [\vc{u},\vc{v}]}$ 的符号。还要注意,当 $\hid{\vc{u}}$ 和 $\hid{\vc{v}}$ 都是单位向量,即 $\hid{\ln{\vc{u}}=\ln{\vc{v}}=1}$ 时,$\hid{\vc{u}\cdot\vc{v} = \cos [\vc{u},\vc{v}]}$。将一个向量移动到使 $\hid{\vc{u}=\vc{v}}$,还会发现另一条规律。

3.3.1 标准正交基下的向量长度



前面已经看到,在标准正交基下,向量的点积计算更简单。本节将看到,向量长度 $\ln{\vc{v}}$ 的计算也会随之简化。向量的长度也称为模或范数。
$a$
$b$
$c$
$v_x$
$v_y$
$\vc{v}$
$\ln{\vc{v}}$


回顾定理 3.1的法则 $(iv)$:$\vc{v}\cdot\vc{v} = \ln{\vc{v}}^2$。 若向量在一个标准正交基下的坐标为 $(v_x, v_y)$,利用定义 3.4中的点积简式可得 $\ln{\vc{v}}^2 = v_x^2 + v_y^2$。右上图画出了向量 $\vc{v}$。由于 $v_x$ 和 $v_y$ 是 $\vc{v}$ 的坐标,它们也分别等于两条虚线的长度。该图与下方的三角形相对应,其中 $c = \ln{\vc{v}}$、$a = v_x$、$b = v_y$。因此,$\ln{\vc{v}}^2 = v_x^2 + v_y^2$ 也给出了勾股定理 $c^2 = a^2 + b^2$ 的一种证明。

因此,标准正交基下向量的长度可按下式计算:
\begin{equation} \ln{\vc{v}} = \sqrt{v_x^2 + v_y^2}. \end{equation} (3.32)
类似地,对于标准正交基下的三维向量 $\vc{v} = (v_x, v_y, v_z)$,点积 $\vc{v} \cdot \vc{v} = \ln{\vc{v}}^2$ 可算作 $v_x^2 + v_y^2 + v_z^2$,故向量长度
\begin{equation} \ln{\vc{v}} = \sqrt{v_x^2 + v_y^2 + v_z^2}. \end{equation} (3.33)
在三维情形下,同样可用勾股定理从几何上说明这一公式为何成立,详见交互式图解 3.10
$(v_x, v_y, v_z)$
$(v_x, v_y, 0)$
$\sqrt{v_x^2 + v_y^2}$
$v_x$
$v_y$
$x$
$y$
$z$
$|v_z|$
$||\vc{v}||$
交互式图解 3.10: 我们要计算向量 $\vc{v}$ 的长度。先把它的起点放在原点,此时终点坐标为 $(v_x, v_y, v_z)$。
交互式图解 3.10: 两个红色箭头和红色虚线也构成一个直角三角形。由前一步可知,顶部直角边的长度为 $\hid{\sqrt{v_x^2 + v_y^2}}$。另一条直角边是向量 $\hid{(0, 0, v_z)}$,其长度显然为 $\hid{|v_z|}$。斜边就是向量 $\hid{\vc{v}}$,因此由勾股定理,$\hid{||\vc{v}||^2 = (\sqrt{v_x^2 + v_y^2})^2 + v_z^2}$,从而 $\hid{||\vc{v}||}=\hid{\sqrt{v_x^2 + v_y^2 + v_z^2}}$。
了解向量经过 $k$ 倍数乘后长度如何变化通常很有用。由点积的定义可得
\begin{equation} (k\vc{v})\cdot(k\vc{v}) = \ln{k\vc{v}}\,\ln{k\vc{v}}\cos[k\vc{v},k\vc{v}] = \ln{k\vc{v}}^2. \end{equation} (3.34)
也可以连续两次应用法则 $(ii)$,得到
\begin{equation} (k\vc{v})\cdot(k\vc{v}) = k ( \vc{v}\cdot(k\vc{v})) = k(k(\vc{v}\cdot\vc{v})) = k^2 \ln{\vc{v}}^2. \end{equation} (3.35)
因此
\begin{equation} \ln{k\vc{v}}^2 = k^2 \ln{\vc{v}}^2, \end{equation} (3.36)
从而
\begin{equation} \ln{k\vc{v}} = \abs{k}\, \ln{\vc{v}}. \end{equation} (3.37)


注意只有零向量长度为零,即 $\ln{\vc{0}} = 0$;若 $\vc{v}\neq\vc{0}$,则 $\ln{\vc{v}}>0$。

3.4 不等式


下面介绍几个十分有用的数学不等式。之所以把它们放在点积一章,是因为利用点积的定义很容易证明它们。

定理 3.2: 柯西—施瓦茨不等式
若 $\vc{u}$ 和 $\vc{v}$ 是 $\R^n$ 中的向量,则
\begin{equation} (\vc{u} \cdot \vc{v})^2 \leq \ln{\vc{u}}^2\,\ln{\vc{v}}^2, \end{equation} (3.38)
等价地,也可写成
\begin{equation} \abs{\vc{u} \cdot \vc{v}} \leq \ln{\vc{u}}\,\ln{\vc{v}}. \end{equation} (3.39)

对几何向量,取点积定义 3.1)的绝对值得 $\abs{\vc{u} \cdot \vc{v}} = \ln{\vc{u}}\ \ln{\vc{v}}\, \abs{\cos[\vc{u},\vc{v}]}$, 由于 $\abs{\cos[\vc{u},\vc{v}]} \leq 1$,定理得证。 对高维向量,标准正交基点积的定义为 $\vc{u}\cdot \vc{v} = \sum_i u_i v_i$ (定义 3.4)。在这种情形下,要证明柯西—施瓦茨不等式,只需证明
\begin{equation} ( \sum_{i=1}^n u_i v_i )^2 \leq ( \sum_{i=1}^n u_i^2 )( \sum_{i=1}^n v_i^2 ) . \end{equation} (3.40)
从下列多项式出发:
\begin{equation} p(z) = \sum_{i=1}^n (u_i z + v_i )^2 , \end{equation} (3.41)
它是平方和,因此对任意 $z$ 显然非负。已知多项式 $p(z) = az^2 + bz + c$ 的两个根为
\begin{equation} z = \frac{-b \pm \sqrt{b^2-4ac}}{2a} . \end{equation} (3.42)
若所谓的判别式 $b^2-4ac$ 为正,则多项式有两个不同的实根,并会同时取到正值和负值。由于 $p(z)$ 非负,必有 $b^2-4ac \leq 0$。现在
\begin{equation} p(z) = \sum_{i=1}^n (u_i z + v_i )^2 = \sum_{i=1}^n u_i^2 z^2 + 2u_i v_i z + v_i^2 = (\sum_{i=1}^n u_i^2) z^2 + 2 (\sum_{i=1}^n u_i v_i) z + \sum_{i=1}^n (v_i^2 ) \end{equation} (3.43)
因此
\begin{equation} \begin{cases} \begin{array}{ll} a &= \sum_{i=1}^n u_i^2 \\ b &= 2 \sum_{i=1}^n u_i v_i \\ c &= \sum_{i=1}^n v_i^2 \end{array} \end{cases}, \end{equation} (3.44)
由 $b^2/4-ac \leq 0$ 可得 $b^2/4 \leq ac$,即
\begin{equation} (\sum_{i=1}^n u_i v_i)^2 \leq (\sum_{i=1}^n u_i^2) \sum_{i=1}^n (v_i^2 ) \end{equation} (3.45)
也就是
\begin{equation} (\vc{u} \cdot \vc{v})^2 \leq \ln{\vc{u}}^2\,\ln{\vc{v}}^2. \end{equation} (3.46)
$\square$


另一个相关的不等式是下面的三角不等式

定理 3.3: 三角不等式
若 $\vc{u}$ 和 $\vc{v}$ 是 $\R^3$ 中的向量,则
\begin{equation} \ln{\vc{u} + \vc{v}} \leq \ln{\vc{u}} + \ln{\vc{v}}. \end{equation} (3.47)

两边平方并展开,左边为 $\ln{\vc{u} + \vc{v}}^2 = $ $(\vc{u} + \vc{v})\cdot (\vc{u} + \vc{v}) = $ $\vc{u} \cdot \vc{u} + \vc{v} \cdot \vc{v} + 2\vc{u}\cdot \vc{v} = $ $\ln{\vc{u}}^2 + \ln{\vc{v}}^2 + 2\ln{\vc{u}}\,\ln{\vc{v}} \cos [\vc{u},\vc{v}]$. 右边的平方为 $(\ln{\vc{u}} + \ln{\vc{v}})^2 = $ $\ln{\vc{u}}^2 + \ln{\vc{v}}^2 +2 \ln{\vc{u}}\,\ln{\vc{v}}$, 由于 $\cos [\vc{u},\vc{v}] \leq 1$,定理得证。
$\square$


$\ln{\vc{u}}$
$\ln{\vc{v}}$
$\ln{\vc{u} + \vc{v}}$
$\ln{\vc{u}}$
$\ln{\vc{v}}$
$\ln{\vc{u} + \vc{v}}$
$\ln{\vc{u}} + \ln{\vc{v}}$
如右图所示,三角不等式在几何上很容易理解。图中清楚地表明,$\vc{u}$ 与 $\vc{v}$ 的长度之和必然大于或等于 $\vc{u}+\vc{v}$ 的长度。事实上,只有当 $\vc{u}$ 与 $\vc{v}$ 同向平行时等号才成立。不妨移动向量 $\vc{u}$,亲自观察这一情形。

3.5 若干例子


本节给出一些实用的例子,并明确标出推导每一步所用的法则。法则编号写在等号上方,例如
\begin{equation} \vc{a} \cdot (\vc{a}+\vc{b}) \overset{(iii)}{=} \vc{a} \cdot \vc{a} + \vc{a} \cdot \vc{b}, \end{equation} (3.48)
表示从等号左边到右边使用了定理 3.1中的法则 $(iii)$。下面推导平行四边形恒等式。

例 3.5: 平行四边形恒等式
$\vc{u}$
$\vc{v}$
$\vc{u} + \vc{v}$
$\vc{u} - \vc{v}$
设向量 $\vc{u}$ 与 $\vc{v}$ 从同一点出发。在进行向量加法第 2.2 节)时,可以构造一个平行四边形。如右侧图 3.12所示,它的两条对角线分别为 $\vc{u}-\vc{v}$ 和 $\vc{u}+\vc{v}$。 两条对角线长度的平方和为
\begin{align} \ln{ \vc{u} + \vc{v} }^2 + \ln{ \vc{u} - \vc{v} }^2 \overset{(iv)}{=}& (\vc{u} + \vc{v})\cdot (\vc{u} + \vc{v}) + (\vc{u} - \vc{v})\cdot (\vc{u} - \vc{v})\\ \overset{(iii)}{=}& (\vc{u} + \vc{v})\cdot\vc{u} +(\vc{u} + \vc{v})\cdot\vc{v} +\\ & (\vc{u} - \vc{v})\cdot \vc{u} -(\vc{u} - \vc{v})\cdot \vc{v} \\ \overset{(i)}{=}& \vc{u}\cdot(\vc{u} + \vc{v}) + \vc{v}\cdot(\vc{u} + \vc{v}) +\\ & \vc{u}\cdot(\vc{u} - \vc{v}) - \vc{v}\cdot(\vc{u} - \vc{v}) \\ \overset{(iii)}{=}& \vc{u} \cdot \vc{u} + \vc{u} \cdot \vc{v} + \vc{v} \cdot \vc{u} +\vc{v} \cdot \vc{v}+ \\ &\vc{u} \cdot \vc{u} - \vc{u} \cdot \vc{v} - \vc{v} \cdot \vc{u} +\vc{v} \cdot \vc{v} \\ =& 2\vc{u} \cdot \vc{u} + 2\vc{v} \cdot \vc{v} \\ \overset{(iv)}{=}& 2\ln{\vc{u}}^2 + 2\ln{\vc{v}}^2. \end{align} (3.49)
这是一个相当精妙的结果。

例 3.6: 极化恒等式
下面的推导与例 3.5密切相关。上一例逐步列出了所用法则;而点积法则的便利之处,就在于其运算方式符合直觉,因此本例将更简洁。注意,与例 3.5 的起始等式相比,唯一的区别是把加号换成减号,即
\begin{align} \ln{ \vc{u} + \vc{v} }^2 - \ln{ \vc{u} - \vc{v} }^2 &= (\vc{u} + \vc{v}) \cdot (\vc{u} + \vc{v}) - (\vc{u} - \vc{v}) \cdot (\vc{u} - \vc{v}) \\ &= \vc{u}\cdot \vc{u} + 2\vc{u}\cdot \vc{v} +\vc{v}\cdot \vc{v} - \bigl( \vc{u}\cdot \vc{u} - 2\vc{u}\cdot \vc{v} +\vc{v}\cdot \vc{v} \bigr) \\ &= 4\vc{u}\cdot \vc{v}, \end{align} (3.50)
因此 $\vc{u}\cdot \vc{v} = \frac{1}{4}\bigl( \ln{ \vc{u} + \vc{v} }^2 - \ln{ \vc{u} - \vc{v} }^2 \bigr)$。这同样是一个相当精妙的结果。

例 3.7: 用点积计算三角形面积
$A$
$B$
$C$
$\vc{u}$
$\vc{v}$
$h$
$[\vc{u},\vc{v}]$
本例推导右图中由 $A$、$B$、$C$ 三点确定的三角形面积,最终用点积表示面积公式。推导中使用两条边向量 $\vc{u} = B-A$ 和 $\vc{v} = C-A$。 回顾三角形面积通常写为 $bh/2$,其中 $b$ 为底边长度,$h$ 为高。在右图中 $b=\ln{\vc{u}}$,由三角学可知高为
\begin{equation} h = \ln{\vc{v}} \sin [\vc{u},\vc{v}]. \end{equation} (3.51)
因而三角形面积 $a$ 为
\begin{equation} a = \frac{bh}{2} =\frac{1}{2} \underbrace{\ln{\vc{u}}}_{b} \,\underbrace{\ln{\vc{v}} \sin [\vc{u},\vc{v}]}_{h}. \end{equation} (3.52)
由于三角形面积恒为正,我们将其平方,并利用三角恒等式 $\sin^2 \phi + \cos^2 \phi =1$,把表达式展开成点积形式:
\begin{align} a^2 &= \frac{1}{4} \ln{\vc{u}}^2 \, \ln{\vc{v}}^2 \sin^2 [\vc{u},\vc{v}] \\ &= \frac{1}{4} \ln{\vc{u}}^2 \, \ln{\vc{v}}^2 (1-\cos^2 [\vc{u},\vc{v}]) \\ &= \frac{1}{4} \bigl(\ln{\vc{u}}^2 \, \ln{\vc{v}}^2 - \ln{\vc{u}}^2 \, \ln{\vc{v}}^2 \cos^2 [\vc{u},\vc{v}]\bigr) \\ &= \frac{1}{4} \bigl( (\vc{u} \cdot \vc{u})(\vc{v} \cdot \vc{v}) - (\vc{u} \cdot \vc{v})^2 \bigr), \\ \end{align} (3.53)
最后一步使用了定理 3.1中的法则 $(iv)$。 因此,三角形面积的向量形式为
\begin{equation} a = \frac{1}{2} \sqrt{\bigl( (\vc{u} \cdot \vc{u})(\vc{v} \cdot \vc{v}) - (\vc{u} \cdot \vc{v})^2 \bigr)}. \end{equation} (3.54)
3.6 直线与平面


直线平面是十分常见且重要的几何对象,在许多场合都有用处。例如,可以判断从虚拟观察点出发、穿过像素中心的射线(即一条直线)是否与球体等几何物体相交。更广泛地说,直线和平面常用于计算几何、计算机视觉、计算机图形学和计算机辅助设计(CAD)等领域。

3.6.1 直线



本书主要讨论线,因此通常直接简称为直线。如右图所示,一条直线可由起点 $S$ 和方向向量 $\vc{d}$ 描述。 为了描述直线,最好使用一种能给出直线上所有点的表示方法。先从右图中的点 $P$ 出发,构造从 $S$ 指向 $P$ 的向量 $\overrightarrow{SP}$。若 $P$ 位于由 $S$ 和 $\vc{d}$ 描述的直线上,则 $\overrightarrow{SP}$ 必须与 $\vc{d}$ 平行。换言之,必存在标量 $t_1$,使得 $t_1\vc{d}$ 与 $\overrightarrow{SP}$ 完全相等,即
\begin{equation} \overrightarrow{SP} = t_1 \vc{d}. \end{equation} (3.55)
由于 $P$ 位于 $\vc{d}$ 所指的方向,还可知 $t_1>0$。同样位于直线上的点 $Q$ 对应另一个标量 $t_2$,满足 $\overrightarrow{SQ} = t_2 \vc{d}$。由于 $Q$ 位于 $\vc{d}$ 的反方向,显然 $t_2<0$。 另一方面,对点 $R$,不存在满足类似关系的标量 $t_3$;也就是说,对任意 $t_3$ 都有 $\overrightarrow{SR} \neq t_3 \vc{d}$。 $P$ 与 $Q$ 的区别仅在于所用标量分别为 $t_1$ 和 $t_2$。由此可见,直线上的任意点都可由某个标量 $t$ 描述。于是,用 $P(t)$ 表示以标量 $t$ 为自变量并返回点 $P$ 的函数;不同的 $t$ 会生成不同的点 $P$。上式可改写为
\begin{gather} \overrightarrow{SP(t)} = t\vc{d} \\ \Longleftrightarrow \\ P(t) - S = t\vc{d} \\ \Longleftrightarrow \\ P(t) = S + t\vc{d}. \end{gather} (3.56)
注意,直线上的所有点 $P(t)$ 都可理解为从 $S$ 出发,加上经过数乘的方向向量 $t\vc{d}$ 后到达的点。例如,$P(0) = S$、$P(1) = S + \vc{d}$、$P(-2.5) = S -2.5\vc{d}$。 下面的定义概括了这种参数化直线。

定义 3.6: 参数形式的直线
以 $t\in \R$ 为参数的直线可由起点 $S$ 和方向向量 $\vc{d}$ 描述。直线上的所有点 $P(t)$ 均可写成
\begin{equation} P(t) = S + t\vc{d}. \end{equation} (3.57)
注意 $\vc{d}\neq \vc{0}$,否则只能生成一个点 $S$(即无法得到直线)。
通常称上面的直线采用显式形式,意即直线上的点 $P(t)$ 可直接由表达式生成。下面的交互式图解 3.15展示了一维、二维和三维空间中的显式直线。
$S$
$P(t)$
$\vc{d}$
$S$
$P(t)$
$\vc{d}$
$S$
$P(t)$
$\vc{d}$
$t$
$P(t) = S + t \vc{d}$
$P(t) = S + t \vc{d}$
交互式图解 3.15: 本交互式图解展示形式为 $P(t) = S + t\vc{d}$ 的直线。拖动滑块可改变 $t$,进而改变点 $P(t)$。首先显示一维直线,这里假设它就是 $x$ 轴。可以移动直线的起点 $S$,也可以改变方向向量 $\vc{d}$ 的长度。改变 $\vc{d}$ 的长度并拖动滑块时,请观察点 $P$ 的移动速度如何变化。单击前进查看二维直线。
交互式图解 3.15: 本交互式图解展示形式为 $\hid{P(t) = S + t\vc{d}}$ 的直线。拖动滑块可改变 $\hid{t}$,进而改变点 $\hid{P(t)}$。首先显示一维直线,这里假设它就是 $\hid{x}$ 轴。可以移动直线的起点 $\hid{S}$,也可以改变方向向量 $\hid{\vc{d}}$ 的长度。改变 $\hid{\vc{d}}$ 的长度并拖动滑块时,请观察点 $\hid{P}$ 的移动速度如何变化。单击前进查看二维直线。
对直线方程 $P(t)-S = t\vc{d}$ 两边取长度,得到 $\ln{P(t)-S} = \ln{t\vc{d}}$。若直线方向向量已经归一化,即 $\ln{\vc{d}}=1$,则 $\abs{t} = \ln{P(t)-S}$。这一性质在计算直线与球面等对象的交点时很有用,第 3.7 节将会看到。

回顾二维点 $S$ 有两个标量分量 $(s_x, s_y)$,二维向量 $\vc{d}$ 同样有两个标量分量 $(d_x,d_y)$。二维直线 $P(t)=S + t\vc{d}$ 可用点和向量的标量分量表示为
\begin{equation} P(t) = S + t\vc{d} \ \ \ \Longleftrightarrow \begin{cases} p_x(t) = s_x + td_x,\\ p_y(t) = s_y + td_y. \end{cases} \end{equation} (3.58)
下面先初步感受一下第 5 章高斯消元法。将上面第一行乘以 $d_y$,第二行乘以 $d_x$,得到下式。为简洁起见,省略 $p_x$ 和 $p_y$ 中的参数 $t$:
\begin{equation} \begin{cases} p_x d_y = s_x d_y + d_x d_y t,\\ p_y d_x = s_y d_x + d_x d_y t. \end{cases} \end{equation} (3.59)
由代数可知,只要等式两边同时减去同一项,等式仍然成立。因此可用第一行减去第二行,得到
\begin{equation} p_x d_y - p_y d_x = s_x d_y - s_y d_x + d_x d_y t - d_x d_y t = s_x d_y - s_y d_x \\ \Longleftrightarrow \\ d_yp_x - d_x p_y + s_y d_x - s_x d_y =0, \end{equation} (3.60)
可以看到,含 $t$ 的项已经消去。进一步改写为
\begin{equation} d_y p_x - d_x p_y + s_y d_x - s_x d_y =0 \\ \Longleftrightarrow \\ a p_x + b p_y + c = 0, \end{equation} (3.61)
其中 $a=d_y$、$b=-d_x$、$c=s_y d_x - s_x d_y$。有些读者可能已经熟悉这个方程;特别地,令 $x=p_x$、$y=p_y$,可得
\begin{equation} a x + b y + c = 0. \end{equation} (3.62)
当 $b\neq 0$ 时,上式还可改写为 $y =(-ax -c)/b=kx+m$,其中 $k=-a/b$、$m=-c/b$。大多数人都熟悉这种直线表达式:$k$ 表示 $x$ 每增加 $1$ 时 $y$ 的变化量,$m$ 是 $x=0$ 时的 $y$ 值。 不过,$a x + b y + c = 0$ 是二维直线更一般的表示,因为它还能描述竖直直线,而 $y=kx+m$ 无法做到。

需要强调的是,直线的隐式形式 $a p_x + b p_y + c = 0$ 与显式形式 $P(t) = S + t\vc{d}$ 精确描述同一条直线,因为前者正是由后者推导而来。 下面说明:若标准正交基,便可用点积改写显式形式。为此,引入 $\vc{n} = (n_x,n_y) = (a,b) = (d_y,-d_x)$,于是
\begin{equation} d_y p_x - d_x p_y + s_y d_x - s_x d_y =0 \\ \Longleftrightarrow \\ \vc{n} \cdot (P - S) = 0, \end{equation} (3.63)
其中 $P=(p_x, p_y)$、$S=(s_x, s_y)$。这里利用了如下事实:当向量在标准正交基下表示时, $(d_y, -d_x) \cdot (p_x, p_y) = d_y p_x + (-d_x) p_y$,参见 定义 3.4。 可以看到,对于从 $S$ 指向直线上任意点 $P$ 的向量,要使 $P$ 位于直线上,它与 $\vc{n}$ 的点积必须为零。又有 $\vc{n}\cdot\vc{d} =$ $(d_y,-d_x)\cdot (d_x,d_y) = $ $d_y d_x - d_x d_y = $ $0$, 即 $\vc{n}$ 与直线方向 $\vc{d}$ 正交。因此,$\vc{n}$ 常称为直线的法向量。 此外,$\vc{n} \cdot (P - S) = 0$ 称为隐式形式,因为不便直接用它生成直线上的点;不过,用它判断点 $P$ 是否位于直线上却十分直接。

由此得到二维直线隐式形式的定义。

定义 3.7: 二维直线的隐式形式
一条直线可由起点 $S$ 和法向量 $\vc{n}$ 以隐式形式表示。直线上的所有点 $P$ 均满足
\begin{equation} \vc{n} \cdot (P - S) = 0. \end{equation} (3.64)
注意 $\vc{n}\neq \vc{0}$,否则所有点 $P$ 都会落在这条“直线”上。
注意,即使不是正交基,定义 3.7仍然成立。也就是说,直线仍可写为 $\vc{n} \cdot (P-S) = 0$,其中 $\vc{n}$ 是直线的法向量。不过,此时 $\vc{n}$ 一般不再等于 $(d_y, -d_x)$,因而其坐标不再能直接算出。

如上所述,二维直线有两种不同的数学表示。一维或三维直线不能照搬这两种形式。不过,第 3.6.2 节将看到,三维平面同样具有隐式和显式两种表示。

回到形如 $\vc{n} \cdot (P - S) = 0$ 的二维直线:它表示由 $S$ 与 $\vc{d}$ 确定的直线上所有点 $P$ 都满足上式,即相应点积为零。 若 $P$ 不在直线上会怎样?此时点积当然不为零,但这个结果还能告诉我们其他信息吗?事实证明,它非常有用。为说明这一点,定义关于 $P$ 的标量函数 $e$:
\begin{equation} e(P) = \vc{n} \cdot (P - S). \end{equation} (3.65)
在计算机图形学中,这个函数有时称为边函数,也称为有符号距离函数(本节稍后解释)。 由于 $e(P)$ 由点积定义,由第 3.4 节可知:当 $[\vc{n}, P-S] < \pi/2$ 时 $e(P)>0$;当 $[\vc{n}, P-S] > \pi/2$ 时 $e(P)<0$;仅当 $[\vc{n}, P-S] = \pi/2$ 时 $e(P)=0$。而 $e(P)=0$ 也意味着 $P$ 位于由 $S$ 和 $\vc{d}$ 确定的直线上。因此,当 $e(P)>0$ 时,称 $P$ 位于直线的正半平面;当 $e(P)<0$ 时,称 $P$ 位于负半平面。也就是说,一条直线把整个二维平面分成两个半平面,如交互式图解 3.16所示。
$S$
$P$
$\vc{n}$
$e(P)$
交互式图解 3.16: 这里将边函数 $e(P) = \vc{n} \cdot (P - S)$ 可视化。回顾直线由起点 $S$ 和法向量 $\vc{n}$ 表示,两者都可按住并拖动。图中的虚线就是满足 $e(P)=0$ 的直线,带加号和减号的圆分别标示直线两侧的正半平面和负半平面。请尝试把点 $P$ 恰好移到虚线上,同时观察左下角 $e(P)$ 的计算结果;再把 $P$ 分别移到正、负半平面。最后,可利用点积的定义,使 $P-S$ 与 $\vc{n}$ 重合并将 $\vc{n}$ 归一化,即令 $\ln{\vc{n}}=1$。此时 $e(P)$ 给出从虚线到 $P$ 的有符号正交距离。
交互式图解 3.16: 这里将边函数 $\hid{e(P) = \vc{n} \cdot (P - S)}$ 可视化。回顾直线由起点 $\hid{S}$ 和法向量 $\hid{\vc{n}}$ 表示,两者都可按住并拖动。图中的虚线就是满足 $\hid{e(P)=0}$ 的直线,带加号和减号的圆分别标示直线两侧的正半平面和负半平面。请尝试把点 $\hid{P}$ 恰好移到虚线上,同时观察左下角 $\hid{e(P)}$ 的计算结果;再把 $\hid{P}$ 分别移到正、负半平面。最后,可利用点积的定义,使 $\hid{P-S}$ 与 $\hid{\vc{n}}$ 重合并将 $\hid{\vc{n}}$ 归一化,即令 $\hid{\ln{\vc{n}}=1}$。此时 $\hid{e(P)}$ 给出从虚线到 $\hid{P}$ 的有符号正交距离。
借助定义 3.1点积),式 (3.65)可改写为
\begin{equation} e(P) = \vc{n} \cdot (P - S) = \ln{\vc{n}}\, \ln{P - S} \cos [\vc{n}, P-S]. \end{equation} (3.66)
注意,$\ln{P - S} \cos [\vc{n}, P-S]$ 实际上是点 $P$ 到直线的正交距离,只不过这个“距离”带有符号:$P$ 位于正半平面时为正,位于负半平面时为负。 还要注意,若 $\vc{n}$ 已归一化,则 $e(P)$ 恰好就是有符号正交距离函数,即 $e(P) = \ln{P - S} \cos [\vc{n}, P-S]$。

例 3.8:
考察经过点 $S = (2,1)$、法向量为 $\vc{n} = (3,4)$ 的直线。点 $P=(x,y)$ 到这条直线的距离是多少?点 $P = (1,1)$ 到直线的距离又是多少?

上一段说明了可用有符号距离函数 $e(P) = \vc{n} \cdot (P - S)$ 计算距离。这个函数还可写成所谓的仿射形式
\begin{equation} e(P) = \vc{n} \cdot (P - S) = ax + by + c . \end{equation} (3.67)
\begin{equation} d = | \frac{\vc{n}}{|\vc{n}|} \cdot (P - S) | \end{equation} (3.68)
在本例中
\begin{equation} d = | \frac{\vc{n}}{|\vc{n}|} \cdot (P - S) | = |(3/5, 4/5) \cdot (x-2,y-1) |= | \frac{3(x-2)+4 (y-1)}{5} |= | \frac{3}{5}x+\frac{4}{5}y-2 | . \end{equation} (3.69)


例 3.9: 游戏画面渲染
运行电子游戏时,通常由图形处理器绘制全部画面,而图形处理器针对三角形绘制做了高度优化。三角形内部每个像素的颜色可由游戏开发者编写的一段短程序——着色器——计算,从而产生图 3.17所示的丰富视觉效果。 图形处理器中判断像素是否位于三角形内部的硬件会使用边函数。三角形有三条边(或三条直线),因此构造三个边函数 $e_i(P)$,其中 $i\in\{1,2,3\}$。若 $e_1(P) \geq 0$、$e_2(P) \geq 0$ 且 $e_3(P) \geq 0$,则认为中心位置为 $P$ 的像素位于三角形内部。图形处理器硬件设计者和游戏开发者的日常工作会大量用到线性代数。
交互式图解 3.17: DICE 开发的电子游戏《镜之边缘:催化剂》截图。图中渲染的每个物体都由一组三角形构成,三角形内各像素的颜色由游戏开发者编写的短程序计算。为判断像素是否位于三角形内部,图形处理器通常使用三个边函数,每条边对应一个。
(版权所有 © 2015 Electronic Arts Inc.)
交互式图解 3.17: DICE 开发的电子游戏《镜之边缘:催化剂》截图。图中渲染的每个物体都由一组三角形构成,三角形内各像素的颜色由游戏开发者编写的短程序计算。为判断像素是否位于三角形内部,图形处理器通常使用三个边函数,每条边对应一个。
(版权所有 © 2015 Electronic Arts Inc.)

3.6.2 平面



三维(及更高维)平面与二维直线相似:二者都会把所在空间分成两个半空间。第 3.6.1 节已经看到,二维直线把 $xy$ 平面分为正、负两个半平面。与二维直线一样,平面也有隐式和显式两种表示。

要像用 $P(t) = S + t\vc{d}$ 表示直线那样,以显式形式定义一个平面,需要一个起点 $S$ 和两个方向向量 $\vc{d}_1$、$\vc{d}_2$。这两个方向向量不能共线,即对任意 $k$ 都有 $\vc{d}_1 \neq k \vc{d}_2$;换言之,它们既不能同向平行,也不能反向平行。两个方向向量都位于平面内,因此若点 $P$ 位于该平面内,必有
\begin{equation} \overrightarrow{SP} = t_1 \vc{d}_1 + t_2\vc{d}_2, \end{equation} (3.70)
$S$
$P$
$\vc{d}_1$
$\vc{d}_2$
其中 $t_1$ 和 $t_2$ 取某些标量值。与直线类似,把这两个标量作为 $P$ 的参数,可将上式改写为
\begin{gather} \overrightarrow{SP(t_1,t_2)} = t_1 \vc{d}_1 + t_2\vc{d}_2 \\ \Longleftrightarrow \\ P(t_1, t_2) - S = t_1 \vc{d}_1 + t_2\vc{d}_2 \\ \Longleftrightarrow \\ P(t_1, t_2) = S + t_1 \vc{d}_1 + t_2\vc{d}_2. \\ \end{gather} (3.71)
右图也展示了这种形式。可以看出,它与向量加法非常相似:方向向量 $\vc{d}_1$ 和 $\vc{d}_2$ 分别乘以 $t_1$、$t_2$,再把所得向量与起点 $S$ 相加。由此得到下面的定义。

定义 3.8: 参数形式的平面
以 $t_1\in\R$ 和 $t_2\in\R$ 为参数的平面可由起点 $S$ 和两个方向向量 $\vc{d}_1$、$\vc{d}_2$ 描述。平面上的所有点 $P(t_1,t_2)$ 均可写成
\begin{equation} P(t_1, t_2) = S + t_1 \vc{d}_1 + t_2\vc{d}_2. \end{equation} (3.72)
若 $\vc{d}_1$ 或 $\vc{d}_2$ 中任一个为 $\vc{0}$,或二者同向、反向平行,则该式退化为参数化直线方程。
平面方程也有隐式形式。先将平面方程写成下面的分量形式,其中 $d_{1,y}$ 表示 $\vc{d}_1$ 的 $y$ 分量,其余类推。
\begin{equation} P(t_1, t_2) = S + t_1 \vc{d}_1 + t_2\vc{d}_2 \ \ \ \Longleftrightarrow \ \ \ \begin{cases} p_x(t_1,t_2) = s_x + t_1 d_{1,x} + t_2 d_{2,x},\\ p_y(t_1,t_2) = s_y + t_1 d_{1,y} + t_2 d_{2,y},\\ p_z(t_1,t_2) = s_z + t_1 d_{1,z} + t_2 d_{2,z}. \end{cases} \end{equation} (3.73)
回顾二维直线的参数形式 $P(t)=S+t\vc{d}$ 可通过消去 $t$,化为隐式形式 $\vc{n}\cdot (P-S)=0$。同样也可消去上面式 (3.73)中的 $t_1$ 和 $t_2$。这可用高斯消元法完成,第 5 章给出了相应例子。这里直接给出结果:式 (3.73) 可化为
\begin{equation} \vc{n} \cdot (P - S) = 0, \end{equation} (3.74)
消去 $t_1$ 和 $t_2$ 的具体过程参见第 5 章。注意,$\vc{n}$ 是平面的法向量,即它与平面内任意向量都垂直。$\vc{n}$ 与 $\vc{d}_1$、$\vc{d}_2$ 之间还存在一种关系,即叉积,这是第 4 章的主题。

定义 3.9: 平面的隐式方程
一个平面可由起点 $S$ 和法向量 $\vc{n}$ 以隐式形式表示。平面内所有点 $P$ 均满足
\begin{equation} \vc{n} \cdot (P - S) = 0. \end{equation} (3.75)
注意 $\vc{n}\neq \vc{0}$,否则该表达式恒为零。
与直线完全相同,也可定义有符号距离函数
\begin{equation} e(P) = \vc{n} \cdot (P - S), \end{equation} (3.76)
当 $P$ 位于平面内时,$e(P)=0$。当 $P$ 与点 $S+\vc{n}$ 位于平面同一侧时,$e(P)>0$,这一侧称为正半空间;类似地,若 $e(P)<0$,则 $P$ 与点 $S-\vc{n}$ 位于平面同一侧,这一侧称为负半空间。

例 3.10: 点到平面的正交投影
本例说明如何把点 $P$ 正交投影到由法向量 $\vc{n}$ 和起点 $S$ 定义的平面上。交互式图解 3.19先演示这一过程。
$P$
$S$
$\vc{n}$
$\vc{v}$
$\proj{\vc{n}}{\vc{v}}$
$-\proj{\vc{n}}{\vc{v}}$
$Q$
交互式图解 3.19: 本插图展示如何把点 $P$(灰色圆)正交投影到由法向量 $\vc{n}$ 和起点 $S$ 定义的平面上。图中的点可以移动。单击或点按前进开始演示。
交互式图解 3.19: 本插图展示如何把点 $\hid{P}$(灰色圆)正交投影到由法向量 $\hid{\vc{n}}$ 和起点 $\hid{S}$ 定义的平面上。图中的点可以移动。单击或点按前进开始演示。
投影点 $Q$ 的表达式很简单:
\begin{equation} Q = P - \proj{\vc{n}}{\vc{v}}, \end{equation} (3.77)
其中 $\vc{v}=P-S$。 由于投影公式为 $\proj{\vc{n}}{\vc{v}} = \bigl( (\vc{v} \cdot \vc{n})/(\ln{\vc{n}}^2) \bigr)\vc{n}$,即一个标量乘以 $\vc{n}$,可知在构造 $Q$ 的过程中,除用于计算标量的向量外,唯一实际参与位移的向量就是 $\vc{n}$。因此,$Q$ 是沿着与平面正交的方向投影得到的。 事实上,既然是用 $\vc{v}$ 在 $\vc{n}$ 上的投影来移动点 $P$,点 $Q$ 必然位于平面内。也可把 $Q$ 代入平面方程,检验是否有 $\vc{n} \cdot (Q-S)=0$,证明如下。
\begin{align} \vc{n} \cdot (Q-S) =& \vc{n} \cdot (P - \proj{\vc{n}}{\vc{v}} - S) \\ =& \vc{n} \cdot (\underbrace{P-S}_{\vc{v}} - \proj{\vc{n}}{\vc{v}}) \\ =& \vc{n} \cdot (\vc{v} - \proj{\vc{n}}{\vc{v}}) \\ =& \vc{n} \cdot \vc{v} - \vc{n} \cdot \underbrace{ \Biggl(\frac{\vc{v} \cdot \vc{n}}{\ln{\vc{n}}^2}\vc{n}\Biggr) }_{ \proj{\vc{n}}{\vc{v}} }\\ =& \vc{n} \cdot \vc{v} - \vc{n} \cdot \Biggl(\frac{\vc{v} \cdot \vc{n}}{\ln{\vc{n}}^2}\vc{n}\Biggr)\\ =& \vc{n} \cdot \vc{v} - \frac{\vc{v} \cdot \vc{n}}{\ln{\vc{n}}^2} (\vc{n} \cdot \vc{n})\\ =& \vc{n} \cdot \vc{v} - \frac{\vc{n} \cdot \vc{v}}{\ln{\vc{n}}^2} \ln{\vc{n}}^2 = 0\\ \end{align} (3.78)
将点(或向量)投影到平面上,与计算反射向量也很相似,后面的例 3.13将讨论这一点。
下面的例子同时使用直线方程和平面方程。

例 3.11: 平面上的阴影投影
设光源位于 $L$,另有一个三角形,其三个顶点为 $V_i$,$i\in \{1,2,3\}$。三角形会把阴影投射到由起点 $S$ 和法向量 $\vc{n}$ 定义的平面上;也就是说,对平面内所有点 $P$,平面方程为 $\vc{n} \cdot (P-S)=0$。 交互式图解 3.20展示了完整过程,操作图解后,下面将推导相应公式。
$L$
$V_1$
$V_2$
$V_3$
$S$
$\vc{n}$
$\vc{d}_1$
$\vc{d}_2$
$\vc{d}_3$
交互式图解 3.20: 本插图展示如何计算投射到平面上的阴影。初始场景包含位于 $L$ 的光源(黄色圆)、顶点为 $V_i$ 的三角形以及地面;地面方程为 $\vc{n}\cdot(P-S)=0$。单击或点按前进开始演示。
交互式图解 3.20: 最后显示阴影三角形。图中的光源位置可以移动,不过某些位置会产生难以预料的图像。把光源移到三角形下方尤其有意思:现有计算仍会生成一个阴影(有时称为反阴影),尽管这并不符合物理规律。
为计算阴影落在平面上的位置,需要为每个顶点构造一条射线。三条射线都从光源位置 $L$ 出发,指向各顶点的方向为 $\vc{d}_i = V_i - L$,即射线方向由 $L$ 到 $V_i$ 的线段确定。因此各射线的直线方程为
\begin{equation} R_i(t) = L + t \vc{d}_i, \text{ 其中 } \vc{d}_i = V_i - L,\quad i\in \{1,2,3\}. \end{equation} (3.79)
真正要寻找的是这些射线“击中”平面的时刻,也就是同时满足直线方程 $R_i(t)$ 与平面方程 $\vc{n}\cdot(P-S)=0$ 的点。由于平面内的点 $P$ 满足 $\vc{n}\cdot(P-S)=0$,而我们又要求 $P$ 位于射线上,只需在平面方程中用 $R_i(t)$ 替换 $P$ 并化简:
\begin{equation} \begin{array}{c} \left. \begin{array}{l} R_i(t) = L + t \vc{d}_i \\ \vc{n}\cdot(P-S)=0 \end{array} \right\} \Longrightarrow \vc{n}\cdot(R_i(t)-S) =0 \\ \Longleftrightarrow \\ \vc{n}\cdot(L + t \vc{d}_i-S) = 0 \\ \Longleftrightarrow \\ \vc{n}\cdot (L-S) + t (\vc{n}\cdot\vc{d}_i) = 0 \end{array} \end{equation} (3.80)
这是关于 $t$ 的一次多项式,解如下。这里给 $t$ 加上下标 $i$,以明确表示每个三角形顶点都有一个解:
\begin{equation} t_i = \frac{-\vc{n}\cdot (L-S)}{\vc{n}\cdot\vc{d}_i} = \frac{\vc{n}\cdot (S-L)}{\vc{n}\cdot\vc{d}_i}. \end{equation} (3.81)
必须避免除以零,因此考察分母 $\vc{n}\cdot\vc{d}_i$。它仅在 $\vc{n} \perp \vc{d}_i$ 时为零,这很合理:若射线方向与平面平行,射线就不可能与平面相交;另一种可能是射线恰好位于平面内,此时有无穷多个解。不过,这意味着光源和三角形顶点都位于(地面)平面内,至少在现实中不大可能发生。

交点可按 $R_i(t_i) = L + t_i\vc{d}_i$ 计算,再由 $R_1$、$R_2$、$R_3$ 构成阴影三角形;交互式图解 3.20正是这样生成的。
3.7 回到光线追踪


本章导论(第 3.1 节)的交互式图解 3.1展示了一个称为光线追踪器的图形程序。掌握一些线性代数知识后,编写这类程序并不困难。光线追踪器的核心是一个可见性函数,用来判断一条射线能够“看到”哪个物体。
右图给出了一个例子。光线追踪器先建立一个具有位置和观察方向的虚拟观察者,再从该位置沿该方向计算图像。观察位置就是右图中蓝色射线的起点。随后生成一组射线;最简单的做法是为成像平面上的每个像素生成一条射线。光线追踪程序检查场景中的相关物体,判断穿过某像素的射线是否击中物体,并找出最近的物体。 在图 3.21中,射线击中了三个圆中的两个;由于黄色圆更近,该像素被着为黄色。上方像素对应的射线则击中绿色圆,因此该像素被着为绿色。若要生成阴影、反射和折射效果,还可以从黄色圆与射线的第一个交点继续发射更多射线。

本节给出两个与光线追踪有关的例子。第一个说明如何计算三维射线与三维球面的交点;第二个说明如何在已知曲面法向量时计算向量的反射。两个例子都以点积为主要工具。

例 3.12: 射线与球面求交
一个球面可由半径 $r$ 和球心 $C$ 定义。球面由所有到球心 $C$ 的距离等于半径 $r$ 的点 $P$ 构成,即
\begin{equation} \ln{P - C} = r. \end{equation} (3.82)
第 3.6.1 节所述,三维直线——这里也称射线——通常用参数 $t$ 表示,并具有原点或起点 $S$ 与方向 $\vc{d}$。射线的显式形式为(参见定义 3.6
\begin{equation} R(t) = S + t\vc{d}. \end{equation} (3.83)
若 $R(t)$ 与 $P$ 是同一点,则射线在该点处与球面相交。因此用射线方程 $R(t)$ 替换 $P$ 并化简,得到
\begin{gather} \ln{P - C} = r \\ \Longleftrightarrow \\ \ln{S + t\vc{d} - C} = r \\ \Longleftrightarrow \\ (S + t\vc{d} - C) \cdot (S + t\vc{d} - C)= r^2 \\ \Longleftrightarrow \\ t^2(\vc{d}\cdot\vc{d}) + 2t(\vc{d}\cdot(S-C)) + (S-C)\cdot(S-C)-r^2 = 0 \\ \Longleftrightarrow \\ at^2 + 2bt +c =0, \end{gather} (3.84)
其中 $a=\vc{d}\cdot\vc{d}$、$b=\vc{d}\cdot(S-C)$、$c=(S-C)\cdot(S-C)-r^2$。这已经化为一个二次多项式,可解析求解:
\begin{equation} t = \frac{-b \pm \sqrt{b^2 -ac}}{a}. \end{equation} (3.85)
若 $\vc{d}$ 已归一化,即 $\ln{\vc{d}}=1$,则 $t$ 表示沿射线从起点 $S$ 到球面交点的距离。不过还必须满足 $b^2 -ac \geq 0$;否则 $t$ 为复数,而射线上的虚数距离没有直接的几何含义。因此,当 $b^2-ac<0$ 时,射线不与球面相交。 方程至多有两个解 $t_1$、$t_2$,分别对应射线进入和离开球面的交点,即 $R(t_1)$ 和 $R(t_2)$。若 $t_1=t_2$,射线只在一点与球面相切。下面的交互式图解 3.22展示了这些情形。
$S$
$\vc{d}$
$R(t_1)$
$R(t_2)$
$C$
交互式图解 3.22: 检验射线 $R(t) = S + t\vc{d}$ 与圆是否相交。按住并拖动可改变射线方向和圆心。上面的推导最终得到一个二次多项式,至多有两个解 $t_1$ 和 $t_2$,它们给出两个交点 $R(t_1)$ 和 $R(t_2)$。若交点存在,图中分别用红色和绿色实心圆表示。请探索射线起点位于圆内时交点如何变化,并尝试让 $R(t_1)$ 与 $R(t_2)$ 尽可能接近。
交互式图解 3.22: 检验射线 $\hid{R(t) = S + t\vc{d}}$ 与圆是否相交。按住并拖动可改变射线方向和圆心。上面的推导最终得到一个二次多项式,至多有两个解 $\hid{t_1}$ 和 $\hid{t_2}$,它们给出两个交点 $\hid{R(t_1)}$ 和 $\hid{R(t_2)}$。若交点存在,图中分别用红色和绿色实心圆表示。请探索射线起点位于圆内时交点如何变化,并尝试让 $\hid{R(t_1)}$ 与 $\hid{R(t_2)}$ 尽可能接近。

例 3.13: 反射定律
本章导论(第 3.1 节)的图像中已经计算出球体上的反射画面。为实现这一效果,需要计算反射向量,而点积正可用于此。还需要反射定律:入射角等于反射角。交互式图解 3.23展示了三维向量的情形。
$\vc{i}$
$\vc{n}$
$\vc{i}$
$\proj{\vc{n}}{\vc{i}}$
$-\proj{\vc{n}}{\vc{i}}$
$-\proj{\vc{n}}{\vc{i}}$
$\vc{r}$
交互式图解 3.23: 本插图说明:已知入射向量 $\vc{i}$ 和交点处的法向量 $\vc{n}$ 时,如何计算反射向量 $\vc{r}$。这里,入射射线 $\vc{i}$ 指向一个灰色点。单击或点按前进开始演示。
交互式图解 3.23: 本插图说明:已知入射向量 $\hid{\vc{i}}$ 和交点处的法向量 $\hid{\vc{n}}$ 时,如何计算反射向量 $\hid{\vc{r}}$。这里,入射射线 $\hid{\vc{i}}$ 指向一个灰色点。单击或点按前进开始演示。
已经从几何上看过反射向量如何构造(交互式图解 3.23),下面给出其数学表达式:
\begin{align} \vc{r} =& \vc{i} - \proj{\vc{n}}{\vc{i}} - \proj{\vc{n}}{\vc{i}} \\ =& \vc{i} - 2\proj{\vc{n}}{\vc{i}} \\ =& \vc{i} - 2\frac{\vc{i} \cdot \vc{n}}{\ln{\vc{n}}^2}\vc{n}. \end{align} (3.86)
若 $\vc{n}$ 已归一化,即 $\ln{\vc{n}}=1$,上式可简化为
\begin{equation} \vc{r} = \vc{i} - 2(\vc{i} \cdot \vc{n})\vc{n}. \end{equation} (3.87)
注意,$\vc{r}$ 必须位于 $\vc{i}$ 与 $\vc{n}$ 张成的同一平面内,因为 $2(\vc{i}\cdot\vc{n})$ 是标量,整个运算只是把 $\vc{n}$ 的数乘加到 $\vc{i}$ 上。 下面再证明入射角等于反射角,即 $[-\vc{i},\vc{n}] = [\vc{r},\vc{n}]$。注意 $\vc{i}$ 前的负号是必需的,因为 $\vc{i}$ 指向交点,而 $\vc{r}$ 背离交点。 为简单起见,设 $\vc{i}$ 和 $\vc{n}$ 都已归一化。于是 $\cos [-\vc{i},\vc{n}] = -\vc{i} \cdot \vc{n}$。反射向量 $\vc{r}$ 与法向量 $\vc{n}$ 的点积可表示并化简如下。
\begin{align} \cos [\vc{r},\vc{n}] =& \vc{r} \cdot \vc{n} \\ =& (\vc{i} - 2(\vc{i} \cdot \vc{n})\vc{n})\cdot \vc{n} \\ =& \vc{i}\cdot \vc{n} - 2(\vc{i} \cdot \vc{n}) \underbrace{(\vc{n}\cdot \vc{n})}_{=1} \\ =& \vc{i}\cdot \vc{n} - 2(\vc{i} \cdot \vc{n}) \\ =& - (\vc{i} \cdot \vc{n}) \end{align} (3.88)
可见,入射角与反射角的余弦相同。由于点积只定向量间最小的非负夹角,而余弦函数在 $0$ 到 $\pi$ 上具有唯一性,两个角也必然相等。对任意长度的入射向量和法向量也可证明这一结论,留作练习。


第 2 章:向量(上一章) 第 4 章:向量积(下一章)