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

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

本版整合新的 42 轮追问：把平面、半空间、凸包与单点支撑讲到可以逐式核对；先建立两种统一正则性判据，再逐个验证五种构造。二十面体先从双五边形设计探索参数，再引入黄金矩形坐标作精确验证；完整补证等距变换的形式、三维分类及奇偶维差别。保留前版欧拉公式、多边形分割、角和及唯一性的完整证明，并增加对应图示。

阅读路线：第 1 章先理解几何对象与旗标；第 2—3 章看五组候选；第 4—9 章核验欧拉公式；第 10.1—10.5 节证明顶点角和，第 10.6—10.11 节补等距变换；第 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$”当成凸性的定义；那个角度结论将另行证明。

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

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

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

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

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

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

<figure class="proof-figure" id="fig-parallel-planes"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 300" role="img" aria-label="fig-parallel-planes" style="width:100%;height:auto;display:block"><defs><marker id="fig-parallel-planes-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M55.00 238.00L250.00 238.00L320.00 203.00L125.00 203.00Z" fill="#edf4f8" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><text x="330" y="226" font-size="17" fill="#286786" text-anchor="start" font-weight="normal">z = 0</text><path d="M55.00 186.00L250.00 186.00L320.00 151.00L125.00 151.00Z" fill="#edf4f8" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><text x="330" y="174" font-size="17" fill="#2b806b" text-anchor="start" font-weight="normal">z = 1</text><path d="M55.00 82.00L250.00 82.00L320.00 47.00L125.00 47.00Z" fill="#edf4f8" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><text x="330" y="70" font-size="17" fill="#c48a28" text-anchor="start" font-weight="normal">z = 3</text><path d="M180 270L180 30" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-parallel-planes-arrow)"/><text x="195" y="40" font-size="18" fill="#2b806b" text-anchor="start" font-weight="normal">n</text><text x="405" y="65" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">固定法向量 a：平面只平移</text><text x="405" y="99" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">a = (0, 0, 1) 时，位置是 b</text><text x="405" y="133" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">a = (0, 0, 2) 时，位置是 b/2</text><text x="405" y="167" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">沿单位法向量的位移：</text><text x="405" y="201" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">(b₂ − b₁) / |a|</text></svg></div><figcaption>图 2｜同一个法向量给出平行平面族。图示三张水平平面的位置；平面本身向四周无限延伸。</figcaption></figure>


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

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

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

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

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

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

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

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

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

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

<figure class="proof-figure" id="fig-support-dimensions"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 260" role="img" aria-label="fig-support-dimensions" style="width:100%;height:auto;display:block"><defs><marker id="fig-support-dimensions-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M35.00 85.00L150.00 85.00L190.00 55.00L75.00 55.00Z" fill="#edf4f8" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M35.00 85.00L150.00 85.00L150.00 195.00L35.00 195.00Z" fill="#e5f0f5" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M150.00 85.00L190.00 55.00L190.00 165.00L150.00 195.00Z" fill="#d8e6ee" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><text x="120" y="30" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">接触二维面</text><path d="M35.00 85.00L150.00 85.00L190.00 55.00L75.00 55.00Z" fill="#f7e7c9" stroke="#c48a28" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><text x="120" y="232" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">z = 1</text><path d="M285.00 85.00L400.00 85.00L440.00 55.00L325.00 55.00Z" fill="#edf4f8" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M285.00 85.00L400.00 85.00L400.00 195.00L285.00 195.00Z" fill="#e5f0f5" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M400.00 85.00L440.00 55.00L440.00 165.00L400.00 195.00Z" fill="#d8e6ee" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><text x="370" y="30" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">接触一条棱</text><path d="M400 85L400 195" fill="none" stroke="#c48a28" stroke-width="6" stroke-linejoin="round" stroke-linecap="round"/><text x="370" y="232" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">x + y = 2</text><path d="M535.00 85.00L650.00 85.00L690.00 55.00L575.00 55.00Z" fill="#edf4f8" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M535.00 85.00L650.00 85.00L650.00 195.00L535.00 195.00Z" fill="#e5f0f5" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M650.00 85.00L690.00 55.00L690.00 165.00L650.00 195.00Z" fill="#d8e6ee" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><text x="620" y="30" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">只接触一个顶点</text><circle cx="650" cy="85" r="7" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><text x="620" y="232" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">x + y + z = 3</text></svg></div><figcaption>图 3｜三个立方体示意分别高亮支撑平面与实体的交集，点、线、面都可能出现。方程采用正文的标准立方体坐标；透视图不按坐标比例绘制。</figcaption></figure>

### 1.4 凸包：给出点集后究竟造了什么

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

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

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

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

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

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

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

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

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

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

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

于是

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

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

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

<figure class="proof-figure" id="fig-convex-combination-fill"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 320" role="img" aria-label="fig-convex-combination-fill" style="width:100%;height:auto;display:block"><defs><marker id="fig-convex-combination-fill-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M65.00 245.00L330.00 245.00L180.00 50.00Z" fill="#e5f0f5" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M180 50L245 245" fill="none" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M65 245L245 245" fill="none" stroke="#2b806b" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><circle cx="65" cy="245" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="45" y="260" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A</text><circle cx="330" cy="245" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="340" y="260" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">B</text><circle cx="180" cy="50" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="175" y="35" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">C</text><circle cx="245" cy="245" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="242" y="271" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">D</text><circle cx="219" cy="167" r="5" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><text x="231" y="167" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">X</text><text x="390" y="60" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">先选 AB 上的 D：比例为 t</text><text x="390" y="94" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">再选 CD 上的 X：比例为 s</text><text x="390" y="128" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">一组选定权重 → 一个点 X</text><text x="390" y="162" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">所有合法权重 → 填实三角形</text><text x="390" y="196" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">X 的三权重是：</text><text x="390" y="230" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">s(1−t)、st、1−s</text></svg></div><figcaption>图 4｜任意三角形内点都可先沿 AB、再沿 CD 定位，精确给出凸组合权重。蓝色表示整个填实区域，金色点只是一组选定权重的结果。</figcaption></figure>

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

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

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

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

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

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

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

故有准确的集合等式

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

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


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

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

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

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

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

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

它蕴含熟悉的几何性质：

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

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

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

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

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

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

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


### 1.7 旗标怎样画出来，能不能填满立体

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

<figure class="proof-figure" id="fig-flag-and-tetrahedron"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 330" role="img" aria-label="fig-flag-and-tetrahedron" style="width:100%;height:auto;display:block"><defs><marker id="fig-flag-and-tetrahedron-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M60.00 85.00L300.00 85.00L355.00 45.00L115.00 45.00Z" fill="#edf4f8" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M60.00 85.00L300.00 85.00L300.00 275.00L60.00 275.00Z" fill="#e5f0f5" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M300.00 85.00L355.00 45.00L355.00 235.00L300.00 275.00Z" fill="#d7e6ee" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M208 160L60 85" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="5 4"/><path d="M208 160L180 85" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="5 4"/><path d="M208 160L180 180" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="5 4"/><path d="M60.00 85.00L180.00 85.00L180.00 180.00Z" fill="#f7e7c9" stroke="#c48a28" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M60 85L300 85" fill="none" stroke="#c48a28" stroke-width="5" stroke-linejoin="round" stroke-linecap="round"/><circle cx="60" cy="85" r="5" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><text x="40" y="77" font-size="18" fill="#ba514f" text-anchor="start" font-weight="normal">A</text><circle cx="180" cy="85" r="5" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><text x="177" y="71" font-size="18" fill="#c48a28" text-anchor="start" font-weight="normal">M</text><circle cx="180" cy="180" r="5" fill="#286786" stroke="#286786" stroke-width="2"/><text x="157" y="188" font-size="18" fill="#286786" text-anchor="start" font-weight="normal">C</text><circle cx="208" cy="160" r="5" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><text x="215" y="176" font-size="18" fill="#2b806b" text-anchor="start" font-weight="normal">O</text><text x="400" y="65" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">旗标：红顶点、金棱、蓝面</text><text x="400" y="99" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">面内小三角形：A、M、C</text><text x="400" y="133" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">接内部点 O：一块小四面体</text><text x="400" y="167" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">全部旗标 → 填满整个立体</text><text x="400" y="201" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">一般凸体的小块未必全等</text></svg></div><figcaption>图 5｜一组关联标记对应面内一个小三角形，再连向内部点得到一块小四面体。图中虚线在实体内部；旗标记录与小四面体不是同一种对象。</figcaption></figure>

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

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

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

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

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

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

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

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

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

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

