CCG 01-08:三角剖分与 Euler 示性数——第一次把拓扑算出来

本课只解决一个问题

只数网格中的顶点、边和面,为什么就能得到一个不随重新剖分改变的拓扑数?

1. 单纯形

低维单纯形是:

  • 00-单纯形:顶点;
  • 11-单纯形:边;
  • 22-单纯形:三角形;
  • 33-单纯形:四面体。

三角网格是许多0,1,20,1,2-单纯形按公共面拼起来的单纯复形。

2. 为什么不能随便拼三角形

单纯复形要求:

  1. 一个单纯形的每个面也包含在复形中;
  2. 两个单纯形的交若非空,必须是双方共同的完整面。

因此两个三角形不能只在一条边的半段重叠,也不能彼此穿过却不添加交点。

3. 组合结构与几何结构

网格有两层信息:

层数据说明
组合结构顶点编号、边、面邻接谁与谁连接
几何结构坐标或边长有多长、什么角度

Euler 示性数只依赖组合结构。把顶点坐标移动得再远,只要连接关系不变,χ\chi 不变。

4. Euler 示性数

对有限二维三角复形,定义

χ=V−E+F,\chi=V-E+F,

其中V,E,FV,E,F 分别为顶点、无向边、三角形数量。

单个三角形

V=3,E=3,F=1,V=3,\quad E=3,\quad F=1,

所以

χ=3−3+1=1.\chi=3-3+1=1.

它与圆盘同胚,圆盘的 Euler 示性数为11。

5. 细分为什么不改变χ\chi

在一个三角形内部加入新顶点,并连接到三个旧顶点:

  • ΔV=1\Delta V=1;
  • ΔE=3\Delta E=3;
  • 原来一个面变三个面,所以ΔF=2\Delta F=2。

于是

Δχ=1−3+2=0.\Delta\chi=1-3+2=0.

边中点细分也可逐步验证V−E+FV-E+F 不变。一般三角剖分之间可通过保持拓扑的局部操作联系,因此χ\chi 是拓扑不变量。

6. 闭可定向曲面的分类公式

亏格gg 是“把手数”。对闭、连通、可定向曲面:

χ=2−2g.\chi=2-2g.

曲面ggχ\chi
球面02
环面10
双环面2-2

若有bb 个边界分支:

χ=2−2g−b.\chi=2-2g-b.

圆盘g=0,b=1g=0,b=1,故χ=1\chi=1;圆柱g=0,b=2g=0,b=2,故χ=0\chi=0。

7. 四面体表面例子

四面体表面有

V=4,E=6,F=4,V=4,\quad E=6,\quad F=4,

所以

χ=4−6+4=2.\chi=4-6+4=2.

这与球面一致。四面体表面虽然有尖角,但拓扑上是球面。

8. 怎样正确数边

面数组中每个三角形列出三条边,但内部边被两个面重复列出。必须将端点排序后去重:

def unique_edges(faces):
    edges = set()
    for i, j, k in faces:
        edges.add(tuple(sorted((i, j))))
        edges.add(tuple(sorted((j, k))))
        edges.add(tuple(sorted((k, i))))
    return edges

直接使用E=3FE=3F 会把内部边算两次,得到错误的χ\chi。

9. Euler 数能做什么,不能做什么

它适合:

  • 快速发现漏面、重复面或意外边界;
  • 在已知可定向、连通、边界数时反推亏格;
  • 检查切割前后拓扑变化。

它不能单独区分所有空间;不同拓扑空间可能拥有相同χ\chi。还需结合边界、可定向性、基本群或同调。

10. 常见误区

  1. 边必须按无向边去重后再计数。
  2. V−E+FV-E+F 对非流形或不完整数据仍能算出数,但未必能套用曲面分类公式。
  3. χ=2\chi=2 不自动证明输入就是正常球面,还需检查连通、闭合和流形性。
  4. 几何上有凹陷不等于拓扑上多了洞。

11. 自测与答案

题 1。 两个三角形沿一条边拼成方形,求V,E,F,χV,E,F,\chi。

答案。V=4,E=5,F=2V=4,E=5,F=2,所以χ=1\chi=1,与圆盘一致。

题 2。 闭可定向曲面若χ=−4\chi=-4,亏格是多少?

答案。−4=2−2g-4=2-2g,所以g=3g=3。

题 3。 圆环区域g=0,b=2g=0,b=2 的χ\chi 是多少?

答案。2−0−2=02-0-2=0。

前后课程

上一课:覆盖空间 | 下一课:边界算子