定义 3.1:点积
两个向量(vector) $\vc{u}$ 和 $\vc{v}$ 的点积(dot product)记作 $\vc{u}\cdot \vc{v}$,定义为标量(scalar)值
\begin{equation}
\vc{u}\cdot \vc{v} = \left\{
\begin{array}{ll}
\ln{\vc{u}}\ \ln{\vc{v}} \cos[\vc{u},\vc{v}], & \text{if } \vc{u}\neq \vc{0} \text{ and } \vc{v}\neq \vc{0},\\
0, & \text{if } \vc{u}=\vc{0} \text{ or } \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}$ 上的正交投影(orthogonal projection)记作 $\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{(commutativity)} \\
(ii) & k(\vc{u} \cdot \vc{v}) = (k\vc{u}) \cdot \vc{v} & \spc\text{(associativity)} \\
(iii) & \vc{v} \cdot (\vc{u} +\vc{w}) = \vc{v} \cdot \vc{u} + \vc{v} \cdot \vc{w} & \spc\text{(distributivity)} \\
(iv) & \vc{v} \cdot \vc{v} = \ln{\vc{v}}^2 \geq 0, \mathrm{with\ equality\ only\ when\ } \vc{v}=\vc{0}. & \spc\text{(squared length)} \\
\end{array}
\end{align}
式 1.5:
\begin{equation}
c^2 = a^2 + b^2 - 2ab\cos \gamma.
\end{equation}
定义 3.4:标准正交基(orthonormal basis)中的点积计算
在任何标准正交基(orthonormal basis)中,两个 $n$ 维向量 $\vc{u}$ 和 $\vc{v}$ 的点积可以计算为
\begin{equation}
\vc{u}\cdot\vc{v} = \sum_{i=1}^{n} u_i v_i,
\end{equation}
即逐分量(component)乘积之和。二维和三维点积分别计算为
\begin{align}
\mathrm{two\ dimensions\ } &:\ \ \vc{u}\cdot\vc{v} = u_xv_x + u_yv_y, \\
\mathrm{three\ dimensions\ } &:\ \ \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}$,表明向量是(orthogonal)的,即相互垂直。注意左下角的角度为 $0$,底行中间为 $\pi$ 弧度。在这两种情况下,可以说向量是共的,因为它们在同一条上,而且实际上也是平行的。左下角的向量平行且方向相同,而底行中间的向量平行但方向相反。当两个向量平行时,记作 $\vc{u}\, || \,\vc{v}$。还要注意,如果 $\vc{u}$ 和 $\vc{v}$ 平行,则必有 $\vc{v} = k \vc{u}$ 对某个 $k$ 值成立。
现在我们可以给出本身的定义了:
定义 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{if } \vc{u}\neq \vc{0} \text{ and } \vc{v}\neq \vc{0},\\
0, & \text{if } \vc{u}=\vc{0} \text{ or } \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{\ i.e.,\ } [\vc{u},\vc{v}]=\pi/2 \mathrm{\ or\ } \vc{u} = 0 \mathrm{\ or\ } \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 单位向量与归一化
(unit vector)是为 1 的向量,即如果 $\ln{\vc{v}}=1$ 则 $\vc{v}$ 是。从任意非 $\vc{v}$ 都可以创建一个,这称为(normalize)该向量,该过程称为(normalization)。向量 $\vc{n}$ 由 $\vc{v}$ 通过将 $\vc{v}$ 除以其 $\ln{\vc{v}}$ 得到,即
|
\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}}$,将 $\vc{n}$ 的表达式化简为
$\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}}$ 只是标量),又有正确的(即 $\ln{\vc{w}}$,因为 $\vc{v}$ 的为 1)。然而,我们也希望能处理 $\vc{v}$ 的不为 1 的情况。这可以通过归一化向量 $\vc{v}$ 来实现,即将其乘以 $\frac{1}{\ln{\vc{v}}}$ 使其变为 1。如果在上面的
式 (3.6) 中将 $\vc{v}$ 替换为 $\frac{1}{\ln{\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{v}}]$。接下来,将分子和分母同时乘以 $\ln{\vc{v}}$,即可得到一般的(orthogonal projection)公式
|
\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{(commutativity)} \\
(ii) & k(\vc{u} \cdot \vc{v}) = (k\vc{u}) \cdot \vc{v} & \spc\text{(associativity)} \\
(iii) & \vc{v} \cdot (\vc{u} +\vc{w}) = \vc{v} \cdot \vc{u} + \vc{v} \cdot \vc{w} & \spc\text{(distributivity)} \\
(iv) & \vc{v} \cdot \vc{v} = \ln{\vc{v}}^2 \geq 0, \mathrm{with\ equality\ only\ when\ } \vc{v}=\vc{0}. & \spc\text{(squared length)} \\
\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<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$ 为负时 $[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{scalar}}) \vc{v} + (\underbrace{\vc{w} \cdot \vc{v}}_{\text{scalar}})\vc{v} =
\bigl(\underbrace{(\vc{u}+\vc{w}) \cdot \vc{v}}_{\text{scalar}}\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:
标准正交基
对于由向量集 $\{\vc{e}_1, \dots, \vc{e}_n\}$ 构成的 $n$ 维,以下关系成立
|
\begin{equation}
\vc{e}_i \cdot \vc{e}_j =
\begin{cases}
1 & \text{if } i=j, \\
0 & \text{if } 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{two\ dimensions\ } &:\ \ \vc{u}\cdot\vc{v} = u_xv_x + u_yv_y, \\
\mathrm{three\ dimensions\ } &:\ \ \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}$ 的,就可以得到 $\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:
柯西–施瓦茨不等式(Cauchy–Schwarz inequality)
若 $\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$
另一个相关的不等式是下面的(triangle inequality)。
定理 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)
|
表示使用了法则 $(iii)$(
定理 3.1)来得到等号右边的结果。接下来是一个推导平行四边形定律的例子。
例 3.5:
平行四边形定律
$\vc{u}$
$\vc{v}$
$\vc{u} + \vc{v}$
$\vc{u} - \vc{v}$
假设有两个从同一点出发的向量 $\vc{u}$ 和 $\vc{v}$。在进行(
2.2 节)时,我们已经看到可以构造一个来完成。这个的两条对角线分别是 $\vc{u}-\vc{v}$ 和 $\vc{u}+\vc{v}$,如右边
图 3.12 所示。现在,对角线长度的平方和为
|
\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(t)$。例如:$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 章关于(Gaussian elimination)的内容。将上面一行乘以 $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$ 的向量,则其与 $\vc{n}$ 的必须为零,$P$ 才在上。有趣的是,我们看到 $\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}$ 通常称为的(normal)。还要注意,$\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}$ 的坐标不再简单,因为一般情况下它不再等于 $\vc{n} = (d_y, -d_x)$。
如上所述,二维有两种不同的数学表示。一维或三维则不能这样同时写成显式和隐式形式。然而,如
3.6.2 节所示,三维方程也有类似的两种表示——隐式和显式。
回到形如 $\vc{n} \cdot (P - S) = 0$ 的二维,它表明上的所有点 $P$(由 $S$ 和 $\vc{d}$ 表示)都满足上述表达式,即等于零。如果 $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)$ 为正,当 $[\vc{n}, P-S] > \pi/2$ 时 $e(P)$ 为负,仅当 $[\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$ 在正半空间内,则有符号距离为正;如果 $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$ 的值。与类似,这个表达式可以改写为如下形式,其中两个标量 $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}$,或者 $\vc{d}_1$ 和 $\vc{d}_2$ 平行(无论是同向还是反向),则退化为参数化方程。
有趣的是,方程也有隐式形式。首先将方程按分量形式写出,如下所示,其中 $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)$。同样的方法可以应用于上面的
式 (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$ 之间也存在一种关系。这就是(cross product),它是
第 4 章的主题。
定义 3.9:
隐式平面方程
可以用一个起点 $S$ 和一个 $\vc{n}$ 表示为隐式形式。上的所有点 $P$ 可以由下式描述
|
\begin{equation}
\vc{n} \cdot (P - S) = 0.
\end{equation}
|
(3.75)
|
注意 $\vc{d}\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}$,我们知道 $\vc{n}$ 是构造 $Q$ 时用到的唯一向量(参与标量值计算的向量除外)。因此,$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{ where } \vc{d}_i = V_i - L, \text{ for } 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$ 也满足方程,因此只需在方程中将 $P$ 替换为 $R_i(t)$ 并化简即可。推导如下。
|
\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$ 来定义。球面上的所有点 $P$ 到球心 $C$ 的距离等于半径 $r$。这可以表示为
|
\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$ 相同,则光线在该点与球体相交。因此,我们将 $P$ 替换为光线方程 $R(t)$,化简得到
|
\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$ 将变为复数,而沿光线的虚数距离 $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$ 中的每一个元素,函数 $F$ 给出另一个集合 $M$ 中的一个元素。其中 $N$ 是定义域。