<figure class="proof-figure" id="fig-eight-flag-cycle"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 330" role="img" aria-label="fig-eight-flag-cycle" style="width:100%;height:auto;display:block"><defs><marker id="fig-eight-flag-cycle-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><rect x="147.0" y="36.0" width="86" height="32" rx="8" fill="#edf4f8" stroke="#d5e2e9"/><text x="190.0" y="57.0" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">A, AB</text><rect x="235.38834764831847" y="68.21825406947978" width="86" height="32" rx="8" fill="#edf4f8" stroke="#d5e2e9"/><text x="278.3883476483185" y="89.21825406947978" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">B, AB</text><rect x="272.0" y="146.0" width="86" height="32" rx="8" fill="#edf4f8" stroke="#d5e2e9"/><text x="315.0" y="167.0" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">B, BC</text><rect x="235.38834764831847" y="223.78174593052023" width="86" height="32" rx="8" fill="#edf4f8" stroke="#d5e2e9"/><text x="278.3883476483185" y="244.78174593052023" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">C, BC</text><rect x="147.0" y="256.0" width="86" height="32" rx="8" fill="#edf4f8" stroke="#d5e2e9"/><text x="190.0" y="277.0" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">C, CD</text><rect x="58.61165235168157" y="223.78174593052023" width="86" height="32" rx="8" fill="#edf4f8" stroke="#d5e2e9"/><text x="101.61165235168157" y="244.78174593052023" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">D, CD</text><rect x="22.0" y="146.0" width="86" height="32" rx="8" fill="#edf4f8" stroke="#d5e2e9"/><text x="65.0" y="167.0" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">D, DA</text><rect x="58.61165235168154" y="68.21825406947978" width="86" height="32" rx="8" fill="#edf4f8" stroke="#d5e2e9"/><text x="101.61165235168154" y="89.21825406947978" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">A, DA</text><path d="M213.48825378170957 60.561654880103816L254.9000938666089 75.65659918937597" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M289.035291935199 106.83777168927138L304.3530557131195 139.3804823802084" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M304.3530557131195 184.6195176197916L289.035291935199 217.16222831072864" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M254.9000938666089 248.34340081062405L213.48825378170957 263.4383451198962" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M166.51174621829043 263.43834511989616L125.09990613339116 248.34340081062405" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M90.96470806480104 217.16222831072864L75.64694428688053 184.6195176197916" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M75.64694428688053 139.3804823802084L90.96470806480102 106.83777168927138" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M125.09990613339112 75.65659918937597L166.51174621829043 60.561654880103816" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><text x="190" y="157" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">同一面的</text><text x="190" y="184" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">全部 8 个标记</text><text x="400" y="75" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">沿循环交替：</text><text x="400" y="109" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">换端点 → 换边 → 换端点</text><text x="400" y="143" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">每个标记都在这个循环上</text><text x="400" y="177" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">三维：还可以沿公共棱换面</text><text x="400" y="211" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">面内循环由换面动作接起来</text></svg></div><figcaption>图 6｜正方形上八种标记形成一个完整循环。这里的连线表示改选记录；是否能由保持整个物体的对称实现，还需要另行验证。</figcaption></figure>

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

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

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

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

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

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

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

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

### 1.10 统一验证法一：先对齐顶点，再对齐棱和面

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

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

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

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

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

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

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

<figure class="proof-figure" id="fig-two-stage-flag-alignment"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 265" role="img" aria-label="fig-two-stage-flag-alignment" style="width:100%;height:auto;display:block"><defs><marker id="fig-two-stage-flag-alignment-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><rect x="20" y="65" width="200" height="120" rx="8" fill="#edf4f8" stroke="#d5e2e9"/><text x="120" y="98" font-size="19" fill="#29495d" text-anchor="middle" font-weight="normal">原旗标</text><text x="120" y="145" font-size="14" fill="#29495d" text-anchor="middle" font-weight="normal">顶点 A；棱 e；面 f</text><rect x="280" y="65" width="200" height="120" rx="8" fill="#edf4f8" stroke="#d5e2e9"/><text x="380" y="98" font-size="19" fill="#29495d" text-anchor="middle" font-weight="normal">顶点已对齐</text><text x="380" y="145" font-size="14" fill="#29495d" text-anchor="middle" font-weight="normal">顶点 B；棱 e′；面 f′</text><rect x="540" y="65" width="200" height="120" rx="8" fill="#edf4f8" stroke="#d5e2e9"/><text x="640" y="98" font-size="19" fill="#29495d" text-anchor="middle" font-weight="normal">全部对齐</text><text x="640" y="145" font-size="14" fill="#29495d" text-anchor="middle" font-weight="normal">顶点 B；目标棱；目标面</text><path d="M225 122L272 122" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-two-stage-flag-alignment-arrow)"/><path d="M485 122L532 122" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-two-stage-flag-alignment-arrow)"/><text x="250" y="54" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">T₁</text><text x="510" y="54" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">T₂</text><text x="380" y="230" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">第二步固定 B；复合 T₂T₁ 使三个对象同时到位</text></svg></div><figcaption>图 7｜两步法始终移动整个立体。中间状态允许棱和面尚未对齐，最后一个复合变换同时满足三项要求。</figcaption></figure>

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

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

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

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

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

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

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

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

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

<figure class="proof-figure" id="fig-transport-local-symmetry"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 280" role="img" aria-label="fig-transport-local-symmetry" style="width:100%;height:auto;display:block"><defs><marker id="fig-transport-local-symmetry-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><rect x="20" y="60" width="200" height="115" rx="8" fill="#edf4f8" stroke="#d5e2e9"/><text x="120" y="96" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">当前旗标 Ψ</text><text x="120" y="143" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">已由 T 到达</text><rect x="280" y="60" width="200" height="115" rx="8" fill="#edf4f8" stroke="#d5e2e9"/><text x="380" y="96" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">基准旗标 Φ₀</text><text x="380" y="143" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">执行已知 Sᵢ</text><rect x="540" y="60" width="200" height="115" rx="8" fill="#edf4f8" stroke="#d5e2e9"/><text x="640" y="96" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">Ψ 的第 i 邻居</text><text x="640" y="143" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">整体变换完成</text><path d="M225 118L272 118" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-transport-local-symmetry-arrow)"/><path d="M485 118L532 118" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-transport-local-symmetry-arrow)"/><text x="250" y="45" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">T⁻¹</text><text x="510" y="45" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">T</text><text x="380" y="220" font-size="19" fill="#29495d" text-anchor="middle" font-weight="normal">实际操作：先 T⁻¹，再 Sᵢ，再 T</text><text x="380" y="255" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">从基准算像：新到达变换是 T Sᵢ</text></svg></div><figcaption>图 8｜把基准处的动作搬到当前位置，合成为 T Sᵢ T⁻¹。开始的 T 来自此前已完成的步骤，不是假定任意目标都已可达。</figcaption></figure>

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

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

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

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


<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>图 9｜两条双重计数等式，都来自“同一个对象被数了几次”。</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>图 10｜先分清三种对象：边是一条线段；窄通道是一小片平面区域；辅助路径是通道里另外画出的一条曲线。底色不是多边形的整个“内部”或“外部”。</figcaption></figure>

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

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

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

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

<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>图 11｜放大一个顶点 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>图 12｜沿同样的规则也能处理凹角。这里并未把两条路径命名为“内侧”和“外侧”，只用沿箭头行进的左手、右手来辨认。</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">每个角都按图 11 的方式连接</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>图 13｜局部连接做完一整圈，才得到 L、R 两条辅助闭路径。矩形只是一个具体例子；构造规则同时适用于图 12 那样的转角。图中央未着色的部分同样属于补集，通道并不占满补集。</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>图 14｜“走到边上”不是允许路径碰边：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>图 15｜图只画一个顶点附近。穷尽性来自正文的上下分类，不来自“图看起来如此”；全部其他交点还要加回总数。</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>图 16｜整条射线可以穿过许多边。图示远处七个交点都保留，局部减少两个，所以总数从九变七。两条射线表示同一方向下起点的不同位置。</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$ 后与球面的交弧；选取的有限圆弧与这些棱只作有限次相交。拉回凸体表面，就得到依次经过一串面的路线，相邻面共享一条棱。这证明面与面之间沿公共棱的邻接关系连通。

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

