Skip to content

第 1 章:先把对象和“正”定义清楚 ​

返回目录

1.1 正多边形、全等与相似 ​

正 p 边形是平面上的凸多边形,要求所有边长度相等、所有内角相等。只等边不够:一般菱形四边相等,却不是正方形。p 是边数,且 p\ge3。

“全等”表示可以平移、旋转,必要时作镜面反射,使两个图形完全重合;不允许缩放。“相似”还允许整体按同一比例放大或缩小。本篇说五“种”立体,是按相似区分:大小不同的两个立方体算同一种。

角度既可用度也可用弧度。整圈 360^\circ=2\pi 弧度,平角 180^\circ=\pi;因此正 p 边形每个内角为 (p-2)\pi/p。

1.2 凸性与闭半空间:先看立体,再看式子 ​

所有立体都包含自己的边界。集合 P 是凸的,意思是任取 A,B\in P,整条线段 AB 都在 P 中,包括端点:

(1-t)A+tB\in P\qquad(0\le t\le1).

这里 t 是沿线段的位置比例。例如 t=1/2 给出中点。该条件要求对任意两点成立,画一条留在体内的线段只能举例;找到一条离开立体的线段则足以否定凸性。

凸:任意两点的线段都留在内部非凸:找到一条跑到外面的线段ABAB线段穿过凹口
图 1|先看截面:左图只展示一个例子,凸性要求对所有两点成立;右图的一条反例线段已经足以否定凸性。

一个平面把空间分成两边。“闭半空间”就是其中一边连同平面本身。例如 x\le1 包括平面 x=1 及其左侧。这里“闭”只强调把分界平面也包含进来。

本篇采用如下精确定义:三维凸多面体是有限个闭半空间的交集,且有界、内部非空。 “交集”就是同时满足每一个限制;“有界”就是能装进某个足够大的球;“内部非空”就是其中能放进一个半径大于零的小球,排除薄片和线段。

立方体的例子是 P=\{(x,y,z):-1\le x,y,z\le1\},即六个半空间限制同时成立。一般可以写为

P=\bigcap_{j=1}^{m}\{x:a_j\cdot x\le b_j\}.

x=(x_1,x_2,x_3) 表示空间点,a_j=(a_{j1},a_{j2},a_{j3})\ne0;记号 a_j\cdot x 是 a_{j1}x_1+a_{j2}x_2+a_{j3}x_3,称为点积。a_j\cdot x=b_j 给出一个平面。点积的其他性质在第 10.1 节先解释再使用。

这个定义确实蕴含线段凸性:若 a_j\cdot A\le b_j、a_j\cdot B\le b_j,则对 0\le t\le1,

a_j\cdot((1-t)A+tB)=(1-t)a_j\cdot A+t a_j\cdot B\le b_j.

每一个限制都成立,所以整条线段都在交集中。这里不把“顶点角和小于 360^\circ”当成凸性的定义;那个角度结论将另行证明。

先把平面式子读成几何。 在 a\cdot x=b 中,x 是可以变化的空间点,a\ne0 固定;下标 j 只是编号。取 x_0=ba/|a|^2,便有 a\cdot x_0=b。于是

a\cdot x=b\iff a\cdot(x-x_0)=0.

右边说,从 x_0 出发到 x 的方向垂直于 a。所有这样的方向组成一个二维平面,故左边确实给出整张平面。把 a 除以其长度,得到单位法向量 n=a/|a|,方程变为

n\cdot x=d,\qquad d=\frac b{|a|}.

n\cdot x 是沿 n 的有符号投影,因而 d 是平面沿 n 相对于原点的位置;通常的非负距离是 |d|。固定 a 后,b 从 b_1 变为 b_2,平面沿 n 移动 (b_2-b_1)/|a|。例如 a=(0,0,1) 时是 z=b;a=(0,0,2) 时是 z=b/2,不能把 b 一律当成距离。

同一张平面也可写为 2a\cdot x=2b。改变 a 的长度并同步改变 b 不改变平面;把两边乘负数仍表示同一平面,但写不等式时必须同时反向。因此,说“b 决定位置”始终以 a 已固定为前提。

