数学 / 平面向量 · 从有向线段到数量积 / 投影向量与投影数量 待审核 5 / 6
projection · ∣b∣cos⁡θ|b|\cos\theta · a⋅b∣a∣2a\frac{a \cdot b}{|a|^2} a

投影向量与投影数量

数量积已经给出 a⋅ba \cdot b 的几何读法:bb 在 aa 方向上投影的长度,乘以 ∣a∣|a|。在那一页里「投影」只是一句解释;本页把它拆成两个类型不同的对象——一个实数与一个向量——并给出它们唯一存在的分解定理。

1 · 两种投影的分工

s=∣b∣cos⁡θs = |b|\cos\theta · b∥=a⋅b∣a∣2ab_\parallel = \frac{a \cdot b}{|a|^2} a

设 aa 非零,θ\theta 是 aa 与 bb 的夹角。bb 在 aa 上的投影数量 (scalar projection) 与投影向量 (vector projection) 分别定义为

s=∣b∣cos⁡θ=a⋅b∣a∣,b∥=a⋅b∣a∣2 a=s⋅a∣a∣s = |b|\cos\theta = \frac{a \cdot b}{|a|}, \qquad b_\parallel = \frac{a \cdot b}{|a|^2}\, a = s \cdot \frac{a}{|a|}

两者只差一次数乘:投影向量等于投影数量乘以 aa 的单位向量。类型的差别带来三处不能混用的地方。其一,投影数量带符号,θ\theta 为钝角时取负值;投影向量把同一个符号表达成方向,指向 aa 的反向。其二,投影数量的绝对值才是投影向量的模,∣b∥∣=∣s∣|b_\parallel| = |s|。其三,两者对 aa 的依赖方式不同:把 aa 换成 2a2a,ss 与 b∥b_\parallel 都不变;把 aa 换成 −a-a,ss 变号而 b∥b_\parallel 纹丝不动,因为分子分母各变一次号。

由投影数量的定义可把数量积改写成 a⋅b=∣a∣ sa \cdot b = |a| \, s,即一个向量的模乘上另一个向量在它方向上的投影数量。这个式子对两个向量是对称的:a⋅ba \cdot b 也等于 ∣b∣|b| 乘 aa 在 bb 上的投影数量。

2 · 正交分解

b=b∥+b⊥b = b_\parallel + b_\perp

定理 2.1 设 aa 非零。任一向量 bb 可唯一地写成 b=b∥+b⊥b = b_\parallel + b_\perp,其中 b∥b_\parallel 与 aa 共线,b⊥b_\perp 与 aa 垂直。

证明 存在性:取 b∥b_\parallel 为上节的投影向量,b⊥=b−b∥b_\perp = b - b_\parallel。前者是 aa 的数乘,与 aa 共线;后者与 aa 的数量积为

a⋅b⊥=a⋅b−a⋅b∣a∣2 (a⋅a)=a⋅b−a⋅b=0a \cdot b_\perp = a \cdot b - \frac{a \cdot b}{|a|^2}\,(a \cdot a) = a \cdot b - a \cdot b = 0

故与 aa 垂直。唯一性:设 b=p+q=p′+q′b = p + q = p' + q' 是两组这样的分解,则 p−p′p - p' 与 aa 共线,同时又等于 q′−qq' - q、与 aa 垂直。与 aa 共线的向量形如 λa\lambda a,垂直条件给出 λ∣a∣2=0\lambda |a|^2 = 0,aa 非零迫使 λ=0\lambda = 0,两组分解相同。∎

这一分解称为 bb 沿 aa 的正交分解 (orthogonal decomposition)。它立刻给出两条常用结论:∣b∣2=∣b∥∣2+∣b⊥∣2|b|^2 = |b_\parallel|^2 + |b_\perp|^2,即直角三角形的勾股关系;以及 ∣b∥∣≤∣b∣|b_\parallel| \le |b|,等号当且仅当 bb 与 aa 共线。

换个角度,正交分解是平面向量基本定理取特定基底后的实例:以 aa 与 aa 的一个法向量为基底,二者不共线,分解的存在唯一性由那条定理直接承担,上面的证明只是把系数算了出来。

图 2-1 · bb 沿 aa 的正交分解。可拖动 aa、bb 的端点或切换夹角情形,观察投影数量的正负与两个分量的读数。

3 · 浮点意义下的正交

引擎的 decompose 照定义式实现,垂直分量取 b−b∥b - b_\parallel。在画布可达的 195 个整点上穷举 aa 非零与 bb 的全部 194×195194 \times 195 种组合,两条恒等式都不精确成立:b∥+b⊥b_\parallel + b_\perp 与 bb 的距离最大 4.4×10−164.4 \times 10^{-16};b∥⋅b⊥b_\parallel \cdot b_\perp 的绝对值最大 1.2×10−141.2 \times 10^{-14},除以 ∣b∥∣∣b⊥∣|b_\parallel| |b_\perp| 归一后仍有 6.4×10−156.4 \times 10^{-15},最坏的一例是 a=(−6,−2)a = (-6, -2)、b=(−7,−6)b = (-7, -6)。数量级不大,却足以让 dot(par, perp) === 0 这样的写法在多数输入上返回 false。判定垂直的 isPerp 因此比较 ∣a⋅b∣≤ε∣a∣∣b∣|a \cdot b| \le \varepsilon |a| |b| 而非是否等于零,判据按两者的模归一,否则长向量的绝对残差会被误读成不垂直。

警示 ·「bb 在 aa 上的投影」这句话本身有歧义,它可能指实数 ss,也可能指向量 b∥b_\parallel,两者的模相同而类型不同,行文中须写明取的是哪一个。另有一处不对称容易漏:bb 在 aa 上的投影数量是 a⋅b/∣a∣a \cdot b / |a|,aa 在 bb 上的则是 a⋅b/∣b∣a \cdot b / |b|,除非两者的模相等,这两个数并不一样。

4 · 参考文献

  1. Vector projection. Wikipedia. 投影向量与投影数量的定义及两者的区别。https://en.wikipedia.org/wiki/Vector_projection
  2. Orthogonal decomposition. Wikipedia. 沿一个方向的正交分解及其唯一性。https://en.wikipedia.org/wiki/Orthogonality
  3. Gram–Schmidt process. Wikipedia. 正交分解在一般维数下的推广。https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process