**把面邻接连通的截面论证再展开。** 取内部点 $O$，给定两个面 $f,g$。先选 $A$ 在 $f$ 的面内内部，避开有限条直线 $Ov$ 与该面的交点；再选 $B$ 在 $g$ 的面内内部，使 $O,A,B$ 不共线，且平面 $H=OAB$ 不经过任何原顶点。这样的 $B$ 存在：对每个原顶点 $v$，坏情况将 $B$ 限制在平面 $OAv$ 与 $g$ 的交线上；该交线不是整个 $g$，因为前一平面过内部点 $O$，后一支撑平面不过 $O$。有限条直线不能覆盖面内一片开区域。

$P\cap H$ 是由有限半平面限制出的有界凸多边形，且 $O$ 旁的小圆盘保证它有二维内部。$A,B$ 在该截面边界上，因为各自所在面在整个 $P$ 上支撑。沿截面边界从 $A$ 走到 $B$，每段位于一个原面，相邻段在某条原棱的开段相接：截面没有经过原顶点，也不可能包含整条原棱（否则会经过其端点）。故这些原面依次共享棱，得到一条有限面链。再在各面内沿边界循环改选旗标，就得到第 1.9 节需要的完整旗标路线。这个论证只用凸体与平面的线性限制，不借用欧拉公式或正则性。

### 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>图 17｜画的是三维情形的一张截面，不是把多面体展开。视线入点在面 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>图 18｜叶子存在的两个反证分支：第二条边若通向新点，违背最长；若通向旧点，违背无回路。</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>图 19｜每次删除都让顶点数和边数同时减一。一直删到单点，反过来就得到 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>图 20｜树不分割平面的核心动作：把一次“穿过边”替换成“绕自由端”。这一步可对有限多个交点逐一进行。</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>图 21｜同样是加一条边，这次没有自由端：两端早已被旧路径连起来，绕过端点也无法逃开整个闭回路。</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>图 22｜“至多两个”另有理由：所有新分支都必须接到上、下两条通道之一。通道只沿边内部走，不要求在端点处保持固定宽度。</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>图 23｜从同一组顶点出发：每加回一条边，就多一个面。减去的 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$，直接看出夹角相同。

保持距离且固定原点的变换确实保持线性组合；第 10.6 节从点积逐项求坐标，不事先假定线性。若只核对某个具体线性候选变换，下一个小引理已经足够。

**以后核对对称性的一个小引理。** 三个线性无关向量 $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>图 24｜先把不等式读成“方向之间的距离”：经中间方向绕行，不会比直接转过去更短。图中画的是取等的共面情形，严格号要由非共面条件推出。</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>图 25｜先用一张平面截掉顶点附近的小角：原来的各个面，在小棱锥中变成侧三角形。截面是平面凸多边形，内角和可以直接使用。</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>图 26｜左图负责角度记账；右图中 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$。鞍形面、曲率或其他曲面理论不作为这里的前置知识。



### 10.6 等距变换为什么必为 Qx+b：把省略的坐标步骤写完

“等距”要求映射 $T:\mathbb R^3\to\mathbb R^3$ 对任意 $x,y$ 满足 $|T(x)-T(y)|=|x-y|$；“$P$ 的对称”还要求 $T(P)=P$。例如绕轴转 $30^\circ$ 总是等距，但通常不保持选定立方体。

先取 $b=T(0)$，定义 $g(x)=T(x)-b$。则 $g(0)=0$，且 $g$ 仍保持两点距离。平方距离恒等式给出

$$
g(x)\cdot g(y)
=\frac{|g(x)|^2+|g(y)|^2-|g(x)-g(y)|^2}{2}
=x\cdot y.
$$

到这里还不能直接把 $g(\sum x_ie_i)$ 拆开，因为线性正是待证结论。令 $e_1=(1,0,0),e_2=(0,1,0),e_3=(0,0,1)$，再令 $u_i=g(e_i)$。点积保持说明 $u_i\cdot u_i=1$、$u_i\cdot u_j=0$（$i\ne j$）；这三条互相垂直的单位方向构成一套完整的空间坐标。

任意向量 $w$ 都能写成 $w=c_1u_1+c_2u_2+c_3u_3$，两边点乘 $u_i$ 得 $c_i=w\cdot u_i$。也可先令余项 $r=w-\sum_i(w\cdot u_i)u_i$；它与三个独立方向都垂直，只能是零，从而证明展开式本身。

现在把 $w=g(x)$ 代入，逐项计算

$$
c_i=g(x)\cdot u_i=g(x)\cdot g(e_i)=x\cdot e_i=x_i.
$$

因此确实得到

$$
g(x)=x_1u_1+x_2u_2+x_3u_3=Qx,
\qquad Q=[\,u_1\ u_2\ u_3\,].
$$

矩阵只是把三个新方向放成三列，矩阵乘向量就是按坐标加权相加。$Q^{\mathsf T}$ 表示把行列互换的转置矩阵，$I$ 表示保持全部向量不变的单位矩阵；$Q^{\mathsf T}Q$ 的第 $i,j$ 项正是 $u_i\cdot u_j$，所以

$$
\boxed{T(x)=Qx+b,\qquad Q^{\mathsf T}Q=I.}
$$

满足后一个条件的实方阵称为正交矩阵。反过来，

$$
|Q(x-y)|^2=(x-y)^{\mathsf T}Q^{\mathsf T}Q(x-y)=|x-y|^2.
$$

所以这种公式一定等距；$Q^{-1}=Q^{\mathsf T}$，还给出可逆性。一般三维等距变换的所有可能性已包括在 $Q,b$ 中。

### 10.7 为什么多面体的对称有限，却不止八个 Q

设 $v_1,\ldots,v_n$ 为 $P$ 的实际顶点。等距变换保持线段及“不能夹在两点中间”的顶点性质，故 $P$ 的对称一定排列顶点。令平均点 $O=(v_1+\cdots+v_n)/n$，由刚证明的形式，

$$
T(O)=\frac1n\sum_iT(v_i)=\frac1n\sum_i v_i=O.
$$

每个面限制都至少有一个顶点严格满足，所以全部顶点的平均点严格满足每个面限制，位于内部。把这个共同固定点选为原点，所有对称同时变成 $T(x)=Qx$。此处“中心”指共同固定点，不表示原立体一定还具有 $x\mapsto-x$ 的中心对称；正四面体就没有后一性质。

为什么数量有限？固定一个旗标 $(A,e,f)$，一个保持它的对称必须固定 $A$、棱中点 $M$、面顶点平均点 $C$，以及 $O$。$A,M,C$ 在面内不共线，$O$ 不在面平面，四点不共面。保持四个不共面点的等距变换只能是恒等：由 $Qx+b$ 的形式，三个独立点差都固定，故 $Q=I,b=0$。所以从一个旗标到给定另一个旗标，至多有一个整体对称（两个这样的变换相除就固定原旗标）。

旗标只有 $4E$ 个，因此任意凸多面体的对称至多 $4E$ 个；若它是正多面体，每个目标旗标都可达到，便恰好有 $4E$ 个。由已证五种构造的棱数，得到 $24,48,48,120,120$ 个全体对称；反射也算在内。这是结果，不用来预先证明构造正则。

用户想到的“八种矩阵”是 $\operatorname{diag}(\varepsilon_1,\varepsilon_2,\varepsilon_3)$，其中每个 $\varepsilon_i=\pm1$，确有 $2^3=8$ 种；它额外要求三条坐标轴各自保持，不允许它们转向其他方向。

