CGAL的2D Alpha Shapes

CGAL的2D Alpha Shapes_第1张图片

 

        假设我们给定一个二维或三维的点集S,我们希望得到类似“这些点形成的形状”的东西。这是一个相当模糊的概念,可能有许多可能的解释,α-形状就是其中之一。α-形状可用于从密集的无组织数据点集进行形状重建。事实上,α-形状由边界划分,边界是原始形状的线性近似。

        正如Edelsbrunner和Mücke的论文中提到的,我们可以直观地认为α-形状如下。想象一个巨大的冰淇淋块占据了空间R3,并且包含点作为“硬”巧克力块。使用其中一个球形冰淇淋勺,我们挖出冰淇淋块的所有部分,我们可以在不碰到巧克力块的情况下挖出冰淇淋块的所有部分,从而甚至可以在内部挖出孔(例如,仅通过从外面移动勺子无法到达的部分)。我们最终会得到一个由帽、弧和点包围的(不一定是凸的)物体。如果我们现在将所有“圆形”面拉直为三角形和线段,我们直观地描述了所谓的S的α-形状。上图提供了二维(我们的冰淇淋勺只是一个圆)中这个过程的一个例子。

        α 形状取决于一个参数 α,之后它们被命名。在上面的冰淇淋类比中,α 是雕刻勺的平方半径。一个非常小的值将允许我们吃掉除巧克力点本身以外的所有冰淇淋。因此,我们已经看到 α 形状在 α→0 时退化为点集 S。另一方面,α 的巨大值将阻止我们甚至在两点之间移动勺子,因为它太大。所以我们永远不会用勺子吃掉 S 的凸包内部的冰淇淋。因此,α 形状在 α→∞ 时变成 S 的凸包。

        CGAL的Alpha复杂体库提供2D和3D的Alpha复杂体。GUDHI库提供dD Alpha复杂体。

1、定义

        我们区分了两种版本的alpha形状。基本alpha形状基于Delaunay三角剖分。加权alpha形状基于其推广,即正则三角剖分(参见正则三角剖分一节),用加权点的幂代替欧几里得距离。

        α 形与底三角剖分之间存在密切联系。更准确地说,S 的 α-复形是 S 的底三角剖分的子复形,包含 α-暴露的 k-单形,0≤k≤d。如果存在一个半径为 α-√ 的开圆盘(或球),通过单形的顶点,并且不包含 S 的任何其他点,则该单形被称为 α-暴露的。对于底三角剖分计算中使用的度量,相应的 α 形被定义为 α-复形的底内空间(参见[2])。

        一般来说,α-复形是一个非连通且非纯的多面体,这意味着一个0≤k≤d-1的k-单形不一定与一个(k+1)-单形相邻。

        S的α-形状形成了一个离散族,即使它们是针对0≤α≤∞的所有实数α定义的。因此,我们可以利用S的底层三角划分来表示S的整个α-形状族。在这种表示中,底层三角划分的每个k-单纯形都与一个区间相关联,该区间指定了k-单纯形属于α-形状的α值。基于这一事实,α-形状族可以相对容易地高效计算。此外,我们可以从有限数量的不同α-形状和相应的α值中选择一个合适的α-形状。

2、功能

        类Alpha_shape_2

表示平面中所有正α的点α-形状族。它维护着底层三角剖分Dt,该三角剖分表示其面平方半径之间的连通性和顺序。Dt的每个k维面与一个区间相关联,该区间指定该面属于α-形状的α值。区间与三角剖分的k维面之间存在联系。

        类Alpha_shape_2

提供设置和获取当前α值的函数,以及枚举α值变化的迭代器。

        它提供了迭代器来枚举α-形状中的顶点和边,以及允许根据α-形状对顶点、边和面进行分类的函数。它们可以在属于或不属于α-形状的面内部。它们可以是奇异/规则的,即在α-形状的边界上,但不与α-复合体的三角形相交/相交。

        最后,它提供了一个函数来确定α值,使得α形状满足以下两个性质,或者如果没有这样的α值同时满足这两个性质,则至少满足第二个性质:

        组件数量等于您选择的数量,以及

        所有数据点要么在边界上,要么在α-形状的正则化版本内部(没有奇异边缘)。

        当前的实现是静态的,也就是说,在构造之后,点不能被插入或删除。

