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

投影向量与投影数量

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

1 · 两种投影的分工

s=bcosθs = |b|\cos\theta · b=aba2ab_\parallel = \frac{a \cdot b}{|a|^2} a

aa 非零,θ\thetaaabb 的夹角。bbaa 上的投影数量 (scalar projection) 与投影向量 (vector projection) 分别定义为

s=bcosθ=aba,b=aba2a=saas = |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 换成 2a2assbb_\parallel 都不变;把 aa 换成 a-ass 变号而 bb_\parallel 纹丝不动,因为分子分母各变一次号。

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

2 · 正交分解

b=b+bb = b_\parallel + b_\perp

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

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

ab=ababa2(aa)=abab=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+qb = p + q = p' + q' 是两组这样的分解,则 ppp - p'aa 共线,同时又等于 qqq' - q、与 aa 垂直。与 aa 共线的向量形如 λa\lambda a,垂直条件给出 λa2=0\lambda |a|^2 = 0aa 非零迫使 λ=0\lambda = 0,两组分解相同。∎

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

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

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

3 · 浮点意义下的正交

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

警示 ·bbaa 上的投影」这句话本身有歧义,它可能指实数 ss,也可能指向量 bb_\parallel,两者的模相同而类型不同,行文中须写明取的是哪一个。另有一处不对称容易漏:bbaa 上的投影数量是 ab/aa \cdot b / |a|aabb 上的则是 ab/ba \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