立方体还允许交换坐标轴，所以有 $3!\,2^3=48$ 个带符号坐标置换。它们确实全部保持 $[-1,1]^3$。也没有其他：对称必须排列六个面的中心 $\{\pm e_1,\pm e_2,\pm e_3\}$，故每列 $Qe_i$ 只能是一个带符号坐标轴方向，且不能重复轴。

所有正交矩阵的范围更大。例如

$$
Q(\theta)=\begin{pmatrix}
\cos\theta&-\sin\theta&0\\
\sin\theta&\cos\theta&0\\
0&0&1
\end{pmatrix}
$$

对任意实数角度都正交；$\theta\in[0,2\pi)$ 时彼此不同，已有不可数无穷多个，即不能排成一个自然数编号清单的无穷多。其总数也不超过实数有限元组的数量，因此与实数一样多。固定多面体的条件 $Q(P)=P$ 才把它筛成有限集。

| 问的是哪一层 | 数量 |
| --- | --- |
| 只在固定坐标轴上改变正负号 | $8$ |
| 保持标准立方体的全部整体对称 | $48$，其中 $24$ 个旋转 |
| 只要求 $Q^{\mathsf T}Q=I$ | 不可数无穷多个 |
| 给这些变换的几何效果取几类名称 | 分类问题，与具体元素个数不同 |

### 10.8 行列式和特殊方向：本节所需的线性代数

接下来的三维分类是补充证明；五种构造可直接核对具体变换，不必把分类定理当前提。先解释符号，避免用“特征值”三个字代替论证。

对 $2\times2$ 矩阵，$\det\begin{pmatrix}a&b\\c&d\end{pmatrix}=ad-bc$。对三阶矩阵 $A=(a_{ij})$，

$$
\begin{aligned}
\det A={}&a_{11}(a_{22}a_{33}-a_{23}a_{32})\\
&-a_{12}(a_{21}a_{33}-a_{23}a_{31})\\
&+a_{13}(a_{21}a_{32}-a_{22}a_{31}).
\end{aligned}
$$

几何上它是三个列向量张成的平行六面体的有符号体积：绝对值量体积，正负记录三方向的左右手排列，称为取向。相应的代数性质为

$$
\det(AB)=\det A\det B,\quad
\det A^{\mathsf T}=\det A,\quad
\det(-A)=(-1)^n\det A.
$$

最后一式针对 $n$ 阶矩阵：每列乘 $-1$，总共 $n$ 列。前两式可由行列式按行列的展开式核对，是本节明示使用的初等代数恒等式。另用线性方程的判据：$\det A=0$ 当且仅当列方向相关，当且仅当 $Ax=0$ 有非零解；三维中就是三列共面，可用消元检查。

正交条件立即给出 $(\det Q)^2=\det(Q^{\mathsf T}Q)=1$，故 $\det Q=\pm1$。但这两种符号本身尚未证明“旋转或旋转反射”，仍要找出轴及垂直平面的动作。

若 $v\ne0$ 满足 $Qv=\lambda v$，就称 $v$ 是一个实特征方向，$\lambda$ 是对应实特征值；这里只是说该直线整体保持，允许反向。正交性给出 $|v|=|Qv|=|\lambda||v|$，因此实数 $\lambda$ 只能为 $+1$ 或 $-1$。

### 10.9 任意三维正交矩阵为什么必有轴

要找的轴向符号必须与 $\det Q$ 相匹配；随便找到任意一个 $\pm1$ 方向还不足以立即断言剩下的平面只旋转。

若 $\det Q=+1$，利用 $Q^{-1}=Q^{\mathsf T}$ 和上一节的行列式规则，逐行有

$$
\begin{aligned}
\det(Q-I)
&=\det Q\,\det(I-Q^{-1})\\
&=\det(I-Q^{\mathsf T})\\
&=\det(I-Q)\\
&=-\det(Q-I).
\end{aligned}
$$

所以 $\det(Q-I)=0$，方程 $(Q-I)v=0$ 有非零解，即 $Qv=v$。

若 $\det Q=-1$，则

$$
\begin{aligned}
\det(Q+I)
&=\det Q\,\det(I+Q^{-1})\\
&=-\det(I+Q^{\mathsf T})\\
&=-\det(Q+I).
\end{aligned}
$$

故 $Qv=-v$ 有非零解。两种情况统一为：令 $\delta=\det Q$，总能找到单位向量 $v$ 使 $Qv=\delta v$。

若 $u\perp v$，则 $Qu\cdot Qv=u\cdot v=0$，代入 $Qv=\delta v$ 得 $Qu\perp v$。所以不仅轴保持，垂直于它的二维平面也整体保持；两个部分不互相混合。

### 10.10 垂直平面怎样动作，以及全部三维类型

在轴的垂直平面取两个互相垂直的单位方向 $w_1,w_2$。平面上的矩阵记为 $B$，选取三维坐标 $(w_1,w_2,v)$ 后，$Q$ 的矩阵为

$$
\begin{pmatrix}B&0\\0&\delta\end{pmatrix}.
$$

其行列式为 $\det B\,\delta=\det Q=\delta$，因此 $\det B=+1$。二维正交矩阵的第一列是单位向量 $(\cos\theta,\sin\theta)$；第二列必须垂直且单位，只有 $\pm(-\sin\theta,\cos\theta)$ 两选项。正行列式选出加号，所以 $B$ 就是二维旋转。

若原坐标中三条新基方向组成正交矩阵 $U=[w_1\ w_2\ v]$，准确公式是

$$
\boxed{U^{\mathsf T}QU=
\begin{pmatrix}
\cos\theta&-\sin\theta&0\\
\sin\theta&\cos\theta&0\\
0&0&\delta
\end{pmatrix}.}
$$

左边是**换了坐标后的矩阵**，不是说原坐标中的每个 $Q$ 本来就以 $z$ 为轴。保持取向的三维结论称为欧拉旋转定理，与第 9 章的 $V-E+F=2$ 是不同定理。由此得到完整分类：$\delta=+1$ 时，轴向不动，垂直平面旋转，故为绕轴旋转；$\delta=-1$ 时，轴向反向，平面旋转，故为绕轴旋转后关于垂直平面反射。两步复合是一个等距变换。

<figure class="proof-figure" id="fig-orthogonal-axis-types"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 285" role="img" aria-label="fig-orthogonal-axis-types" style="width:100%;height:auto;display:block"><defs><marker id="fig-orthogonal-axis-types-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M35.00 185.00L215.00 185.00L280.00 125.00L100.00 125.00Z" fill="#e5f0f5" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M150 235L150 65" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-orthogonal-axis-types-arrow)"/><text x="160" y="70" font-size="16" fill="#29495d" text-anchor="start" font-weight="normal">v</text><path d="M150 155L225 140" fill="none" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-orthogonal-axis-types-arrow)"/><path d="M225 145Q200 95 125 130" fill="none" stroke="#c48a28" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-orthogonal-axis-types-arrow)"/><text x="160" y="220" font-size="18" fill="#2b806b" text-anchor="start" font-weight="normal">v → v</text><text x="170" y="30" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">绕轴旋转：轴向保持</text><path d="M415.00 185.00L595.00 185.00L660.00 125.00L480.00 125.00Z" fill="#e5f0f5" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M530 235L530 65" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-orthogonal-axis-types-arrow)"/><text x="540" y="70" font-size="16" fill="#29495d" text-anchor="start" font-weight="normal">v</text><path d="M530 155L605 140" fill="none" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-orthogonal-axis-types-arrow)"/><path d="M605 145Q580 95 505 130" fill="none" stroke="#c48a28" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-orthogonal-axis-types-arrow)"/><text x="540" y="220" font-size="18" fill="#2b806b" text-anchor="start" font-weight="normal">v → −v</text><text x="550" y="30" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">旋转反射：轴向反向</text><text x="380" y="273" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">两者都在垂直平面内旋转；区别在轴的符号</text></svg></div><figcaption>图 27｜分解的是同一个空间变换：轴和垂直平面各自保持。右图还将轴方向反向；镜面反射与中心对称分别对应旋转角 0° 和 180°。</figcaption></figure>