z = 0z = 1z = 3n固定法向量 a:平面只平移a = (0, 0, 1) 时,位置是 ba = (0, 0, 2) 时,位置是 b/2沿单位法向量的位移:(b₂ − b₁) / |a|
图 2|同一个法向量给出平行平面族。图示三张水平平面的位置;平面本身向四周无限延伸。

1.3 面、棱、顶点怎样确定 ​

先定义支撑平面:一个平面碰到 P,而 P 全部在该平面的一侧。若平面 a\cdot x=b 满足对所有 x\in P 都有 a\cdot x\le b,且有点取等,它就是支撑平面。

支撑平面与 P 的交集若是一片有面积的多边形,就叫一个面,取整片交集,不任意再切分。面上的边界线段构成棱;棱的端点是顶点。也可辨认顶点:它不能位于 P 内两个不同点连接的线段中间。这个等价性质的专门术语是“极点”,下文直接说顶点,不要求记这个新词。

例如,立方体的 x=1 是支撑平面,交出一个正方形面。画在这个正方形上的对角线不是立方体的棱;对角线中点也不是新顶点。

一个闭合凸多面体的每条棱属于两个面,每个顶点至少连接三条棱。理由是:在棱中段作垂直小截面,实体局部是一个凸角,它的两条边界射线对应两个面;在顶点附近截去一小块,会得到有面积的凸多边形,至少有三条边。截顶平面的存在与截面形状在第 10.3 节展开。

还有一个后面投影要用的细节:若去掉某个不等式而集合不变,就称它冗余,可以删去。把有限限制删到没有冗余时,每个限制都对应一个真正的面。证明如下:某限制若不能删,就有一点 X 满足其他所有限制,却违反它。取体内点 O,沿 OX 走到第一次使该限制取等的点 Y;因为此时还没到 X,其他限制在 Y 都严格成立。因此在该限制的平面内,Y 周围有一小片仍满足其他限制,确实形成有面积的面。这说明可以按真正的面选取支撑半空间,不是额外假设。

三个集合要分开。 对已经选定的立体 P,令

写法它包含哪些点是否已经是立体的面
H^- = \{x:a\cdot x\le b\}平面一侧全部空间,包括边界不是;通常无界
H = \{x:a\cdot x=b\}一张无限延伸的平面不是;尚未限制在 P 内
P\cap H同时在立体和平面上的点支撑时可能是顶点、棱或二维面

只有 P\subseteq H^- 且 P\cap H\ne\varnothing 时,H 才是相对于 P 的支撑平面。本篇把有面积的 P\cap H 称为“面”,避免用“支撑面”同时指整张平面和有限多边形。

例如 P=[-1,1]^3:z=1 接触整个正方形;x+y=2 只接触竖直棱;x+y+z=3 只接触顶点 (1,1,1)。它们都是支撑平面。z=0 穿过实体两侧,不是支撑平面;z=2 根本不接触实体,也不是。

接触二维面z = 1接触一条棱x + y = 2只接触一个顶点x + y + z = 3
图 3|三个立方体示意分别高亮支撑平面与实体的交集,点、线、面都可能出现。方程采用正文的标准立方体坐标;透视图不按坐标比例绘制。

1.4 凸包:给出点集后究竟造了什么 ​

有限点集 S=\{v_1,\ldots,v_n\} 的凸包,记作 \operatorname{conv}S,是所有这些点的凸组合:

\operatorname{conv}S=\left\{\sum_{i=1}^{n}\lambda_i v_i:\lambda_i\ge0,\ \sum_i\lambda_i=1\right\}.

权重 \lambda_i 不为负且总和为一。两点的凸包是线段,三个不共线点的凸包是填实的三角形,四个不共面点的凸包是填实的四面体。它不是只把点用线连起来,也不是只取外表面。

凸包的顶点一定从所列点集中选,不会凭空多出新顶点。若一个点不在所列点集中,它的凸组合至少有两个不同点参与;单独抽出一个正权重点,把其余权重归一化平均,就把该点夹在两个不同凸包点的线段中间,所以它不是顶点。

为什么“凸”会写成加权平均? 从 A 出发朝 B 走全程的 t 倍,位置是 A+t(B-A)=(1-t)A+tB。令 0\le t\le1,恰好走完整条线段。所以线性组合写法只是线段的坐标翻译。

