# 正多面体与欧拉公式笔记

第四版 · 2026-10-16（北京时间）

本版按定义与证明依赖重新修补：先解释凸、面、正多边形和整体对称的含义，再证明参数限制；欧拉公式只用有限线段的多边形情形；最后逐个构造五种立体并证明正则性和唯一性。保留并改进证明图，不把图示、浮点核对或“可直接验证”当作完整证明。

阅读路线：第 1 章先明确对象；第 2—3 章看必要限制；第 4—9 章核验欧拉公式；第 10 章补向量与角和；第 11 章把存在性和唯一性补成具体推导；第 12 章按问题回查，并明确基础引用的边界。各处引用后章时都只是预告，最后可按依赖顺序独立回读。

<a id="reading-toc"></a>

## 正文目录

- [第 1 章：先把对象和“正”定义清楚](#chapter-1)
- [第 2 章：两条路线为何得到同一限制](#chapter-2)
- [第 3 章：五组整数解与五种立体](#chapter-3)
- [第 4 章：只需简单多边形的分割定理](#chapter-4)
- [第 5 章：从凸体表面到直线平面图](#chapter-5)
- [第 6 章：树为什么有 V−1 条边](#chapter-6)
- [第 7 章：树为什么只有一个面](#chapter-7)
- [第 8 章：加回一条边为什么恰好多一个面](#chapter-8)
- [第 9 章：完成欧拉公式的证明](#chapter-9)
- [第 10 章：先补向量工具，再证顶点角和](#chapter-10)
- [第 11 章：逐个构造、证明正则性，再证明唯一性](#chapter-11)
- [第 12 章：概念回查、证明依赖与自检](#chapter-12)

<a id="chapter-1"></a>

## 第 1 章：先把对象和“正”定义清楚

[返回目录](#reading-toc)

### 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$ 给出中点。该条件要求对任意两点成立，画一条留在体内的线段只能举例；找到一条离开立体的线段则足以否定凸性。

<figure class="proof-figure" id="fig-convexity"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 300" role="img" aria-label="fig-convexity" style="width:100%;height:auto;display:block"><defs><marker id="fig-convexity-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><text x="185" y="28" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">凸：任意两点的线段都留在内部</text><text x="570" y="28" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">非凸：找到一条跑到外面的线段</text><path d="M50 90L220 60L315 175L100 240Z" fill="#e5f0f5" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M100 120L245 175" fill="none" stroke="#c48a28" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><circle cx="100" cy="120" r="5" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><circle cx="245" cy="175" r="5" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><text x="84" y="108" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A</text><text x="252" y="177" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">B</text><path d="M420 65H510V160H610V65H705V245H420Z" fill="#f6e7e5" stroke="#ba514f" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M465 110L660 110" fill="none" stroke="#c48a28" stroke-width="4" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="6 5"/><circle cx="465" cy="110" r="5" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><circle cx="660" cy="110" r="5" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><text x="450" y="98" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A</text><text x="670" y="112" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">B</text><text x="560" y="142" font-size="16" fill="#ba514f" text-anchor="middle" font-weight="normal">线段穿过凹口</text></svg></div><figcaption>图 1｜先看截面：左图只展示一个例子，凸性要求对所有两点成立；右图的一条反例线段已经足以否定凸性。</figcaption></figure>

一个平面把空间分成两边。“闭半空间”就是其中一边连同平面本身。例如 $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$”当成凸性的定义；那个角度结论将另行证明。

### 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$ 周围有一小片仍满足其他限制，确实形成有面积的面。这说明可以按真正的面选取支撑半空间，不是额外假设。

### 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\cdot v_i\le b$，那么凸包中所有点也满足同一不等式。更有用的是取等条件：

$$
a\cdot\left(\sum_i\lambda_i v_i\right)=b
\quad\Longrightarrow\quad
\lambda_i>0\text{ 的点都满足 }a\cdot v_i=b.
$$

因此，要确定一个支撑面，只需找出点集中哪些点在支撑平面上，然后取这些点的凸包。后面不会把空间中任意三个等距点都算成一个面。

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

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

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

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

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

这就是前版“旗标传递”的准确意思。不要把它误读成只旋转一个面，或分别找三次互不相干的变换。对立方体，先把选中的角移到目标角，再在该角周围调整选中的棱、面，确能使三者同时对齐。

它蕴含熟悉的几何性质：

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

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

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

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

用 $V,E,F$ 分别表示顶点数、棱数、面数。

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

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

<a id="chapter-2"></a>

## 第 2 章：两条路线为何得到同一限制

[返回目录](#reading-toc)

### 2.1 从局部角度出发

正 $p$ 边形的每个内角是 $\alpha=(p-2)\pi/p$。凸多面体的真正顶点处，相邻面的面内角之和严格小于 $2\pi$，其证明见第 10 章。因此

$$
q\frac{(p-2)\pi}{p}<2\pi.
$$

先约去正数 $\pi$，再乘以正数 $p$，得到 $q(p-2)<2p$，即 $pq-2p-2q<0$。两边加 $4$ 并因式分解：

$$
\boxed{(p-2)(q-2)<4}.
$$

### 2.2 从整体计数出发

每个面有 $p$ 条棱，但每条棱被两个面共享；每个顶点有 $q$ 条棱，但每条棱有两个端点。所以

$$
pF=2E,\qquad qV=2E.
$$

<figure class="proof-figure" id="fig-double-count"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 265" role="img" aria-label="fig-double-count" style="width:100%;height:auto;display:block"><defs><marker id="fig-double-count-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><text x="180" y="28" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">按面数棱：同一条棱被数两次</text><path d="M60 95L180 60L180 215L60 180Z" fill="#e4f0f5" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M180 60L300 105L300 190L180 215Z" fill="#fcf0d9" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M180 60L180 215" fill="none" stroke="#ba514f" stroke-width="6" stroke-linejoin="round" stroke-linecap="round"/><text x="72" y="145" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">面 1</text><text x="225" y="145" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">面 2</text><text x="180" y="245" font-size="21" fill="#29495d" text-anchor="middle" font-weight="normal">pF = 2E</text><text x="565" y="28" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">按顶点数棱：每棱有两个端点</text><path d="M455 135L675 135" fill="none" stroke="#286786" stroke-width="5" stroke-linejoin="round" stroke-linecap="round"/><circle cx="455" cy="135" r="9" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><circle cx="675" cy="135" r="9" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><text x="455" y="110" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">A</text><text x="675" y="110" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">B</text><text x="565" y="185" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">A 数一次，B 再数一次</text><text x="565" y="245" font-size="21" fill="#29495d" text-anchor="middle" font-weight="normal">qV = 2E</text></svg></div><figcaption>图 2｜两条双重计数等式，都来自“同一个对象被数了几次”。</figcaption></figure>

将 $F=2E/p$、$V=2E/q$ 代入将于第 9 章证明的欧拉公式 $V-E+F=2$：

$$
\frac{2E}{q}-E+\frac{2E}{p}=2.
$$

由于 $E>0$，两边除以 $2E$ 并移项：

$$
\frac1p+\frac1q=\frac12+\frac1E>\frac12.
$$

乘以正数 $2pq$，得到 $2p+2q>pq$，再整理就得到同一不等式。严格大于来自 $1/E>0$，没有额外的几何假设藏在这一代数步骤中。

两条路线可以分别成立：欧拉公式的证明不需要预先知道顶点角和；顶点角和的证明也不需要欧拉公式。


<a id="chapter-3"></a>

## 第 3 章：五组整数解与五种立体

[返回目录](#reading-toc)

### 3.1 不漏项地枚举

令 $a=p-2$、$b=q-2$，则 $a,b$ 是正整数，且 $ab<4$。

若 $a=1$，则 $b=1,2,3$；若 $a=2$，则只能 $b=1$；若 $a=3$，也只能 $b=1$；若 $a\ge4$，任何正整数 $b$ 都不可能。因此恰好五组参数。

| 每面边数 p | 每顶点面数 q | 立体 | V | E | F |
| --- | --- | --- | --- | --- | --- |
| 3 | 3 | 正四面体 | 4 | 6 | 4 |
| 3 | 4 | 正八面体 | 6 | 12 | 8 |
| 3 | 5 | 正二十面体 | 12 | 30 | 20 |
| 4 | 3 | 正六面体（立方体） | 8 | 12 | 6 |
| 5 | 3 | 正十二面体 | 20 | 30 | 12 |

计数可以由参数反算：

$$
E=\frac{2pq}{2p+2q-pq},\qquad V=\frac{2E}{q},\qquad F=\frac{2E}{p}.
$$

例如 $p=4,q=3$，分母为 $8+6-12=2$，所以 $E=12$、$V=8$、$F=6$。

### 3.2 为什么正六边形不行

正六边形每角 $120^\circ$，至少三面相交就达到 $360^\circ$，不满足凸顶点的严格不等式。边数更多的正多边形内角更大，也被排除。

这里排除的是三维凸正多面体；不排除平面铺砌，也没有在讨论允许自交的星形正多面体。


<a id="chapter-4"></a>

## 第 4 章：只需简单多边形的分割定理

[返回目录](#reading-toc)

**先解释本章的四个工作用语。**

平面集合是“开”的，指每一点周围都能放一个足够小的圆盘，整个圆盘仍在该集合中。例如去掉闭折线 $C$ 后的集合 $U$ 是开集：点不在有限条闭线段上，与它们的最小距离为正。

“有限折线路径”是把有限个点依次用线段连接成的路线。“连续路径”更一般，可写作 $\gamma(t)=(x(t),y(t))$，其中 $0\le t\le1$，两个坐标都连续，且每一时刻都在指定集合中。它不是图论中必须沿原边走的路径。

在一个开集里，把能够沿集合内有限折线互相走通的点归为一类，本篇把每一类称为一个区域。它就是标准的“连通分支”：固定一点，能从它走到的点周围的小圆盘也都能走到，因此这一类是开集；其余各类也是开集。若一个标准连通区域含有两类，就被两个非空的开部分分开，违背连通性。反过来，沿折线行走的连续过程不能从一边跳到互相分开的另一边。这也说明，对这里的开集，“连通”和“道路连通”一致；不把这个结论套给任意集合。

“足够小”也会给出依据：有限个互不相交的闭线段（或线段中截取的闭小段）之间，距离能取到一个正的最小值。取比它更小的圆盘半径或带宽，就不会误碰其他线段。此处引用的是初等实分析事实“有界闭集上的连续函数能取到最小值”；本篇不另行建立实数的连续性理论，后面避免只用“紧集”一词替代这个具体理由。

**有限位置条件为什么能满足。** 若只需从 $X$ 向边的开段上一点 $M$ 画候选路径，可以选中间点 $T$，用 $X	o T	o M$ 两段线。避开经过 $X$ 或 $M$ 与各原顶点的有限条直线，并避开会让新线段与原边重合的有限条直线，就不会穿过原顶点或沿原边走。有限条直线不可能盖住一个圆周：每条最多去掉圆周上两个点，总还有可选的 $T$。每段与每条原边最多相交一次，所以交点有限，真正相交时两直线不平行，正是横交。

若要求候选路径已经在某个原面 $\Omega$ 内，先利用道路连通性取得有限折线。它全程避开原图，其有限条闭线段与原图的距离有正的最小值；必要时先在原线段中插入额外折点，再把折点移动到足够小的邻域中，并避开同样的有限特殊直线，路径仍留在 $\Omega$ 中，却排除了碰顶点、沿边重合等特殊情况。这是第 7、8 章用“稍作扰动”的具体依据，而不是任意修改路线。

### 4.1 先定义闭折线、补集与边的开段

用 $C$ 表示一条简单闭折线：它由有限条线段首尾相接，除了相邻边的共同端点，没有其他交点。$C$ **只包含这些线段上的点**，不包含尚未定义的“多边形内部区域”。共线的多余中间顶点可先删去。

本文所说的补集，明确指

$$
U=\mathbb R^2\setminus C.
$$

也就是平面上所有不在原闭折线上的点。“区域”在这里指 $U$ 的一个连通分支；这不是预先把平面划成“内部”和“外部”。

若一条边的端点为 $A,B$，“边的开段”指去掉两个端点后剩下的点：

$$
(A,B)=\{(1-t)A+tB:0<t<1\}.
$$

下文用“边的开段”替代容易混淆的“边内部”。它与“多边形内部”不是同一个概念。

**要证明的多边形分割定理：** $U$ 恰好有两个连通分支，一个有界，一个无界，且 $C$ 是二者共同的边界。我们先证“至多两个”，再证“至少两个”；只讨论有限线段，不用一般若尔当曲线定理。

### 4.2 先画窄通道，再在其中连接辅助路径

**先分清三种对象。**

| 对象 | 是线还是区域？ | 在证明中的作用 |
| --- | --- | --- |
| 原边、原闭折线 $C$ | 原图中的线段、线段的并集 | 不能碰到的障碍 |
| 窄通道 | 边旁边的一小片二维带状区域，不包含原边 | 为辅助路径的连接提供空间 |
| 辅助路径 $L$、$R$ | 另画的连续曲线，不是多边形的边 | 将同一侧附近的点连接起来 |

这里“路径”是连续行走的轨迹；全程避开 $C$，可写为连续映射 $\gamma:[0,1]\to U$。$L,R$ 是下面具体构造出的两条辅助闭路径，不是两个已经确定的补集区域。

<figure class="proof-figure" id="fig-side-objects"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 300" role="img" aria-label="fig-side-objects" style="width:100%;height:auto;display:block"><defs><marker id="fig-side-objects-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><rect x="45" y="75" width="310" height="65" rx="0" fill="#def1eb" stroke="#def1eb"/><rect x="45" y="140" width="310" height="65" rx="0" fill="#fbefd8" stroke="#fbefd8"/><path d="M45 140H355" fill="none" stroke="#243746" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><path d="M185 136L192 140L185 144" fill="none" stroke="#243746" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M45 108L355 108" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M45 174L355 174" fill="none" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="7 5"/><text x="52" y="98" font-size="17" fill="#2b806b" text-anchor="start" font-weight="normal">L：辅助路径</text><text x="52" y="199" font-size="17" fill="#c48a28" text-anchor="start" font-weight="normal">R：辅助路径</text><text x="315" y="132" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">e</text><text x="200" y="243" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">沿箭头走：上方是左手侧，下方是右手侧</text><text x="397" y="70" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">粗深线：原多边形的一条边</text><text x="397" y="104" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">浅色面：窄通道，是一片区域</text><text x="397" y="138" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">细线 L、R：画在通道里的路径</text><text x="397" y="172" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">通道与路径都不包含原边</text><text x="397" y="206" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">此图只画边中段，暂不画顶点</text></svg></div><figcaption>图 3a｜先分清三种对象：边是一条线段；窄通道是一小片平面区域；辅助路径是通道里另外画出的一条曲线。底色不是多边形的整个“内部”或“外部”。</figcaption></figure>

**第一步：只看一条边的中段。** 沿闭折线选定一个行进方向。在这条边旁边选一个足够薄的矩形，去掉原边后，矩形分成左手旁和右手旁两个半矩形。每个半矩形就是此处的窄通道；在其中各画一条与原边平行的短线。

“左”“右”随行进方向确定：转弯后也要跟着转，不是固定指纸面左右。图 3a 的上、下关系只针对图中向右的箭头。

**第二步：放大一个顶点。** 选一个以该顶点为圆心、足够小的圆盘，使它只遇到与此顶点关联的两条边。这两条径向线段把去掉原边后的圆盘分成两个开扇形。前一条边左手旁的短线和后一条边左手旁的短线，进入同一个开扇形；在其中用小圆弧和短线连接。右手旁的两条短线，在另一个开扇形中同样连接。

连接避开圆心和两条原边。把这些连接周围选作一片很薄的带状区域，就是顶点附近的窄通道；圆盘本身不等于通道，也不能整盘当作可走区域，因为其中仍有原边和顶点。

<figure class="proof-figure" id="fig-corner-join"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 330" role="img" aria-label="fig-corner-join" style="width:100%;height:auto;display:block"><defs><marker id="fig-corner-join-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M95 285V130A55 55 0 0 1 150 75H350V130H150V285Z" fill="#def1eb" stroke="#def1eb" stroke-width="0" stroke-linejoin="round" stroke-linecap="round"/><path d="M150 285V130H350V185H205V285Z" fill="#fbefd8" stroke="#fbefd8" stroke-width="0" stroke-linejoin="round" stroke-linecap="round"/><circle cx="150" cy="130" r="70" fill="none" stroke="#6d8391" stroke-width="1"/><path d="M150 285V130H350" fill="none" stroke="#243746" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><path d="M146 227L150 220L154 227M265 126L272 130L265 134" fill="none" stroke="#243746" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M123 285V130A27 27 0 0 1 150 103H350" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M177 285V157H350" fill="none" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="7 5"/><circle cx="150" cy="130" r="4" fill="#243746" stroke="#243746" stroke-width="2"/><text x="138" y="122" font-size="18" fill="#29495d" text-anchor="end" font-weight="normal">V</text><text x="102" y="261" font-size="18" fill="#2b806b" text-anchor="end" font-weight="normal">L</text><text x="190" y="261" font-size="18" fill="#c48a28" text-anchor="start" font-weight="normal">R</text><text x="338" y="91" font-size="18" fill="#2b806b" text-anchor="start" font-weight="normal">L</text><text x="338" y="183" font-size="18" fill="#c48a28" text-anchor="start" font-weight="normal">R</text><text x="399" y="70" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">从下往上走，到 V 后向右转</text><text x="399" y="104" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">左手旁的短路，接到左手旁</text><text x="399" y="138" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">右手旁的短路，接到右手旁</text><text x="399" y="172" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">圆盘中只遇到两条关联边</text><text x="399" y="206" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">两条辅助路径都不碰 V 或原边</text><text x="200" y="318" font-size="15" fill="#29495d" text-anchor="middle" font-weight="normal">浅色通道容纳连接；细线才是实际的路径</text></svg></div><figcaption>图 3b｜放大一个顶点 V：不是让路径穿过顶点，而是在相应扇形中绕开它。左右由行进方向决定，不是纸面的左边和右边。</figcaption></figure>

**凹角也按同样规则连接。** 两个扇形不一定一样大，也不一定都是凸扇形；它们各自都可以用路径连通其中的点。连接只依据行进方向的左手、右手，不需要先决定多边形的哪一部分叫“内部”。

<figure class="proof-figure" id="fig-concave-join"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 330" role="img" aria-label="fig-concave-join" style="width:100%;height:auto;display:block"><defs><marker id="fig-concave-join-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M190 285V130H40V185H135V285Z" fill="#def1eb" stroke="#def1eb" stroke-width="0" stroke-linejoin="round" stroke-linecap="round"/><path d="M190 285H245V130A55 55 0 0 0 190 75H40V130H190Z" fill="#fbefd8" stroke="#fbefd8" stroke-width="0" stroke-linejoin="round" stroke-linecap="round"/><circle cx="190" cy="130" r="70" fill="none" stroke="#6d8391" stroke-width="1"/><path d="M190 285V130H40" fill="none" stroke="#243746" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><path d="M186 227L190 220L194 227M100 126L93 130L100 134" fill="none" stroke="#243746" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M163 285V157H40" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M217 285V130A27 27 0 0 0 190 103H40" fill="none" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="7 5"/><circle cx="190" cy="130" r="4" fill="#243746" stroke="#243746" stroke-width="2"/><text x="179" y="122" font-size="18" fill="#29495d" text-anchor="end" font-weight="normal">V</text><text x="151" y="262" font-size="18" fill="#2b806b" text-anchor="end" font-weight="normal">L</text><text x="230" y="262" font-size="18" fill="#c48a28" text-anchor="start" font-weight="normal">R</text><text x="48" y="186" font-size="18" fill="#2b806b" text-anchor="start" font-weight="normal">L</text><text x="48" y="91" font-size="18" fill="#c48a28" text-anchor="start" font-weight="normal">R</text><text x="350" y="70" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">改为到 V 后向左转</text><text x="350" y="104" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">左手路径仍然接左手路径</text><text x="350" y="138" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">右手路径仍然接右手路径</text><text x="350" y="172" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">两个扇形的大小可以不同</text><text x="350" y="206" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">此图局部可出现在多边形凹角</text><text x="170" y="318" font-size="15" fill="#29495d" text-anchor="middle" font-weight="normal">不需要先判断哪个扇形属于“内部”</text></svg></div><figcaption>图 3c｜沿同样的规则也能处理凹角。这里并未把两条路径命名为“内侧”和“外侧”，只用沿箭头行进的左手、右手来辨认。</figcaption></figure>

**第三步：沿全部顶点做完连接。** 每一条边旁的左手短线，经两端的局部连接接到相邻短线；依次走完整圈并回到起点，就形成一条辅助闭路径 $L$。右手旁同理得到 $R$。因此 $L$ 自身连通，$R$ 自身连通，而且都包含在 $U$ 中。

为什么能选得足够小、足够窄？顶点和边只有有限多个，可以先选两两不交、避开其他边的顶点圆盘；圆盘外互不相交的紧线段之间有正距离，再把中段矩形选得比这些距离更窄。于是各处连接不会误碰非关联边，左右辅助路径也可保持互不相交。

<figure class="proof-figure" id="fig-polygon-collar"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 340" role="img" aria-label="fig-polygon-collar" style="width:100%;height:auto;display:block"><defs><marker id="fig-polygon-collar-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M55 45H325V285H55Z M80 70H300V260H80Z" fill="#def1eb" fill-rule="evenodd"/><path d="M80 70H300V260H80Z M105 95H275V235H105Z" fill="#fbefd8" fill-rule="evenodd"/><path d="M80 260V70H300V260Z" fill="none" stroke="#243746" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><path d="M76 180L80 173L84 180M185 66L192 70L185 74" fill="none" stroke="#243746" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M67 260V70A13 13 0 0 1 80 57H300A13 13 0 0 1 313 70V260A13 13 0 0 1 300 273H80A13 13 0 0 1 67 260Z" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M93 247V83H287V247Z" fill="none" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="7 5"/><text x="190" y="168" font-size="15" fill="#29495d" text-anchor="middle" font-weight="normal">原图 C 只有深色边线</text><text x="190" y="316" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">每个角都按图 3b 的方式连接</text><text x="370" y="55" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">深色：原闭折线 C</text><text x="370" y="89" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">浅绿、浅金：两条窄通道</text><text x="370" y="123" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">绿实线：辅助闭路径 L</text><text x="370" y="157" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">金虚线：辅助闭路径 R</text><text x="370" y="191" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">L、R 各自贯通整圈</text><text x="370" y="225" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">两者都在 U = 平面去掉 C 中</text></svg></div><figcaption>图 3d｜局部连接做完一整圈，才得到 L、R 两条辅助闭路径。矩形只是一个具体例子；构造规则同时适用于图 3c 那样的转角。图中央未着色的部分同样属于补集，通道并不占满补集。</figcaption></figure>

> 到这里证明的是：可以在 $U$ 中画出 $L,R$，且二者各自连通。还没有证明它们位于不同的补集分支。两条辅助曲线互不相交，并不能单独排除它们经过更远的地方互通。

### 4.3 为什么补集 U 至多有两个连通分支

**目标：** 任取 $X\in U$，证明它能在 $U$ 内连接到 $L$ 或 $R$。这里的“连接”全程不能碰到原闭折线 $C$，并不是沿原多边形的边走。

先在任意一条边的开段上选一点 $M$，从 $X$ 向 $M$ 画一条有限折线路径。可以把折点稍作扰动，使它避开所有原顶点，与原边不重合，也只作有限次横交。此时不要求整条候选路径都在 $U$ 中；它的用途只是找到第一次碰到 $C$ 的位置。

因为终点 $M\in C$，第一次相遇必存在，记为 $Q$。$Q$ 位于某条边的开段，而不是原顶点。从 $X$ 出发到碰到 $Q$ **之前**，这段候选路径都在 $U$ 中。

在 $Q$ 之前足够近的位置取一点 $Z$，实际行走只走到 $Z$，不走到 $Q$。此时 $Z$ 已经靠近原边的某一侧。在同侧的局部半矩形，或顶点圆盘对应的开扇形中，可以把 $Z$ 连接到第 4.2 节构造的 $L$ 或 $R$；这个局部连接同样不碰 $C$。

<figure class="proof-figure" id="fig-first-hit"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 330" role="img" aria-label="fig-first-hit" style="width:100%;height:auto;display:block"><defs><marker id="fig-first-hit-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><rect x="175" y="55" width="45" height="215" rx="0" fill="#def1eb" stroke="#def1eb"/><rect x="220" y="55" width="45" height="215" rx="0" fill="#fbefd8" stroke="#fbefd8"/><path d="M220 55L220 270" fill="none" stroke="#243746" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><text x="165" y="40" font-size="16" fill="#29495d" text-anchor="start" font-weight="normal">C 的一段边</text><path d="M195 55L195 270" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M245 55L245 270" fill="none" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="7 5"/><text x="181" y="290" font-size="18" fill="#2b806b" text-anchor="start" font-weight="normal">L</text><text x="239" y="290" font-size="18" fill="#c48a28" text-anchor="start" font-weight="normal">R</text><path d="M40 245L100 205L150 150L210 150" fill="none" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><circle cx="40" cy="245" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="25" y="271" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">X</text><circle cx="210" cy="150" r="4" fill="#286786" stroke="#286786" stroke-width="2"/><text x="205" y="180" font-size="17" fill="#29495d" text-anchor="start" font-weight="normal">Z</text><path d="M210 150L220 150" fill="none" stroke="#ba514f" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="3 3"/><circle cx="220" cy="150" r="5" fill="white" stroke="#ba514f" stroke-width="2"/><text x="228" y="147" font-size="18" fill="#ba514f" text-anchor="start" font-weight="normal">Q</text><path d="M210 150V112H195" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><circle cx="195" cy="112" r="4" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><text x="340" y="65" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">Q：原路线第一次碰 C 的位置</text><text x="340" y="99" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">到达 Q 之前，先停在 Z</text><text x="340" y="133" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">X 到 Z 的路始终在补集 U 中</text><text x="340" y="167" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">在同侧通道内，从 Z 接到 L</text><text x="340" y="201" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">连接过程始终不碰 Q 或 C</text><text x="174" y="316" font-size="14" fill="#29495d" text-anchor="middle" font-weight="normal">蓝线到 Z 为止；红虚线表示不能继续走的部分</text></svg></div><figcaption>图 4｜“走到边上”不是允许路径碰边：Q 只用于确定首次相遇位置，实际连接在 Q 前的 Z 处转弯。若从另一侧接近，则以相同方式接到 R。</figcaption></figure>

拼接“从 $X$ 到 $Z$”与“从 $Z$ 接到辅助路径”这两段路，就得到一条完全位于 $U$ 中的路径。因此每个 $X\in U$ 都与 $L$ 或 $R$ 的点处于同一个连通分支。

$L$ 自身连通，所以整条 $L$ 只属于一个分支；$R$ 也只属于一个分支。$U$ 的每个分支都含有二者之一，故 $U$ **至多有两个**连通分支。此处仍允许两条辅助路径属于同一个分支；下一节才排除这一可能。

“每个点都能接到 $L$ 或 $R$”补上了全局覆盖这一步；仅说“原边附近有两侧”，不能排除远处还有第三个分支。

### 4.4 整条射线的总交点数为何在局部保持奇偶性

先把坐标轴转到一个合适方向，使所有边都不水平，并且任意两个不同顶点不在同一条水平线上。为什么能选到？边与顶点对只有有限多个，只需避开由它们决定的有限个方向，仍有无穷多个方向可选。以后所有射线统一朝右，不能在移动起点时任意转动射线。

对 $X=(x,y)\in U$，向右的射线是 $\{(x+s,y):s\ge0\}$。若它不经过顶点，令 $N(X)$ 为它与原闭折线 $C$ 的**全部交点数**。每条非水平边至多贡献一个交点，而边只有有限条，所以 $N(X)$ 是有限整数；定义奇偶标签 $\varepsilon(X)$ 为它除以 $2$ 的余数，即 $0$ 或 $1$。

“一般位置”在这里仅指起点不在 $C$ 上，且该水平射线不经过顶点。不要把“附近最多两个交点”误读为整条射线最多两个交点。

**第一步：普通交点在小范围内不会消失。** 对一条非水平边，其与水平直线的交点坐标随高度连续变化。如果交点在边的开段内，而且位于起点右方，两项都是严格条件；起点移动足够小，这些条件仍成立。若某条边原来不与射线相交，情况改变时必有一项严格条件失效。

因此交点要出现或消失，只可能是：交点走到边的端点，或走到射线起点。前者是射线扫过顶点；后者就是起点碰到 $C$，而我们的移动始终在 $U$ 内，禁止后一事件。因为边数有限，可以把邻域选得足够小，同时保护所有不涉及顶点事件的普通交点。

**第二步：穷尽分析一个顶点附近的变化。** 设射线扫过前方顶点 $V$。顶点有且只有两条关联边；两条边都不水平，所以从 $V$ 离开后，每条边只能伸向水平线上方或下方。

| 两条关联边相对于 V 的水平线 | 射线从上方移到下方时，局部交点数 |
| --- | --- |
| 两条都在上方 | 从 2 变为 0 |
| 两条都在下方 | 从 0 变为 2 |
| 一条在上方、一条在下方 | 从 1 变为 1，交点换到另一条边 |

这不是仅凭几幅图猜规律：两条边各有“向上、向下”两种可能，表中已覆盖全部组合。若顶点在射线起点左方，邻近移动中它仍在后方，不贡献交点。

<figure class="proof-figure" id="fig-parity-events"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 310" role="img" aria-label="fig-parity-events" style="width:100%;height:auto;display:block"><defs><marker id="fig-parity-events-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><text x="180" y="25" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">局部类型一：两个交点同时消失</text><path d="M90 70L180 210L270 70" fill="none" stroke="#243746" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M45 140L325 140" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M45 245L325 245" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><circle cx="135" cy="140" r="5" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="225" cy="140" r="5" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><text x="333" y="145" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">2</text><text x="333" y="250" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">0</text><text x="180" y="290" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">两条边都伸向顶点上方</text><text x="565" y="25" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">局部类型二：一个交点换到另一边</text><path d="M480 255L555 160L620 65" fill="none" stroke="#243746" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M405 115L710 115" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M405 205L710 205" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><circle cx="585.7894736842105" cy="115" r="5" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="519.4736842105264" cy="205" r="5" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><text x="720" y="120" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">1</text><text x="720" y="210" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">1</text><text x="565" y="290" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">两条边分居顶点上方、下方</text></svg></div><figcaption>图 21｜图只画一个顶点附近。穷尽性来自正文的上下分类，不来自“图看起来如此”；全部其他交点还要加回总数。</figcaption></figure>

**第三步：把局部变化加回整条射线。** 把远离该顶点的普通交点数记为 $K$。在足够小的邻域中，这些交点保持不变。总交点数可能为

$$
K+2\longleftrightarrow K+0,\qquad
K+1\longleftrightarrow K+1.
$$

例如 $K=7$，前者就是 $9\leftrightarrow7$，仍都是奇数。这里 $K$ 不必很小；一条射线完全可能穿过许多条边。由于开头还避开了顶点等高的方向，小范围内至多遇到一个顶点事件；若不加该方向限制，也只需将同时发生的多个偶数变化相加，结果仍为偶数。

<figure class="proof-figure" id="fig-parity-total"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 330" role="img" aria-label="fig-parity-total" style="width:100%;height:auto;display:block"><defs><marker id="fig-parity-total-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M100 145L100 280" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M150 145L150 280" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M200 145L200 280" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M450 145L450 280" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M500 145L500 280" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M550 145L550 280" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M600 145L600 280" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M300 145L350 235L400 145" fill="none" stroke="#243746" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M35 200L710 200" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M35 255L710 255" fill="none" stroke="#c48a28" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="7 5"/><circle cx="35" cy="200" r="5" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><circle cx="35" cy="255" r="5" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><circle cx="100" cy="200" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="150" cy="200" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="200" cy="200" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="450" cy="200" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="500" cy="200" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="550" cy="200" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="600" cy="200" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="100" cy="255" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="150" cy="255" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="200" cy="255" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="450" cy="255" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="500" cy="255" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="550" cy="255" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="600" cy="255" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="330.55555555555554" cy="200" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="369.44444444444446" cy="200" r="4" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><text x="380" y="40" font-size="19" fill="#29495d" text-anchor="middle" font-weight="normal">其他 K = 7 个交点保持；只在顶点附近改变 2 个</text><text x="380" y="88" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">上：7 + 2 = 9；下：7 + 0 = 7；奇偶性相同</text><text x="380" y="317" font-size="15" fill="#29495d" text-anchor="middle" font-weight="normal">只画相关边段；闭折线其余连接省略</text></svg></div><figcaption>图 22｜整条射线可以穿过许多边。图示远处七个交点都保留，局部减少两个，所以总数从九变七。两条射线表示同一方向下起点的不同位置。</figcaption></figure>

**第四步：给恰好射过顶点的起点定义标签。** 不把顶点粗略算作一次普通交点。分别把射线向上、向下稍微平移，取邻近一般位置的奇偶标签；表中说明两边相同，于是用这个共同值定义原特殊位置的 $\varepsilon$。顶点在后方的情形没有特殊交点，直接取邻近值即可。

至此证明了“局部不变”：对每个 $X\in U$，存在一个足够小的邻域，其中所有点的标签都等于 $\varepsilon(X)$。这个邻域完全避开 $C$。

**第五步：局部不变为什么推出整条路径上不变。** 设 $\gamma:[0,1]\to U$ 是任意连续路径。每个时刻附近，起点只在上述小邻域中移动，所以 $\varepsilon(\gamma(t))$ 在一段时间内不变。若它能在整段时间从 $0$ 变成 $1$，就把区间 $[0,1]$ 分成“标签为 0”和“标签为 1”两个非空、各自相对开的部分。这与实数区间的连通性矛盾；该基本性质等价于常见的中间值思想：连续过程不能在两个互相分离的状态间无跳变地切换。这里的标签函数因局部不变而连续，并不是预先假定它连续。

**第六步：确实找到两个标签不同的点。** 取一条边上一个不与任何顶点等高的点 $Q$，在它左、右取足够近的 $X_-,X_+$，使水平小线段只穿过这一条边。较左起点的右射线多经过该边一次；较右起点的射线在穿过该边之后才开始。它们在远处的交点完全相同，故总交点数相差一，标签不同。

它们不可能在 $U$ 内沿路径相连，否则违背第五步。结合第 4.3 节“至多两个分支”，得到恰好两个。

最后补上有界性和共同边界。$C$ 装在一个大圆盘中，圆盘外所有点可以互通，所以只能有一个无界分支，而且它确实存在；另一分支有界。任意边的开段附近，两侧标签相反；顶点由关联边的点逼近，因此 $C$ 的每一点都邻近两个分支。反过来，不在 $C$ 上的点周围有完全避开 $C$ 的小圆盘，全部属于同一分支，不会成为两个分支的边界。因此二者共同的边界恰为 $C$。

> 本节分析的是局部变化，标签却由整条射线的总交点数定义。有限性保护其他交点；连续路径把局部结论传到全程。这三个层次缺一不可。


<a id="chapter-5"></a>

## 第 5 章：从凸体表面到直线平面图

[返回目录](#reading-toc)

### 5.1 径向投影：为什么表面像一个球面

先解释所需的几何联系。取凸多面体内部一点 $O$，从它沿任意方向发出射线。射线与凸体相交的部分，从 $O$ 开始，恰好是一个有限闭线段：凸性排除中间空缺，有界性排除无穷延伸，包含边界保证能到达最后一点。因此每个方向恰好对应一个离开边界的点。

把这个边界点沿同一射线移到以 $O$ 为球心的单位球面，就叫径向投影。它保持一一对应，而且方向小幅改变时离开点也连续改变。用半空间式可以检查连续性：沿方向 $u$ 的离开距离是各个前方支撑平面相交距离的最小值；当相应平面不限制这条射线时忽略它。限制前的分子是正的，实际最先碰到的平面随方向改变只会连续交接，不会突然跳远。

更精确地，把 $O$ 平移为原点，则各半空间常数 $b_j>0$，方向向量 $u$ 长度为一，离开距离为 $r(u)=\min_{a_j\cdot u>0} b_j/(a_j\cdot u)$。给定方向 $u_0$ 和距离 $r(u_0)$，比它稍近的点严格满足所有约束，连续性与有限性保证邻近方向仍能走到这里；某个最先碰到的支撑平面又保证邻近方向不会走得比它远很多。这分别给出距离的下界与上界，证明没有跳跃。

这里不要求球面三角学。只是利用“从体内看，每个方向恰有一个表面点”，说明表面连成整张封闭壳，而不是有断开的另一片表面。

任意两个面的内部点可以在球面上用有限条圆弧连接，并稍微调整圆弧，使它们避开有限个投影顶点，且不沿投影棱行走。投影棱是平面经过 $O$ 后与球面的交弧；选取的有限圆弧与这些棱只作有限次相交。拉回凸体表面，就得到依次经过一串面的路线，相邻面共享一条棱。这证明面与面之间沿公共棱的邻接关系连通。

每个面的边界自身连通；这些边界又沿公共棱接起来，所以整个边图也连通。这里补上了“表面连通”到“边图连通”之间的具体步骤。

### 5.2 透视投影：选观察点时必须满足什么

选择一个面 $f$。在该面的平面内、避开边界的点叫面相对内部的点：它在这个平面内有一小块圆盘仍留在面中；作为三维实体的边界点，它当然不是凸体内部点。

此处只使用每个真正面对应的支撑半空间，去掉重复或冗余的限制。取 $f$ 相对内部一点 $C$，从它向凸体外侧移动很小距离，得到观察点 $S$。面 $f$ 以外的支撑不等式在 $C$ 都是严格的；限制只有有限个，所以距离可以小到让 $S$ 仍严格满足所有这些限制，只违反 $f$ 的那个限制。

<figure class="proof-figure" id="fig-schlegel-viewpoint"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 310" role="img" aria-label="fig-schlegel-viewpoint" style="width:100%;height:auto;display:block"><defs><marker id="fig-schlegel-viewpoint-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M200 70L350 95L390 230L200 250Z" fill="#e7f0f5" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M200 35L200 275" fill="none" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><circle cx="70" cy="150" r="5" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><text x="47" y="142" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">S</text><path d="M70 150L200 130L353.378 106.404" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M70 150L200 182L389.606 228.672" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><circle cx="200" cy="130" r="5" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><circle cx="353.378" cy="106.404" r="5" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><text x="166" y="117" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">入</text><text x="363" y="97" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">出</text><text x="208" y="53" font-size="16" fill="#29495d" text-anchor="start" font-weight="normal">面 f 的平面</text><text x="420" y="65" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">截面示意：观察点 S 在外侧</text><text x="420" y="99" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">S 只违反面 f 的一个限制</text><text x="420" y="133" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">一条视线先进入、再离开</text><text x="420" y="167" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">凸性排除反复进出</text><text x="420" y="201" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">其余表面投到 f 的轮廓内</text></svg></div><figcaption>图 23｜画的是三维情形的一张截面，不是把多面体展开。视线入点在面 f 上，离开点在其他表面，投影将二者对应。</figcaption></figure>

从 $S$ 向 $f$ 的内部发出一条视线，先在 $f$ 上进入凸体，再在其余表面某处离开。凸性保证没有反复进出。反过来，把其余表面一点 $Y$ 沿直线 $SY$ 投到 $f$ 的平面，投影点在 $S,Y$ 之间；它满足所有其他半空间约束，也满足 $f$ 平面的等式，所以落在面 $f$ 内。

因此，除 $f$ 内部外的表面可投到 $f$ 的轮廓内。不同行进方向的视线不混淆，同一视线又只有一个离开点，所以面内部不会互相盖住，棱也不会交叉。直线的透视像仍是直线，这就得到有限、连通的直线平面图，称为 Schlegel 图。它不是把多面体剪开并按原长度铺平；投影允许边长、角度改变，只保留连接关系。

### 5.3 顶点、棱、面怎样逐一对应

每个原顶点投成一个图顶点，每条原棱投成一条图边。各个未选中的原面，对应轮廓内部的各个有界区域；被选中的面 $f$，则对应图的无界外部区域。这个最后的对应是计数约定，不是说 $f$ 自己真的投到了无穷远。

所以 $V,E,F$ 都保留。立方体有八个图顶点、十二条图边、五个有界区域，再加一个无界区域，总面数仍是六。

<svg viewBox="0 0 680 245" role="img" aria-label="立方体的平面图，外框和内框各有四个顶点，对应角相连" style="width:100%;max-width:680px;display:block;margin:24px auto"><rect x="45" y="25" width="225" height="185" fill="#edf4f8" stroke="#286786" stroke-width="3"/><rect x="105" y="75" width="105" height="85" fill="#d5e7ef" stroke="#286786" stroke-width="3"/><path d="M45 25L105 75M270 25L210 75M270 210L210 160M45 210L105 160" stroke="#286786" stroke-width="3"/><g fill="#286786"><circle cx="45" cy="25" r="5"/><circle cx="270" cy="25" r="5"/><circle cx="270" cy="210" r="5"/><circle cx="45" cy="210" r="5"/><circle cx="105" cy="75" r="5"/><circle cx="210" cy="75" r="5"/><circle cx="210" cy="160" r="5"/><circle cx="105" cy="160" r="5"/></g><g fill="#29495d" font-size="18"><text x="320" y="65">立方体：8 个顶点，12 条边</text><text x="320" y="105">图内有 5 个有界区域</text><text x="320" y="145">外部无界区域也算一个面</text><text x="320" y="185">所以 F = 5 + 1 = 6</text></g></svg>

下文的“面”统一指平面去掉图后的区域，亦即第 4 章解释过的开集连通分支，包括无界分支。“图边”和“面内另画的辅助路径”是不同对象。


<a id="chapter-6"></a>

## 第 6 章：树为什么有 V−1 条边

[返回目录](#reading-toc)

### 6.1 树与生成树

在本篇，图由有限个顶点与连接顶点的边组成；平面图中的边是无交叉的线段，只在共同端点相遇。“嵌入”就是这样选定实际点位和线段画法。“度”是某顶点接出的边数。“简单路径”沿图边行走且不重复顶点；“简单回路”沿边走一圈、除起终点外不重复顶点。不要把这里沿原边走的图路径，与第 4 章避开原图走的平面辅助路径混为一谈。

树是有限、连通且没有简单回路的图。生成树保留原图全部顶点，只选取一部分边，并形成树。

生成树为什么存在？只要当前连通图还有回路，就删去回路上的一条边。该边两端仍能沿回路剩余部分连接，所以连通性不变。边数有限，删除过程终止，最后就是生成树。这个构造还没有用到面数或欧拉公式。

### 6.2 用最长路径找叶子

叶子是度数为 $1$ 的顶点。至少有两个顶点的有限树中，选一条顶点不重复的最长路径，考虑端点 $A$。

$A$ 至少有一条相邻边。假如它还有另一条边通向 $B$：若 $B$ 不在路径上，就能延长路径；若 $B$ 在路径上，就形成回路。两者都矛盾。因此 $A$ 恰好只有一条相邻边。

<figure class="proof-figure" id="fig-longest-path"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 310" role="img" aria-label="fig-longest-path" style="width:100%;height:auto;display:block"><defs><marker id="fig-longest-path-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M65 150L155 100L245 155L325 110" fill="none" stroke="#286786" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><circle cx="65" cy="150" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="155" cy="100" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="245" cy="155" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="325" cy="110" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="50" y="138" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A</text><path d="M445 150L535 100L625 155L705 110" fill="none" stroke="#286786" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><circle cx="445" cy="150" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="535" cy="100" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="625" cy="155" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="705" cy="110" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="430" y="138" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A</text><path d="M65 150L45 230" fill="none" stroke="#c48a28" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><circle cx="45" cy="230" r="5" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><text x="40" y="258" font-size="16" fill="#29495d" text-anchor="start" font-weight="normal">新点 B</text><text x="190" y="285" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">通向路径外 → 路径还能延长</text><path d="M445 150Q535 245 625 155" fill="none" stroke="#ba514f" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><text x="570" y="255" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">连回路径内 → 出现回路</text><text x="380" y="28" font-size="20" fill="#29495d" text-anchor="middle" font-weight="normal">最长简单路径端点 A 不可能还有第二条边</text></svg></div><figcaption>图 6｜叶子存在的两个反证分支：第二条边若通向新点，违背最长；若通向旧点，违背无回路。</figcaption></figure>

删除叶子及其边后，剩下的图仍连通：两个剩余顶点间的简单路径不可能以叶子作中间点；也仍无回路。

<figure class="proof-figure" id="fig-delete-leaf"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 285" role="img" aria-label="fig-delete-leaf" style="width:100%;height:auto;display:block"><defs><marker id="fig-delete-leaf-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><text x="190" y="28" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">删去一个叶子及它唯一的边</text><path d="M65 150H155L245 80M155 150L245 215M155 150H315" fill="none" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><circle cx="65" cy="150" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="155" cy="150" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="245" cy="80" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="245" cy="215" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><path d="M155 150L315 150" fill="none" stroke="#c48a28" stroke-width="5" stroke-linejoin="round" stroke-linecap="round"/><circle cx="315" cy="150" r="7" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><text x="315" y="128" font-size="18" fill="#c48a28" text-anchor="middle" font-weight="normal">叶子</text><text x="190" y="260" font-size="20" fill="#29495d" text-anchor="middle" font-weight="normal">V = 5，E = 4</text><path d="M435 150H525L615 80M525 150L615 215" fill="none" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><circle cx="435" cy="150" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="525" cy="150" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="615" cy="80" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="615" cy="215" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="560" y="260" font-size="20" fill="#29495d" text-anchor="middle" font-weight="normal">V = 4，E = 3</text><path d="M350 150L405 150" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-delete-leaf-arrow)"/><text x="560" y="28" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">剩下仍连通，也没有回路</text></svg></div><figcaption>图 7｜每次删除都让顶点数和边数同时减一。一直删到单点，反过来就得到 E = V−1。</figcaption></figure>

### 6.3 归纳计数

单顶点树的边数为 $0$。对 $V\ge2$，删掉一个叶子及其边，剩下 $V-1$ 个顶点。由归纳假设，剩下 $V-2$ 条边，加回被删的一条：

$$
E=(V-2)+1=V-1.
$$

这比“每加入一个顶点就加一条边”完整，因为我们先证明了任意有限树都确实可以按这种方式逐步拆开。


<a id="chapter-7"></a>

## 第 7 章：树为什么只有一个面

[返回目录](#reading-toc)

### 7.1 有限线段的绕行引理

设在一个直线平面图 $G$ 上增加一条线段 $AB$：$A$ 是已有顶点，$B$ 是新顶点，线段除 $A$ 外不碰原图。这样的边是悬挂边。这里原图的补集是 $\mathbb R^2\setminus G$；增加后是 $\mathbb R^2\setminus(G\cup AB)$。我们要证明两者的连通分支数相同。

证明要解释为什么两侧仍能互通。它的内部和新端点都位于原图的同一个面 $\Omega$。取该面中避开新线段的任意两点，先在 $\Omega$ 中用折线连接；稍作扰动，让它与新线段只在有限个内部点横交，且避开 $A,B$。

若路径穿过线段，可以沿线段一侧走向自由端 $B$，绕 $B$ 一个小半圆，再沿另一侧返回，替代原来的穿越。路径与线段的交点有限，并且全离 $A$ 有正距离，故只需在远离 $A$ 的紧子线段周围选一个避开原图的窄通道。这里的“通道”仍指二维带状区域，绕行路径画在其中；它连同 $B$ 的小圆盘完全在 $\Omega$ 内。

逐次替换有限个穿越，得到完全避开新线段的路径。因此 $\Omega$ 没有被分裂。其他面没有受到影响，且增加障碍不能把原本不同的面合并，所以面数不变。

<figure class="proof-figure" id="fig-leaf-detour"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 320" role="img" aria-label="fig-leaf-detour" style="width:100%;height:auto;display:block"><defs><marker id="fig-leaf-detour-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M170 150H300" stroke="#def1eb" stroke-width="105" stroke-linecap="round" fill="none"/><path d="M40 65L100 150L40 245M100 150H300" fill="none" stroke="#286786" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><circle cx="100" cy="150" r="6" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="300" cy="150" r="6" fill="#286786" stroke="#286786" stroke-width="2"/><text x="83" y="177" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A</text><text x="303" y="177" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">B</text><path d="M200 65V235" fill="none" stroke="#ba514f" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="6 5"/><circle cx="200" cy="150" r="5" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><path d="M200 65L200 113H300Q340 113 340 150Q340 187 300 187H200V235" fill="none" stroke="#2b806b" stroke-width="4" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-leaf-detour-arrow)"/><text x="390" y="75" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">浅绿底：窄通道所在区域</text><text x="390" y="109" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">绿线：通道内的绕行路径</text><text x="390" y="143" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">红虚线：原路会穿过新边</text><text x="390" y="177" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">窄通道远离附着点 A</text><text x="390" y="211" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">所以新边两侧仍然相通</text><text x="175" y="290" font-size="17" fill="#2b806b" text-anchor="middle" font-weight="normal">只有 B 是可以绕过去的自由端</text></svg></div><figcaption>图 8｜树不分割平面的核心动作：把一次“穿过边”替换成“绕自由端”。这一步可对有限多个交点逐一进行。</figcaption></figure>

### 7.2 为什么“没有回路”不是充分的解释文字

“没有回路，所以没有围出区域”描述的是正确图景，但直接把它当作理由，仍然省略了平面连通性的论证。上面的自由端绕行给出可逐步检查的依据。

单个点的补集连通：连接任意两点的折线若碰到它，绕一个小圆弧即可避开。从单顶点树出发，按第 6 章删除叶子的逆过程，逐条增加悬挂边；每一步面数不变，所以

$$
\boxed{F_{\mathrm{tree}}=1}.
$$

这里没有用欧拉公式倒推，因此不存在循环论证。


<a id="chapter-8"></a>

## 第 8 章：加回一条边为什么恰好多一个面

[返回目录](#reading-toc)

### 8.1 条件必须说全

设 $G$ 是有限直线平面图。增加一条边 $e=AB$，两端 $A,B$ 是不同的已有顶点，且已经有原图路径相连；新边的开段不碰原图。整个图连通是一个充分条件，但真正需要的只是两端原来已相连。我们要证明

$$
F(G+e)=F(G)+1.
$$

记新边去掉端点后的开段为 $e^\circ=e\setminus\{A,B\}$。它连通且完全位于原图补集 $\mathbb R^2\setminus G$ 中，所以位于其中一个连通分支，也就是一个原面 $\Omega$ 内。其他原面没有改变，因此只需研究 $\Omega\setminus e$。

<svg viewBox="0 0 680 215" role="img" aria-label="先有一条从 A 到 B 的折线路径，再加回底边 AB，形成一个简单多边形" style="width:100%;max-width:680px;display:block;margin:24px auto"><path d="M45 165L95 45L225 45L275 165" fill="none" stroke="#286786" stroke-width="4"/><path d="M45 165H275" stroke="#c68a29" stroke-width="4" stroke-dasharray="9 6"/><g fill="#286786"><circle cx="45" cy="165" r="5"/><circle cx="95" cy="45" r="5"/><circle cx="225" cy="45" r="5"/><circle cx="275" cy="165" r="5"/></g><g fill="#29495d" font-size="18"><text x="32" y="195">A</text><text x="268" y="195">B</text><text x="350" y="65">蓝线：已有简单路径 P</text><text x="350" y="105">金线：加回的新边 e</text><text x="350" y="145">P 与 e 合起来成为简单闭折线</text><text x="350" y="185">其他已有边可以在图中继续延伸</text></g></svg>

### 8.2 至少分成两个面

由于两端已在原图相连，删除路径中的重复绕行后，可取得从 $A$ 到 $B$ 的简单路径 $P$。路径不重复顶点，原图边不交叉，而 $e$ 的内部不碰原图，所以 $P\cup e$ 是简单闭折线。

由第 4 章的多边形分割定理，这条闭折线的两侧不连通。在新边中点附近，选一个小圆盘，避开所有原图；盘内新边两侧的点 $X,Y$ 原来都在 $\Omega$，现在却分别位于闭折线的两区。

任何避开 $G+e$ 的路径也必避开 $P\cup e$，故不能连接 $X,Y$。因此 $\Omega$ 至少分成两个面。

<figure class="proof-figure" id="fig-edge-split"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 300" role="img" aria-label="fig-edge-split" style="width:100%;height:auto;display:block"><defs><marker id="fig-edge-split-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M75 215L115 65H285L325 215Z" fill="#e6f1f4" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M75 215L325 215" fill="none" stroke="#c48a28" stroke-width="5" stroke-linejoin="round" stroke-linecap="round"/><circle cx="75" cy="215" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="325" cy="215" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="57" y="244" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A</text><text x="327" y="244" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">B</text><circle cx="200" cy="190" r="6" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><text x="213" y="190" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">X</text><circle cx="200" cy="247" r="6" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><text x="213" y="252" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">Y</text><text x="200" y="287" font-size="15" fill="#29495d" text-anchor="middle" font-weight="normal">X、Y 原来同面；加边后被闭回路隔开</text><text x="385" y="75" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">上方蓝线：已有简单路径 P</text><text x="385" y="109" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">下方金线：加回的新边 e</text><text x="385" y="143" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">P ∪ e 围成简单多边形</text><text x="385" y="177" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">新边两侧的 X、Y 无法互通</text><text x="385" y="211" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">这证明“至少两个”</text></svg></div><figcaption>图 9｜同样是加一条边，这次没有自由端：两端早已被旧路径连起来，绕过端点也无法逃开整个闭回路。</figcaption></figure>

### 8.3 至多分成两个面

沿新边的开段，两侧各取一条二维窄通道，并在其中各画一条辅助路径；以下“同侧相连”指可以在该侧区域内行走，不是沿原边行走。这里不要求有一个固定宽度一直延伸到端点：只需任意两个开段上的位置之间的紧子线段周围有避开原图的窄矩形，就能在同侧相互连接。原图只有有限条线段，且与这段紧子线段不相交，所以这样的宽度存在。

取 $\Omega\setminus e$ 中任意一点 $Z$。由于 $\Omega$ 折线道路连通，可以在 $\Omega$ 中用折线走向新边中点；扰动路径，使它避开端点并横交线段。考察第一次碰到 $e$ 之前的部分，它把 $Z$ 接到新边某一侧的通道。

所以每个新分支都接到左侧通道或右侧通道；每一侧的辅助路径自身连通，至多对应一个分支。因此至多两个。

<figure class="proof-figure" id="fig-two-side-channels"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 300" role="img" aria-label="fig-two-side-channels" style="width:100%;height:auto;display:block"><defs><marker id="fig-two-side-channels-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M95 140H300" stroke="#def1eb" stroke-width="24"/><path d="M95 170H300" stroke="#fbefd8" stroke-width="24"/><path d="M75 155L320 155" fill="none" stroke="#c48a28" stroke-width="5" stroke-linejoin="round" stroke-linecap="round"/><circle cx="75" cy="155" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="320" cy="155" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="65" y="183" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A</text><text x="315" y="183" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">B</text><path d="M95 140L300 140" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M95 170L300 170" fill="none" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M155 80L240 105L240 140" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-two-side-channels-arrow)"/><circle cx="155" cy="80" r="5" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><text x="136" y="72" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">Z₁</text><path d="M145 230L205 210L205 170" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-two-side-channels-arrow)"/><circle cx="145" cy="230" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="122" y="251" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">Z₂</text><text x="390" y="75" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">两片浅色带：两侧窄通道</text><text x="390" y="109" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">任意点沿原面走向新边</text><text x="390" y="143" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">碰边前先转入一侧窄通道</text><text x="390" y="177" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">细线：通道中的辅助路径</text><text x="390" y="211" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">因此每侧至多一个分支</text></svg></div><figcaption>图 10｜“至多两个”另有理由：所有新分支都必须接到上、下两条通道之一。通道只沿边内部走，不要求在端点处保持固定宽度。</figcaption></figure>

### 8.4 合并结论

至少两个且至多两个，故一个原面恰好分为两个；其他面不变。这才得到

$$
\Delta V=0,\qquad\Delta E=1,\qquad\Delta F=1.
$$

只引用“闭曲线有内外两区”足以帮助区分两侧，却不能代替第 8.3 节对其他分支的排除。另一个重要条件是连通性：如果新边连接两个不同连通分量，它可能只是把分量接起来，并不产生新面。


<a id="chapter-9"></a>

## 第 9 章：完成欧拉公式的证明

[返回目录](#reading-toc)

### 9.1 从生成树加回原图

取连通直线平面图 $G$ 的一棵生成树 $T$。第 6—7 章证明了

$$
E(T)=V-1,\qquad F(T)=1.
$$

所以对这棵树，$V-E(T)+F(T)=V-(V-1)+1=2$。

现在依次加回原图中不属于树的边。因为始终保留着生成树，当前图始终连通；由于加回的都是原来平面图的边，也不会发生交叉。因此每一步都满足第 8 章的条件：边数和面数同时增加一，顶点数不变。

$$
\Delta(V-E+F)=0-1+1=0.
$$

<figure class="proof-figure" id="fig-euler-invariant"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 290" role="img" aria-label="fig-euler-invariant" style="width:100%;height:auto;display:block"><defs><marker id="fig-euler-invariant-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><text x="125" y="25" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">生成树</text><path d="M45 180L45 70H200V180" fill="none" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><circle cx="45" cy="180" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="45" cy="70" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="200" cy="70" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="200" cy="180" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="125" y="225" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">V=4，E=3，F=1</text><text x="125" y="264" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">V − E + F = 2</text><text x="375" y="25" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">加回一条边</text><path d="M295 180L295 70H450V180" fill="none" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M295 180L450 180" fill="none" stroke="#c48a28" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><circle cx="295" cy="180" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="295" cy="70" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="450" cy="70" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="450" cy="180" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="375" y="225" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">V=4，E=4，F=2</text><text x="375" y="264" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">V − E + F = 2</text><text x="625" y="25" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">再加回一条边</text><path d="M545 180L545 70H700V180" fill="none" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M545 180L700 180" fill="none" stroke="#c48a28" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><path d="M545 70L700 180" fill="none" stroke="#2b806b" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><circle cx="545" cy="180" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="545" cy="70" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="700" cy="70" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="700" cy="180" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="625" y="225" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">V=4，E=5，F=3</text><text x="625" y="264" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">V − E + F = 2</text></svg></div><figcaption>图 11｜从同一组顶点出发：每加回一条边，就多一个面。减去的 E 与加上的 F 同时增一，差值不变。</figcaption></figure>

全部加回后得到

$$
\boxed{V-E+F=2}.
$$

也可直接数：一共加回 $E-(V-1)$ 条边，所以 $F=1+E-(V-1)=E-V+2$。

第 5 章给出凸多面体与这种平面图的对应，故凸多面体同样满足该式。这个证明没有依赖正多面体条件。

### 9.2 适用范围与常见误用

对具有 $c$ 个连通分量的有限平面图，公式是 $V-E+F=1+c$，仍把外部算一个面。先在每个分量取一棵树，合称生成森林，共有 $V-c$ 条边。起初取各树一个根点，有限个孤立点的补集连通；逐条接叶子边，用第 7 章绕行证明面数仍为一。加回的其余边两端都在原来的同一个分量中，已由森林路径相连，故满足第 8 章实际需要的条件，每条多一个面。因此 $F=1+E-(V-c)$，得到所列公式。

这里不进一步引入曲面的柄、可定向或胞腔等术语。只需记住：本篇证明针对有限平面图及由凸体得到的球状表面，不是所有带孔表面的通用公式。

证明依赖关系是：有限线段的局部绕行与多边形分割 → 树的面数和加边引理 → 欧拉公式 → 正多面体的参数限制。没有从欧拉公式反推其中的引理。


<a id="chapter-10"></a>

## 第 10 章：先补向量工具，再证顶点角和

[返回目录](#reading-toc)

### 10.1 点积、长度、垂直与三个方向不共面

向量 $u=(u_1,u_2,u_3)$ 表示一个位移；把空间点当成向量时，是指从选定原点指向该点的位移。两点 $A,B$ 的距离，是位移 $B-A$ 的长度：

$$
u\cdot v=u_1v_1+u_2v_2+u_3v_3,
\qquad |u|=\sqrt{u\cdot u},
\qquad |B-A|^2=(B-A)\cdot(B-A).
$$

单位向量就是长度为一的向量。两个非零向量的夹角 $\theta\in[0,\pi]$ 由 $u\cdot v=|u||v|\cos\theta$ 确定；夹角为直角等价于点积为零。这些关系来自平面余弦定理：把两向量及其差构成三角形，将 $|u-v|^2=|u|^2+|v|^2-2u\cdot v$ 与余弦定理比较即可。

若 $a,b$ 都是单位向量，由平方长度非负，$|a+b|^2=2+2a\cdot b\ge0$、$|a-b|^2=2-2a\cdot b\ge0$，得到 $-1\le a\cdot b\le1$。取下界等号当且仅当 $a=-b$；取上界等号当且仅当 $a=b$。本篇用到的点积界都可由这里得到，不必额外引用柯西不等式。

给定单位向量 $v$，$u$ 沿它的分量是 $(u\cdot v)v$，剩余部分 $u-(u\cdot v)v$ 与 $v$ 的点积为零，故垂直于 $v$。这就解释了下面所用的“垂直分解”。

三个从同一原点出发的向量“线性无关”，指不存在不全为零的系数 $r,s,t$ 使 $ru+sv+tw=0$。在三维空间，这等价于三条方向不在同一平面。这样的三个向量可以作一套斜坐标：每个向量都能唯一写成它们的线性组合；可用三个一次方程求系数。

一个平面的法向量，是与平面内所有方向都垂直的非零向量。所以 $n\cdot x=h$ 的平面以 $n$ 为法向量。两个平面的夹角可以通过各自法向量的夹角计算；取锐角时，余弦为 $|n_1\cdot n_2|/(|n_1||n_2|)$。可在垂直于交线的小截面里，将两条直线及其垂线一起旋转 $90^\circ$，直接看出夹角相同。

还要解释，为什么固定原点的刚性变换可以按向量处理。若 $T$ 固定原点，保持距离，则

$$
T(u)\cdot T(v)=\frac{|T(u)|^2+|T(v)|^2-|T(u)-T(v)|^2}{2}=u\cdot v.
$$

把三个互相垂直的单位坐标方向记为 $e_i$，其像 $T(e_i)$ 仍是三个互相垂直的单位方向；$T(u)$ 在这些新方向上的分量为 $T(u)\cdot T(e_i)=u_i$。所以 $T(u)=\sum_i u_iT(e_i)$，确实保持线性组合。以后说一个对称固定某平面或反转法向量，都有这个依据，而不是把“保持距离”擅自加强成一个新假设。

**以后核对对称性的一个小引理。** 三个线性无关向量 $u_1,u_2,u_3$ 若要映到 $v_1,v_2,v_3$，且所有成对点积相同，则“保持组合系数不变”的映射保持一切长度：

$$
\left|\sum_i t_i v_i\right|^2
=\sum_{i,j}t_i t_j(v_i\cdot v_j)
=\sum_{i,j}t_i t_j(u_i\cdot u_j)
=\left|\sum_i t_i u_i\right|^2.
$$

也保持两点之间的距离，因此是一个以原点为固定点的刚性变换。这个证明让“核对一张点积表就得到整体空间对称”有了明确依据。

### 10.2 空间夹角的三角不等式

设 $u,v,w$ 是单位向量，$\alpha=\angle(u,v)$、$\beta=\angle(v,w)$、$\gamma=\angle(u,w)$。目标是 $\gamma\le\alpha+\beta$。

<figure class="proof-figure" id="fig-angle-triangle"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 300" role="img" aria-label="fig-angle-triangle" style="width:100%;height:auto;display:block"><defs><marker id="fig-angle-triangle-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><text x="190" y="28" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">方向夹角：直接转，或经中间方向转</text><path d="M80 230L310 230M80 230L270 135M80 230L160 55" fill="none" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><text x="315" y="236" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">u</text><text x="279" y="137" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">v</text><text x="170" y="75" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">w</text><circle cx="80" cy="230" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><path d="M170 230A90 90 0 0 0 160 190" fill="none" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><text x="180" y="215" font-size="18" fill="#c48a28" text-anchor="start" font-weight="normal">α</text><path d="M195 172Q175 125 137 110" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><text x="179" y="140" font-size="18" fill="#2b806b" text-anchor="start" font-weight="normal">β</text><path d="M140 230Q135 175 105 173" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><text x="111" y="205" font-size="18" fill="#286786" text-anchor="start" font-weight="normal">γ</text><text x="385" y="75" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">图示共面且 v 在较小夹角内：</text><text x="385" y="109" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">γ = α + β</text><text x="385" y="143" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">空间不共面时，绕经 v 更长：</text><text x="385" y="177" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">γ &lt; α + β</text><text x="385" y="211" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">一般结论由后面的内积计算保证</text></svg></div><figcaption>图 12｜先把不等式读成“方向之间的距离”：经中间方向绕行，不会比直接转过去更短。图中画的是取等的共面情形，严格号要由非共面条件推出。</figcaption></figure>

若 $\alpha$ 或 $\beta$ 为零，结论直接成立；若有一个为 $\pi$，右边至少为 $\pi$，结论也成立。其余情形，按第 10.1 节的分解，

$$
u=\cos\alpha\,v+\sin\alpha\,a,
\qquad w=\cos\beta\,v+\sin\beta\,b,
$$

其中 $a,b$ 是垂直于 $v$ 的单位向量。例如 $u$ 的剩余部分的平方长度是 $1-\cos^2\alpha=\sin^2\alpha$，所以除以正数 $\sin\alpha$ 后确是单位向量。

由 $a\cdot b\ge-1$，

$$
\cos\gamma=u\cdot w
\ge\cos\alpha\cos\beta-\sin\alpha\sin\beta
=\cos(\alpha+\beta).
$$

若 $\alpha+\beta\le\pi$，使用余弦在 $[0,\pi]$ 上严格递减，得 $\gamma\le\alpha+\beta$；若和大于 $\pi$，则直接用 $\gamma\le\pi<\alpha+\beta$。不能把余弦的单调性擅自延伸到整个实数轴。

若三个方向不共面，$a,b$ 不可能反向，否则 $u,v,w$ 都在 $v,a$ 张成的同一个平面中。因此 $a\cdot b>-1$，并且两个正弦都为正；结合前面的分情况，得到严格结论 $\gamma<\alpha+\beta$。

### 10.3 截顶平面为什么存在

把原顶点 $O$ 选作原点。设经过它的关联面的半空间式为 $a_i\cdot x\le0$。不经过它的其他面，在 $O$ 处都严格满足各自不等式。

这些关联平面的公共交集只有原点：若还含有一条方向 $d$，沿 $d$ 与 $-d$ 各移动足够小的距离，不违反任何关联约束；其他有限个严格约束也仍满足。于是 $O$ 位于凸体内两个不同点的线段中间，不可能是顶点。这与定义矛盾。

对 $x\in P$，令

$$
g(x)=\sum_i\frac{-a_i\cdot x}{|a_i|}.
$$

每一项都是点到相应关联支撑平面的向内距离，均不为负；和为零必须每项都为零，所以在 $P$ 中只有 $O$ 取零值。其他顶点有限，故其 $g$ 值有正的最小值 $m$。选 $0<\varepsilon<m$，平面 $g(x)=\varepsilon$ 就把 $O$ 与其他顶点分开。

每条从 $O$ 发出的棱恰好穿过此平面一次；不经过 $O$ 的棱两端 $g$ 值都至少为 $m$，整条棱都不会被此平面截到。截面是凸的，因为它是凸体与一个平面的交集。其顶点恰为截到原棱的点：在原面内部只能沿一条截线通过，不会在那里产生截面转角。

因此，若从 $O$ 发出 $n$ 条棱，便得到按循环次序排列的凸 $n$ 边形 $A_1\cdots A_n$。每个关联原面留下一个侧三角形 $OA_iA_{i+1}$。相邻三点不共线，否则中间点不是截面真正的顶点。

<figure class="proof-figure" id="fig-vertex-section"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 345" role="img" aria-label="fig-vertex-section" style="width:100%;height:auto;display:block"><defs><marker id="fig-vertex-section-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M75 285L215 55L335 280L195 315Z" fill="#edf4f8" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M215 55L195 315" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M75 285L150 245L335 280M215 55L150 245" fill="none" stroke="#6d8391" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="6 4"/><path d="M124 204.5L172.75 178.5L293 201.25L202 224Z" fill="#f6e7c9" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M215 55L124 204.5" fill="none" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M215 55L172.75 178.5" fill="none" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="5 4"/><path d="M215 55L293 201.25" fill="none" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M215 55L202 224" fill="none" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><circle cx="215" cy="55" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="225" y="52" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">O</text><text x="96" y="210" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A₁</text><text x="300" y="207" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A₃</text><text x="210" y="245" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A₄</text><text x="145" y="170" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A₂</text><text x="190" y="338" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">金色平面截到所有从 O 发出的棱</text><text x="560" y="30" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">截面放到纸上看：凸多边形</text><path d="M445 140L520 75L665 125L600 235L465 225Z" fill="#fcf0d9" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><text x="425" y="143" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A₁</text><text x="514" y="62" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A₂</text><text x="674" y="131" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A₃</text><text x="595" y="259" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A₄</text><text x="435" y="244" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A₅</text><text x="560" y="300" font-size="15" fill="#29495d" text-anchor="middle" font-weight="normal">左图画四棱锥；右图另示一般截面</text></svg></div><figcaption>图 13｜先用一张平面截掉顶点附近的小角：原来的各个面，在小棱锥中变成侧三角形。截面是平面凸多边形，内角和可以直接使用。</figcaption></figure>

### 10.4 角度记账与严格小于 360°

记侧三角形在 $O$ 的顶角为 $\theta_i=\angle A_iOA_{i+1}$；在 $A_i$ 的底角为 $\alpha_i$；在 $A_{i+1}$ 的底角为 $\beta_i$。下标循环，即 $A_{n+1}=A_1$、$\beta_0=\beta_n$。

每个三角形给出 $\theta_i+\alpha_i+\beta_i=\pi$。全部相加：

$$
\sum_i\theta_i=n\pi-\sum_i(\alpha_i+\beta_i).
$$

在底面顶点 $A_i$，底面内角 $\gamma_i=\angle A_{i-1}A_iA_{i+1}$。绕经方向 $A_iO$ 的两个角分别是前一个侧三角形的 $\beta_{i-1}$ 和后一个侧三角形的 $\alpha_i$。

三个方向不共面：$A_{i-1},A_i,A_{i+1}$ 决定截面平面，而 $O$ 不在此平面中。于是第 10.2 节给出

$$
\gamma_i<\beta_{i-1}+\alpha_i.
$$

<figure class="proof-figure" id="fig-angle-bookkeeping"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 335" role="img" aria-label="fig-angle-bookkeeping" style="width:100%;height:auto;display:block"><defs><marker id="fig-angle-bookkeeping-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><text x="190" y="28" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">一个侧三角形：θᵢ + αᵢ + βᵢ = π</text><path d="M190 65L65 255H315Z" fill="#edf4f8" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><text x="192" y="52" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">O</text><text x="38" y="278" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">Aᵢ</text><text x="313" y="279" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">Aᵢ₊₁</text><path d="M175 89Q190 110 205 89" fill="none" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><text x="189" y="131" font-size="18" fill="#c48a28" text-anchor="middle" font-weight="normal">θᵢ</text><path d="M82 228Q105 237 101 255" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><text x="118" y="239" font-size="18" fill="#2b806b" text-anchor="start" font-weight="normal">αᵢ</text><path d="M279 255Q278 237 298 228" fill="none" stroke="#ba514f" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><text x="239" y="239" font-size="18" fill="#ba514f" text-anchor="start" font-weight="normal">βᵢ</text><text x="570" y="28" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">在底面顶点 Aᵢ 比较三个角</text><path d="M475 245L440 100M475 245L680 210M475 245L565 65" fill="none" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><text x="421" y="91" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">Aᵢ₋₁</text><text x="682" y="209" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">Aᵢ₊₁</text><text x="570" y="59" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">O</text><text x="450" y="272" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">Aᵢ</text><path d="M462.1 191.5A55 55 0 0 1 529.2 235.7" fill="none" stroke="#c48a28" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><text x="482" y="205" font-size="18" fill="#c48a28" text-anchor="start" font-weight="normal">γᵢ</text><text x="570" y="307" font-size="21" fill="#29495d" text-anchor="middle" font-weight="normal">γᵢ &lt; βᵢ₋₁ + αᵢ</text><text x="190" y="322" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">把所有侧三角形的内角和相加</text></svg></div><figcaption>图 14｜左图负责角度记账；右图中 O 在截面之外，三条射线不共面，所以底面角 γᵢ 严格小于绕经 O 的两个角之和。空间射线在纸上的夹角仅作标记，不按比例量角。</figcaption></figure>

凸 $n$ 边形从一个顶点向其余不相邻顶点连对角线，分为 $n-2$ 个三角形，因此 $\sum_i\gamma_i=(n-2)\pi$。把上述严格不等式相加，再代回：

$$
\sum_i(\alpha_i+\beta_i)>(n-2)\pi,
\qquad
\boxed{\sum_i\theta_i<2\pi=360^\circ}.
$$

$\theta_i$ 就是原面在 $O$ 处的面内角，因为截面点仍在原棱上。严格号来自非共面性；凸性负责让截面和角度的循环顺序正确。这一证明完全不使用欧拉公式。

### 10.5 角亏说明了什么，又没有说明什么

定义角亏 $\delta=2\pi-\sum_i\theta_i$。刚才证明凸多面体的真正顶点有 $\delta>0$。但给定一些多边形，仅仅顶点角和合适，不保证它们能在整个空间中闭合成凸体。

“角和等于 $2\pi$ 就只能铺在一个平面上”也不对。面片可以像纸一样折起来，而不改变纸面上量得的角和。“内禀”就是只看面片自身的长度和角度，不管它怎样摆在空间；这只是一个解释，不将角亏的符号自动等同于空间中的局部凸凹。

本篇的主线只使用已经证明的必要条件：真正凸顶点的面角和严格小于 $2\pi$。鞍形面、曲率或其他曲面理论不作为这里的前置知识。


<a id="chapter-11"></a>

## 第 11 章：逐个构造、证明正则性，再证明唯一性

[返回目录](#reading-toc)

### 11.1 每个例子都要通过哪些检查

下面不从“这个形状的名字”推出它存在。每次先给出一个点集或半空间交，造出有界、内部非空的凸体，再确定其实际支撑面，最后验证关联标记的整体对称标准。记号 $\operatorname{conv}$、支撑平面和刚性变换都已在第 1 章定义；点积和距离公式见第 10.1 节。

先准备一个常用的顶点判断：若有限点集的所有点都在同一个以原点为中心的球面上，且互不相同，那么每个点都是其凸包的实际顶点。对其中一点 $v$，$v\cdot x$ 在点集上只在 $x=v$ 取最大值：

$$
v\cdot x=|v|^2-\frac{|v-x|^2}{2}<|v|^2\qquad(x\ne v).
$$

第 1.4 节的凸组合取等条件说明，凸包中也只有 $v$ 取最大值，故它不可能夹在两个不同凸体点的线段中间。

另一个计数工具来自已证明的欧拉公式。任何三维凸多面体，每面至少三棱，每棱属于两面，所以 $3F\le2E$；由 $E=V+F-2$ 得

$$
\boxed{F\le2V-4}.
$$

这只限制一般凸多面体的面数，并没有预先假定正则性。后面用它确认二十个已找到的支撑面就是全部面，不会循环使用“二十面体已经存在”。

### 11.2 正四面体：四点、四个实际面与全部对称

取

$$
v_1=(1,1,1),\quad v_2=(1,-1,-1),\quad
v_3=(-1,1,-1),\quad v_4=(-1,-1,1),
$$

令 $P=\operatorname{conv}\{v_1,v_2,v_3,v_4\}$。四点不共面：若都满足 $ax+by+cz=d$，用第一点分别减去其余三点，得到 $b+c=a+c=a+b=0$，从而 $a=b=c=0$，不可能是一张平面的方程。因此凸包是三维的。

四点平方半径都是 $3$，任意两点的点积为 $-1$，故平方距离为 $3+3-2(-1)=8$，六条边等长。

对每个 $i$，半空间 $v_i\cdot x\ge-1$ 包含全部四点，平面 $v_i\cdot x=-1$ 恰好包含其余三个点。因此这三个点的三角形是一个实际支撑面，而不是内部三角形。四个 $i$ 给出四个面；$V=4$ 时一般面数上界是 $4$，所以没有其他面。每个面是边长 $2\sqrt2$ 的等边三角形，每个顶点相交三面。

<figure class="proof-figure" id="fig-build-tetra"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 350" role="img" aria-label="fig-build-tetra" style="width:100%;height:auto;display:block"><defs><marker id="fig-build-tetra-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M205.17 164.73L327.50 283.05L174.83 54.83Z" fill="#e7f0f5" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M205.17 164.73L52.50 295.17L174.83 54.83Z" fill="#d8e7ef" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M205.17 164.73L327.50 283.05L52.50 295.17Z" fill="#f7e7c9" stroke="#c48a28" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><text x="375" y="75" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">四点不共面 → 有三维实体</text><text x="375" y="109" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">每两点平方距离都是 8</text><text x="375" y="143" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">四张平面各支撑一个三角形</text><text x="375" y="177" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">任意交换两顶点都来自反射</text><text x="375" y="211" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">所以全体关联标记可以对齐</text><text x="190" y="328" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">金色显示一个实际支撑面</text></svg></div><figcaption>图 16｜四面体先由坐标构造，再用支撑平面确定面。绘图为投影，图上角度和长度不作为正则性的证明。</figcaption></figure>

最后检验整体正则性。任选两个顶点，关于它们连线的垂直平分平面反射，会交换这两个顶点；另外两个顶点到它们距离相等，恰好在该平面上，保持不动。因此任意交换两个顶点都来自整个点集的空间对称。连续作这些交换可实现四顶点的任意排列。任何关联标记都可由顶点排列移到另一个关联标记，故第 1.5 节标准满足。

### 11.3 立方体与正八面体：坐标能把面写全

**立方体。** 取 $P=[-1,1]^3$，即 $-1\le x,y,z\le1$。它显然有界，原点周围有小球，且是六个半空间的交。

固定一个坐标为 $1$ 或 $-1$，另外两个坐标仍可在 $[-1,1]$ 中独立变化，得到六个边长 $2$ 的正方形面。除此之外不可能有新面：边界必须至少有一个坐标取端值；一片有面积的平面面不能只靠这些正方形的有限条交线拼成，必在其中一个平面内。八个顶点是全部 $(\pm1,\pm1,\pm1)$，每个顶点三面相交。

独立改变坐标正负号、互换三个坐标，都保持整个立方体。先用符号变化把目标顶点对齐；在 $(1,1,1)$ 处，坐标置换可任意排列三条相邻棱，同时把包含选定棱的面也对齐。故任意关联标记可整体对齐，立方体是凸正多面体。

**正八面体。** 取六点 $(\pm1,0,0),(0,\pm1,0),(0,0,\pm1)$ 的凸包 $P$。它等于

$$
|x|+|y|+|z|\le1.
$$

一方面，六点都满足该凸不等式；另一方面，满足式子的点可按权重 $|x|,|y|,|z|$ 混合相应的有符号坐标轴端点，剩余权重放在原点，而原点本身是 $(1,0,0),(-1,0,0)$ 的平均值。所以它确实在六点凸包中。

绝对值式等价于八个半空间 $s_1x+s_2y+s_3z\le1$，其中每个 $s_i=\pm1$ 独立选择。每个取等平面恰好交出三个对应轴端点组成的三角形。每条边长 $\sqrt2$，所以八个面全是全等的等边三角形。每个轴端点属于四个面。

<figure class="proof-figure" id="fig-build-cube-octa"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 350" role="img" aria-label="fig-build-cube-octa" style="width:100%;height:auto;display:block"><defs><marker id="fig-build-cube-octa-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M177.15 47.50L73.53 99.18L202.85 140.60L306.47 88.91Z" fill="#e7f0f5" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M306.47 240.82L306.47 88.91L202.85 140.60L202.85 292.50Z" fill="#d8e7ef" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M73.53 251.09L73.53 99.18L202.85 140.60L202.85 292.50Z" fill="#f7e7c9" stroke="#c48a28" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M669.29 203.40L648.56 128.32L565.00 47.50Z" fill="#e7f0f5" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M460.71 136.60L481.44 211.68L565.00 47.50Z" fill="#d8e7ef" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M669.29 203.40L481.44 211.68L565.00 292.50Z" fill="#c8dde8" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M669.29 203.40L481.44 211.68L565.00 47.50Z" fill="#f7e7c9" stroke="#c48a28" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><text x="190" y="30" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">六个正方形面：立方体</text><text x="565" y="30" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">八个等边三角形面：正八面体</text><text x="190" y="328" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">每顶点三面；8 点、12 棱、6 面</text><text x="565" y="328" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">每顶点四面；6 点、12 棱、8 面</text></svg></div><figcaption>图 17｜方盒的六个面和坐标轴端点的八个三角形面，都能由坐标不等式逐面写出。各体中金色高亮一个面。</figcaption></figure>

符号变化和坐标置换可把任意轴端点移到 $(0,0,1)$。固定该顶点时，绕竖轴转 $90^\circ$ 可轮换四个面；再关于 $x=y$ 的平面反射，可交换一个选定三角形里从该顶点发出的两条棱。因此顶点、棱、面可同时对齐，满足完整正则性标准。

### 11.4 正二十面体：黄金比例、两类支撑面与面数穷尽

令 $\varphi=(1+\sqrt5)/2$，则 $\varphi^2=\varphi+1$、$\varphi(\varphi-1)=1$。取十二点

$$
S=\{(0,\pm1,\pm\varphi),\ (\pm1,\pm\varphi,0),\ (\pm\varphi,0,\pm1)\},
\qquad P=\operatorname{conv}S.
$$

每一对正负号独立选择，三种坐标形状各有四点，共十二点。取 $\varphi$ 不是魔法：若暂用正数 $t>1$ 替代它，点 $(0,1,t)$ 与 $(0,-1,t)$ 距离为 $2$；与 $(1,t,0)$ 的平方距离为 $1+(t-1)^2+t^2$。让这些候选棱都长 $2$，得到 $t^2-t-1=0$，正根恰为 $\varphi$。接下来仍需证明候选三角形真的在凸包表面。

所有点平方半径为 $1+\varphi^2=\varphi+2$，故十二点都是实际顶点。点集关于原点对称，并且包含点对平均得到的 $\pm\varphi e_1,\pm\varphi e_2,\pm\varphi e_3$，其中 $e_i$ 是三个单位坐标轴方向；其凸包是一小个实心八面体，所以 $P$ 有三维内部。

置换三个坐标为 $(x,y,z)\mapsto(z,x,y)$，以及独立改变坐标正负号，都把 $S$ 保持不变；这些变换也保持凸包。只需先检查两类代表面。

**第一类。** 平面 $x+y+z=\varphi+1$。对任意 $S$ 中的点，左边只能是 $\pm1\pm\varphi$，都不大于 $\varphi+1$。恰有三个点取等：

$$
(0,1,\varphi),\quad(1,\varphi,0),\quad(\varphi,0,1).
$$

三个点的任意两点间平方距离都是

$$
1+(\varphi-1)^2+\varphi^2=4.
$$

因此它们是一个实际等边三角形支撑面。改变三坐标的符号得到八个不同支撑面，其法向量为 $(\pm1,\pm1,\pm1)$。

**第二类。** 取法向量 $n=(\varphi-1,0,\varphi)$，平面 $n\cdot x=\varphi+1$。分三种点坐标核对：

| S 中的点形状 | n 点积的可能值 | 取最大值的点数 |
| --- | --- | --- |
| $(0,\pm1,\pm\varphi)$ | $\pm(\varphi+1)$ | 2 |
| $(\pm1,\pm\varphi,0)$ | $\pm(\varphi-1)$ | 0 |
| $(\pm\varphi,0,\pm1)$ | $\pm1\pm\varphi$ | 1 |

恰好三个取等点为 $(0,1,\varphi),(0,-1,\varphi),(\varphi,0,1)$，两两距离都是 $2$。改变非零坐标符号，再循环坐标，给出十二个不同支撑面，法向量为 $(\pm(\varphi-1),0,\pm\varphi)$ 的三种循环位置。

<figure class="proof-figure" id="fig-build-icosa"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 350" role="img" aria-label="fig-build-icosa" style="width:100%;height:auto;display:block"><defs><marker id="fig-build-icosa-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M237.90 37.50L327.28 155.49L286.72 135.76Z" fill="#e7f0f5" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M237.90 37.50L93.28 73.81L142.10 85.28Z" fill="#d8e7ef" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M286.72 276.19L327.28 155.49L286.72 135.76Z" fill="#c8dde8" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M52.72 194.51L93.28 73.81L142.10 85.28Z" fill="#e7f0f5" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M286.72 276.19L142.10 312.50L172.28 232.80Z" fill="#d8e7ef" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M52.72 194.51L142.10 312.50L172.28 232.80Z" fill="#c8dde8" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M237.90 37.50L142.10 85.28L286.72 135.76Z" fill="#e7f0f5" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M286.72 276.19L172.28 232.80L286.72 135.76Z" fill="#d8e7ef" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M52.72 194.51L142.10 85.28L172.28 232.80Z" fill="#c8dde8" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M142.10 85.28L172.28 232.80L286.72 135.76Z" fill="#f7e7c9" stroke="#c48a28" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><text x="375" y="75" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">十二点全部在同一个球面上</text><text x="375" y="109" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">八张第一类支撑平面</text><text x="375" y="143" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">十二张第二类支撑平面</text><text x="375" y="177" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">先找到二十个实际三角形面</text><text x="375" y="211" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">再用 F ≤ 2V−4 排除遗漏</text><text x="190" y="328" font-size="15" fill="#29495d" text-anchor="middle" font-weight="normal">20 个全等等边三角形；每顶点 5 面</text></svg></div><figcaption>图 18｜黄金比例给出等棱候选；支撑平面不等式才保证这些三角形在凸包表面。不能从名字“二十面体”反推面数。</figcaption></figure>

这两类已找到二十个不同的实际面。又因 $V=12$，第 11.1 节的面数上界是 $2\cdot12-4=20$，所以它们就是全部面。由欧拉公式 $E=12+20-2=30$。

符号变化和循环坐标可把十二点中的任一点移到任一点，所以每顶点面数相同；二十个三角形总共贡献六十次顶点—面关联，平均每顶点 $60/12=5$ 面。至此已经证明各面是全等等边三角形、每顶点五面，下面再补完整的整体对称，而不省略这一项。

### 11.5 五重旋转为什么保持整个二十面体

固定 $v=(0,1,\varphi)$。它的五个相邻顶点按循环次序是

$$
u_0=(0,-1,\varphi),\quad u_1=(\varphi,0,1),\quad
u_2=(1,\varphi,0),\quad u_3=(-1,\varphi,0),\quad
u_4=(-\varphi,0,1).
$$

上式五点都统一记为 $u_i$，下标 $i=0,1,2,3,4$。它们确为邻点：前节两类支撑面中，包含 $v$ 的五个三角形依次是 $vu_i u_{i+1}$，下标按模 $5$ 循环。

直接代入点积与距离公式，得到

$$
v\cdot u_i=\varphi,\quad |u_i|^2=\varphi+2,
\quad |u_i-u_{i+1}|^2=4,
\quad |u_i-u_{i+2}|^2=4\varphi^2.
$$

因此五点都在垂直于轴 $Ov$ 的同一平面 $v\cdot x=\varphi$，又都在以 $O$ 为心的同一球面上，故位于两者相交的同一个圆上。圆心是轴与该平面的交点。

五条短弦长 $2$，其余五条长弦长 $2\varphi>2$。最短弦的较小圆弧里不能还藏着另一点，否则会有更短的弦。因此列出的短弦按圆周顺序连接五点。等弦对应等圆心角，五个角合计一圈，所以每个为 $72^\circ$；这证明五点构成正五边形，而不是仅凭图形认定。

<figure class="proof-figure" id="fig-ico-neighbor-ring"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 350" role="img" aria-label="fig-ico-neighbor-ring" style="width:100%;height:auto;display:block"><defs><marker id="fig-ico-neighbor-ring-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M190.00 60.00L294.62 136.01L254.66 258.99L125.34 258.99L85.38 136.01Z" fill="#e8f1f5" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><circle cx="190.0" cy="60.0" r="5" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><text x="190.0" y="46.3" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">u0</text><circle cx="294.6162167924669" cy="136.00813061875579" r="5" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><text x="312.4009736471863" y="135.22951282394428" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">u1</text><circle cx="254.65637775217203" cy="258.9918693812442" r="5" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><text x="265.64796197004125" y="279.12048717605575" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">u2</text><circle cx="125.34362224782797" cy="258.9918693812442" r="5" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><text x="114.35203802995872" y="279.12048717605575" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">u3</text><circle cx="85.3837832075331" cy="136.00813061875579" r="5" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><text x="67.59902635281372" y="135.22951282394428" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">u4</text><circle cx="190" cy="170" r="4" fill="#243746" stroke="#243746" stroke-width="2"/><text x="190" y="198" font-size="15" fill="#29495d" text-anchor="middle" font-weight="normal">轴穿过圆心</text><path d="M190.0 60.0L254.65637775217203 258.9918693812442" fill="none" stroke="#c48a28" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="6 5"/><text x="375" y="75" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">五点：同一平面 ∩ 同一球面</text><text x="375" y="109" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">短弦长 2，长弦长 2φ</text><text x="375" y="143" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">最短弦之间不能藏着别的点</text><text x="375" y="177" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">等短弦等分整圈 → 72°</text><text x="375" y="211" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">另五点正好是这五点的负值</text></svg></div><figcaption>图 19｜这是从顶点轴方向看五个邻点的正视图。旋转不仅轮换此五边形，还轮换相反的五边形，故保持整个十二点集。</figcaption></figure>

现在看整个十二点集，而不只看这一个五边形：

$$
S=\{v,-v\}\ \cup\ \{u_0,\ldots,u_4\}\ \cup\ \{-u_0,\ldots,-u_4\}.
$$

绕轴 $Ov$ 转 $72^\circ$，固定 $v,-v$，轮换五个 $u_i$，同时轮换五个 $-u_i$，所以保持全部十二点，进而保持整个凸包。经过轴和某个 $u_i$ 的镜面反射，也保持这两个正五边形及两个轴点。

正五边形的每条镜轴都经过一个顶点和对面边中点，所以前面这些镜面也包含各关联三角形的面中心方向。

在固定顶点 $v$ 处，五重旋转可轮换五个关联三角形；关于该轴与一个面中心方向的镜面反射可交换该面上从 $v$ 发出的两条棱。这使该顶点的十种顶点—棱—面标记任意互相对齐。再结合前节把任意顶点移到任意顶点的符号变化与循环坐标，得到整个立体任意关联标记可对齐。故它确为第 1.5 节定义的凸正二十面体。

### 11.6 正十二面体：不用一句“取对偶”带过

把二十面体二十个面所用的法向量组成点集

$$
N=\{(\pm1,\pm1,\pm1)\}
\ \cup\ \{(\pm(\varphi-1),0,\pm\varphi)\text{ 的三种循环位置}\}.
$$

令 $h=\varphi+1$、$D=\operatorname{conv}N$。八点加十二点，一共二十点；第一类点平方半径为 $1+1+1=3$；第二类为 $(\varphi-1)^2+\varphi^2=(2-\varphi)+(\varphi+1)=3$。所以二十点都是实际顶点。$N$ 包含立方体的八顶点，故 $D$ 含有三维内部。

这与“取二十面体面中心”是什么关系？每个三角形的顶点平均值是其中心。对第一类代表面，三点之和为 $h(1,1,1)$；对第二类代表面，三点之和为 $h(\varphi-1,0,\varphi)$。符号与坐标变换保持这个关系，所以所有面中心恰为 $(h/3)n$，$n\in N$。因此面中心凸包只是 $D$ 的统一缩放版本。没有把任意多面体的面中心构造说成一般极对偶定理。

**先证明一个稍后会用的小引理。** 非空、有界的有限半空间交等于其顶点的凸包。给定其中一点 $y$，把在此点取等的限制叫“活跃限制”。若这些等式已经唯一确定 $y$，它就是顶点：若 $y$ 夹在两个可行点中间，所有活跃等式必须在两端也成立，两端只好都等于 $y$。

若还不能唯一确定，选一条保持现有活跃等式的非零方向，沿正、反两向走到可行范围的端点。有界性保证两个端点都能在有限距离达到；剩余有限个严格不等式保证开始时两边都能走一点。$y$ 是这两个端点的凸组合。

每个端点至少多出一个真正限制这条方向的等式，所以允许活动的方向至少少一维：三维、平面、直线，最多经过三层就没有可走方向。反复分解后，$y$ 是有限个顶点的凸组合。顶点有限，因为每个顶点由三个独立的活跃平面确定，而平面只有有限张。引理证毕。这也解释精确检查程序为何只需枚举三个约束平面的交点。

**确定 D 的全部实际面。** 考虑另一个明确给出的凸体

$$
K=\{y:v\cdot y\le h\text{ 对每个 }v\in S\}.
$$

前面的支撑面核对已证明，每个 $n\in N$ 都满足所有这些限制，所以 $D\subseteq K$。原点严格满足限制；又因为 $\pm\varphi e_i\in P=\operatorname{conv}S$，这些不等式推出 $|y_i|\le h/\varphi$，所以 $K$ 有界且内部非空。

取 $K$ 的任意顶点 $y$。它至少有三个独立的活跃约束，否则存在保持全部活跃等式的一条方向，稍微向正、反走都仍可行，$y$ 就不是顶点。

三个活跃的 $v$ 满足 $v\cdot y=h$，它们不共线；这说明平面 $x\cdot y=h$ 在原二十面体 $P$ 上支撑出一个有面积的面。$P$ 的实际面已经全部确定，必是二十个三角形之一，设其法向量为 $n\in N$。三个独立的一次方程同时被 $y,n$ 满足，故 $y=n$。

所以 $K$ 的所有顶点都在 $N$ 中。由刚证的小引理，$K\subseteq\operatorname{conv}N=D$；结合反向包含，得到 $D=K$。这一步排除了凸包表面还出现未列出的面。

对固定 $v\in S$，平面 $v\cdot y=h$ 恰好包含原二十面体中经过 $v$ 的五个面法向量，所以在 $D$ 上得到一个五边形支撑面。它们平方半径都为 $3$，且位于同一平面，故在一个圆上。第 11.5 节的 $72^\circ$ 旋转轮换它们，它们是等间隔的五个点，形成正五边形。

<figure class="proof-figure" id="fig-build-dodeca"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 350" role="img" aria-label="fig-build-dodeca" style="width:100%;height:auto;display:block"><defs><marker id="fig-build-dodeca-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M72.80 256.60L149.79 285.79L230.21 311.54L202.93 298.27L105.64 264.31Z" fill="#e7f0f5" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M307.20 246.26L327.50 192.64L263.06 224.79L202.93 298.27L230.21 311.54Z" fill="#d8e7ef" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M72.80 256.60L105.64 264.31L105.64 169.84L72.80 103.74L52.50 157.36Z" fill="#c8dde8" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M307.20 93.40L327.50 192.64L263.06 224.79L202.93 145.41L230.21 64.21Z" fill="#e7f0f5" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M72.80 103.74L149.79 38.46L230.21 64.21L202.93 145.41L105.64 169.84Z" fill="#d8e7ef" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M202.93 298.27L105.64 264.31L105.64 169.84L202.93 145.41L263.06 224.79Z" fill="#f7e7c9" stroke="#c48a28" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><text x="375" y="75" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">新顶点：原三角形的法向量</text><text x="375" y="109" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">新面：原一个顶点的五个关联面</text><text x="375" y="143" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">点积取等说明五点共面且支撑</text><text x="375" y="177" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">五重旋转说明五点等间隔</text><text x="375" y="211" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">半空间交证明没有额外面</text><text x="190" y="328" font-size="15" fill="#29495d" text-anchor="middle" font-weight="normal">12 个全等正五边形；每顶点 3 面</text></svg></div><figcaption>图 20｜十二面体由明确点集构造，再证明等于十二个半空间的交；“取面中心”只是它的统一缩放描述，不能代替面与正则性的验证。</figcaption></figure>

十二个 $v$ 给出十二个真正的五边形面，而且没有其他面。理由也可直接从 $D=K$ 看出：任何面上的点都必须至少使一个半空间限制取等；有限张不同平面与一张新面平面的交线，不能铺满一个有面积的面，故每个面必在这十二个约束平面之一。

这十二个面全等，因为原二十面体的对称可将任意 $v$ 移到任意另一个顶点，也将对应的五边形整体移过去。每个 $n\in N$ 只对应原来一个三角形的三个顶点，恰有三个 $v$ 满足 $v\cdot n=h$，所以每个新顶点恰相交三面。于是 $V=20,F=12,E=30$。

**最后检验完整正则性。** 原二十面体的顶点 $v$ 对应新体的五边形面，原面法向量 $n$ 对应新体的顶点，两者关联恰好是 $v\cdot n=h$。原来两三角形共有的棱，对应新体中连接两法向量顶点的棱。于是原来的“顶点—棱—面”标记，与新体的“面—棱—顶点”标记一一对应。

原二十面体的任意对称都保持 $S$、全部支撑面和 $N$，因而保持 $D$。原体任意关联标记可对齐，新体也一样。因此 $D$ 满足完整正则性标准，确为凸正十二面体。这里“对偶”只是在已证明的构造之后，给这种顶点与面互换的对应起名字。

### 11.7 精确复核是什么，能证明到哪一步

本版的复核不再只用浮点数和误差阈值。所有坐标都在形如 $a+b\varphi$ 的数中，其中 $a,b$ 为有理数，运算只用 $\varphi^2=\varphi+1$ 化简。比较大小时转为 $u+v\sqrt5$，根据符号及 $u^2$ 与 $5v^2$ 的精确比较判定，不取小数近似。

程序穷举点集中三个点决定的候选支撑平面，精确核对哪些点取等；核对面内边长、内角点积以及顶点面数；再对所有关联标记核对第 10.1 节的点积表，并验证对应刚性变换确实排列整个点集。结果是：

| 立体 | V | E | F | 从一个固定标记出发核对的全部标记数 |
| --- | --- | --- | --- | --- |
| 正四面体 | 4 | 6 | 4 | 24 |
| 立方体 | 8 | 12 | 6 | 48 |
| 正八面体 | 6 | 12 | 8 | 48 |
| 正二十面体 | 12 | 30 | 20 | 120 |
| 正十二面体 | 20 | 30 | 12 | 120 |

还对 $K$ 的十二个约束枚举了全部 $\binom{12}{3}=220$ 组三约束，确认可行交点恰为所列二十点，并精确核对邻点五边形的边与对角线平方长度。

这是一份有限、无容差的计算证书，读者可运行本版[精确构造核对脚本](../../../../资料/正多面体与欧拉公式笔记-v4-2026-10-16/精确构造核对.py)复算。它补充前面的纸面证明，不替代定义、一般引理或本节之后的唯一性论证。图片绘制才使用小数近似。

### 11.8 同一组参数为什么只有一种：用空间坐标补完唯一性

这一节不再直接引用未解释的“球面三角形按角唯一”。只使用第 10.1 节的点积、平面夹角和已定义的整体正则性。

**先固定中心。** 取全部顶点的平均位置为 $O$。任何整个立体的对称都会排列全部顶点，因此保持这个平均位置。$O$ 在内部：对任一面支撑不等式，所有顶点都满足，至少一个严格满足，否则全部顶点共面；平均值就严格满足每个面限制。

取一组关联标记：顶点 $A$、棱中点 $M$、面中心 $C$。面中心是正多边形顶点的平均值。因为该面的顶点可由保持此面的整体对称互相轮换，这些对称都固定 $O$，所以 $O$ 到面各顶点距离相同，$OC$ 垂直于面。正多边形中心到一条边中点的线段又垂直于该边，所以 $CM\perp MA$。

统一缩放，使半条棱长 $MA=1$。选坐标轴后，可以写成

$$
O=(0,0,0),\quad C=(0,0,h),\quad
M=(d,0,h),\quad A=(d,1,h),\qquad d,h>0.
$$

在正 $p$ 边形内，中心—棱中点—顶点的直角三角形中，中心角是 $\pi/p$，故

$$
d=\cot(\pi/p).
$$

<figure class="proof-figure" id="fig-euclidean-unique"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 350" role="img" aria-label="fig-euclidean-unique" style="width:100%;height:auto;display:block"><defs><marker id="fig-euclidean-unique-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M75 275L75 100L230 140L290 205L75 275" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M75 100L230 140L290 205" fill="none" stroke="#c48a28" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><path d="M75 275L230 140" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="6 5"/><path d="M75 275L290 205" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><text x="50" y="295" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">O</text><text x="53" y="90" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">C</text><text x="234" y="130" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">M</text><text x="296" y="210" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A</text><text x="140" y="91" font-size="16" fill="#29495d" text-anchor="start" font-weight="normal">OC = h</text><text x="159" y="137" font-size="16" fill="#29495d" text-anchor="start" font-weight="normal">CM = d</text><text x="269" y="165" font-size="16" fill="#29495d" text-anchor="start" font-weight="normal">MA = 1</text><text x="190" y="325" font-size="15" fill="#29495d" text-anchor="middle" font-weight="normal">在每个标记中固定同一个三段直角结构</text><path d="M560 170L660.0 170.0" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M560 170L610.0 256.60254037844385" fill="none" stroke="#c48a28" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M560 170L510.0 256.6025403784439" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M560 170L460.0 170.0" fill="none" stroke="#c48a28" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M560 170L509.99999999999994 83.39745962155617" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M560 170L610.0 83.39745962155614" fill="none" stroke="#c48a28" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><circle cx="560" cy="170" r="4" fill="#243746" stroke="#243746" stroke-width="2"/><text x="560" y="35" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">垂直于 OA 看：以 q=3 为例</text><text x="560" y="301" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">2q 个等角扇区，每个 π/q</text></svg></div><figcaption>图 24｜左图仅示意 O、C、M、A 的位置关系，透视角度不按比例；右图以 q=3 画出绕顶点轴的六个等角扇区。正文用点积求出唯一的 d、h。</figcaption></figure>

再绕轴 $OA$ 看一圈。该顶点周围的 $q$ 个面各被“面中心方向”分为两块，共有 $2q$ 个关联标记扇区；它们来自凸体表面的径向投影，完整围住该方向，既不重叠也不留下缝隙。固定 $A$ 的整体对称能将这些标记任意对齐，并固定 $O$，所以这 $2q$ 个绕轴扇区的角度相同，每个为 $2\pi/(2q)=\pi/q$。

两个相邻扇区边界平面是 $OCA$ 与 $OMA$。按上面的坐标，它们的法向量可分别取为

$$
n_1=(-1,d,0),\qquad n_2=(h,0,-d).
$$

与相应平面内的两个独立向量点积为零，就可逐项检查这两个法向量，没有调用未解释的叉积。两平面的锐角为 $\pi/q$，由法向量夹角公式，

$$
\cos(\pi/q)=\frac{h}{\sqrt{1+d^2}\sqrt{h^2+d^2}}.
$$

设 $c=\cos(\pi/q)$。两边平方，逐步移项：

$$
c^2(1+d^2)(h^2+d^2)=h^2,
$$

$$
h^2\bigl(1-c^2(1+d^2)\bigr)=c^2(1+d^2)d^2,
$$

$$
\boxed{h^2=\frac{c^2(1+d^2)d^2}{1-c^2(1+d^2)}}.
$$

分母为正：参数限制给出 $\pi/p+\pi/q>\pi/2$，即 $\cos(\pi/q)<\sin(\pi/p)=1/\sqrt{1+d^2}$。因此给定 $(p,q)$ 后，$d$ 和正数 $h$ 唯一。半棱长已固定为一，于是 $O,C,M,A$ 的形状完全确定。

**为什么一个标记确定后，不能在远处换出另一种立体？** 相邻标记只改变顶点、棱、面中的一个。把一个标记移到其相邻标记的对称变换，固定 $O$ 以及另两样对象的代表点。例如只换面时，固定 $A,M$；只换边时，固定 $A,C$；只换端点时，固定 $M,C$。

一个保持距离、固定原点和两个不共线方向的空间变换，只有两种可能：恒等，或关于这两方向所在平面的反射。理由是它在该平面上逐点固定，垂直于平面的单位方向只能保持或反向。相邻标记确实不同，所以不能是恒等，必是该反射。因此三个基本邻接动作分别由平面 $OAM,OAC,OMC$ 的反射唯一决定。

同一面内可以沿正多边形的边走到任意标记；第 5.1 节又证明面之间的邻接关系连通，所以反复跨越相邻标记能到达整个立体的所有标记。若两个立体有相同 $(p,q)$，先把它们的一个 $O,C,M,A$ 对齐；之后每一次相邻反射都被同样的三个方向强制确定。沿任意有限邻接序列，两立体得到的标记仍然重合。

所以一个立体中的每个顶点都出现在另一个中，反过来也成立；顶点集相同，凸包相同。撤销统一缩放，两个原立体相似。

这就补齐“每组参数只有一种”的论证。结合第 3 章只有五组候选，以及本章五个确实满足定义的构造，得到：**三维凸正多面体按相似分类恰好五种。**


<a id="chapter-12"></a>

## 第 12 章：概念回查、证明依赖与自检

[返回目录](#reading-toc)

### 12.1 这些词现在分别是什么意思

| 概念 | 本篇的工作含义 | 首次解释位置 |
| --- | --- | --- |
| 正多边形、全等、相似 | 等边且等角；刚性重合；允许统一缩放的重合 | [第 1.1 节](#chapter-1) |
| 凸、闭半空间 | 任两点连线都在体内；平面一侧连同平面 | [第 1.2 节](#chapter-1) |
| 支撑平面、面、棱、顶点 | 整体在一侧并接触；不随意把面分割成新面 | [第 1.3 节](#chapter-1) |
| 凸包 | 所列点的所有非负、总和为一的加权平均 | [第 1.4 节](#chapter-1) |
| 对称、关联标记、旗标 | 同一个整个立体的刚性变换，同时对齐顶点—棱—面 | [第 1.5 节](#chapter-1) |
| 开集、区域、连通分支 | 点旁可放小圆盘；开集内能沿折线互相走通的点类 | [第 4 章开头](#chapter-4) |
| 连续路径 | 参数随时间连续变化、全程留在指定集合中的轨迹 | [第 4 章开头](#chapter-4) |
| 边的开段 | 原线段去掉两个端点，不是多边形内部区域 | [第 4.1 节](#chapter-4) |
| 辅助路径、窄通道 | 另画的曲线；容纳曲线的一小片二维区域 | [第 4.2 节](#chapter-4) |
| 一般位置、横交、扰动 | 避开有限特殊点和重合情形；斜穿而非沿边；稍改折点达到这些条件 | [第 4.3—4.4 节](#chapter-4) |
| 总交点数、局部不变 | 数整条射线；在每一点周围的小邻域中标签不变 | [第 4.4 节](#chapter-4) |
| 相对内部、径向与透视投影 | 面内的内部；沿中心射线对应；沿外部观察点视线对应 | [第 5 章](#chapter-5) |
| 图、简单路径、回路、度、树 | 有限顶点与边；不重复顶点的边路；闭合边路；相接边数；连通且无回路的图 | [第 6 章](#chapter-6) |
| 向量、点积、单位、法向量 | 位移；坐标乘积和；长一；垂直于平面的方向 | [第 10.1 节](#chapter-10) |
| 线性无关 | 三维中没有一个方向被其他两个方向的平面容纳；可作三轴坐标 | [第 10.1 节](#chapter-10) |
| 活跃约束 | 在正在考察的点恰好取等的不等式 | [第 11.6 节](#chapter-11) |
| 本例的对偶 | 二十面体顶点与十二面体面互换，关联由点积取等表示 | [第 11.6 节](#chapter-11) |

“紧集、内禀、群作用”等术语没有再被用作未经解释的主线前提。需要有界闭集取最小值时，写明具体距离理由；“内禀”只作为面片自身长度角度的解释，不承担额外证明责任。球面大圆、胞腔、可定向和柄等推广内容不再夹在核心证明中。

### 12.2 问题与证明责任逐项对应

| 问题 | 现在的处理 |
| --- | --- |
| 凸正多面体到底按什么定义？ | [第 1 章](#chapter-1)：完整的关联标记对称标准；常见面与顶点条件作为结果，不暗换标准 |
| 为什么只有五组参数？ | [第 2—3 章](#chapter-2)：双重计数、欧拉公式、正整数枚举 |
| 五种实际立体为什么存在且“正”？ | [第 11.2—11.6 节](#chapter-11)：逐个确定实际面、全等正面、顶点结构和整体对称 |
| 棱都等长是否已经足够？ | 不够；[第 11 章](#chapter-11)每次另外证明支撑性与面形状，以下练习给反例 |
| 树为什么有 V−1 条边？ | [第 6 章](#chapter-6)：最长简单路径端点是叶子，再归纳 |
| 树为什么只有一个面？ | [第 7 章](#chapter-7)：绕自由端替换穿越，且明确是哪一个补集 |
| 加回一条边为何恰好多一个面？ | [第 8 章](#chapter-8)：旧路径形成简单多边形保证至少两面，同侧连接保证至多两面 |
| 为什么需要一般若尔当曲线定理？ | 不需要；[第 4 章](#chapter-4)只证明有限线段的多边形版本 |
| 多边形“内部”和补集在哪里定义？ | [第 4.1 节](#chapter-4)：先定义 C 与 U，不预设内外区域 |
| 边、辅助路径、窄通道是什么？ | [第 4.2 节](#chapter-4)：曲线与二维区域分开，带底色的图逐步连接 |
| 射线穿过许多条边怎么办？ | [第 4.4 节](#chapter-4)：总数 N(X) 与顶点局部变化分开，其他 K 个交点保留 |
| 两幅交点图能不能直接当作证明？ | 不能；[第 4.4 节](#chapter-4)给出变化来源与顶点事件的穷尽分类 |
| 局部不变怎么推到整条路径？ | [第 4.4 节](#chapter-4)：标签局部恒定，结合实数区间连通性 |
| 截顶平面为什么一定能找到？ | [第 10.3 节](#chapter-10)：关联支撑距离之和，只在原顶点为零 |
| 顶点面角和为何严格小于 360°？ | [第 10.2—10.4 节](#chapter-10)：向量角不等式、非共面严格号与截面记账 |
| 同一组参数是否可能有另一种形状？ | [第 11.8 节](#chapter-11)：固定半棱长，求唯一 d、h，再由相邻反射传播所有标记 |

### 12.3 五个自检练习

**一：** 在两个互不相连的点之间加一条线段，为什么边数加一，面数却不变？

答：原先两个端点没有旧路径相连，不能与新边组成回路。顶点数 $V=2$ 不变，边数 $E$ 从 $0$ 变 $1$，分量数 $c$ 从 $2$ 变 $1$，面数始终 $F=1$；两个状态均满足 $V-E+F=1+c$。

**二：** 树添一个叶子与连通图加回一条旧边，为什么效果不同？

答：前者两侧可绕自由端互通；后者两端已由旧路径连接，整个简单闭折线阻止两侧互通。不能把“增加任意一条边都会多一个面”当成无条件结论。

**三：** 每面正三角形、每顶点六面，哪里被排除？

答：角和正好 $2\pi$；计数式中 $1/3+1/6=1/2$，无法等于有限凸正多面体所要求的 $1/2+1/E>1/2$。

**四：** 所有面都是全等正三角形，是否就一定是正多面体？

答：把两个正四面体沿同一个三角形底面、向相反两侧接合，得到凸的三角双锥。外表面六个三角形都全等且等边，但两个尖顶各相交三面，三个腰部顶点各相交四面。尖顶不可能由整体对称移到腰部顶点，因此不满足第 1.5 节的定义。

**五：** 从立方体八顶点里选出三个两两等距的点，它们组成的等边三角形一定是立方体的面吗？

答：不是。例如 $(1,1,1),(1,-1,-1),(-1,1,-1)$ 两两距离都是 $2\sqrt2$，但其平面是 $x+y-z=1$。立方体还含 $(1,1,-1)$，在此式左边取 $3$；也含 $(-1,-1,1)$，取 $-3$。实体跨在平面两边，所以它不是支撑平面。这个例子说明构造正二十面体时，不能只检查若干三点等距，还必须检查所有点同侧。

### 12.4 哪些已证明，哪些作为明确基础引用

主线已展开：多边形的两分支结论、奇偶标签的局部与路径不变性、树的边数与面数、加边引理、欧拉公式、顶点角和不等式、五种构造的正则性与所选标准下的唯一性。

仍明确引用以下基础，不声称从实数公理重建：三角形内角和与初等三角函数、实数连续函数的中间值性质、有限维有界闭集上连续函数能取极值，以及第 1.4 节的有限凸多面体表示定理。其中有界半空间交等于顶点凸包的方向，已在第 11.6 节专门证明。完整表示定理的另一方向是本篇清楚标明的外部基础，不偷偷归入“显然”。

<figure class="proof-figure" id="fig-proof-dependencies"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 340" role="img" aria-label="fig-proof-dependencies" style="width:100%;height:auto;display:block"><defs><marker id="fig-proof-dependencies-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><text x="190" y="45" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">定义与基本几何</text><text x="190" y="105" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">多边形分割</text><text x="190" y="165" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">树与加边引理</text><text x="190" y="225" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">欧拉公式</text><text x="190" y="300" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">五组候选参数</text><text x="565" y="45" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">向量与截顶</text><text x="565" y="105" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">角和小于 360°</text><text x="565" y="225" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">五种精确构造</text><text x="565" y="300" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">同参数唯一性</text><path d="M190 55V83" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-proof-dependencies-arrow)"/><path d="M190 115V143" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-proof-dependencies-arrow)"/><path d="M190 175V203" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-proof-dependencies-arrow)"/><path d="M190 240V268" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-proof-dependencies-arrow)"/><path d="M565 55V83" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-proof-dependencies-arrow)"/><path d="M565 235V263" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-proof-dependencies-arrow)"/><path d="M550 120L290 285" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-proof-dependencies-arrow)"/><path d="M280 225H460" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-proof-dependencies-arrow)"/></svg></div><figcaption>图 25｜箭头表示前者用于后者。二十面体支撑面的穷尽借用已经独立证明的欧拉公式，不会借用“正二十面体已存在”来证明欧拉公式。</figcaption></figure>

原始问题来自用户提供的分享对话，以及后续对定义、辅助路径、窄通道、奇偶性和存在性反复追问。本版保留提问所暴露的证明责任，按首次依赖位置重排。

核对资料与具体用途如下，正文推导并非这些材料的逐段翻译：

- Bayer 与 Lee，[Convex Polytopes，定理 1.1](https://www.math.ucdavis.edu/~deloera/MISC/LA-BIBLIO/trunk/LeeCarl/CLee9.pdf)：有限凸包与有界半空间交的表示定理。
- David Vogan，[Regular polyhedra and Coxeter groups](https://math.mit.edu/~dav/regpolyTUFTSHO2.pdf)：核对关联标记对称是标准的正则性定义；本篇不要求先学 Coxeter 群。
- Thomas F. Banchoff，[Coordinates for Regular Polyhedra](https://www.math.brown.edu/tbanchof/Beyond3d/chapter8/section05.html)：核对黄金比例坐标的构造路线。
- Jeff Erickson，[Simple Polygons](https://jeffe.cs.illinois.edu/teaching/comptop/2023/notes/01-simple-polygons.html)：核对有限线段情形的分割与奇偶计数范围；本篇采用自己的窄通道加局部事件论证。

本版[资料目录](../../../../资料/正多面体与欧拉公式笔记-v4-2026-10-16)含生成脚本、精确代数证书、审查问题闭环记录；原始分享页保留在[第一版资料目录](../../../../资料/正多面体与欧拉公式笔记-v1-2026-10-15)。[阅读索引](../../../阅读索引.html)同步保留旧版入口。

HTML 的正文、图片、公式和公式源码工具全部嵌入，可单文件离线阅读；其他笔记、资料、配套 Markdown 和 PDF 的链接仍需对应文件。PDF 是同版 HTML 的静态导出，保留正文目录、页码、内部跳转和分层书签。

