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

第三版 · 2026-10-15（北京时间）

从“为什么凸正多面体只有五种”出发，逐步追问顶点角和、欧拉公式与平面分割的依据。本文把直观图景、证明和引用的基础结论分开：主线只讨论有限条线段，不要求先学习一般若尔当曲线定理。

本版共 20 幅图。第 4 章先区分原边、辅助路径和窄通道，再用带底色的图说明转角连接与首次相遇；建议按图注读完局部构造，再看全局计数。窄屏可横向滑动较宽的证明图。

阅读建议：先读第 1—3 章把握分类，再读第 4—9 章检查欧拉公式；第 10 章补几何路线，第 11 章补存在性与唯一性的依据，第 12 章回看原对话中的疑问。

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

## 正文目录

- [第 1 章：讨论对象与证明任务](#chapter-1)
- [第 2 章：两条路线为何得到同一限制](#chapter-2)
- [第 3 章：五组整数解与五种立体](#chapter-3)
- [第 4 章：只需简单多边形的分割定理](#chapter-4)
- [第 5 章：凸多面体怎样变成直线平面图](#chapter-5)
- [第 6 章：树为什么有 V−1 条边](#chapter-6)
- [第 7 章：树为什么只有一个面](#chapter-7)
- [第 8 章：加回一条边为什么恰好多一个面](#chapter-8)
- [第 9 章：完成欧拉公式的证明](#chapter-9)
- [第 10 章：顶点角和小于 360° 的几何证明](#chapter-10)
- [第 11 章：存在性、唯一性与证明的边界](#chapter-11)
- [第 12 章：问题回查、练习与来源](#chapter-12)

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

## 第 1 章：讨论对象与证明任务

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

### 1.1 凸多面体的严格含义

本文的凸多面体是三维空间中有界、内部非空的有限个闭半空间的交：

$$
P=\bigcap_{i=1}^{m}\{x\in\mathbb R^3:a_i\cdot x\le b_i\}.
$$

其中 $a_i\ne0$。作为集合，它包含内部和边界。“凸”意味着任取 $A,B\in P$，连接二者的整条线段仍在 $P$ 中：

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

每个半空间都具有这个性质，交集也具有这个性质。反过来，有界的多面体若具有线段凸性，可以用其各面的支撑半空间表示；这里引用这一标准等价刻画。立方体的例子是 $0\le x,y,z\le1$。

面取极大的二维平面面；不会把一个正方形随意划成两个三角形后，把对角线当作原多面体的棱。顶点取真正的极点，棱取一维面。

<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>

### 1.2 正多面体与参数

通常的凸正多面体要求整体对称：其欧氏对称群对所有“顶点—棱—面”的关联旗标传递。旗标就是一个顶点、一条包含它的棱、一个包含该棱的面的组合；允许对称包含反射。

这蕴含两个分类时要用的性质：所有面都是全等的正 $p$ 边形；每个顶点都有相同的 $q$ 个面相交，也有 $q$ 条棱相接。这里 $p,q\ge3$。

初读时可以先用这两个性质计数；不要把“各面正且每个顶点面数相同”未经说明就当成一般情形下整体对称性的定义。第 11 章的唯一性讨论使用上面的整体正则性。

用 $V,E,F$ 分别表示顶点数、棱数、面数。分类需要三件事：限制可能参数；构造对应立体；说明同一参数没有另一种不相似的凸正多面体。仅枚举参数尚未完成后两件事。

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

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

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

### 2.1 从局部角度出发

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

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

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

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

### 2.2 从整体计数出发

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

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

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

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

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

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

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

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

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

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

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

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

### 3.1 不漏项地枚举

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

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

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

计数可以由参数反算：

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

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

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

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

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

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

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

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

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

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

本文所说的补集，明确指

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

### 4.4 为什么两侧不能再绕路相通

选一条不平行于任何边的固定射线方向。对一般位置的点 $X$，数从 $X$ 沿此方向射出的射线与多边形相交的次数，只记录奇偶性。

当起点在不碰多边形的情况下作小幅移动时，交点正常移动；射线越过一个顶点方向时，两条关联边的交点要么同时出现或消失，要么一个交点换到另一条边，因此奇偶性不变。射线经过顶点的特殊位置用邻近一般位置定义，左右值一致。

<figure class="proof-figure" id="fig-ray-parity"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 300" role="img" aria-label="fig-ray-parity" style="width:100%;height:auto;display:block"><defs><marker id="fig-ray-parity-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="M90 65H290V235H90Z" fill="#eef5f8" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M160 120L335 120" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-ray-parity-arrow)"/><circle cx="160" cy="120" r="5" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><circle cx="290" cy="120" r="5" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><text x="145" y="108" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">X</text><text x="225" y="101" font-size="16" fill="#2b806b" text-anchor="start" font-weight="normal">1 次：奇</text><path d="M40 195L335 195" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" marker-end="url(#fig-ray-parity-arrow)"/><circle cx="40" cy="195" r="5" fill="#2b806b" stroke="#2b806b" stroke-width="2"/><circle cx="90" cy="195" r="5" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="290" cy="195" r="5" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><text x="25" y="220" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">Y</text><text x="155" y="221" font-size="16" fill="#29495d" text-anchor="start" font-weight="normal">2 次：偶</text><text x="565" y="28" font-size="18" fill="#29495d" text-anchor="middle" font-weight="normal">射线越过顶点：交点成对变化</text><path d="M455 70L560 175L665 70" fill="none" stroke="#286786" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/><path d="M420 125L710 125" fill="none" stroke="#2b806b" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="6 4" marker-end="url(#fig-ray-parity-arrow)"/><circle cx="510" cy="125" r="5" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><circle cx="610" cy="125" r="5" fill="#ba514f" stroke="#ba514f" stroke-width="2"/><path d="M420 205L710 205" fill="none" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="6 4"/><text x="704" y="113" font-size="16" fill="#29495d" text-anchor="start" font-weight="normal">2</text><text x="704" y="229" font-size="16" fill="#29495d" text-anchor="start" font-weight="normal">0</text><text x="565" y="265" font-size="17" fill="#29495d" text-anchor="middle" font-weight="normal">局部 2 ↔ 0，奇偶性不变</text></svg></div><figcaption>图 5｜左图说明奇偶标签能区分两侧；右图只画顶点附近的局部变化，新增或消失的交点成对出现，不改变奇偶性。</figcaption></figure>

这给补集 $U$ 上一个局部不变的奇偶标签。沿任何连续路径，该标签都不变。可选边的开段上一点，使经过它的测试直线不经过任何顶点；在该点两侧取充分近的两点，两条射线的交点数相差一。因此两侧标签不同，不能在补集中连通。

结合“至多两个”，恰好两个。多边形是有界的，大圆盘外的区域连通，故至多有一个无界分支；另一分支有界。每条边的两侧分别接到两区，顶点用相邻边逼近，得到共同边界的结论。

> 奇偶性只负责区分两侧；窄带和首次相遇论证负责排除第三个分支。只讲“射线相交次数一奇一偶”并没有单独完成整个证明。

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

## 第 5 章：凸多面体怎样变成直线平面图

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

### 5.1 透视投影，而非剪开展开

选择凸多面体的一个面 $f$，在该面相对内部一点的外侧选一个充分靠近的观察点 $S$。选得足够近时，$S$ 只违反面 $f$ 的半空间约束，仍严格满足所有其他面的约束。

从 $S$ 向面 $f$ 的内部发出一条射线：它先穿过 $f$ 进入凸体，再从另一处边界离开。凸性保证射线与凸体的交集是一个线段，所以不会反复进出。反过来，其他面的点投到 $f$ 所在平面时，投影都落在 $f$ 内。

因此，将除 $f$ 内部外的表面投影到 $f$ 的平面，得到嵌在面 $f$ 轮廓内的图。不同的内部边不会交叉：若交叉，就意味着同一条视线有两个不同的离开点。直线透视投影仍是直线，所以图中的边可以取线段。这种图称为 Schlegel 图。

<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>

### 5.2 为什么面数没有少一个

未选中的面对应图内有界区域；选中的面 $f$ 对应图外无界区域。因此总面数仍是原来的 $F$，顶点和棱也保持一一对应。不能一边删掉一个面，一边又忘记把外部区域计入。

原多面体的边图连通：例如各面沿公共棱连接成整张凸体表面，每个面的边界连通；也可从凸体表面径向投到球面看出表面连通，面间的连续路线可以绕开有限个顶点而依次跨棱。故得到有限、连通的直线平面图。

下文的面，统一定义为平面去掉图后的连通分支，包括无界分支。平面开集的连通分支都是折线道路连通的：固定一点，能用有限折线到达的点组成开集，其余点也组成开集；连通性迫使后者为空。这一事实让后面的“选一条折线路径”有了依据。

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

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

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

### 6.1 树与生成树

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

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

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

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

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

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

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

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

### 6.3 归纳计数

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

### 8.1 条件必须说全

设 $G$ 已经有限、连通且直线嵌入平面。增加一条边 $e=AB$，两端 $A,B$ 是不同的已有顶点；内部不碰原图。我们要证明

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

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

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

### 8.2 至少分成两个面

由于 $G$ 连通，原图中存在从 $A$ 到 $B$ 的简单路径 $P$。路径不重复顶点，原图边不交叉，而 $e$ 的内部不碰原图，所以 $P\cup e$ 是简单闭折线。

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

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

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

### 8.3 至多分成两个面

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

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

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

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

### 8.4 合并结论

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

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

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

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

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

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

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

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

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

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

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

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

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

全部加回后得到

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

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

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

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

对具有 $c$ 个连通分量的有限平面图，公式是 $V-E+F=1+c$，仍把外部算一个面。可用每个分量的一棵树组成的生成森林重复上述计数；有限个互不相交的树的补集仍连通，用第 7 章绕行逐棵加入即可。

带孔的闭合多面体表面未必满足 $2$。对于连通、闭合、可定向的曲面，若有 $g$ 个柄，并采用每面都是圆盘的有限胞腔分解，则欧拉示性数为 $2-2g$。这是延伸背景，本文不证明，也不用于分类。

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

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

## 第 10 章：顶点角和小于 360° 的几何证明

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

### 10.1 先证明空间夹角三角不等式

设 $u,v,w$ 是单位向量，令 $\alpha=\angle(u,v)$、$\beta=\angle(v,w)$、$\gamma=\angle(u,w)$，取值均在 $[0,\pi]$。目标是 $\gamma\le\alpha+\beta$。

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

若 $\alpha$ 或 $\beta$ 为 $0$，结论直接成立；若有一个为 $\pi$，则右边至少为 $\pi$，结论也成立。其余情形可写为

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

其中 $a,b$ 都是垂直于 $v$ 的单位向量。由 $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]$ 上严格递减，得出目标结论。当 $\alpha+\beta>\pi$ 时，直接用 $\gamma\le\pi<\alpha+\beta$，不在错误的区间反用余弦单调性。

若三个向量线性无关，$a,b$ 不可能反向，且 $\sin\alpha\sin\beta>0$，所以内积不等式严格。结合上面的分情况，得到 $\gamma<\alpha+\beta$。

### 10.2 用平面截去一个真正顶点

设凸多面体的顶点为 $O$，相邻棱有 $n$ 条。存在一个线性函数在 $O$ 处严格小于所有其他顶点：例如把 $O$ 处各关联面的向内距离函数相加，和为零仅可能位于这些支撑面的公共交点 $O$。充分靠近 $O$ 的小正水平面便能分离 $O$ 与其他顶点。

该平面逐条截到从 $O$ 发出的棱，形成凸 $n$ 边形 $A_1\cdots A_n$；在每个原面内截出三角形 $OA_iA_{i+1}$。各 $A_i$ 都是截面真正的顶点，相邻三点不共线。

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

记顶角 $\theta_i=\angle A_iOA_{i+1}$，底角为 $\alpha_i=\angle OA_iA_{i+1}$ 与 $\beta_i=\angle A_iA_{i+1}O$，下标循环。三角形内角和给出

$$
\sum_{i=1}^{n}\theta_i=n\pi-\sum_{i=1}^{n}(\alpha_i+\beta_i).
$$

在底面顶点 $A_i$，记底面内角为 $\gamma_i$。从 $A_i$ 指向 $A_{i-1},O,A_{i+1}$ 的三个向量线性无关：前后邻点决定截面平面，$O$ 不在此平面中。所以第 10.1 节给出

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

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

把所有不等式相加，并用凸 $n$ 边形内角和，得到

$$
(n-2)\pi=\sum_i\gamma_i<\sum_i(\alpha_i+\beta_i).
$$

代回：

$$
\sum_i\theta_i<n\pi-(n-2)\pi=2\pi=360^\circ.
$$

这就证明了第 2 章使用的几何事实。严格号来自非共面性，凸性保证存在正确的截面及其循环次序。

### 10.3 角亏不能被过度解读

定义顶点角亏 $\delta=2\pi-\sum_i\theta_i$。凸多面体的真正顶点必有正角亏。

但仅仅给定角和小于 $2\pi$，不能据此保证一整套多边形能闭合成凸多面体，也不能把正角亏反过来等同于任意嵌入曲面的局部凸性。角亏是内禀量，空间中是否凸还涉及嵌入方式。

角和等于 $2\pi$ 表示内禀平坦，不要求折叠后的面片都在同一个平面；一张纸经折叠就是反例。大于 $2\pi$ 则排除了凸多面体真正顶点，但可出现在非凸的鞍形结构中。

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

## 第 11 章：存在性、唯一性与证明的边界

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

### 11.1 五种立体怎样存在

以下点集的凸包给出具体构造；整体缩放不改变类型。

| 立体 | 顶点坐标或构造 |
| --- | --- |
| 正四面体 | $(1,1,1),(1,-1,-1),(-1,1,-1),(-1,-1,1)$ |
| 立方体 | $(\pm1,\pm1,\pm1)$ 的全部八种组合 |
| 正八面体 | $(\pm1,0,0),(0,\pm1,0),(0,0,\pm1)$ |
| 正二十面体 | $(0,\pm1,\pm\varphi),(\pm1,\pm\varphi,0),(\pm\varphi,0,\pm1)$，每对正负号独立，$\varphi=(1+\sqrt5)/2$ |
| 正十二面体 | 上述正二十面体的极对偶；以其每个三角形面的中心作顶点，取这些点的凸包，所得与极对偶相似 |

前三个例子可直接算距离及支撑平面。二十面体也可用 $\varphi^2=\varphi+1$ 核对：顶点等半径，棱长均为 $2$，有二十个等边三角形支撑面，每顶点相接五面。正十二面体与二十面体互换顶点和面：每个二十面体顶点周围的五个面中心形成一个正五边形。

要说明“正”还需整体对称，而不能只数边。本构造的正二十面体顶点邻点围绕顶点轴呈五重旋转对称，顶点图连通且可用这些对称将邻接顶点互换，结合保持一个顶点的五重旋转和镜面对称，得到旗标传递；极对偶继承对称并将顶点与面对换。附带坐标检查程序保存了各支撑面、棱长、顶点度数与所有旗标对称的数值核对，供复算，数值检查不代替精确的坐标恒等式。

### 11.2 为什么同一参数只有一种：球面旗标三角形

这里给出唯一性的标准几何论证概要，并明确引用一个球面几何结论：角均在 $(0,\pi)$ 的凸球面三角形由三个角唯一确定到球面等距变换。它可由球面余弦定理证明，本文不另行展开球面三角学。

对凸正多面体，把全部顶点的平均值取作原点 $O$。旗标传递意味着顶点传递，所以所有顶点在同一个以 $O$ 为球心的球面上。对一面选其中心 $C$，对一条棱选中点 $M$，对其端点选 $A$；把射线 $OC,OM,OA$ 投到单位球面。

<figure class="proof-figure" id="fig-flag-triangle"><div class="diagram-scroll"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 305" role="img" aria-label="fig-flag-triangle" style="width:100%;height:auto;display:block"><defs><marker id="fig-flag-triangle-arrow" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0 0L7 3L0 6Z" fill="#2b806b"/></marker></defs><path d="M185 45L299.127 127.918L255.534 262.082H114.466L70.873 127.918Z" fill="#edf4f8" stroke="#286786" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><path d="M185 165L185 45" fill="none" stroke="#6d8391" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M185 165L299.127 127.918" fill="none" stroke="#6d8391" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M185 165L255.534 262.082" fill="none" stroke="#6d8391" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M185 165L114.466 262.082" fill="none" stroke="#6d8391" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M185 165L70.873 127.918" fill="none" stroke="#6d8391" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/><path d="M185 165L185 45L242.0635 86.459Z" fill="#f9e3b4" stroke="#c48a28" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/><circle cx="185" cy="165" r="5" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><circle cx="242.0635" cy="86.459" r="5" fill="#c48a28" stroke="#c48a28" stroke-width="2"/><text x="167" y="189" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">C</text><text x="253" y="85" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">M</text><text x="176" y="34" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">A</text><text x="185" y="298" font-size="15" fill="#29495d" text-anchor="middle" font-weight="normal">先在一个面上找：顶点 A、棱中点 M、面中心 C</text><text x="385" y="65" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">金色小三角形代表一个旗标</text><text x="385" y="99" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">从多面体中心径向投到球面</text><text x="385" y="133" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">得到全等的球面旗标三角形</text><text x="385" y="167" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">三个角为 π/p、π/2、π/q</text><text x="385" y="201" font-size="18" fill="#29495d" text-anchor="start" font-weight="normal">图中只画面内标记，未画球面角</text></svg></div><figcaption>图 15｜唯一性补充中的基本小块。先在面内认清 A、M、C，再把三条中心射线投到球面；球面角不等于左图平面角。</figcaption></figure>

每个面被中心与边中点分成 $2p$ 个旗标三角形。球面上这些三角形全等，三个角分别是

$$
\frac{\pi}{p},\qquad\frac{\pi}{2},\qquad\frac{\pi}{q}.
$$

其中面中心周围有 $2p$ 个全等角，棱中点周围有四个，顶点周围有 $2q$ 个。这些三角形确实构成球面铺分，因为从凸体内部径向投影到球面是一一对应的。

固定一个旗标三角形后，邻接三角形就是它关于公共大圆边的反射：两个全等球面三角形沿相应边接合，另一侧的放置唯一。铺分的邻接关系连通，逐个跨边便强制确定整张铺分。因此同一 $(p,q)$ 的两个凸正多面体，球面旗标铺分在一个等距变换下重合。把外接球半径归一化后，其顶点重合，凸包也重合；原立体因而相似。

这说明参数限制确实限制了类型数，而不仅仅是限制五组计数。结合第 11.1 节的构造，得到恰好五种。若不学习本节球面结论，可以把本节作为分类补充：前九章已经完整给出欧拉公式及五组候选参数的推导。

### 11.3 哪些基础在本文之外

本文的主线没有引用一般若尔当曲线定理；多边形情形用有限窄带和奇偶性作了证明。仍使用实平面的基本连续性、有限紧集的正距离、三角形内角和、内积与余弦公式。

支撑半空间与凸多面体的等价刻画、正多面体坐标构造的完整精确代数展开、球面三角形按角唯一性没有从公理逐行展开。它们的用途分别已标明；不应把这篇笔记描述成从零建立全部欧氏与球面几何。

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

## 第 12 章：问题回查、练习与来源

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

### 12.1 原对话疑问的对应位置

| 疑问或需要修正的说法 | 本文处理 |
| --- | --- |
| 为什么正多面体只有五种？ | [第 2—3 章参数限制](#chapter-2)，[第 11 章存在与唯一](#chapter-11) |
| 凸性的严格定义是什么？ | [第 1 章半空间、线段凸性与真正顶点](#chapter-1) |
| 为什么顶点面角和严格小于 360°？ | [第 10 章截面与角三角不等式](#chapter-10) |
| 空间夹角为什么满足三角不等式？ | [第 10.1 节向量分解及分情况](#chapter-10) |
| 欧拉公式如何整理成参数限制？ | [第 2.2 节逐步除以正数](#chapter-2) |
| 欧拉公式凭什么成立？ | [第 5—9 章投影、树、绕行与增边](#chapter-5) |
| 树的边数为什么是 V−1？ | [第 6 章最长路径、叶子与归纳](#chapter-6) |
| 树没有面是否只是直觉？ | [第 7 章自由端绕行](#chapter-7) |
| 闭回路为什么恰好多一个面？ | [第 8 章分开证明至少与至多](#chapter-8) |
| 边、辅助路径、窄通道分别是什么？ | [第 4.1—4.2 节定义与图 3a—3d](#chapter-4) |
| 首次相遇点 Q 能不能走到？ | [第 4.3 节先停在 Z 再转入辅助路径](#chapter-4) |
| 是否必须先学完整若尔当定理？ | [第 4 章只用有限线段](#chapter-4) |
| 等于 360° 是否只能铺平？ | [第 10.3 节内禀平坦与折叠的区别](#chapter-10) |
| 几何想象在证明里有什么作用？ | 图像帮助找路线；窄带、正距离、路径替换等步骤负责把路线变为论证 |

### 12.2 三个自检练习

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

答：增加的是连接两个分量的边，没有旧路径可以与它组成闭回路；加边引理的连通条件不满足。前后分别有 $V=2,E=0,F=1,c=2$ 与 $V=2,E=1,F=1,c=1$，均满足 $V-E+F=1+c$。

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

答：前者的两侧能绕自由端互通；后者两端已由旧路径连接，形成简单多边形，阻止两侧互通。

**练习三：** 若每面是正三角形、每顶点六面相交，哪里被排除？

答：角和恰好 $2\pi$；代数上 $1/3+1/6=1/2$，无法满足有限凸多面体所要求的 $1/2+1/E>1/2$。

### 12.3 来源与阅读边界

主要来源为用户提供的分享对话：解释正多面体只有五种，以及本次关于“采用简单多边形情形”的补充讨论。分享页的主线按父子节点核对，保留了重复的首答片段；旧系统提示及内部非正文内容不作为笔记指令。

进一步阅读可参考 Jeff Erickson 的大学课程讲义 [Simple Polygons](https://jeffe.cs.illinois.edu/teaching/comptop/2023/notes/01-simple-polygons.html)，用于对照多边形版分割定理与一般曲线版的范围区别。本文第 4 章采用窄带与奇偶性组织自己的论证，不是该讲义的翻译。

原始分享页、主线提取、生成脚本及坐标检查记录保存在本版[资料目录](../../../../%E8%B5%84%E6%96%99/%E6%AD%A3%E5%A4%9A%E9%9D%A2%E4%BD%93%E4%B8%8E%E6%AC%A7%E6%8B%89%E5%85%AC%E5%BC%8F%E7%AC%94%E8%AE%B0-v3-2026-10-15)。[全部笔记索引](../../../%E9%98%85%E8%AF%BB%E7%B4%A2%E5%BC%95.html)可用于继续阅读其他主题。

HTML 的正文、图形、公式和公式源码工具均已嵌入，可单文件离线阅读；配套 Markdown、PDF、资料和其他笔记链接需要对应文件。PDF 提供前部目录页码、内部跳转和分层书签，公式源码查看使用 HTML。