两点时,每选一个 t 就得到一个点;让 t 取遍整个区间,才得到一整条线段。例如 A=0,B=10,t=0.7 得到 7,而所有合法 t 的结果集合是 [0,10]。“一个凸组合”说一个计算结果,“凸包”说全部结果构成的集合。

多点的系数之和为一还有坐标上的理由:把原点移动向量 c,新坐标为 v_i'=v_i-c,则

\sum_i\lambda_i v_i'=\sum_i\lambda_i v_i-c\sum_i\lambda_i.

当 \sum_i\lambda_i=1 时,结果也只是减去 c,仍是原来的几何点;非负条件再把它限制在点之间,防止如 -A+2B 那样超出线段。

为什么三个点能精确填满三角形? 给定三角形内或边界上任意一点 X\ne C,从 C 向 X 延伸到对边 AB 上的点 D。存在 s,t\in[0,1] 使

D=(1-t)A+tB,\qquad X=(1-s)C+sD,

于是

X=s(1-t)A+stB+(1-s)C.

三权重非负,总和为一。X=C 则直接取其权重为一。这给出三角形中每个点的权重,并非用有限个采样点近似填充。

反过来,若 X=\alpha A+\beta B+\gamma C 是凸组合,且 \alpha+\beta>0,把前两项除以 \alpha+\beta 得到 AB 上的点 D,再写 X=(\alpha+\beta)D+\gamma C,可见 X 在 CD 内;若和为零,则 X=C。两个方向都证毕。

ABCDX先选 AB 上的 D:比例为 t再选 CD 上的 X:比例为 s一组选定权重 → 一个点 X所有合法权重 → 填实三角形X 的三权重是:s(1−t)、st、1−s
图 4|任意三角形内点都可先沿 AB、再沿 CD 定位,精确给出凸组合权重。蓝色表示整个填实区域,金色点只是一组选定权重的结果。

四个不共面点同理:从一个顶点向对面的填实三角形连线,填满实心四面体。更多点不必寻找统一的“内部形状”:任意有限凸组合都可反复分成两个点的线段组合。例如

0.2A+0.3B+0.5C=0.5(0.4A+0.6B)+0.5C.

一般抽出最后一项,把其余权重归一化,再归纳。因此任何含 S 的凸集都包含全部凸组合;而这些凸组合自身成凸集、包含 S,所以它正是包含 S 的最小凸集。这同时解释了为什么没有漏掉“点之间必须填上的部分”。

原始点、凸包中的点、凸包顶点各是什么? 令 S=\{(0,0),(2,0),(2,2),(0,2),(1,1)\}。其凸包是整个实心正方形;原始点 (1,1) 在 S 中,却不是顶点;(1,2) 在凸包边界上,也不是顶点。真正顶点是四个角。下文的 x\in\operatorname{conv}S 始终允许任意内部点和边界点,不专指某个原始 v_i。

支撑平面的取等条件,为什么不能混入下方点? 在全部 a\cdot v_i\le b 的前提下,令缺额 d_i=b-a\cdot v_i\ge0。对凸组合 x=\sum_i\lambda_i v_i,

b-a\cdot x=\sum_i\lambda_i(b-a\cdot v_i)=\sum_i\lambda_i d_i.

右边是非负项之和。若 x 落在平面上,左边为零,每个正权重对应的 d_i 都必须为零;有任意一项正权重且正缺额,和就大于零。例如三个不超过 10 的数,按正权重平均得到 10,三者必须全为 10;权重为零的数则不受此限。

故有准确的集合等式

\operatorname{conv}S\cap H
=\operatorname{conv}\{v_i\in S:a\cdot v_i=b\}.

这一步利用了“全部点在同一侧”。若原始点分居两侧,正负缺额可以抵消,结论就不成立。

明确引用的基础结论。 有限个不全共面的点的凸包是有界、内部非空的凸多面体;反过来,每个有界凸多面体是其有限顶点集的凸包。这是有限凸多面体的两种表示定理。本篇不从零证明整个表示定理;第 11.6 节会证明计算中实际需要的“有界半空间交等于顶点凸包”方向。引用范围仅限此处,不包含正多面体分类、欧拉公式或任何正则性结论,来源见第 12.4 节。

1.5 本篇对“凸正多面体”的明确标准 ​

