数学 / 空间向量 · 用坐标与法向量解立体几何 / 二面角与法向量的朝向 待审核 4 / 5
θ\theta180°θ180° - \theta · 定向

二面角与法向量的朝向

线面角只在 0°90°90° 之间,公式里那个绝对值把法向量的朝向问题一笔带过。二面角没有这个便利:它的取值跨过 90°90°,钝角与锐角是两个不同的答案,而两个法向量的夹角单靠自己分不出该报哪一个。这一页处理的就是那个符号。

1 · 二面角的平面角

定义 1.1(二面角) 一条直线 ll 与由它出发的两个半平面 α\alphaβ\beta 组成的图形称二面角,记作 α\alpha-ll-β\betall 称棱。在棱上任取一点 OO,在两个半平面内各作垂直于 ll 的射线 OAOAOBOBAOB\angle AOB 称该二面角的平面角,其大小即二面角的大小,取值范围是 0°180°180°

「在棱上任取一点」这句话里藏着一条要验的性质:换一个点,两条垂线的方向不变,故角不变。向量法把这句话写成一行代码——把「OO 指向半平面内给定点」的向量减去它沿棱的分量,剩下的就是那条垂线的方向,而减掉的量恰是取点位置的全部影响。

半平面这个词同样要紧:二面角是两个半平面的夹角,不是两张完整平面的夹角。两张完整平面相交得到的是四个二面角,两两相等、两两互补。所以「面面角」与「二面角」不是同义词,前者按惯例取那个锐角或直角。

2 · 法向量的夹角是哪一个

α\alphaβ\beta 所在平面的法向量为 n1n_1n2n_2,二面角大小为 θ\theta。则

cosθ=n1n2n1n2\lvert\cos\theta\rvert = \frac{\lvert n_1 \cdot n_2 \rvert}{\lvert n_1 \rvert \lvert n_2 \rvert}

只有绝对值这一层是无条件成立的。去掉绝对值后 cosn1,n2\cos\langle n_1, n_2\rangle 等于 cosθ\cos\theta 还是 cosθ-\cos\theta,取决于两个法向量各自指向哪一侧,而这与二面角本身无关。planeAngle 因此只承诺锐角化的结果,取值 0°90°90°

一个曾经想当然的口径值得记下来:既然形体的每个面都有一个朝外的法向量,那么「两个面都取外法向量」似乎就把朝向定死了。实测不成立,而且错得很整齐。正四棱锥 PP-ABCDABCD(底边 2、高 2)的两个相邻侧面 PABPABPBCPBC,外法向量分别是 (0,4,2)(0,-4,2)(4,0,2)(4,0,2),夹角 78.4630°78.4630°;而沿侧棱 PBPB 的二面角是 101.5370°101.5370°。两者互补。这不是巧合:凸形体上相邻两面的外法向量夹角恒等于该棱二面角的补角,正四面体上是 109.4712°109.4712°70.5288°70.5288°,正方体上是 90°90°90°90°(补角与自身相等,所以那里看不出问题)。

警示 · 只算法向量夹角的余弦、再取反余弦,得到的是二面角与它的补角中的一个,无从判断是哪一个。判据必须另找,常用的有三条:在两个半平面内各取一点,看它们分别落在对面平面的哪一侧;观察图形本身是锐角还是钝角;或者按下一节的做法把朝向统一掉。含参数的题目里这一步不能省——参数变化时二面角可能从锐角变成钝角,而锐角化的读数一路连续,看不出那次跨越。

3 · 用棱把朝向定死

把两个法向量都取成「棱的方向向量叉半平面内的一个向量」:

nα=l×OA,nβ=l×OBn_\alpha = l \times \overrightarrow{OA}, \qquad n_\beta = l \times \overrightarrow{OB}

