网格生成 04:三角形与四面体传统算法
为什么先学单纯形网格
三角形和四面体具有最简单的仿射坐标,任意多边形/多面体也较容易被它们细分。自动三角网格与四面体网格已经相对成熟,但“相对成熟”不等于所有 CAD、各向异性和高阶情形都解决。
Delaunay 的局部判据
平面点集的三角剖分是 Delaunay,当且仅当每个三角形外接圆内部不含其他输入点。对相邻三角形 与,边 可翻转的局部判据是
等价地,用带方向的 incircle 行列式判断 是否进入 的外接圆。数值实现不能直接用普通浮点“差不多为零”;接近共圆时必须使用自适应精确谓词或受控符号扰动。
Bowyer–Watson 插点
给定当前 Delaunay 剖分,插入新点:
- 找到所有外接圆包含 的三角形,称为 cavity;
- 删除 cavity 内部三角形;
- 提取只出现一次的 cavity 边界边;
- 用 连接每条边界边;
- 更新邻接与点定位结构。
算法骨架很短,真正困难在鲁棒谓词、退化处理、快速点定位与边界约束。
约束 Delaunay 与边界恢复
工程输入通常是 PSLG/PLC:点、线段、曲面片定义了必须保留的边界。普通 Delaunay 会跨过约束边。常见处理是:
- 约束 Delaunay:只要求“从单元内部可见”的点满足空圆;
- 边/面恢复:通过翻转、插点或局部重剖分恢复约束;
- 保护小特征:先对尖角、短边和薄隙建立保护球/保护区域。
三维中并非任意 PLC 都可直接得到不加 Steiner 点的约束 Delaunay 四面体剖分,这也是二维直觉不能直接照搬的地方。
Ruppert/Chew refinement
二维 Delaunay refinement 循环处理两类坏对象:
while 存在侵占的约束线段或坏三角形:
if 某约束线段被侵占:
插入线段中点
else:
取一个坏三角形的外心
若外心侵占约束线段: 先分裂该线段
否则: 插入外心
恢复 Delaunay“侵占”意味着候选点落入以约束线段为直径的圆。优先处理它避免后续插点破坏边界。终止和最小角保证依赖输入小角、尺寸函数与阈值;不能把论文中的保证无条件外推到任意脏 CAD。
Advancing Front
前沿推进维护当前未封闭边界,不断从一条前沿边生成新单元。它天然尊重边界和局部尺寸,容易产生边界质量高的单元;难点是前沿相撞时的空腔闭合、拓扑检查和全局鲁棒性。
Delaunay 与 AFT 常被混合:前沿控制新点位置,Delaunay 决定连接关系;大连理工 MeshGene 公开资料也明确列出 AFT–Delaunay 路线。
Quadtree/Octree
树方法递归细分与几何相交的方格/立方格:
优点是层次结构、并行性和覆盖鲁棒;代价是阶梯边界、悬挂节点、尺度过渡模板和复杂奇异结构。工程上通常还要 snapping、模板替换、pillowing 与平滑。
CVT 与 Lloyd 迭代
给定密度 与生成点,Voronoi 区为。CVT 能量
固定分区时,对 求导得
令其为零, 等于 的质量质心。Lloyd 迭代就是反复“建 Voronoi → 移到质心”。它通常下降能量,但只保证到局部驻点;边界、特征和各向异性需要额外约束。
四面体独有的困难
- Delaunay 不排除 sliver;
- 曲面边界恢复可能产生极小特征;
- 三维点定位和 cavity 更新更贵;
- 拓扑一致并不等于所有体积为正;
- 并行分区必须处理跨区冲突和一致性。
算法选择表
| 场景 | 首选骨架 | 还需要补什么 |
|---|---|---|
| 二维有质量保证 | Delaunay refinement | 小角保护、精确谓词 |
| 贴合复杂曲面 | restricted Delaunay/AFT | 曲率尺寸、特征保护、拓扑恢复 |
| 边界层 | 前沿/挤出层 | 碰撞处理、正交性、厚度控制 |
| 超大规模四面体 | 并行 Delaunay/AFT | 域分解、冲突调度、内存布局 |
| 均匀采样与重网格 | CVT/ODT | 约束投影、特征与各向异性 |
原始资料
自测
- 为什么空圆性质不能自动保证边界边存在?
- refinement 为什么在插坏三角形外心前检查约束线段侵占?
- 三维 Delaunay 为什么仍可能出现 sliver?
答案:Delaunay只约束点集连接,不知道必须保留的线段;避免候选点破坏输入边界并维持终止分析;空球性质不禁止四点近乎共面。
文献深读
算法的历史来源、理论保证、三维 sliver 问题和工程实现入口,见单纯形生成、鲁棒性与质量文献谱系。