先把一种对称变换说清:对整个空间作保持距离的刚性变换,使立体仍与原立体重合。旋转、镜面反射及其组合都允许;缩放不算对称。

在立体上同时标出三样东西:一个顶点 A、一条包含 A 的棱 e、一个包含 e 的面 f。称它们为一组关联标记 (A,e,f)。高级术语把这一组标记叫“旗标”,这里只把它看成三个相互包含的标记。

定义: 凸多面体 P 称为凸正多面体,如果任意两组这样的关联标记,都能用同一个整个立体的对称变换,同时把第一组的顶点、棱、面移到第二组的对应位置。

对每一对给定标记,要求存在一个最终的整体对称 T,同时完成三项对应;不同标记对允许选择不同的 T。T 可以由若干次旋转或反射复合得到,不要求只做一步动作。只分别证明“点能到点、棱能到棱、面能到面”,却没有协调成同一个 T,仍然不足。第 1.10—1.11 节把两种可用的协调方法具体展开。

它蕴含熟悉的几何性质:

  1. 任何一个面能移到另一个面,所以所有面全等。
  2. 固定一个面时,它的任意顶点—边标记可互相对齐。因此该面各边、各角相同,是正多边形。更细地说,面上这些对称保持顶点平均位置,所有顶点在以它为圆心的圆上;边界各段圆心角又相同,所以是规则地等分圆周的正多边形。
  3. 任意顶点可移到另一个顶点,所以每个顶点相交的面数相同。

因此可用 p 表示每个面的边数、q 表示每个顶点相交的面数,也等于该顶点相接的棱数。p,q\ge3。我们实际证明的构造会满足完整的关联标记标准,不只是验证“棱长相等”。

常见初等教材用“凸、各面为全等正多边形、每个顶点面数相同”介绍柏拉图立体。本文为使第 11.8 节的唯一性论证不暗用更强对称,始终采用上面的明确标准;不把两种说法的等价性当成未说明的中间步骤,也不将它们在非凸或抽象对象上的推广混为一谈。

1.6 本篇要分别完成的三项任务 ​

用 V,E,F 分别表示顶点数、棱数、面数:V = Vertex(顶点),E = Edge(棱),F = Face(面)。顺序是“点—线—面”,维数 0\to1\to2;计数式 V-E+F=2 可读作“点减棱加面”。例如立方体为 8-12+6=2。

  • 必要限制: 任意凸正多面体只能落在五组参数 (p,q) 中。
  • 存在与正则性: 对每一组,确实造出一个凸多面体,并验证它满足第 1.5 节的定义。
  • 唯一性: 同一组参数的凸正多面体相似,故只算一种。

第三项不能只由前两项推出。本版第 11 章把三角形面的实际确定、五重对称、十二面体的半空间验证和唯一性的推导分节展开;不再用“可直接核对”代替这些任务。

1.7 旗标怎样画出来,能不能填满立体 ​

把顶点涂红、选中的棱涂金色、选中的面涂蓝色,就得到旗标的图像。用小写 e,f 表示一条具体棱、一个具体面,用大写 V,E,F 专门计数,避免把“一条棱”误读成“棱的条数”。

AMCO旗标:红顶点、金棱、蓝面面内小三角形:A、M、C接内部点 O:一块小四面体全部旗标 → 填满整个立体一般凸体的小块未必全等
图 5|一组关联标记对应面内一个小三角形,再连向内部点得到一块小四面体。图中虚线在实体内部;旗标记录与小四面体不是同一种对象。

旗标 (A,e,f) 是关联记录,本身没有体积。要把它变成一小块空间,取每条棱的中点 M_e、每个面内部的一点 C_f,再取实体内部一点 O;旗标对应小四面体 \operatorname{conv}\{O,C_f,M_e,A\}。

这确能分完整个凸多面体,且各块内部互不重叠。先在每个凸多边形面内,从 C_f 连到各顶点,分成以原棱为底的三角形;再由 C_fM_e 把每个三角形切成两半。如此得到全部 2p 个旗标小三角形。随后由 O 连向这些表面小三角形,得到小四面体。

任意 X\in P\setminus\{O\} 所在的射线从内部点 O 出发,因凸性、有界性恰好有一个最远边界点 Y,X\in OY。Y 落在某个小三角形中,故 X 落在对应小四面体中。不同块若内部重叠,其射线边界点就会同时落在两个表面小三角形内部,矛盾;公共边界处允许相交。O 则在每块的边界上。

