数学 / 空间向量 · 用坐标与法向量解立体几何 / 空间向量基本定理与共面定理 待审核 2 / 5
p=xa+yb+zcp = x a + y b + z c · 混合积

空间向量基本定理与共面定理

平面向量基本定理说的是:不共线的两个向量的全部线性组合铺满整个平面,且系数唯一。空间里同一句话要三个向量,而「不共线」这个条件要换成「不共面」。三条定理由此排成一列,各自回答「几个向量能表示多大范围」。

1 · 共线与共面

定理 1.1(共线定理)设 a0a \ne 0。则 bbaa 共线的充要条件是存在唯一实数 λ\lambda 使 b=λab = \lambda a

判据取叉积:a×b=0a \times b = 0 恰是两者共线。用叉积而不用「对应分量成比例」,是因为后者在某个分量为零时要分情况讨论,而 a×ba \times b 一个式子覆盖全部情形。

定理 1.2(共面定理)设 aabb 不共线。则 ppaabb 共面的充要条件是存在唯一一对实数 λ\lambdaμ\mu 使 p=λa+μbp = \lambda a + \mu b

把三个向量的起点平移到同一点,共面就是「三个箭头落在同一张平面上」。这个条件的代数形式是混合积 [abp]=(a×b)p[a\,b\,p] = (a \times b) \cdot p 为零:a×ba \times b 垂直于 aabb 张成的平面,pp 与它垂直即 pp 落在那张平面内。

四点 AABBCCPP 共面另有一种常用写法。取任一点 OO,则

OP=xOA+yOB+zOC,x+y+z=1\overrightarrow{OP} = x\overrightarrow{OA} + y\overrightarrow{OB} + z\overrightarrow{OC}, \qquad x + y + z = 1

系数和为 1 这一条使式子在原点平移下不变,「共面」这个结论随之与建系无关:把 OO 换到别处,三个系数一个不变。affineDecompose 的单测就验这一条:整体平移 (5,7,11)(5, -7, 11) 后系数与原来逐位相同。

2 · 空间向量基本定理

定理 2.1(空间向量基本定理)设 e1e_1e2e_2e3e_3 不共面。则空间中任一向量 pp 都可唯一地写成

p=xe1+ye2+ze3p = x e_1 + y e_2 + z e_3

向量组 e1e_1e2e_2e3e_3 称空间的一个基底。

定理有两半:存在(覆盖整个空间)与唯一(系数不重复)。两半都依赖「不共面」。若三者共面,它们的线性组合只铺满一张平面,空间中平面外的向量表示不出来;退一步,即使目标向量恰在那张平面内,表示也不再唯一——第三个向量成了多余的自由度。

三条轴上的单位向量 iijjkk 是最常用的基底,此时系数就是坐标。但基底不必正交,也不必等长:长方体 ABCDABCD-A1B1C1D1A_1B_1C_1D_1 的三条共顶点的棱是一组基底,AB\overrightarrow{AB}AD\overrightarrow{AD} 与体对角线 AC1\overrightarrow{AC_1} 也是一组。用哪一组要看题目:若已知条件里出现的都是从同一顶点出发的三条棱的长度与夹角,取那三条棱作基底可以完全避开建系这一步。

3 · 分解的计算

p=xe1+ye2+ze3p = x e_1 + y e_2 + z e_3 是解一个三元一次方程组。克拉默法则用在此处写得特别短,三个分子都是混合积:

x=[pe2e3][e1e2e3],y=[e1pe3][e1e2e3],z=[e1e2p][e1e2e3]x = \frac{[p\,e_2\,e_3]}{[e_1\,e_2\,e_3]}, \qquad y = \frac{[e_1\,p\,e_3]}{[e_1\,e_2\,e_3]}, \qquad z = \frac{[e_1\,e_2\,p]}{[e_1\,e_2\,e_3]}

分母正是定理 2.1 里那个条件的代数形式。基底退化时 decompose3 返回空值,而不是让 0/00/0 变成 NaN 流进读数:分解不存在,不该由一个数字来表示。

例 3.1 长方体 ABCDABCD-A1B1C1D1A_1B_1C_1D_1AB=2AB = 2AD=3AD = 3AA1=4AA_1 = 4。取 AB\overrightarrow{AB}AD\overrightarrow{AD}AA1\overrightarrow{AA_1} 为基底,则 AC1\overrightarrow{AC_1} 的系数是 (1,1,1)(1, 1, 1)AC\overrightarrow{AC} 的系数是 (1,1,0)(1, 1, 0),第三个系数为零说明 ACAC 落在底面内,而 AB1\overrightarrow{AB_1} 的系数是 (1,0,1)(1, 0, 1)。换成基底 AB\overrightarrow{AB}AD\overrightarrow{AD}AC1\overrightarrow{AC_1},同一个 AB1\overrightarrow{AB_1} 的系数变成 (0,1,1)(0, -1, 1),即 AB1=AC1AD\overrightarrow{AB_1} = \overrightarrow{AC_1} - \overrightarrow{AD}。系数随基底而变,被表示的向量不变。

图 3-1 · 三个基向量对目标向量的分解。可调方位角与俯仰角旋转视图,切换基底并拖动目标向量的三个坐标,读数给出混合积、分解系数与重构误差;基底退化的一栏改判目标向量是否与前两个共面。

4 · 判据的尺度

混合积为零是共面的准确判据,写成代码却要留意它是个体积:三个向量同时放大 kk 倍,混合积放大 k3k^3 倍,而共面这件事一点没变。

实测一组:a=(2,0,0)a = (2, 0, 0)b=(0,2,0)b = (0, 2, 0)v=(1,1,107)v = (1, 1, 10^{-7}) 的混合积是 4×1074 \times 10^{-7};整体放大 10 倍后,混合积是 4×1044 \times 10^{-4},涨了 1000 倍。拿固定的 10610^{-6} 当阈值,同一个构型放大一遍就从「共面」翻成「不共面」。

本系列的 decompose2 因此不判混合积,而判 vvaabb 张成的平面的距离与 v\lvert v \rvert 之比:上面两档分别是 107/1.41410^{-7}/1.414106/14.1410^{-6}/14.14,比值都是 7.07×1087.07 \times 10^{-8},不随尺度动。这一改动是实测逼出来的:起初直接调用 shared/geom3d.tscoplanar(它就是混合积与固定 10910^{-9} 比),把同一个几乎共面的构型放大一遍就换了答案,于是本系列的判据改成相对量,而 coplanar 保持原样——它的定位是「混合积为零」这条定义的直译,不是一个带容差的判定器。

警示 · 最小二乘给出的那对 λ\lambdaμ\mu 在不共面时同样有值,它是使 vλaμb\lvert v - \lambda a - \mu b \rvert 最小的那一对,对应 vv 在平面上的投影。读数里必须同时看残差:残差非零时那对系数不是「vv 的分解」,只是最接近的一组。把它当分解用会得到一个看似合理却错误的答案,而这类错误在只报布尔值的接口下反而不容易发生。

5 · 参考文献

  1. Basis (linear algebra). Wikipedia. 基底的定义与表示唯一性。https://en.wikipedia.org/wiki/Basis_(linear_algebra)
  2. Triple product. Wikipedia. 混合积、它的体积含义与共面判据。https://en.wikipedia.org/wiki/Triple_product
  3. Cramer's rule. Wikipedia. 克拉默法则,三元一次方程组的行列式解法。https://en.wikipedia.org/wiki/Cramer%27s_rule
  4. Coplanarity. Wikipedia. 共面的多种等价判据。https://en.wikipedia.org/wiki/Coplanarity