| 三维固定中心后的类型 | 标准坐标中的动作 | 不动点集合 |
| --- | --- | --- |
| 恒等 | $\delta=1,\theta=0$ | 全空间 |
| 非恒等旋转 | $\delta=1,\theta\ne0\pmod{2\pi}$ | 一整条轴 |
| 镜面反射 | $\delta=-1,\theta=0$ | 垂直于轴的整个平面 |
| 一般旋转反射 | $\delta=-1,\theta\not\equiv0,\pi$ | 只有中心 |
| 中心对称，又称点反射 | $\delta=-1,\theta=\pi$，即 $Q=-I$ | 只有中心 |

中心对称把 $X$ 变成 $2O-X$，令 $O$ 成为两点中点。在三维，它不等于一次 $180^\circ$ 绕轴旋转：旋转保留整条轴，而点反射只有一个不动点。在二维，$-I$ 恰好是 $180^\circ$ 旋转，两者不能混用维数。

原对话的“中心反演”在这里专指点反射，**不指**反演几何中另一个映射 $x\mapsto r^2x/|x|^2$；后者一般不保持距离。旋转反射是大类，镜面反射和中心对称是它的特殊情况，不能把这三个名称当作互斥类别。

例如 $T(x,y,z)=(-y,x,-z)$ 是 $90^\circ$ 旋转反射：它保持立方体，固定点只有原点，且平方为 $(-x,-y,z)$，所以既非纯旋转，也非单次镜面反射。分类说的是复合后的整体效果。

若未把固定中心移到原点，就必须同时看 $Q,b$。例如 $Q=-I$ 时 $T(x)=-x+b$ 的中心在 $b/2$；$Q=I$ 且 $b\ne0$ 时是平移。绕轴旋转后再沿轴平移可无固定点，称螺旋运动；关于平面反射再沿平面平移可得到滑移反射。它们都已包含在 $Qx+b$ 中，但不能保持一个有界多面体，因为该多面体的顶点平均点必须固定。

### 10.11 为什么二维可以没有轴，三维却一定有

上一证明中决定性的负号来自 $\det(-A)=(-1)^3\det A=-\det A$。若是二维，因 $(-1)^2=1$，不再得到“一个数等于自己的相反数”，就不能强迫行列式为零。

实例如平面旋转 $60^\circ$：

$$
R=\begin{pmatrix}1/2&-\sqrt3/2\\\sqrt3/2&1/2\end{pmatrix},
\qquad\det(R-I)=1,\quad\det(R+I)=3.
$$

两者非零，因此没有非零实向量满足 $Rv=v$ 或 $Rv=-v$。二维不是“永远没有这种方向”：恒等、半周旋转及镜面反射就有；只是不像三维那样必有。

<figure class="proof-figure" id="fig-odd-even-invariant-axis"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 270" role="img" aria-label="fig-odd-even-invariant-axis" style="width:100%;height:auto;display:block"><defs><marker id="fig-odd-even-invariant-axis-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M70 200L290 200" fill="none" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M70 200L157.5 48.45" fill="none" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-odd-even-invariant-axis-arrow)"/><path d="M70 200L245 200" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-odd-even-invariant-axis-arrow)"/><text x="135" y="170" font-size="18" fill="#c48a28" text-anchor="start" font-weight="normal">60°</text><text x="190" y="30" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">二维旋转可以没有特殊直线</text><text x="190" y="245" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">det(R−I)=1；det(R+I)=3</text><rect x="410" y="60" width="310" height="125" rx="8" fill="#edf4f8" stroke="#d5e2e9"/><text x="565" y="97" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">三维：奇数次的符号变化</text><text x="565" y="136" font-size="20" fill="#29495d" text-anchor="middle" font-weight="normal">det(−A) = −det(A)</text><text x="565" y="166" font-size="15" fill="#29495d" text-anchor="middle" font-weight="normal">迫使所选 Q∓I 的行列式为零</text><text x="565" y="245" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">有轴以后，还剩一个二维平面</text></svg></div><figcaption>图 28｜左图任意非零向量转 60° 都不与原方向平行；右侧是三维必须存在轴的代数原因，不将一个旋转实例当作任意矩阵的证明。</figcaption></figure>

还有一个不用复数的解释。对实三阶矩阵 $A$，$p(t)=\det(tI-A)$ 是首项为 $t^3$ 的实多项式，向正、负无穷时符号相反。中间值性质保证有实数根 $\lambda$，于是 $Av=\lambda v$ 有非零实解。若 $A$ 正交，长度保持再迫使 $\lambda=\pm1$。二维的二次式可以始终为正，如上例 $t^2-t+1=(t-1/2)^2+3/4$。

原对话也用“非实根成对出现”解释同一现象：实系数多项式满足 $p(\overline z)=\overline{p(z)}$，故非实根和其复共轭一起出现；奇数个位置不能全被两两配完。本文用实多项式的中间值论证已经足够，不把代数基本定理或复特征向量当前置知识。

奇数维的行列式符号论证同样保证至少一个 $+1$ 或 $-1$ 方向，偶数维则允许没有。三维分类还多用了一件事：去掉一条轴后恰好剩二维。在五维可同时在两个互相垂直的平面分别转不同角度，再固定第五方向，不能再压成一个二维旋转加一条轴。本篇不需要高维正交分解定理。


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

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

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

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

本章每次依次回答四个问题：**造了什么实体 → 哪些面确实在表面 → 哪些整体变换能对齐顶点 → 固定顶点后怎样对齐棱和面。** 后两项依据第 1.10 节，合起来才直接满足第 1.5 节的定义。

| 构造 | 顶点怎样对齐 | 在一个基准顶点怎样覆盖全部局部旗标 |
| --- | --- | --- |
| 正四面体 | 任意顶点交换来自整体镜面反射 | 固定该顶点，任意排列其余三点，覆盖 $6$ 个标记 |
| 立方体 | 改变坐标符号 | 三坐标的 $6$ 种排列，对应 $6$ 个棱—面关联对 |
| 正八面体 | 改符号、置换坐标 | 四重旋转选面，镜面反射选其两侧之一，共 $8$ 个 |
| 正二十面体 | 改符号、循环坐标 | 五重旋转选面，镜面反射选其两侧之一，共 $10$ 个 |
| 正十二面体 | 用已证二十面体的整体对称 | 顶点—面反向对应将全部旗标一起传递 |

最后一行使用直接的旗标对应即可，不必强行重复前四行的动作。表中每项都会在对应小节用整个点集核对；不是只观察一个局部图案便假定整个立体也对称。

**为什么常算平方距离？** 对非负长度 $r,s$，$r=s\iff r^2=s^2$，大小比较也等价。坐标差平方相加不含开方，故更容易精确核对。它只是计算方式，不能独自证明三点所在的三角形是凸包的面，也不能独自证明旗标传递性。

**共球面为什么能包住整个凸包？** 设互异原始点 $v_i$ 全满足 $|v_i|=R>0$，$P=\operatorname{conv}\{v_i\}$。半径 $R$ 来自这些点的实际距离，不是随意选一个很大的常数。对任意 $x=\sum_i\lambda_i v_i\in P$，平方展开给出

$$
\sum_i\lambda_i|v_i|^2-|x|^2
=\frac12\sum_{i,j}\lambda_i\lambda_j|v_i-v_j|^2\ge0.
$$

左边第一项等于 $R^2$，所以 $|x|^2\le R^2$。这直接证明 $P$ 包含在实心球中，不需要预先引用未解释的范数不等式。球面是边界 $|x|=R$，实心球还包含 $|x|<R$ 的点；凸包通常在实心球内，不是整个落在球面上。

**为什么每个原始点都是真顶点？** 固定 $v_i$，对另一个原始点 $v_j$，

$$
v_i\cdot v_j=R^2-\frac{|v_i-v_j|^2}{2}<R^2\quad(j\ne i).
$$

在全部原始点中，只有 $v_i$ 使 $v_i\cdot x=R^2$；凸组合取等条件又保证在整个凸包中也只有它取等。注意两个集合不同：

$$
H_i=\{x\in\mathbb R^3:v_i\cdot x=R^2\},
\qquad P\cap H_i=\{v_i\}.
$$

$H_i$ 本身仍是一张无限平面。若 $v_i=tA+(1-t)B$，其中 $A,B\in P$、$0<t<1$，支撑不等式的取等条件迫使 $A,B$ 都在 $P\cap H_i$，只好 $A=B=v_i$。所以不存在将它夹在中间的两个不同凸包点，它就是顶点。

