θ
或
180°−θ
· 定向
二面角与法向量的朝向
线面角只在
0°
到
90°
之间,公式里那个绝对值把法向量的朝向问题一笔带过。二面角没有这个便利:它的取值跨过
90°,钝角与锐角是两个不同的答案,而两个法向量的夹角单靠自己分不出该报哪一个。这一页处理的就是那个符号。
1 · 二面角的平面角
定义 1.1(二面角) 一条直线
l
与由它出发的两个半平面
α、β
组成的图形称二面角,记作
α-l-β,l
称棱。在棱上任取一点
O,在两个半平面内各作垂直于
l
的射线
OA、OB,∠AOB
称该二面角的平面角,其大小即二面角的大小,取值范围是
0°
到
180°。
「在棱上任取一点」这句话里藏着一条要验的性质:换一个点,两条垂线的方向不变,故角不变。向量法把这句话写成一行代码——把「O
指向半平面内给定点」的向量减去它沿棱的分量,剩下的就是那条垂线的方向,而减掉的量恰是取点位置的全部影响。
半平面这个词同样要紧:二面角是两个半平面的夹角,不是两张完整平面的夹角。两张完整平面相交得到的是四个二面角,两两相等、两两互补。所以「面面角」与「二面角」不是同义词,前者按惯例取那个锐角或直角。
2 · 法向量的夹角是哪一个
设
α、β
所在平面的法向量为
n1、n2,二面角大小为
θ。则
∣cosθ∣=∣n1∣∣n2∣∣n1⋅n2∣
只有绝对值这一层是无条件成立的。去掉绝对值后
cos⟨n1,n2⟩
等于
cosθ
还是
−cosθ,取决于两个法向量各自指向哪一侧,而这与二面角本身无关。planeAngle 因此只承诺锐角化的结果,取值
0°
到
90°。
一个曾经想当然的口径值得记下来:既然形体的每个面都有一个朝外的法向量,那么「两个面都取外法向量」似乎就把朝向定死了。实测不成立,而且错得很整齐。正四棱锥
P-ABCD(底边 2、高 2)的两个相邻侧面
PAB、PBC,外法向量分别是
(0,−4,2)
与
(4,0,2),夹角
78.4630°;而沿侧棱
PB
的二面角是
101.5370°。两者互补。这不是巧合:凸形体上相邻两面的外法向量夹角恒等于该棱二面角的补角,正四面体上是
109.4712°
对
70.5288°,正方体上是
90°
对
90°(补角与自身相等,所以那里看不出问题)。
警示 ·
只算法向量夹角的余弦、再取反余弦,得到的是二面角与它的补角中的一个,无从判断是哪一个。判据必须另找,常用的有三条:在两个半平面内各取一点,看它们分别落在对面平面的哪一侧;观察图形本身是锐角还是钝角;或者按下一节的做法把朝向统一掉。含参数的题目里这一步不能省——参数变化时二面角可能从锐角变成钝角,而锐角化的读数一路连续,看不出那次跨越。
3 · 用棱把朝向定死
把两个法向量都取成「棱的方向向量叉半平面内的一个向量」:
nα=l×OA,nβ=l×OB
两者的朝向随即被同一个
l
统一,夹角恒等于二面角本身,钝角也不例外。验算最快的方式是把棱摆在
x
轴上:取
l=(1,0,0)、OA=(0,1,0)、OB=(0,cosθ,sinθ),则
nα=(0,0,1)、nβ=(0,−sinθ,cosθ),两者夹角的余弦恰为
cosθ。
这个取法的代价是它要求先知道两个半平面内各一个点,也就是说它并不比「棱上作两条垂线」少用信息。它的收益在实现一侧:叉积一次到位,不必解方程组求法向量,也不必再补一次符号判断。dihedralReport
因此把两条路的结果并排交出——垂线法算出的二面角、定向法向量的夹角、以及把其中一个法向量取反后读到的值,三个数一起看,符号问题就没有藏身处。
图 3-1 · 二面角与两个法向量的夹角。可调方位角与俯仰角旋转视图,拖动二面角的大小跨过 90°,切换到正四棱锥与正方体的实例;读数并列给出垂线法的结果、定向法向量的夹角、取反后的值与锐角化结果。
4 · 两个算例
例 4.1 正四棱锥
P-ABCD
底边 2、高 2,求相邻两侧面沿侧棱
PB
的二面角
A-PB-C。
取
A
为原点,B(2,0,0)、C(2,2,0)、P(1,1,2)。棱的方向
PB=(1,−1,−2),A
在棱上的垂足是
O(5/3,1/3,2/3)。两条垂线方向为
OA=(−5/3,−1/3,−2/3)
与
OC=(1/3,5/3,−2/3),两者与
PB
的数量积都是 0,夹角的余弦为
−0.2,即
101.5370°,是钝角。
按定向取法:nα=PB×PA=(0,4,−2),nβ=PB×PC=(4,0,2),cos⟨nα,nβ⟩=−4/20=−0.2,反余弦即
101.5370°。若把
nβ
取反,读到的是
78.4630°。
例 4.2 正方体
ABCD-A1B1C1D1
中求二面角
A1-BD-A。棱
BD
的中点
O
同时是
A1
与
A
到棱的垂足,两条垂线方向为
OA1
与
OA,夹角的正切为
2,即
54.7356°。锐角化在这一例上不会出错,因为答案本身是锐角。同一条棱上的
A1-BD-C1
就不同了:它等于
180°−2×54.7356°=70.5288°,仍是锐角,但若换成底边更长的长方体,这个角会跨过
90°
变成钝角,而锐角化的读数在跨越处只会折回来,一路看不出发生了什么。
5 · 参考文献
- Dihedral angle. Wikipedia. 二面角的定义、平面角与法向量夹角的关系。https://en.wikipedia.org/wiki/Dihedral_angle
- Dihedral Angle. Wolfram MathWorld. 二面角的公式与常见多面体的取值。https://mathworld.wolfram.com/DihedralAngle.html
- Normal (geometry). Wikipedia. 法向量的朝向自由度。https://en.wikipedia.org/wiki/Normal_(geometry)
- Cross product. Wikipedia. 叉积的方向由右手规则定,定向取法的依据。https://en.wikipedia.org/wiki/Cross_product