CGAL是一个计算几何算法库。
算术和代数
代数基础
这个包在概念、类和函数方面定义了代数对 CGAL 的意义。 主要特征是:(i)类型互操作性的明确概念(ii)代数类型(不一定可嵌入实数)和数字类型(可嵌入实数)之间的分离。
数值类型
这个包提供了有限域的算术。 提供的工具对于基于模算术的过滤器和基于中文余数的算法特别有用。
余数运算
这个包提供了有限域的算术。 提供的工具对于基于模算术的过滤器和基于中文余数的算法特别有用。
多项式
这个包引入了 d 变量中的单变量和多变量多项式的概念。 尽管该概念是针对任意数量的变量编写的,但对于该概念的特定模型,变量的数量被认为是固定的。
代数核心
多项式的实数求解是一个应用范围很广的基本问题。 该软件包旨在提供最先进算法的黑盒实现,以确定、比较和逼近单变量多项式和双变量多项式系统的实根。 这样的黑盒称为代数核。 到目前为止,该软件包仅提供单变量内核的模型。 尽管如此,它已经定义了双变量内核的概念,因为这为即将到来的实现确定了接口。
组合算法
单调和排序矩阵搜索
这个包提供了一个矩阵搜索框架,它是计算凸多边形顶点的所有最远邻居、内接平面点集的最大 k 边形以及计算矩形 p 中心的基础技术。
线性和二次规划求解器
该软件包包含用于在多面体域上最小化线性和凸二次函数的算法,由线性方程和不等式描述。 算法是精确的,即解决方案是根据多精度有理数计算的。 得到的解决方案是经过认证的:除了声称所考虑的问题具有最佳解决方案、不可行或无界之外,算法还为这些事实提供证明。 可以轻松地(并且独立于算法)检查这些证明的正确性。 求解算法基于将单纯形法推广到二次目标函数。
几何核心
2D 和 3D 线性几何内核
这个包包含内核,每个内核都包含恒定大小的对象,例如点、向量、方向、线、射线、线段、圆以及这些对象的谓词和构造。 内核主要在处理健壮性问题的方式上有所不同。
dD 几何内核
dD 内核包含d维欧几里得空间中的点、向量、方向、线、射线、线段、圆等大小恒定的对象,以及这些对象的谓词和构造。
2D 圆形几何内核
这个包是线性 CGAL 内核的扩展。 它提供平面中的圆、圆弧和线段的功能。
3D 球面几何内核
这个包是线性 CGAL 内核的扩展。 它在 3D 空间或受限于参考球体上提供球体、圆、圆弧和线段的功能。
凸壳算法
2D 凸壳和极值点
这个包提供了计算二维凸包的函数,以及检查点集是否强凸的函数。 还描述了许多用于计算特定极值点和外壳点子序列的函数,例如一组点的下外壳和上外壳。
3D 凸壳
这个包提供了计算三维凸包的函数以及检查点集是否强凸的函数。 可以通过两种方式计算三个维度中一组点的凸包:使用静态算法或使用三角测量来获得完全动态的计算。
dD 凸壳和 Delaunay 三角剖分
这个包提供了在 d 维欧几里得空间中计算凸包和 Delaunay 三角剖分的函数。
多边形
二维多边形
这个包提供了一个二维多边形类和对点序列的操作,比如边界框、极值点、有符号区域、简单性和凸性测试、方向和点位置。 该演示包括对多边形的操作,例如计算凸分区和直骨架。
2D 正则化布尔集操作
这个包包括在二维欧几里得空间中由弱 x 单调曲线限制的点集上的布尔集操作的实现。 特别是,它包含正则化布尔集合操作、交集谓词和点包含谓词的实现。
Nef 多边形的二维布尔运算
Nef 多边形是可以通过集合补集和集合交集操作从有限的开放半空间集合中获得的任何集合。 由于所有其他二元集操作(如并集、差集和对称差集)都可以简化为交集和补集计算,因此在这些操作下,Nef 多边形也是封闭的。 除了集合补运算之外,还有更多的拓扑一元集合运算在 Nef 多边形内部、边界和闭合域中是闭合的。
嵌入球体上的 Nef 多边形的 2D 布尔运算
这个包在平面上提供了相当于 2D Nef Polygons 的功能。 这里的半平面对应于由大圆界定的半球体。
2D 多边形分区
这个包提供了在单调或凸多边形中分割多边形的功能。 这些算法可以产生具有最少多边形数量的结果,以及具有不超过最佳凸块数量四倍的近似值,但它们的运行时复杂性不同。
2D 直骨架和多边形偏移
这个包实现了一种算法来构造一个半边数据结构,该数据结构表示带有孔的二维多边形内部的直骨架,以及一种在给定直骨架的任何偏移距离处构造向内偏移多边形的算法。
二维闵可夫斯基和
这个包包含计算平面中两个简单直边多边形的 Minkowski 和的函数。 它还包含计算多边形和圆盘的 Minkowski 和的函数,该操作称为偏移或扩张多边形。 该包可以计算偏移多边形的精确表示,或提供偏移的保证近似值。
二维折线简化
这个包可以简化多段线,保证多段线的拓扑不会改变。 这可以针对单个多段线以及受约束三角剖分中的一组多段线约束来完成。 可以使用成本和停止功能来控制简化。
二维可见性计算
这个包提供了几个变体来计算二维多边形区域内点的可见性区域。
集合的 2D 可移动可分离性
集合的可移动可分离性[12]是一类处理移动对象集合的问题,例如平面中的多边形; 挑战是在考虑不同种类的运动和各种分离定义的同时避免物体之间的碰撞。
细胞复合物和多面体
3D 多面体表面
三维多面体曲面由顶点、边、面及其上的入射关系组成。 下面的组织是一个半边数据结构,它将可表示曲面的类别限制为可定向的 2 流形 - 有边界和无边界。 如果曲面是闭合的,我们称其为多面体。
半边数据结构
半边数据结构是一种以边为中心的数据结构,能够维护顶点、边和面的入射信息,例如平面地图、多面体或嵌入任意维度的其他可定向二维表面。 每条边被分解成两个方向相反的半边。 每个半边中存储一个入射面和一个入射顶点。 对于每个面和每个顶点,存储一个入射半边。 半边数据结构的简化变体可以省略其中一些信息,例如面中的半边指针或面的存储。
表面网格
这个包提供的表面网格类是允许表示多面体表面的半边数据结构的实现。 它是 Halfedge Data Structures 和 3D Polyhedral Surface 包的替代方案。 主要区别在于它是基于索引的而不是基于指针的,并且向顶点、半边、边和面添加信息的机制要简单得多,可以在运行时使用,而不是在编译时使用。
组合图
这个包实现了 d 维度的组合映射。 组合图是一种数据结构,能够通过描述细分的所有单元(例如在 3D 顶点、边、面、体积中)以及这些单元之间的所有关联和邻接关系来表示可定向的细分对象。 由于属性,信息可以与单元格相关联。 在 2D 中,组合映射等价于半边数据结构。 该包提供了基本的创建、修改操作和几个迭代器,可以运行对象的某些特定部分。
广义地图
这个包实现了 d 维度的广义地图。 广义地图是一种数据结构,能够通过描述细分的所有单元(例如在 3D 顶点、边、面、体积中)以及这些单元之间的所有关联和邻接关系来表示可定向或不可定向的细分对象。 由于属性,信息可以与单元格相关联。 该包提供了基本的创建、修改操作和几个迭代器,可以运行对象的某些特定部分。
线性细胞复合体
该软件包实现了线性单元复合体,即具有线性几何形状的 d 维对象。 对象的组合部分由组合映射或广义映射描述,表示对象的所有单元格以及单元格之间的关联和邻接关系。 只需将一个点与地图的每个顶点相关联,即可将几何图形添加到组合数据结构中。 采用 2D 组合图,并使用 3D 点,得到一个线性单元复合体,相当于 Polyhedron_3。
Nef 多面体的 3D 布尔运算
3D Nef 多面体是由半空间限制的单元复合体的边界表示,它支持布尔运算和拓扑运算,包括无界单元、混合维单元(例如,孤立的顶点和天线)。 Nef 多面体区分开集和闭集,可以表示非流形几何。
多面体的凸分解
该软件包提供了将有界多面体分解为凸子多面体的功能。 分解产生 O(r2) 个凸块,其中 r 是边的数量,其相邻小平面相对于多面体内部形成超过 180 度的角度。 这个界限是最坏情况下的最优值。
多面体的 3D Minkowski 和
这个包提供了一个函数,它计算 R3 中两个点集的 Minkowski 和。 这些点集可能由孤立的顶点、孤立的边、具有无孔凸面的表面以及开放和封闭的实体组成。 因此,可以计算平移机器人的配置空间(即使在狭窄通道场景中)以及几个图形操作,例如滑翔操作,它计算沿折线移动的多面体扫过的点集。
排列
二维排列
此软件包可用于构建、维护、更改和显示平面中的布置。 一旦构造了一个排列,该包就可以用于获取对该排列的各种查询的结果,例如点位置。 该软件包还包括两个算法框架的通用实现,即计算排列的区域和线扫描平面,排列嵌入。 这些框架依次用于对安排的其他操作的实现。 例如,计算两种排列的叠加是基于扫描线框架。 还可以扩展排列和排列组件以存储附加数据。 一个重要的扩展存储了排列的构建历史,以便可以获得排列子曲线的原始曲线。
曲线的二维交点
这个包提供了三个基于扫描线范式实现的自由函数:给定一组输入曲线,计算所有交点,计算由它们诱导的成对内不相交的子曲线集,并检查是否至少有一个 它们之间的一对曲线在它们的内部相交。
2D 捕捉舍入
快速舍入是一种众所周知的方法,用于将段的任意精度排列转换为固定精度表示。 在鲁棒几何计算的研究中,它可以归类为有限精度逼近技术。 迭代 Snap Rounding 是 Snap Rounding 的一种修改,其中每个顶点距离任何非入射边至少半个像素宽度。 这个包支持这两种方法。
2D 信封
这个包包含计算一组二维任意曲线的下(或上)包络的函数。 输出表示为包络图,即将 x 轴细分为区间,从而在每个区间上引发包络的曲线的标识是唯一的。
3D 信封
该包包含计算一组任意 3D 表面的下(或上)包络的函数。 输出表示为 2D 包络图,即平面细分,使得在每个图表单元上诱导包络的表面的标识是唯一的。
三角剖分和 Delaunay 三角剖分
二维三角剖分
该软件包允许为二维点集构建和处理各种三角剖分。 任何 CGAL 三角剖分都会覆盖其顶点的凸包。 三角剖分是增量构建的,可以通过插入或删除顶点来修改。 他们提供点定位设施。 该包提供普通三角剖分(其面取决于顶点的插入顺序)和 Delaunay 三角剖分。 还为加权点集提供了规则三角剖分。 Delaunay 和正则三角剖分提供最近邻查询和原语来构建双 Voronoi 和幂图。 最后,约束和 Delaunay 约束三角剖分允许强制一些约束段显示为三角剖分的边缘。 提供了几个版本的约束和 Delaunay 约束三角剖分:其中一些处理输入约束段之间的交点,而另一些则不处理。
二维三角剖分数据结构
该包提供了一个数据结构来存储具有二维球体拓扑的二维三角剖分。 该包充当三角剖分的顶点和面的容器,并提供对三角剖分的基本组合操作。
球体上的二维三角剖分
该软件包可以在 2 球体上构建和操作 Delaunay 三角剖分。 三角剖分是增量构建的,可以通过插入或删除顶点来修改。 提供了点位置查询和构建双 Voronoi 图的原语。
2D 周期性三角剖分
该软件包允许在二维平面环面中构建和处理点集的三角剖分。 三角剖分是增量构建的,可以通过插入或删除顶点来修改。 他们提供点定位设施。 该软件包提供 Delaunay 三角剖分,并提供最近邻查询和原语来构建双 Voronoi 图。
二维双曲德劳内三角剖分
该软件包可以在双曲平面的庞加莱圆盘模型中构建和处理点集的 Delaunay 三角剖分。 三角剖分是增量构建的,可以通过插入和删除顶点来修改; 还提供了点定位设施,以及构建双 Voronoi 图的原语。
二维周期双曲三角剖分
该软件包可以在二维双曲 Bolza 曲面上构建和处理点集的三角剖分。 三角剖分是增量构建的,可以通过插入或删除顶点来修改。 还提供点定位设施。 该软件包提供了 Delaunay 三角剖分,并提供了构建双 Voronoi 图的原语。
3D 三角剖分
该软件包允许为三维点集构建和处理三角剖分。 任何 CGAL 三角剖分都会覆盖其顶点的凸包。 三角剖分是增量构建的,可以通过插入、位移或删除顶点来修改。 他们提供点定位设施。 该包提供普通三角剖分(其面取决于顶点的插入顺序)和 Delaunay 三角剖分。 还为加权点集提供了规则三角剖分。 Delaunay 和正则三角剖分提供最近邻查询和原语来构建双 Voronoi 和幂图。 可选地,主要的 Delaunay 和常规三角测量算法(插入、删除)支持多核共享内存架构,以利用可用的并行性。
3D三角剖分数据结构
这个包提供了一个数据结构来存储具有三维球体拓扑的三维三角剖分。 该包充当三角剖分的顶点和单元格的容器,并提供三角剖分的基本组合操作。
3D 周期性三角剖分
该软件包允许在三维平面环面中构建和处理点集的三角剖分。 三角剖分是增量构建的,可以通过插入或删除顶点来修改。 他们提供点定位设施。 该软件包提供 Delaunay 和常规三角剖分,并提供最近邻查询和原语来构建双 Voronoi 图。
dD 三角剖分
该包提供了用于在欧几里得空间中操作三角剖分(纯单纯复形)的类,其维度可以在编译时或运行时指定。 具体来说,它提供了一个数据结构来存储三角剖分,以及两个类来处理点集的三角剖分和 Delaunay 三角剖分。 支持点定位和点插入。 Delaunay 三角剖分还支持点删除。
2D Alpha 形状
这个包提供了一个数据结构,对与给定的 2D Delaunay 或正则三角剖分相关的整个 alpha 复形家族进行编码。 特别是,该数据结构允许检索任何 alpha 值的 alpha 复数、临界 alpha 值的整个频谱以及对三角剖分面的过滤(此过滤基于每个面包含在 阿尔法复合体)。
3D 阿尔法形状
这个包提供了一个数据结构,编码一个 alpha-complex 或与给定的 3D Delaunay 或规则三角剖分相关的整个 alpha-complexes 家族。 在后一种情况下,数据结构允许检索任何 alpha 值的 alpha-complex、关键 alpha 值的整个光谱和三角剖分面的过滤(此过滤基于每个面包含的第一个 alpha 值 在阿尔法复合体上)。
Voronoi 图
2D 段 Delaunay 图
一种算法,用于计算欧几里得度量下一组线段的 Voronoi 图的对偶。 它是对点的标准 Voronoi 图的概括。 提供的算法是动态的。
L Infinity Segment Delaunay 图
用于计算 L∞ 度量下一组点和段的 Voronoi 图的对偶的算法和几何特征。
二维阿波罗图(磁盘的德劳内图)
用于计算二维 Apollonius 图的算法。 Apollonius 图是 Apollonius 图的对偶,也称为加性加权 Voronoi 图。 后者可以认为是欧几里得度量下的一组圆盘的 Voronoi 图,是标准 Voronoi 图对点的推广。 提供的算法是动态的。
2D Voronoi 图适配器
2D Voronoi 图适配器包提供了一个适配器,可将二维三角 Delaunay 图适配到相应的 Voronoi 图,表示为双连接边列表 (DCEL) 数据结构。 适配器能够以一致的方式自动消除 Voronoi 图的退化特征,这些特征是即使在退化配置中也应该对 Delaunay 图进行三角剖分的要求的产物。 根据底层 Delaunay 图支持的操作类型,适配器允许增量或动态构建 Voronoi 图,并且可以支持点位置查询。
网格生成
2D 一致的三角剖分和网格
这个包实现了一个 Delaunay 细化算法来构造一致的三角剖分和 2D 网格。 通过细化约束边直到它们成为 Delaunay 边,从约束 Delaunay 三角剖分中获得符合要求的 Delaunay 三角剖分。 通过进一步细化受约束的边缘直到它们成为 Gabriel 边缘来获得一致的 Gabriel 三角剖分。 该软件包还提供了一个 2D 网格生成器,用于细化三角形和约束边缘,直到满足用户定义的三角形尺寸和形状标准。 生成的网格可以使用 Lloyd 算法进行优化,此包中也提供了该算法。 该包可以处理相交的输入约束,并且对共享一个端点的两个约束所形成的角度没有限制。
3D 表面网格生成
这个包提供了生成插入平滑表面的表面网格的功能。 网格划分算法基于 Delaunay 细化,并为生成的网格提供了一些保证:用户能够控制网格元素的大小和形状以及曲面逼近的准确性。 输入表面的拓扑和组件数量没有限制。 表面网格生成器也可用于非光滑表面,但不能保证。 目前,提供了被描述为一些函数的零级集的隐式表面和被描述为三维图像中的灰度级集的表面的实现。
3D 皮肤表面网格化
该软件包允许构建皮肤表面的三角形网格。 皮肤表面用于对生物计算中的大分子进行建模。 表面由一组代表分子原子的球和一个收缩因子定义,该收缩因子确定将球粘合在一起的平滑补丁的大小。 对于进一步分析和快速可视化,通常需要构建光滑皮肤表面的三角形网格。 这个包提供了从一组球和一个收缩因子构造一个近似皮肤表面的三角形网格的功能。 它还包含有效细分网格的代码。
3D 网格生成
该软件包专门用于生成离散化 3D 域的各向同性单纯网格。 要网格化的域是必须有界的 3D 空间区域。 该区域可以连接或由多个组件组成和/或细分为多个子域。 域是作为能够回答域上几种不同类型查询的预言机输入的。 边界和细分曲面是光滑或分段光滑的曲面,由平面或曲面片组成。 表面可能表现出 1 维特征(例如折痕边缘)和 0 维特征(例如,作为角尖、尖点或飞镖的奇异点),它们必须在网格中相当近似。 可选地,这些算法支持多核共享内存架构,以利用可用的并行性。
四面体网格重新划分
该软件包提供了重新划分四面体网格的功能,针对二面角的高质量网格。 这种实用的迭代重新划分网格算法旨在重新划分多材料四面体网格,通过在拉普拉斯平滑之后迭代执行一系列基本操作,例如边缘分裂、边缘折叠、边缘翻转和顶点重定位。 该算法可生成具有所需网格密度的高质量均匀各向同性网格,同时保留输入的几何曲线和曲面特征。
3D 周期性网格生成
该软件包专门用于生成离散化周期性 3D 域的各向同性单纯网格。 要划分网格的域是三维平面环面的一个区域。 周期性网格生成器为用户提供与 3D 网格生成包相同的灵活性。
形状重建
鱼面重建
这个包实现了一种表面重建方法:Poisson Surface Reconstruction。 它将一组具有定向法线的点作为输入,并计算一个隐式函数。 然后可以使用 CGAL 表面网格生成器从该函数中提取等值面。
尺度空间曲面重建
此方法允许使用 alpha 形状或先进的前表面重建方法来重建插入一组 3D 点的表面。 输出对点集进行插值(与近似点集相反)。 表面如何连接点取决于尺度变量,可以半自动估计。
推进前表面重建
这个包提供了一种贪心算法,用于从无组织的点集进行表面重建。 从种子面开始,通过逐个添加 Delaunay 三角形来生成分段线性曲面。 首先添加最合理的三角形,以避免出现拓扑奇点。
多边形表面重建
这个包提供了一种从点云进行分段平面对象重建的方法。 该方法将分段平面对象的无序点集(以及可选的平面段)作为输入,并输出对输入点集进行插值的轻量级和防水表面网格。 该方法可以处理任意分段平面对象,能够恢复清晰的特征,并且对噪声和异常值具有鲁棒性。
最优运输曲线重建
这个包提供了一种算法,可以从平面中的点集重建和简化形状,可能会受到噪声和异常值的阻碍。 它生成一组线段和孤立点作为输出,它们近似于输入点集。
几何处理
多边形网格处理
这个包提供了多边形网格处理的方法和类的集合,从简单的基本操作到复杂的几何处理算法。
3D 曲面细分方法
细分方法递归地细化控制网格并生成接近极限表面的点。 该软件包由四种流行的细分方法及其细化宿主组成。 支持的细分方法包括 Catmull-Clark、Loop、Doo-Sabin 和 3–√ 细分。 它们各自的细化宿主是 Pqq、Ptq、Dqq 和 3–√ 细化。 通过替换细化主机的几何计算,可以轻松扩展这些方法的变体。
三角面网格分割
这个包提供了一种生成三角表面网格分割的方法。 该算法首先计算所有面的形状直径函数 (SDF),并在这些值上应用基于图形切割的算法。 提供了低级功能,以用自定义步骤替换任何中间步骤。
三角面网格简化
这个包提供了一种算法来通过边缘折叠来简化三角表面网格。 用户可以定义成本、约束和放置策略来决定何时以及如何折叠边。 默认情况下提供了一些策略,例如 Turk/Lindstrom 和 Garland-Heckbert 无记忆方法。
三角面网格变形
这个包提供了表面网格变形算法,它在表面网格的某些顶点的位置约束下为表面网格的顶点提供新的位置,而不需要除表面网格本身之外的任何其他结构。
三角面网格参数化
参数化表面相当于找到从合适的域到表面的一对一映射。 在这个包中,我们专注于与圆盘同胚的三角曲面以及到平面域的分段线性映射。 这个包实现了几种表面网格参数化方法,例如尽可能刚性参数化、离散真实参数化、离散保形映射、浮动均值坐标、最小二乘保形映射、Orbifold Tutte 嵌入或 Tutte 重心映射。 该代码是通用的,适用于 FaceGraph 概念的任何模型。
三角面网格最短路径
该软件包提供了在三角表面网格上计算测地线最短路径的方法。 所使用的算法基于 Xin 和 Wang [14] 的论文。 这个包的输入可以是 FaceListGraph 概念的任何模型。
三角面网格骨架化
该软件包为基于平均曲率流的无边界三角多边形网格提供 (1D) 曲线骨架提取算法。 这个骨架的特殊之处在于它捕获了输入的拓扑结构。 对于每个骨架顶点,可以从输入网格中获取它的位置和对应的顶点。 该代码是通用的,适用于 FaceListGraph 概念的任何模型。
三角面网格逼近
这个包实现了变分形状近似方法,通过更简单的表面三角形网格来近似输入表面三角形网格。 该算法通过三角形的迭代聚类进行,聚类过程随机、增量或分层播种。 虽然默认函数运行算法的自动版本,但可以通过类接口进行交互控制。 API 很灵活,可以扩展到用户定义的代理和错误指标。
三角曲面网格上波峰和波谷的逼近
与曲率极值相关的全局特征编码用于分割、配准、匹配和表面分析的重要信息。 给定局部微分量的逐点估计,这个包允许在三角表面网格上近似微分特征。 这种与曲率相关的特征是曲线:波峰,以及点:波谷。
点采样曲面局部微分性质的估计
对于离散为点云或网格的表面,需要估计逐点微分量。 更准确地说,一阶属性对应于法线或切平面; 二阶属性提供主曲率和方向,三阶属性提供主曲率沿曲率线的方向导数,等等。这个包允许从点样本估计表面的局部微分量。
3D 点集
该组件为用户提供了灵活的 3D 点集数据结构。 用户可以定义所需的任何附加属性,例如法线向量、颜色或标签。 CGAL 算法可以很容易地应用于这种数据结构。
点集处理
这个 CGAL 组件实现了分析和处理无组织点集的方法。 输入是一个无组织的点集,可能具有正常属性(无方向或有方向)。 可以分析点集以测量其平均间距,并通过专门用于简化、异常值去除、平滑、法线估计、法线方向、特征边缘估计和配准的函数进行处理。
形状检测
这个包实现了用于检测具有无方向法线的无组织点集中的任意形状的 Efficient RANSAC (RANdom SAmple Consensus) 方法和用于检测一组任意项目中的形状的区域增长方法。 使用 Efficient RANSAC 方法,可以检测到五种标准形状:平面、球体、圆柱体、圆锥体和圆环。 如果用户给定自定义形状类,则可以检测到其他形状。 对于区域增长方法,该包提供了三个特定的形状检测组件:检测 2D 点集中的线、检测 3D 点集中的平面以及检测多边形网格上的平面。
流线的 2D 放置
可视化矢量场对于许多应用领域都很重要。 一个很好的方法是生成描述流动行为的流线。 这个包实现了“最远点播种”算法,用于在 2D 矢量场中放置流线。 它使用指定的分离距离生成与输入流相对应的流线列表。 该算法使用 Delaunay 三角剖分对对象进行建模并处理不同的查询,并依靠选择最大空圆的中心来开始流线的集成。
分类
该组件实现了一种算法,将数据集分类为用户定义的标签集(例如地面、植被、建筑物等)。 提供了一个灵活的 API,以便用户可以对任何类型的数据进行分类,在输入数据集上计算自己的本地特征,并定义自己的标签。
热法
该软件包提供了一种算法,该算法通过返回三角形网格的所有顶点到给定源顶点集中最近顶点的测地距离近似值来解决单源或多源最短路径问题。
表面网格拓扑
该软件包提供了一个工具箱,用于从拓扑的角度操作组合曲面上的曲线。 提出了两个主要功能。 一种是计算不能连续变形到一个点的最短曲线。 这包括计算组合曲面的顶点-边图的所谓边宽和面宽。 另一个功能是同伦测试,用于确定组合曲面上的两条给定曲线是否可以连续变形为另一条。
空间搜索和排序
2D 范围和邻居搜索
该包支持圆形、三角形和等矩形范围搜索查询以及 2D 点集上的 (k) 最近邻搜索查询。 与空间搜索包相比,此包使用 Delaunay 三角剖分作为基础数据结构。
间隔跳过列表
区间跳过列表是一种数据结构,用于查找包含一个点的所有区间,以及用于插入查询,即回答给定点是否包含在区间中的问题。 对于三角地形,这允许快速识别与等值线相交的三角形。
dD 空间搜索
该包通过提供范围搜索、k-最近和 k-最远邻居搜索以及增量最近和增量最远邻居搜索的精确和近似算法来实现精确和近似距离浏览,其中查询项是 dD 欧几里得空间中的点。
dD 范围和段树
范围树和线段树允许对点集执行窗口查询,并枚举包围查询点的所有范围。 提供的数据结构是静态的,并且针对快速查询进行了优化。
dD 等向框的相交序列
一种有效的算法,用于查找大量等向框的所有相交对,以便在它们上应用用户定义的回调。 通常,这些框将是更复杂几何形状的边界框。 该算法对于表面等的(自)相交测试很有用。
3D 快速相交和距离计算
AABB(轴对齐边界框)树组件提供静态数据结构和算法,以对有限的 3D 几何对象集执行高效的相交和距离查询。
四叉树、八叉树和正交树
Orthtree 包提供了一种细分空间的数据结构,专门针对 2D(四叉树)和 3D(八叉树),以及用于操作这些结构的算法集合。
空间排序
该软件包提供了用于在二维、三维和更高维度(包括在球体上)对几何对象进行排序的功能,以提高增量几何算法的效率。
最佳边界框
这个包提供了计算围绕点集或多边形网格的紧密定向边界框的功能。
几何优化
包围体
这个包提供了用于计算点集的最佳边界体积的算法。 在 d 维空间中,可以计算最小的封闭球体、椭圆体(近似)和环面。 在 3 维空间中,最小的封闭条也是可用的,在 2 维空间中,有许多附加体积的算法(矩形、平行四边形、k=2、3、4 轴对齐的矩形)。 最小封闭球算法也可以应用于一组 d 维球体。
内接区域
这个包提供了计算内接区域的算法。 计算内接面积的算法是:凸点集的最大内接 k 边形(面积或周长)和最大内接等矩形。
最佳距离
该软件包提供了用于计算 d 维空间中两个点集的凸包之间距离的算法,而无需显式构造凸包。 它进一步提供了一种算法来计算点集的宽度,以及凸多边形的每个顶点的最远点。
主成分分析
这个包提供了计算一组 2D 或 3D 对象形状的全局信息的函数。 它提供了点集的轴对齐边界框和加权点集的重心的计算。 此外,它还为点集以及其他有界对象集提供质心(质心)和线性最小二乘拟合计算。 更具体地说,可以将 2D 线拟合到 2D 段、圆、圆盘、iso 矩形和三角形,以及将 3D 线或 3D 平面拟合到 3D 段、三角形、iso 长方体、四面体、球体和球。 这些函数的通用接口采用对象的迭代器范围。
插值
2D 和表面函数插值
这个包实现了分散数据插值的不同方法:给定函数在一组离散数据点上的度量,任务是在任意查询点上插值这个函数。 该软件包还提供了自然邻域插值的功能。
二维广义重心坐标
包 2D Generalized Barycentric Coordinates 提供了为简单二维多边形定义的二维封闭形式广义重心坐标的有效且稳健的实现。 如果需要关于多元散点而不是多边形的坐标,请参考 Package 2D 和 Surface Function Interpolation 中的自然邻域坐标。
支持库
CGAL 的 STL 扩展
CGAL 是本着通用编程范式的精神设计的,可与标准模板库 (STL) 一起工作。 这个包提供了 STL 标准中没有的非几何类 STL 算法和数据结构,以及改变断言失败行为的函数。
CGAL 和 Boost 图形库
这个包提供了一个框架,用于将 CGAL 数据结构与 Boost Graph Library 或简称 BGL 的算法接口。 它允许直接在作为 BGL 图概念模型的 CGAL 数据结构上运行图算法,例如 Delaunay 三角剖分上的最短路径算法,以计算欧几里得最小生成树。 此外,它引入了几个描述半边数据结构的新图概念。
CGAL 和Solvers
该软件包提供了用于求解具有密集或稀疏矩阵的线性系统、具有或不具有约束的混合整数规划 (MIP) 问题的概念和模型。
CGAL 和 Boost 属性映射
这个包提供了一个框架,用于将 CGAL 数据结构与期望 Boost Property Maps 的算法连接起来。
锥形扳手
这个包提供了用于构造两种基于锥的扳手的函子:Yao 图和 Theta 图,给定平面上的一组顶点和锥边界的方向。 支持精确和不精确的结构。 在精确构造中,圆锥边界是使用多项式的根来计算的,从而避免了无法精确表示的 π 的使用。 在不精确的构造中,锥体边界是使用 CGAL 中定义的近似 π 值计算的,这对于大多数应用来说仍然足够准确。 此外,出于可视化目的,这个包提供了一个全局函数来生成 Gnuplot 用来绘制构建图的数据和脚本文件。 该软件包还提供了 Half Yao 图和 Half Theta 图的选项。
把手和循环器
这个包为几何对象提供了多种生成器。 它们可用作合成测试数据集,例如 用于测试退化对象集的算法和性能分析。
分析工具、哈希映射、联合查找、修饰符
这个包提供了用于分析时间和内存消耗、分析宏、哈希映射、联合查找数据结构和修饰符的类。
输入输出流
CGAL 内核中的所有类都为 I/O 流提供输入和输出操作符。 这种操作符的基本任务是生成一个对象的表示,该表示可以写为设备上的字符序列,如控制台、文件或管道。 在 CGAL 中,我们区分原始 ascii、原始二进制和漂亮的打印格式。
可视化
Geomview
该软件包实现了 Geomview 的接口,这是一个交互式 3D 查看程序,最初是在明尼阿波利斯的几何中心开发的。
CGAL 和 Qt 图形视图框架
该包提供了用于在 Qt 5 图形视图框架中显示 CGAL 对象和数据结构的类。
CGAL Ipelets
这个包提供了一个通用框架,可以使用 CGAL 为 Ipe 可扩展绘图编辑器轻松编写 ipelets(插件)。