CGAL(计算几何算法库)
1. CGAL(计算几何算法库)
CGAL(计算几何算法库)提供涵盖算术与代数、几何内核、三角剖分与德劳内三角剖分、网格生成、形状重建、几何处理等19个核心板块的包,功能从基础代数运算(如多项式、模算术)延伸至复杂几何操作(2D/3D凸包、表面重建、网格优化),包的引入版本跨度从CGAL 0.9(最早,如2D和3D线性几何内核)到CGAL 6.0(最新,如2D多边形修复),许可证以LGPL(宽松,如代数基础、数值类型)和GPL(严格,如多数几何处理包)为主,且存在明确依赖关系(如高级包多依赖2D/3D三角剖分、排列等基础包),部分包提供Windows演示功能。
2. 思维导图(mindmap)

3. 详细总结
一、整体概述
CGAL(计算几何算法库)是专注于几何计算的开源库,提供19个核心板块的包,覆盖从“基础数学支撑”到“复杂几何应用”的全流程:
- 版本跨度:包的引入版本从CGAL 0.9(1999年前后,如2D和3D线性几何内核)到CGAL 6.0(2023年前后,如2D多边形修复、动态空间分割);
- 许可证:主要分为LGPL(宽松,允许商用且修改后无需开源全部代码,如代数基础、数值类型)和GPL(严格,修改后需开源,如多数几何处理、网格生成包);
- 依赖关系:高级功能包普遍依赖基础包,例如“3D周期网格生成”依赖“3D周期三角剖分”,“2D可见性计算”依赖“2D排列”和“2D三角剖分”。
二、核心板块详细解析
(1)算术与代数:几何计算的数学基础
该板块定义CGAL的代数规则,为所有几何操作提供底层运算支持,所有包均采用LGPL许可证。
| 包名称 | 主要作者 | 引入版本 | 核心功能 |
|---|---|---|---|
| 代数基础 | Michael Hemmer | 3.3 | 区分“代数类型”(非实嵌入)与“数值类型”(实嵌入),定义代数概念与函数 |
| 数值类型 | Michael Hemmer等4人 | 1.0 | 提供数值类型概念、类及第三方数值库包装(如ZQR、double) |
| 模算术 | Michael Hemmer等2人 | 3.4 | 有限域上的算术运算,支持模算术滤波、中国剩余定理 |
| 多项式 | Michael Hemmer | 3.3 | 单变量/多变量多项式的概念与实现(变量数固定) |
| 代数核 | Eric Berberich等6人 | 3.6 | 单变量多项式实根求解(定位、比较、逼近),定义双变量核概念 |
(2)几何内核:几何对象的基础表示
该板块提供不同维度、不同类型几何对象的结构定义及操作,是所有几何算法的“原子组件”。
| 包名称 | 主要作者 | 引入版本 | 核心功能 | 许可证 |
|---|---|---|---|---|
| 2D和3D线性几何内核 | Hervé Brönnimann等8人 | 0.9 | 2D/3D线性对象(点、线、射线、线段等),处理鲁棒性问题 | LGPL |
| dD几何内核 | Michael Seel | 1.1 | d维欧氏空间中的几何对象(点、向量、线段等) | LGPL |
| 2D圆几何内核 | Pedro Machado等3人 | 3.2 | 扩展线性内核,支持圆、圆弧、线段的混合操作 | GPL |
| 3D球面几何内核 | Pedro Machado等4人 | 3.4 | 扩展线性内核,支持球面、圆弧、线段的3D球面操作 | GPL |
(3)三角剖分与德劳内三角剖分:几何离散化核心
该板块是CGAL的核心功能之一,覆盖多维度、多空间场景,支持动态操作与对偶图构建,多数包采用GPL许可证。
| 包名称 | 主要作者 | 引入版本 | 核心功能 | 依赖包 |
|---|---|---|---|---|
| 2D三角剖分 | Mariette Yvinec | 0.9 | 2D点集的普通/德劳内/正则/约束三角剖分,支持点插入/删除、点定位 | 2D三角剖分数据结构 |
| 3D三角剖分 | Clément Jamin等3人 | 2.1 | 3D点集的普通/德劳内/正则三角剖分,支持多核并行 | 3D三角剖分数据结构 |
| 2D三角剖分(球面) | Mael Rouxel-Labbé等3人 | 5.3 | 球面上2D点集的德劳内三角剖分,提供对偶沃罗诺伊图 | 2D三角剖分数据结构 |
| 2D阿尔法形状 | Tran Kai Frank Da | 2.1 | 2D德劳内三角剖分相关的阿尔法复形(检索任意阿尔法值对应的复形) | 2D三角剖分 |
| 3D阿尔法形状 | Tran Kai Frank Da等3人 | 2.3 | 3D德劳内三角剖分相关的阿尔法复形 | 3D三角剖分 |
(4)网格生成:高质量几何离散化
该板块专注于生成满足工程需求的网格(如尺寸、形状约束),支持2D/3D、周期/非周期场景,均采用GPL许可证。
| 包名称 | 主要作者 | 引入版本 | 核心功能 | 依赖包 |
|---|---|---|---|---|
| 2D一致三角剖分与网格 | Laurent Rineau | 3.1 | 2D一致德劳内三角剖分、网格生成(满足尺寸/形状标准)、Lloyd优化 | 2D三角剖分 |
| 3D网格生成 | Pierre Alliez等6人 | 3.5 | 3D有界域的各向同性单纯形网格,支持多核并行 | 3D三角剖分、Eigen |
| 3D阿尔法包裹 | Pierre Alliez等5人 | 5.5 | 从点集/网格/三角汤生成紧致、无交、2-流形的包裹网格 | 3D三角剖分、多边形网格处理 |
| 3D周期网格生成 | Mikhail Bogdanov等4人 | 4.13 | 3D平环域(周期域)的周期网格生成 | 3D周期三角剖分、3D网格生成 |
(5)其他关键板块简述
- 多边形处理:涵盖2D多边形修复(CGAL 6.0)、布尔运算(Nef多边形、正则集合运算)、闵可夫斯基和等,依赖2D三角剖分/排列,许可证多为GPL;
- 形状重建:包括泊松表面重建(从带法向点集生成表面)、前沿推进重建(贪心算法),依赖CGAL与求解器、三角剖分,许可证为GPL;
- 空间搜索与排序:提供dD空间搜索(邻域/范围查询)、AABB树(快速相交计算)、四叉树/八叉树,许可证为GPL;
- 支持库:含CGAL与Boost/Qt的接口、几何对象生成器、I/O流,许可证多为LGPL,是跨库协作的核心;
- 可视化:提供Qt图形视图集成、基础查看器(CGAL 6.0,支持多数据结构同时展示),许可证为LGPL/GPL。