3、概念和模型

        我们目前没有为基础三角测量类型指定概念。适用于基本alpha形状的模型是使用Delaunay三角剖分模板的类Delaunay_triangulation_2、Periodic_2_Delaunay_triangulation_2和triangulation_hierarchy_2。适用于加权阿尔法形状的模型是类Regular_triangulation_2。

3.1、Alpha Shapes

        三角剖分需要一个几何特征类作为参数。这个类的要求在非加权情况下的概念AlphaShapeTraits_2和加权情况下的概念WeightedAlphaShapeTraits_2中进行了描述。所有CGAL内核都是这两个概念的模型。

        三角剖分的三角剖分数据结构必须是概念 TriangulationDataStructure_2 的模型,其顶点和面类分别是概念 AlphaShapeVertex_2 和 AlphaShapeFace_2 的模型。类 Alpha_shape_vertex_base_2 和 Alpha_shape_face_base_2 是这些概念的模型,可用于所有类型的 alpha 形状,只要适当地选择模板参数 Vb 和 Fb,正如我们将在下一节中看到的那样。

3.2、三角剖分数据结构

        当使用加权或周期三角剖分作为基础三角剖分时,需要额外的要求:

        使用加权三角化(Regular_triangulation_2)时,顶点和面类必须分别为AlphaShapeVertex_2和RegularTriangulationVertexBase_2的模型,以及AlphaShapeFace_2和RegularTriangulationFaceBase_2的模型。

        使用周期三角剖分(Periodic_2_Delaunay_triangulation_2)时,顶点和面类必须分别是AlphaShapeVertex_2和Periodic_2TriangulationVertexBase_2的模型,以及AlphaShapeFace_2和Periodic_2TriangulationFaceBase_2的模型)。

4、其他

        CGAL中的Alpha_shape_2是一个类,它表示二维点集的α-形状。α-形状是一种由点集形成的几何结构,它保持了点集的形状和边界,但可能会收缩或扩展以使边界更平滑。

        Alpha_shape_2类提供了各种功能和操作,以处理和管理二维点集的α-形状。它可以计算给定点集的α-形状,并根据给定的α值对点集进行平滑处理。

        使用Alpha_shape_2类时,通常需要先创建一个Alpha_shape_2对象,并为其提供点集作为输入。然后,可以使用该对象的方法来计算α-形状,并获取有关该形状的信息。

        基本的alpha形状需要Delaunay三角剖分作为基础三角测剖分Dt。Delaunay三角剖分类是用几何和三角剖分数据结构特征参数化的。

        对于几何特征类,我们可以使用CGAL核。

        对于三角测量数据结构特征,我们必须选择alpha形状所需的顶点和面类,即alpha_shape_vertex_base_2和alpha_sShape_face_base_2。参数Vb和Fb必须由作为TriangulationVertexBase_2和TriangulationFaceBase_2概念的模型的类来填充。类Triangulation_vertex_base_2和Triangulation_face_base_2符合这些要求。

        加权alpha形状需要一个规则三角剖分作为底层三角剖分Dt。在这里,我们可以使用顶点和面Alpha_shape_vertex_base_2和Alpha_shape_face_base_2,但对于加权alpha形状,Vb和Fb必须是规则三角剖分顶点基_2和规则三角剖分面基_2概念的模型。 Regular_triangulation_vertex_base_2 Regular_triangulation_face_base_2类符合这些要求。

        请注意,没有特殊的加权alpha形状类。

        为了定义原始域并受益于周期性三角剖分计算的内置启发式优化,建议先构建三角剖分,然后再从中构建alpha形状。也可以使用采用点范围的alpha形状构造函数,但在这种情况下,无法指定原始域,将选择默认单位立方体,并且不使用任何优化。

        如果可能的话,建议将三角剖分切换为单片覆盖。请注意,在 9 片覆盖空间中的周期性三角剖分是退化的。在这种情况下,需要使用精确的构造内核来计算α形状。否则,结果将受到舍入问题的困扰。

你可能感兴趣的:(CGAL,算法,几何学)