数学 / 空间向量 · 用坐标与法向量解立体几何 / 法向量与线面角 待审核 3 / 5
sinθ=cosa,n\sin\theta = \lvert\cos\langle a, n\rangle\rvert

法向量与线面角

综合几何求线面角要先作出斜线在平面内的射影,而射影要靠找垂足,垂足往往要靠一条辅助线。向量法把这三步压成一步:平面由它的法向量代表,斜线的方向向量与法向量的夹角与所求的角互余,一次数量积就够。射影仍然存在,只是不再需要作出来。

1 · 平面的法向量

定义 1.1(法向量) 与平面 α\alpha 垂直的非零向量称 α\alpha 的法向量。

法向量不唯一:所有与 α\alpha 垂直的向量互相共线,构成两条相反的方向。这一点在后面反复起作用:凡是结果不该依赖朝向的量,公式里必须出现绝对值或比值。

求法向量有两条路。一是解方程组:设 n=(x,y,z)n = (x, y, z),取平面内两个不共线向量 uuvv,由 nu=0n \cdot u = 0nv=0n \cdot v = 0 得两个方程三个未知量,令某个分量为 1 后解出另两个。二是直接取叉积 n=u×vn = u \times v,它天然同时垂直于两者。两条路给出的是同一个方向,差一个倍数。

叉积算出的分量常带公因数。正四棱锥 PP-ABCDABCD(底边 2、高 2)侧面 PBCPBC 的叉积原值是 (4,0,2)(4, 0, 2),课本写 (2,0,1)(2, 0, 1)。约简只是换一个同向的代表元:角与距离的公式里法向量都以比值出现,结果不受影响。integerNormal 因此在读数里印约简后的整数形,坐标含无理数时(正四面体)它返回空值,那时改印单位向量。

2 · 线面角

定理 2.1 设直线 ll 的方向向量为 aa,平面 α\alpha 的法向量为 nnllα\alpha 所成的角为 θ\theta。则

sinθ=cosa,n=anan\sin\theta = \lvert\cos\langle a, n\rangle\rvert = \frac{\lvert a \cdot n \rvert}{\lvert a \rvert \lvert n \rvert}

推导只有一句:llα\alpha 所成的角,按定义是 ll 与它在 α\alpha 内的射影所成的角;而 llnn 所成的角与之互余,故正弦换成余弦。

绝对值不是为了让结果好看。nn 取反时 a,n\langle a, n \rangle 变成它的补角,余弦变号,而线面角不该跟着变。这也说明线面角的取值只在 0°90°90° 之间:它没有钝角,也没有方向。两个端点值各有含义——θ=0\theta = 0 表示 ll 落在 α\alpha 内或与 α\alpha 平行(an=0a \cdot n = 0),θ=90°\theta = 90° 表示 lαl \perp \alphaaann 共线)。

单测把这条定理与它的定义对起来验:在平面内扫一圈方向向量,取与 aa 的夹角的最小值,那个最小值就是线面角。这是「斜线与平面内所有直线所成角中最小」这一性质的直接兑现,与被测的公式无关。

3 · 一个完整的算例

例 3.1 正四棱锥 PP-ABCDABCD 底边为 2、高为 2。取 AA 为原点,ABABADAD 沿两条轴,则 B(2,0,0)B(2,0,0)C(2,2,0)C(2,2,0)D(0,2,0)D(0,2,0)P(1,1,2)P(1,1,2)

侧棱 PAPA 与底面:底面的法向量取 (0,0,1)(0,0,1)AP=(1,1,2)\overrightarrow{AP} = (1,1,2)sinθ=2/6=0.8165\sin\theta = 2/\sqrt{6} = 0.8165θ=54.7356°\theta = 54.7356°

