定义 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.5):
\begin{equation}
\cos \theta= \frac{a}{c},
\end{equation}
式 (3.6):
\begin{equation}
\vc{w} = \ln{\vc{w}}\ \vc{v} = \ln{\vc{u}} \cos [\vc{u},\vc{v}]\ \vc{v}.
\end{equation}
定义 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}
注意,若 $\ln{\vc{v}}=1$,即 $\vc{v}$ 已归一化,则投影公式可简化为
$\proj{\vc{v}}{\vc{u}} = (\vc{u} \cdot \vc{v})\vc{v}$.
定理 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}
式 (1.5):
\begin{equation}
c^2 = a^2 + b^2 - 2ab\cos \gamma.
\end{equation}
定义 3.4:标准正交基下的点积计算
在任意标准正交基下,两个 $n$ 维向量 $\vc{u}$ 与 $\vc{v}$ 的点积可按下式计算:
\begin{equation}
\vc{u}\cdot\vc{v} = \sum_{i=1}^{n} u_i v_i,
\end{equation}
即各对应分量乘积之和。二维和三维点积分别为
\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.7:二维直线的隐式形式
一条直线可由起点 $S$ 和法向量 $\vc{n}$ 以隐式形式表示。直线上的所有点 $P$ 均满足
\begin{equation}
\vc{n} \cdot (P - S) = 0.
\end{equation}
注意 $\vc{n}\neq \vc{0}$,否则所有点 $P$ 都会落在这条“直线”上。
式 (3.65):
\begin{equation}
e(P) = \vc{n} \cdot (P - S).
\end{equation}
式 (3.73):
\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.6:参数化直线
以 $t\in \R$ 为参数的直线可由起点 $S$ 和方向向量 $\vc{d}$ 描述。直线上的所有点 $P(t)$ 均可写成
\begin{equation}
P(t) = S + t\vc{d}.
\end{equation}
注意 $\vc{d}\neq \vc{0}$,否则只能生成一个点 $S$(即无法得到直线)。
第 3 章:点积
本章介绍一种强大的工具——。
点积是计算机图形学的基础构件之一。
交互式图解 3.1展示了一个称为光线追踪器的计算机图形程序。光线追踪器在场景中放置虚拟相机和若干光源;相机由位置、视场角和朝向确定。
光线追踪器从相机位置向成像上的每个像素发射一条射线,计算射线首先击中的物体,并判断交点能否直接接收到光源照明;若不能,该点便处于阴影中。程序还可以继续追踪反射射线,从而生成具有反射效果的物体,例如
交互式图解 3.1中间的球体。单击图解下方的
开始,亲自试用光线追踪程序。
在上面的光线追踪程序中,既用于计算射线与球面的交点,也用于测量到交点的。此外,用于计算反射效果的反射定律也用点积实现。理解点积的工作原理后,我们将在
第 3.7 节再次讨论这两个主题。
一般来说,本质上与度量有关,也就是如何测量向量的夹角和长度。接下来先用两个简短部分讨论夹角和,然后进入本章的主体:定义点积、说明引入它的动机,并在
第 3.2.3 节给出点积的法则和性质。
第 3.3 节介绍,
第 3.4 节给出一组常用不等式,
第 3.5 节通过例子展示点积的用法。随后讨论和,最后再回到光线追踪。
向量 $\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 投影
由三角学可知,在直角三角形中,一个锐角的余弦与斜边及其一条直角边的有关。
更准确地说,它可表示为
|
\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) 相同。
本节介绍一种简便的点积计算方法。设有两个三维向量 $\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)
|
例 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。
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。
了解向量经过 $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.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}$,亲自观察这一情形。
本节给出一些实用的例子,并明确标出推导每一步所用的法则。法则编号写在等号上方,例如
|
\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)
|
和是十分常见且重要的几何对象,在许多场合都有用处。例如,可以判断从虚拟观察点出发、穿过像素中心的射线(即一条)是否与球体等几何物体相交。更广泛地说,直线和平面常用于计算几何、计算机视觉、计算机图形学和计算机辅助设计(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展示了一维、二维和三维空间中的显式直线。
对直线方程 $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所示。
借助
定义 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.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先演示这一过程。
投影点 $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$ 出发,指向各顶点的方向为 $\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.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展示了这些情形。
例 3.13:
反射定律
本章导论(
第 3.1 节)的图像中已经计算出球体上的反射画面。为实现这一效果,需要计算反射向量,而点积正可用于此。还需要反射定律:入射角等于反射角。
交互式图解 3.23展示了三维向量的情形。
已经从几何上看过反射向量如何构造(
交互式图解 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$ 上具有唯一性,两个角也必然相等。对任意长度的入射向量和也可证明这一结论,留作练习。
术语提示:
映射 $F$ 是记作 $F: N \rightarrow M$ 的规则,它把集合 $N$ 中的每个元素对应到集合 $M$ 中的一个元素。这里 $N$ 称为定义域。