顶点当然也在某些面的边界上；这里排除的是“只处在棱中段或面内部的非顶点”。几何上 $H_i$ 正是球在 $v_i$ 处的切平面，也可直接核对它只碰球一个点：在 $|x|\le R$ 且 $v_i\cdot x=R^2$ 下，$|x-v_i|^2=|x|^2-R^2\le0$，只可能 $x=v_i$。

<figure class="proof-figure" id="fig-common-sphere-support"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 310" role="img" aria-label="fig-common-sphere-support" style="width:100%;height:auto;display:block"><defs><marker id="fig-common-sphere-support-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><circle cx="185" cy="160" r="115" fill="#edf4f8" stroke="#286786" stroke-width="2"/><path d="M185.00 45.00L299.17 146.23L242.22 259.75L92.87 228.82L81.87 109.11Z" fill="#d8e8f0" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M38 45L335 45" fill="none" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M185 160L185 45" fill="none" stroke="#2b806b" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><circle cx="185" cy="45" r="6" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><text x="195" y="170" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">O</text><text x="195" y="72" font-size="18" fill="#ba514f" text-anchor="start" font-weight="normal">vᵢ</text><text x="40" y="25" font-size="15" fill="#29495d" text-anchor="start" font-weight="normal">切平面在二维截面中是一条线</text><text x="400" y="60" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">实心球包含全部原始点</text><text x="400" y="94" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">凸组合仍在实心球内</text><text x="400" y="128" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">平面 Hᵢ 本身无限延伸</text><text x="400" y="162" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">Hᵢ ∩ P 只有一个点 vᵢ</text><text x="400" y="196" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">单点取等 → 不在两点中间</text><text x="400" y="230" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">所以 vᵢ 是真正顶点</text></svg></div><figcaption>图 29｜二维截面类比：圆内的凸包与上方切线只共有红点。三维中换成球与切平面，单点接触的逻辑相同。</figcaption></figure>

另一个独立工具来自已证明的欧拉公式。一般三维凸多面体每面至少三棱，每棱属于两面，所以 $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>图 30｜四面体先由坐标构造，再用支撑平面确定面。绘图为投影，图上角度和长度不作为正则性的证明。</figcaption></figure>

最后检验整体正则性。任选两个顶点，关于它们连线的垂直平分平面反射，会交换这两个顶点；另外两个顶点到它们距离相等，恰好在该平面上，保持不动。因此任意交换两个顶点都来自整个点集的空间对称。连续作这些交换可实现四顶点的任意排列。把旗标写成四个有顺序的不同顶点：第一点 $A$ 是所选顶点，第二点 $B$ 是所选棱的另一个端点，第三点 $C$ 是所选面的第三个顶点，第四点 $D$ 是剩余点。任意两个旗标对应两份四点排序；已证任意排列都可实现，故有同一个整体对称把 $A,B,C,D$ 一起移到目标排序，直接满足定义。若按第 1.10 节理解，则先移动所选顶点，再固定它排列另外三点，覆盖该顶点的全部六个旗标。

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

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

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