侧棱 PAPA 与侧面 PBCPBCBC=(0,2,0)\overrightarrow{BC} = (0,2,0)BP=(1,1,2)\overrightarrow{BP} = (-1,1,2),叉积得 (4,0,2)(4,0,2),约简为 n=(2,0,1)n = (2,0,1)PA=(1,1,2)\overrightarrow{PA} = (-1,-1,-2)PAn=4\lvert \overrightarrow{PA} \cdot n \rvert = 4sinθ=4/30=0.7303\sin\theta = 4/\sqrt{30} = 0.7303θ=46.9113°\theta = 46.9113°

底面对角线 CACA 与侧面 PBCPBCCA=(2,2,0)\overrightarrow{CA} = (-2,-2,0),同一个 nn 给出 sinθ=2/10=0.6325\sin\theta = 2/\sqrt{10} = 0.6325θ=39.2315°\theta = 39.2315°

图 3-1 · 正四棱锥上的线面角。可调方位角与俯仰角旋转视图,拖动棱锥的高,切换斜线与平面的组合;读数给出法向量、余弦、正弦与角度,图上画出射影、垂足与角标。

同一个棱锥上还有一种取法值得单看:ABAB 与侧面 PCDPCD 所成的角是 0°,因为 ABABCDCD 平行,而 CDCD 落在 PCDPCD 内,故 ABAB 平行于该平面。此时 an=0a \cdot n = 0,与「ll 落在 α\alpha 内」给出同一个读数——向量法读不出这两者的分别,它只看方向与法向量是否垂直。要区分得另看一个点是否在平面上。

4 · 读数能到几位

法向量取整与不取整对读数有影响,量级值得记一笔。长方体 3×4×53 \times 4 \times 5 中,平面 A1BDA_1BD 的叉积原值是 (20,15,12)(20, 15, 12),三个分量已互素,读数印它是精确的;体对角线 AC1AC_1 与该平面的线面角是 66.6298°66.6298°。若改用单位化后四舍五入的法向量,同一个角变成:保留两位小数 (0.72,0.54,0.43)(0.72, 0.54, 0.43)66.5400°66.5400°,偏 0.0898°0.0898°;三位给 66.6502°66.6502°,偏 0.0204°0.0204°;四位给 66.6289°66.6289°,偏 0.0009°0.0009°。选整数向量作代表元不只是为了好看。

另一头的精度问题来自 acos 本身。直线几乎垂直于平面时,cosa,n\lvert\cos\langle a, n\rangle\rvert 贴近 1,而 acos 在 1 附近条件数极差:余弦上 101610^{-16} 的误差放大成约 1.5×1081.5 \times 10^{-8} 弧度。实测方向 (108,0,1)(10^{-8}, 0, 1) 与底面的真实线面角是 90°5.73×107°90° - 5.73 \times 10^{-7}°,算出的是整 90°90°;扰动放大到 10610^{-6} 时误差降到 2.5×109°2.5 \times 10^{-9}°。改走 asin 并不能救:余弦已经被夹到 1,信息在夹的那一步就丢了。

注 · 这个下限是方法本身的,不是实现的偏差,shared/geom3d.ts 的单测里记着同一现象的另一面:一对严格同向的向量,夹角只能算到 10610^{-6} 度量级。对中学阶段的题目它无关紧要——答案要么是特殊角,要么保留两三位小数。它值得写下来是因为「读数印到小数第四位」这件事本身在暗示精度,而那一位在这一带并不可靠。

5 · 参考文献

  1. Normal (geometry). Wikipedia. 法向量的定义与它的不唯一性。https://en.wikipedia.org/wiki/Normal_(geometry)
  2. Cross product. Wikipedia. 叉积同时垂直于两个因子,求法向量的直接办法。https://en.wikipedia.org/wiki/Cross_product
  3. Vector projection. Wikipedia. 投影向量与正交分解,射影这一步的代数写法。https://en.wikipedia.org/wiki/Vector_projection
  4. Condition number. Wikipedia. 条件数,解释 acos 在 1 附近为何只剩几位有效数字。https://en.wikipedia.org/wiki/Condition_number