两者的朝向随即被同一个 ll 统一,夹角恒等于二面角本身,钝角也不例外。验算最快的方式是把棱摆在 xx 轴上:取 l=(1,0,0)l = (1,0,0)OA=(0,1,0)\overrightarrow{OA} = (0,1,0)OB=(0,cosθ,sinθ)\overrightarrow{OB} = (0, \cos\theta, \sin\theta),则 nα=(0,0,1)n_\alpha = (0,0,1)nβ=(0,sinθ,cosθ)n_\beta = (0, -\sin\theta, \cos\theta),两者夹角的余弦恰为 cosθ\cos\theta

这个取法的代价是它要求先知道两个半平面内各一个点,也就是说它并不比「棱上作两条垂线」少用信息。它的收益在实现一侧:叉积一次到位,不必解方程组求法向量,也不必再补一次符号判断。dihedralReport 因此把两条路的结果并排交出——垂线法算出的二面角、定向法向量的夹角、以及把其中一个法向量取反后读到的值,三个数一起看,符号问题就没有藏身处。

图 3-1 · 二面角与两个法向量的夹角。可调方位角与俯仰角旋转视图,拖动二面角的大小跨过 90°,切换到正四棱锥与正方体的实例;读数并列给出垂线法的结果、定向法向量的夹角、取反后的值与锐角化结果。

4 · 两个算例

例 4.1 正四棱锥 PP-ABCDABCD 底边 2、高 2,求相邻两侧面沿侧棱 PBPB 的二面角 AA-PBPB-CC

AA 为原点,B(2,0,0)B(2,0,0)C(2,2,0)C(2,2,0)P(1,1,2)P(1,1,2)。棱的方向 PB=(1,1,2)\overrightarrow{PB} = (1,-1,-2)AA 在棱上的垂足是 O(5/3,1/3,2/3)O(5/3,\, 1/3,\, 2/3)。两条垂线方向为 OA=(5/3,1/3,2/3)\overrightarrow{OA} = (-5/3, -1/3, -2/3)OC=(1/3,5/3,2/3)\overrightarrow{OC} = (1/3,\, 5/3,\, -2/3),两者与 PB\overrightarrow{PB} 的数量积都是 0,夹角的余弦为 0.2-0.2,即 101.5370°101.5370°,是钝角。

按定向取法:nα=PB×PA=(0,4,2)n_\alpha = \overrightarrow{PB} \times \overrightarrow{PA} = (0,4,-2)nβ=PB×PC=(4,0,2)n_\beta = \overrightarrow{PB} \times \overrightarrow{PC} = (4,0,2)cosnα,nβ=4/20=0.2\cos\langle n_\alpha, n_\beta\rangle = -4/20 = -0.2,反余弦即 101.5370°101.5370°。若把 nβn_\beta 取反,读到的是 78.4630°78.4630°

例 4.2 正方体 ABCDABCD-A1B1C1D1A_1B_1C_1D_1 中求二面角 A1A_1-BDBD-AA。棱 BDBD 的中点 OO 同时是 A1A_1AA 到棱的垂足,两条垂线方向为 OA1\overrightarrow{OA_1}OA\overrightarrow{OA},夹角的正切为 2\sqrt{2},即 54.7356°54.7356°。锐角化在这一例上不会出错,因为答案本身是锐角。同一条棱上的 A1A_1-BDBD-C1C_1 就不同了:它等于 180°2×54.7356°=70.5288°180° - 2 \times 54.7356° = 70.5288°,仍是锐角,但若换成底边更长的长方体,这个角会跨过 90°90° 变成钝角,而锐角化的读数在跨越处只会折回来,一路看不出发生了什么。

5 · 参考文献

  1. Dihedral angle. Wikipedia. 二面角的定义、平面角与法向量夹角的关系。https://en.wikipedia.org/wiki/Dihedral_angle
  2. Dihedral Angle. Wolfram MathWorld. 二面角的公式与常见多面体的取值。https://mathworld.wolfram.com/DihedralAngle.html
  3. Normal (geometry). Wikipedia. 法向量的朝向自由度。https://en.wikipedia.org/wiki/Normal_(geometry)
  4. Cross product. Wikipedia. 叉积的方向由右手规则定,定向取法的依据。https://en.wikipedia.org/wiki/Cross_product