独立改变坐标正负号、互换三个坐标，都保持整个立方体。先用符号变化把目标顶点对齐；在 $(1,1,1)$ 处，每条棱由“哪个坐标允许变化”标记，每个面由“哪个坐标固定为 $1$”标记。棱在该面内，恰好要求这两个坐标不同。例如所选棱沿 $z$、所选面为 $x=1$，便是有序坐标对 $(z,x)$。共有 $3\times2=6$ 个这样的关联对；三坐标的置换可把任意有序不同坐标对移到另一个，同时保持顶点 $(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>图 31｜方盒的六个面和坐标轴端点的八个三角形面，都能由坐标不等式逐面写出。各体中金色高亮一个面。</figcaption></figure>

符号变化和坐标置换可把任意轴端点移到 $(0,0,1)$。固定该顶点时，四个面由另外两个轴端点的符号 $(\pm1,\pm1)$ 标记。绕竖轴转 $90^\circ$，即 $(x,y,z)\mapsto(-y,x,z)$，轮换这四个面。选面后还有两条从顶点出发的棱可选；在 $x,y\ge0$ 的基准面内，关于 $x=y$ 反射交换两条棱，且保持顶点和该面。其他面处用已经写出的符号变化搬运同一反射。故四面各两种选择，共八个旗标全部覆盖。旋转和反射都排列整个六点集，不只是轮换局部示意图。因此顶点、棱、面可同时对齐，满足完整正则性标准。

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

**先说明发现路线。** 参数 $(p,q)=(3,5)$ 给出“每顶点有五个三角形”，计算预告应有十二顶点，但并未规定坐标。受五重结构启发，可以先设计“一个上极点、上层正五边形、下层错位正五边形、一个下极点”，即 $1+5+5+1$ 个点。这个布局仍是待验证的方案，不是仅凭 $q=5$ 强制得到的唯一布局。

<figure class="proof-figure" id="fig-icosahedral-layer-design"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 365" role="img" aria-label="fig-icosahedral-layer-design" style="width:100%;height:auto;display:block"><defs><marker id="fig-icosahedral-layer-design-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M300.26 256.09L189.48 268.95L79.42 235.29L122.17 201.64L258.66 214.49Z" fill="#fcf4e7" stroke="#c48a28" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M300.58 124.71L257.83 158.36L121.34 145.51L79.74 103.91L190.52 91.05Z" fill="#e7f0f5" stroke="#286786" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M190.0 56.36265288163004L300.5846050857652 124.7076974571174" fill="none" stroke="#286786" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"/><path d="M190.0 303.63734711837L300.26482483062625 256.0923025428826" fill="none" stroke="#c48a28" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"/><path d="M300.5846050857652 124.7076974571174L300.26482483062625 256.0923025428826" fill="none" stroke="#2b806b" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/><path d="M300.5846050857652 124.7076974571174L258.66482483062623 214.4923025428826" fill="none" stroke="#2b806b" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/><path d="M190.0 56.36265288163004L257.8276292537415 158.36280442311522" fill="none" stroke="#286786" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"/><path d="M190.0 303.63734711837L189.48258467825414 268.9474095088804" fill="none" stroke="#c48a28" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"/><path d="M257.8276292537415 158.36280442311522L189.48258467825414 268.9474095088804" fill="none" stroke="#2b806b" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/><path d="M257.8276292537415 158.36280442311522L300.26482483062625 256.0923025428826" fill="none" stroke="#2b806b" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/><path d="M190.0 56.36265288163004L121.33517516937374 145.5076974571174" fill="none" stroke="#286786" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"/><path d="M190.0 303.63734711837L79.41539491423481 235.29230254288262" fill="none" stroke="#c48a28" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"/><path d="M121.33517516937374 145.5076974571174L79.41539491423481 235.29230254288262" fill="none" stroke="#2b806b" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/><path d="M121.33517516937374 145.5076974571174L189.48258467825414 268.9474095088804" fill="none" stroke="#2b806b" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/><path d="M190.0 56.36265288163004L79.73517516937372 103.90769745711741" fill="none" stroke="#286786" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"/><path d="M190.0 303.63734711837L122.1723707462585 201.63719557688478" fill="none" stroke="#c48a28" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"/><path d="M79.73517516937372 103.90769745711741L122.1723707462585 201.63719557688478" fill="none" stroke="#2b806b" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/><path d="M79.73517516937372 103.90769745711741L79.41539491423481 235.29230254288262" fill="none" stroke="#2b806b" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/><path d="M190.0 56.36265288163004L190.51741532174586 91.05259049111959" fill="none" stroke="#286786" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"/><path d="M190.0 303.63734711837L258.66482483062623 214.4923025428826" fill="none" stroke="#c48a28" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"/><path d="M190.51741532174586 91.05259049111959L258.66482483062623 214.4923025428826" fill="none" stroke="#2b806b" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/><path d="M190.51741532174586 91.05259049111959L122.1723707462585 201.63719557688478" fill="none" stroke="#2b806b" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/><circle cx="300.5846050857652" cy="124.7076974571174" r="4" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="257.8276292537415" cy="158.36280442311522" r="4" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="121.33517516937374" cy="145.5076974571174" r="4" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="79.73517516937372" cy="103.90769745711741" r="4" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="190.51741532174586" cy="91.05259049111959" r="4" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="300.26482483062625" cy="256.0923025428826" r="4" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><circle cx="189.48258467825414" cy="268.9474095088804" r="4" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><circle cx="79.41539491423481" cy="235.29230254288262" r="4" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><circle cx="122.1723707462585" cy="201.63719557688478" r="4" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><circle cx="258.66482483062623" cy="214.4923025428826" r="4" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><circle cx="190.0" cy="56.36265288163004" r="5" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="190.0" cy="303.63734711837" r="5" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><text x="178.0" y="44.36265288163004" font-size="15" fill="#29495d" text-anchor="middle" font-weight="normal">上极点</text><text x="190.0" y="331.63734711837" font-size="15" fill="#29495d" text-anchor="middle" font-weight="normal">下极点</text><text x="395" y="65" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">顶点设计：1 + 5 + 5 + 1</text><text x="395" y="99" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">同层五边形的边长定为 2</text><text x="395" y="133" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">两层高度：+h₀、−h₀</text><text x="395" y="167" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">下层比上层错开 36°</text><text x="395" y="201" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">极点高度：+H、−H</text><text x="395" y="235" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">这些等长线段还只是候选棱</text></svg></div><figcaption>图 32｜从五重局部结构提出双五边形设计。图中保留透明环线便于看清两层，包含背后的候选连线，不是实体遮挡图。正文先解等长参数，再接回支撑面与正则性证明。</figcaption></figure>

为了看出等棱条件有解，把目标棱长取为 $2$。设两个正五边形半径为 $r$，分别位于高度 $z=h_0$、$z=-h_0$；上层各点方位角为 $2\pi k/5$，下层整体错开 $\pi/5$；两极点高度为 $\pm H$，其中 $H>h_0>0$。三类候选棱的平方长度为

$$
\begin{aligned}
\text{同层相邻点：}&\quad 4r^2\sin^2(\pi/5),\\
\text{两层最近点：}&\quad 4h_0^2+4r^2\sin^2(\pi/10),\\
\text{极点到同侧五点：}&\quad r^2+(H-h_0)^2.
\end{aligned}
$$

每式的几何来源都可由直角三角形读出：同层弦长为两倍半径乘半圆心角的正弦；跨层棱再加高度差 $2h_0$ 的平方；极点连线的水平分量长 $r$。依次令三式为 $4$，就解得

$$
r=\frac1{\sin(\pi/5)},\quad
h_0=\sqrt{1-r^2\sin^2(\pi/10)},\quad
H=h_0+\sqrt{4-r^2}.
$$

这些不是画图调出的近似值。令 $\varphi=(1+\sqrt5)/2$，初等三角恒等式给出 $\cos(\pi/5)=\varphi/2$：设 $c=\cos(\pi/5)$，由 $\cos(3\pi/5)=-\cos(2\pi/5)$ 得 $(c+1)(4c^2-2c-1)=0$，用 $0<c<1$ 选出正根。

于是 $\sin(\pi/10)=(\varphi-1)/2$，代入可化为

$$
R=\sqrt{\varphi+2},\qquad
h_0=\frac\varphi R,\quad r^2=R^2-h_0^2,\quad H=R.
$$

例如 $h_0^2=\varphi^2/(\varphi+2)>0$、$4-r^2=(R-h_0)^2>0$，所取根均有几何意义；$H>h_0$ 因 $\varphi+2>\varphi$。

到此证明了候选等棱布局的参数相容，还没有证明全部实际面和整体正则性。第 11.5 节会将已验证的坐标点集沿顶点轴观察，得到恰好这两层五边形，从而把这条发现路线接回完整证明。

**为什么又出现三个矩形？** 为了简化精确运算，可另试一套容易写出符号对称的点集

$$
S_t=\{(0,\pm1,\pm t),(\pm1,\pm t,0),(\pm t,0,\pm1)\},\qquad t>1.
$$

三组点分别在三个互相垂直的坐标平面，每组四点形成长宽比 $t$ 的矩形。选择这套布局是一项构造技巧，$12=4+4+4$ 仅说明点数凑得上，**不能推出四点应排成矩形**；更不能先假定所求立体已经存在、再拿其中心对称性证明存在。

<figure class="proof-figure" id="fig-golden-rectangle-design"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 330" role="img" aria-label="fig-golden-rectangle-design" style="width:100%;height:auto;display:block"><defs><marker id="fig-golden-rectangle-design-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><rect x="35" y="90" width="145" height="89.61492836873475" rx="0" fill="#edf4f8" stroke="#286786"/><circle cx="35" cy="90" r="4" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="35" cy="179.61492836873475" r="4" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="180" cy="90" r="4" fill="#286786" stroke="#286786" stroke-width="2"/><circle cx="180" cy="179.61492836873475" r="4" fill="#286786" stroke="#286786" stroke-width="2"/><text x="107.5" y="50" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">yz 平面</text><text x="107.5" y="220" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">短边 2，长边 2t</text><rect x="280" y="90" width="145" height="89.61492836873475" rx="0" fill="#edf4f8" stroke="#c48a28"/><circle cx="280" cy="90" r="4" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><circle cx="280" cy="179.61492836873475" r="4" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><circle cx="425" cy="90" r="4" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><circle cx="425" cy="179.61492836873475" r="4" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><text x="352.5" y="50" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">xy 平面</text><text x="352.5" y="220" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">短边 2，长边 2t</text><rect x="525" y="90" width="145" height="89.61492836873475" rx="0" fill="#edf4f8" stroke="#2b806b"/><circle cx="525" cy="90" r="4" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><circle cx="525" cy="179.61492836873475" r="4" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><circle cx="670" cy="90" r="4" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><circle cx="670" cy="179.61492836873475" r="4" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><text x="597.5" y="50" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">xz 平面</text><text x="597.5" y="220" font-size="16" fill="#29495d" text-anchor="middle" font-weight="normal">短边 2，长边 2t</text><text x="380" y="273" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">三张矩形分开正视展示；放回空间时平面互相垂直</text><text x="380" y="310" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">矩形是试选的布局，黄金比例由两条候选棱等长算出</text></svg></div><figcaption>图 33｜三组坐标各给出四个矩形顶点。本图把三张平面分别正视展开以免遮挡；长短比按成功参数 φ 绘制，但不能从图反推存在性。</figcaption></figure>

取 $A=(0,1,t),B=(0,-1,t),C=(1,t,0)$。$AB^2=4$，而 $AC^2=1+(t-1)^2+t^2$。把两条计划使用的候选棱设为等长，逐步得到

$$
1+(t-1)^2+t^2=4
\iff 2t^2-2t-2=0
\iff t^2-t-1=0.
$$

$t>1$ 选择正根 $t=\varphi$。但这里没有得到等边三角形 $ABC$：第三条线段

$$
BC^2=1+(t+1)^2+t^2,
\qquad BC^2\big|_{t=\varphi}=4\varphi^2>4.
$$

所以原对话一度说“希望三角形 $ABC$ 等边”并不正确。这里 $AB$、$AC$ 是从同一顶点出发的两条候选棱，未必是同一个三角形面的两边。真正包含 $AB$ 的第二类代表面，第三点将是 $(\varphi,0,1)$，不是上面的 $C$。

现在才固定 $t=\varphi$，开始实际验证。


令 $\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.
$$

每一对正负号独立选择，三种坐标形状各有四点，共十二点。后面逐项核对候选面真正位于凸包边界。

所有点平方半径为 $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>图 34｜黄金比例给出等棱候选；支撑平面不等式才保证这些三角形在凸包表面。不能从名字“二十面体”反推面数。</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>图 35｜这是从顶点轴方向看五个邻点的正视图。旋转不仅轮换此五边形，还轮换相反的五边形，故保持整个十二点集。</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$ 的镜面反射，也保持这两个正五边形及两个轴点。

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

**把前面的双五边形设计接回实物。** 沿 $Ov$ 选新竖轴，单位方向为 $v/R$，其中 $R=\sqrt{\varphi+2}$。因为 $v\cdot u_i=\varphi$，五个 $u_i$ 的高度都是 $h_0=\varphi/R$，半径平方为 $r^2=R^2-h_0^2$；$-u_i$ 的高度为 $-h_0$。负号使平面内角度多出 $\pi$，模五边形步长 $2\pi/5$ 后等于错开 $\pi/5$；两极点 $\pm v$ 高度为 $\pm R$。这与第 11.4 节解出的 $r,h_0,H$ 完全相同，至多差绕轴选起始角或镜像。因此已验证的十二点凸包，恰好也实现了 $1+5+5+1$ 的设计。

在固定顶点 $v$ 处，五重旋转可轮换五个关联三角形；关于该轴与一个面中心方向的镜面反射可交换该面上从 $v$ 发出的两条棱。具体编号 $f_i=vu_iu_{i+1}$：$72^\circ$ 旋转把 $f_i$ 移到 $f_{i+1}$。给定目标面 $f_j$，先旋转选到它；若标记棱落在 $vu_j$ 而目标是 $vu_{j+1}$，再关于经过轴与弦 $u_ju_{j+1}$ 中点的平面反射。正五边形有五条镜轴；经过边中点的镜轴也经过对面顶点，故正是前面已验证保持整个十二点集的镜面之一。它保持 $f_j$ 并交换这两条棱。五个面各两种选择，共十种局部旗标全部覆盖。再结合前节把任意顶点移到任意顶点的符号变化与循环坐标，得到整个立体任意关联标记可对齐。故它确为第 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>图 36｜十二面体由明确点集构造，再证明等于十二个半空间的交；“取面中心”只是它的统一缩放描述，不能代替面与正则性的验证。</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$。更明确地，把新体旗标反向读成原体旗标，先在原体中找到已证明存在的那个整体对称 $Q$；它保持点积，$Qv\cdot Qn=v\cdot n$，所以同时保持新顶点、新棱及新面的关联，并把新旗标三项一起送到目标。原体任意关联标记可对齐，新体也一样。因此 $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$ 组三约束，确认可行交点恰为所列二十点，并精确核对邻点五边形的边与对角线平方长度。

这是一份有限、无容差的计算证书，读者可运行本版[精确构造核对脚本](../../资料/正多面体与欧拉公式笔记-v5-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>图 37｜左图仅示意 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) |

新增的“正交、转置、行列式、取向、实特征方向、共轭、稳定子”均在第 1.10—1.11 节及第 10.6—10.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，再由相邻反射传播所有标记 |

**这次分享对话的 42 轮追问。** 以下按提问顺序保留问题链；为便于查找，重复追问也分别列出，正文则在首次依赖处合并解释。完整提问与回答保留在[本次对话正文](../../资料/正多面体与欧拉公式笔记-v5-2026-10-16/原对话正文.md)。

| 轮次 | 疑问 | 新版落点 |
| --- | --- | --- |
| 1 | 平面方程是什么意思 | 第 1.2 节 |
| 2 | b 怎样决定平面位置 | 第 1.2 节 |
| 3 | 凸组合落在平面上，为何正权重点全取等 | 第 1.4 节 |
| 4 | 什么叫凸组合 | 第 1.4 节 |
| 5 | 一个凸组合与全部凸包仍分不清 | 第 1.4 节 |
| 6 | 同一个变换同时对齐三项是什么意思 | 第 1.5、1.10 节 |
| 7 | 旗标能否分完整个凸多面体 | 第 1.7 节 |
| 8 | 对称变换的类型和具体个数 | 第 10.7、10.10 节 |
| 9 | 证明正多面体到底验证什么 | 第 1.10、11.1 节 |
| 10 | PDF 是否禁止复合三次变换 | 第 1.5、1.10—1.11 节 |
| 11 | 初始处动作如何搬到其他位置 | 第 1.11 节 |
| 12 | 究竟先找到 S 还是先找到 T | 第 1.11 节 |
| 13 | 需要更直观的例子 | 第 1.8 节的八标记循环 |
| 14 | AB 到 BC 为何不等于全部位置 | 第 1.8 节的完整八项表 |
| 15 | 一对可达怎样推到任意两对可达 | 第 1.11 节的归纳及逆变换 |
| 16 | 旗标图连通性如何证明 | 第 1.9、5.1 节 |
| 17 | 为何凸性不是必要条件 | 第 1.9 节的适用范围与反例 |
| 18 | 标记改选与平面对称是不是同一回事 | 第 1.9—1.11 节 |
| 19 | 中心反演是什么，为何另列旋转反射 | 第 10.10 节 |
| 20 | 五种立体怎样逐项满足定义 | 第 11.1—11.6 节的统一框架 |
| 21 | 支撑面和平方距离为何常用 | 第 1.3、11.1 节 |
| 22 | 二十面体坐标是怎样发现的 | 第 11.4 节的双五边形设计 |
| 23 | V、E、F 怎样记忆 | 第 1.6 节 |
| 24 | 为何突然出现三个矩形 | 第 11.4 节的两条构造路线 |
| 25 | 十二点为何不能强推三个矩形 | 第 11.4 节的构造假设说明 |
| 26 | t²−t−1 的方程怎样推来 | 第 11.4 节，另纠正 ABC 非等边 |
| 27 | 单点支撑为何证明是真顶点 | 第 11.1 节 |
| 28 | 凸包中的点与凸包顶点各指什么 | 第 1.4 节 |
| 29 | 那个方程明明还是一张平面 | 第 1.3、11.1 节的交集区分 |
| 30 | 不等式不是定义支撑面吗 | 第 1.3 节的三个集合表 |
| 31 | 球为何包含凸包，是不是 R² 够大 | 第 11.1 节的平方恒等式 |
| 32 | 线段凸性为何写成线性组合 | 第 1.2、1.4 节 |
| 33 | 凸组合为何能把内部填满 | 第 1.4 节的两个方向证明 |
| 34 | 为何所有等距变换只有这些形式 | 第 10.6、10.9—10.10 节 |
| 35 | 保持点积如何推出新基坐标相同 | 第 10.6 节逐项求 cᵢ |
| 36 | 不固定原点是否再加一个平移 | 第 10.6、10.10 节 |
| 37 | 变换类型是不是只看 Q | 第 10.10 节区分固定中心与一般位置 |
| 38 | 为何不只有八种矩阵 | 第 10.7 节 |
| 39 | 总共有多少个正交 Q | 第 10.7 节 |
| 40 | 无穷多个为何还要分类命名 | 第 10.7、10.10 节 |
| 41 | 任意三维 Q 如何归入两类 | 第 10.8—10.10 节 |
| 42 | 三维与二维为何不同 | 第 10.11 节 |

### 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 哪些已证明，哪些作为明确基础引用

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

新增部分已证明：凸组合填满及最小性、旗标细分、相邻旗标传播、两步正则性判据、一般等距变换的形式、有限对称计数、三维正交变换分类与奇偶维区别。等距分类提供理解背景，不参与欧拉公式证明。

仍明确引用以下基础，不声称从实数公理重建：三角形内角和与初等三角函数、实数连续函数的中间值性质、有限维有界闭集上连续函数能取极值，初等三角函数的和差与倍角恒等式，第 10.8 节明列的行列式恒等式及线性方程消元判据，以及第 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>图 38｜箭头表示前者用于后者。二十面体支撑面的穷尽借用已经独立证明的欧拉公式，不会借用“正二十面体已存在”来证明欧拉公式。</figcaption></figure>

原始问题来自用户提供的分享对话，以及后续对定义、辅助路径、窄通道、奇偶性和存在性反复追问。第五版再整合新的 42 轮分享对话，依首次依赖位置重排，并纠正其中关于 ABC 等边、构造必然性和对称分类前提的表述。

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

- 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)：核对有限线段情形的分割与奇偶计数范围；本篇采用自己的窄通道加局部事件论证。

- Sergei Treil，[Linear Algebra Done Wrong，第 6.5 节](https://www.math.brown.edu/streil/papers/LADW/HTML_2026_08-31/Ch6.html)：核对正交矩阵的旋转分解与三维反向取向情形；本文使用行列式符号证明轴的存在，不要求复特征向量理论。

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

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