每条棱有两个端点、两侧两个面,因此总共有 4E 个旗标。立方体有 4\times12=48 个小四面体。任意凸多面体都能这样划分;各小块未必全等,更不保证存在使整个立体不变的变换将它们互换。

1.8 先把八种平面标记全部走一遍 ​

在正方形 ABCD 上,标记只需“顶点—边”。取

A=(1,1),\quad B=(-1,1),\qquad
C=(-1,-1),\quad D=(1,-1).

令 R 为逆时针 90^\circ 旋转,M 为关于对角线 AC 的反射。右边变换先执行,例如 RM 表示先 M 后 R。

已知整个正方形的变换(A,AB) 的像
I,R,R^2,R^3(A,AB),(B,BC),(C,CD),(D,DA)
M,RM,R^2M,R^3M(A,AD),(B,BA),(C,CB),(D,DC)

这两行确实覆盖全部 4\times2=8 个标记。这里只证明一次 AB 能到 BC 会不够;上表明确补上了所有目标。AB 与 BA 是同一条无向边,但 (A,AB) 与 (B,BA) 的选中顶点不同,仍是不同标记。

A, ABB, ABB, BCC, BCC, CDD, CDD, DAA, DA同一面的全部 8 个标记沿循环交替:换端点 → 换边 → 换端点每个标记都在这个循环上三维:还可以沿公共棱换面面内循环由换面动作接起来
图 6|正方形上八种标记形成一个完整循环。这里的连线表示改选记录;是否能由保持整个物体的对称实现,还需要另行验证。

同一面的标记还可以按上图的八步循环,仅靠“换端点”和“换相邻边”全部走遍。这里先只是换选中的对象;在不规则长方形中也能这样换标记,但长边变短边未必能由等距对称实现。

1.9 三维旗标为何连通,为什么单靠连通还不够 ​

从旗标 (A,e,f) 出发有三种相邻记录:

编号保持选中什么唯一改选什么
0e,fe 的另一个端点
1A,ff 内经过 A 的另一条棱
2A,ee 另一侧的面

把所有旗标当成图的节点,每一对相邻记录之间画线,得到旗标图。这是记录之间的关系图,画出的线不是原立体的棱。

同一个 p 边形面内,交替换端点、换棱,沿边界形成 2p 个旗标的循环;相邻面共享棱时,可以保持该棱和一个端点,只改选面,从一个循环跨到另一个循环。任意凸多面体的面都能沿共享棱的面链相连,详细截面证明放在第 5.1 节。因此所有旗标相连。

该证明用凸性保证截面是单个凸多边形,沿其边界能走通。这不表示凸性是结论的必要条件:对于连通的多边形表面,只要每条棱恰好邻接两面、每个顶点附近的面围成一个环,也可在表面上将路径挪开有限顶点,得到共享棱的面链。这里的两个条件排除“只在一个点接触”的异常连接;两个立方体只在一个顶点碰到时,集合虽然连通,两个旗标图却不能跨过去。非凸体的一个平面截面还可能分裂成多块,不能原样套用凸截面的证明。

连通只负责提供换标记的路线。 普通长方体的旗标也连通,但长棱不能经整体等距变换变成短棱。所以还必须逐步证明:所需的标记对应,确实来自保持整个立体的变换。

1.10 统一验证法一:先对齐顶点,再对齐棱和面 ​

这是第 11 章的主要方法,先把共同逻辑写全。需要证明两件事:

  1. 任意顶点能由整个立体的对称变换移到任意另一个顶点。
  2. 固定一个顶点时,仍能用保持该顶点不动的整个立体对称,把该处任意“棱—面”关联对移到任意另一个。

任取 \Phi_A=(A,e_A,f_A)、\Phi_B=(B,e_B,f_B)。先用第一项找到 T_1 使 T_1(A)=B;此时记 e'=T_1(e_A),f'=T_1(f_A)。再用第二项找到 T_2,保持 B,同时将 e',f' 变成 e_B,f_B。于是

T=T_2\circ T_1,\qquad
T(A)=B,\quad T(e_A)=e_B,\quad T(f_A)=f_B.

每个分步都作用于整个立体,复合后仍是一个整体对称,正好符合定义。定义并不要求物理上只做一次动作,也不禁止连续用多次反射、旋转。

若第二项只在一个基准顶点 v 验证,也足够:给定目标顶点 B,先用已经证明存在的 K 把 v 移到 B;K^{-1} 把 B 处的两组标记拉回 v,在 v 用已知对称 U 调整,再用 K 放回。KUK^{-1} 就完成 B 处的局部调整。这没有假定待证的旗标传递性。

反过来,若立体满足旗标定义,任意选定顶点上的旗标可移到另一顶点上的旗标;同一顶点上的两旗标也能相互对应且该顶点不动,所以上述两项也是必要的。这里没有要求读者先学“稳定子”:这个术语只表示保持某个顶点不动的所有整体对称。

原旗标顶点 A;棱 e;面 f顶点已对齐顶点 B;棱 e′;面 f′全部对齐顶点 B;目标棱;目标面T₁T₂第二步固定 B;复合 T₂T₁ 使三个对象同时到位
图 7|两步法始终移动整个立体。中间状态允许棱和面尚未对齐,最后一个复合变换同时满足三项要求。

1.11 统一验证法二:三个基本 S 怎样构造全部 T ​

另一种方法是:在基准旗标 \Phi_0 上,找到三个已经核对保持整个立体的对称 S_0,S_1,S_2,分别将它移到第 0,1,2 种相邻旗标。具体构造中的困难是找到这三个 S_i;之后的 T 用归纳构造,不能预先假定存在。

令“已到达”表示已经有一个整体对称 T 使 T(\Phi_0)=\Psi。开始 T_0=I,所以 \Phi_0 已到达。整体等距对称保持面、棱、顶点的包含关系,故将相邻旗标映成同类型相邻旗标;又因每种邻居唯一,\Psi 的第 i 种邻居正是

T\bigl(S_i(\Phi_0)\bigr)=(T\circ S_i)(\Phi_0).

所以“到达一个旗标”推出“它的三个邻居也都到达”。沿第 1.9 节保证存在的任意有限路线归纳,就得到所有目标。若路线第 k+1 步换第 i_k 个对象,递推式为

T_{k+1}=T_k\circ S_{i_k},\qquad T_0=I.

注意区别:这是从基准旗标算目标像的公式。若要从当前 \Psi 实际执行下一步,使用的是

U_k=T_k\circ S_{i_k}\circ T_k^{-1}.

右边先把当前标记带回基准,再做 S_{i_k},最后带回当前位置;这叫“共轭”。直接代入可核对 U_k(\Psi)=T_kS_{i_k}(\Phi_0),且 U_kT_k=T_{k+1}。原来的固定 S_i 未必在当前位置只换一项,不能略去这个区别。

当前旗标 Ψ已由 T 到达基准旗标 Φ₀执行已知 SᵢΨ 的第 i 邻居整体变换完成T⁻¹T实际操作:先 T⁻¹,再 Sᵢ,再 T从基准算像:新到达变换是 T Sᵢ
图 8|把基准处的动作搬到当前位置,合成为 T Sᵢ T⁻¹。开始的 T 来自此前已完成的步骤,不是假定任意目标都已可达。

最后,若 T_A(\Phi_0)=\Phi_A、T_B(\Phi_0)=\Phi_B,则 T_BT_A^{-1} 把任意给定的 \Phi_A 移到 \Phi_B。这才从一个起点的覆盖推出任意两点互通。

立方体的三个 S 可以直接写出。 取 A=(1,1,1),e 为连接 (1,1,1) 和 (1,1,-1) 的棱,f 为 x=1 的面:

对称保持整个立方体的理由对基准旗标的作用
S_0(x,y,z)=(x,y,-z)改变一个坐标符号保持 e,f,换端点
S_1(x,y,z)=(x,z,y)交换两个坐标保持 A,f,换棱
S_2(x,y,z)=(y,x,z)交换两个坐标保持 A,e,换面

它们分别是关于 z=0、y=z、x=y 的平面反射。每个作用于全部八顶点和整个实体;上面的归纳与连通性将三项局部验证升级成定义要求的全局对应。与第一种方法任选一种完成就够了,不必把两种方法的全部证明重复做五遍。

保留每一次追问,认真走完每一步证明。