CGAL的3D多面体的Minkowski和

CGAL的3D多面体的Minkowski和_第1张图片

一把勺子和一颗星星的闵可夫斯基总和。  

1、介绍

CGAL的3D多面体的Minkowski和_第2张图片

        机器人能进入房间吗?倒立机器人和障碍物的Minkowski和描述了机器人相对于障碍物的非法位置。由于Minkowski总和的边界描述了合法位置,因此机器人在外部区域和房间之间有一条路径。 

        Minkowski和在几何学中是一个重要的概念,尤其在计算几何和计算机图形学中。对于两个点集P和Q,它们的Minkowski和被定义为P⊕Q={p+q∣p∈P,q∈Q}。这个概念的应用非常广泛,例如在机器人运动规划和计算机辅助设计中都有使用。

        在图2中,展示了一个使用Minkowski和规划机器人运动的例子。我们想知道机器人的哪些位置是合法的,以及机器人从指定起始位置可以移动到哪里。如果我们将机器人和障碍物都建模为多面体,并计算机器人(关于原点反射的机器人)和障碍物的Minkowski和,那么这个Minkowski和就代表了机器人所有非法位置,即机器人与障碍物相交的所有位置。当然,这个多面体的补集描述了机器人所有合法的位置,即机器人没有与障碍物相交的所有位置。

        换句话说,通过计算Minkowski和,我们可以快速地确定机器人在其环境中可以安全到达的位置,以及需要避免与障碍物相交的位置。这在机器人导航、游戏物理引擎和许多其他领域中都是非常有用的技术。

2、分解法

        计算非凸多面体的Minkowski和的分解方法利用了凸多面体的闵可夫斯基和很容易计算的事实。它将两个多面体分解为凸块,计算凸块的所有成对Minkowski和,并合并成对和。

CGAL的3D多面体的Minkowski和_第3张图片

该分解方法将两个输入多面体分解为凸部分,计算凸部分的所有成对Minkowski和,并合并成对和。 

        Minkowski和的计算本质上是复杂的。使用分解法,每个多面体可能被划分为二次数量的碎片,这是最坏情况下的最优解。然后最多需要进行n2m2对的求和和合并,其中n和m是两个输入多面体的复杂性(Nef_polyhedron_3的复杂性是其Vertices、Halfedges和SHalfedges的总和)。总的来说,操作在O(n3m3)时间中运行。

3、功能和限制

        这个包的编写是为了计算全维多面体的Minkowski和,即使在所谓的紧通过场景中也能计算。紧通过场景发生在机器人运动规划中,即机器人需要穿越的通道宽度与机器人自身宽度相同。在这些场景中,至少有一个多面体(障碍物或机器人)必须建模为开放集。然后,Minkowski和也将是一个开放集,并且紧通过将作为低维度的排除出现,即与周围体积相比,不是结果点集一部分的面、线或顶点。图2显示了这样一个紧通过场景。

        我们的实现使用Nef_polyhedron_3来建模输入多面体和结果多面体。Nef_polyhedron_3的实例代表三维空间的细分,包括顶点、边缘、面和体积。其中一些项目形成多面体(选定),而其他项目则代表多面体外围的体积或孔洞(未选定)。例如,单位立方体是点集[0,1]3。表示单位立方体的最小细分有8个顶点、12条边、6个面和2个体积。由顶点、边缘和面围成的体积是立方体的内部,因此被选定。立方体外围的体积不属于它,因此被未选定。顶点、边缘和面(也称为边界项)用于分隔两个体积,但也有助于表示拓扑属性。对于(封闭)单位立方体,边界项是多面体的部分,因此被选定,但对于开单位立方体[0,1)3,它们被未选定。每个项目都有自己的选择标记,这允许正确表示在布尔和拓扑操作下封闭的Nef多面体。详情请参阅第3D章Nef多面体的3D布尔操作。

        使用Nef_polyhedron_3可以模拟许多场景,而不仅仅是两个实体的Minkowski和。首先,它们可以模拟紧通过场景的输入和结果,即它们可以模拟作为输入模型所需的开放和封闭实体,并且可以模拟作为未选定面、边缘和顶点的低维排除的紧通过。我们致力于将该包扩展为适用于任意3D Nef多面体。除了两个实体的Minkowski和外,我们还添加了几个特性。目前,我们允许输入多面体由以下组成:奇异顶点、奇异边缘、没有洞的凸起表面、没有洞的凸起面、三维特征,其共面面具有共同的选择标记(这包括开放和封闭实体)

        从不同的角度来看,实现受到以下限制:

        输入多面体必须是有界的(选定的外部体积被忽略)。

        全维特征的所有共面面集必须有相同的选择标记(如果有不同的选择标记,则假定未选定)。

        低维特征的所有面必须是凸起的,并且不能有洞(非凸起的面和洞被忽略)。

        第二个限制可能看起来有点奇怪。它源于以下事实:凸多面体的Minkowski和只能处理侧面由单个面组成的聚合物。分解过程通常会产生凸部分、其相邻凸部分和外部体积之间的复杂邻接关系。然后,凸块的一侧被分解成几个面,每个面表示这些邻接关系之一。对于凸Minkowski和,我们忽略了侧面的分解,但需要找到一个共同的选择标记。如果有两个与外部体积相邻的面,但具有不同的选择标记,我们无法设置一个共同的选择标记而不破坏Minkowski和的正确性。

4、使用

        函数minkowski_sum_3()应与Exact_predicates_exact_constructions_kernel一起使用,这通常是最有效的选择,并允许浮点输入。

        以下示例代码说明了函数minkowski_sum_3()的用法。请注意,如果函数是非凸的,则输入多面体将被函数修改。因此,如果需要进一步使用它们,则需要首先进行复制。函数本身不进行复制,以尽可能减少内存使用。

  Nef_polyhedron result = CGAL::minkowski_sum_3(N0, N1);

5、其他

CGAL的3D多面体的Minkowski和_第4张图片

沿着多边形路径移动的恒星扫过的区域。 

        使用函数minkowski_sum_3(),还可以实现其他有趣的几何运算,如滑动运算,该运算计算沿多边形路径移动的多面体扫过的点集。

        Minkowski和是这样定义的:对于两个点集A和B,Minkowski和是一个新的点集,这个点集中的每个点都是A和B中对应点的向量和。

        假设第一个点集A有10个点,记作A_1, A_2, ..., A_10。

        假设第二个点集B有8个点,记作B_1, B_2, ..., B_8。

        对于Minkowski和,每个点C_i (i=1,2,...,18) 是这样计算的:C_i = A_i + B_i。

        所以,Minkowski和的点集将包含10+8=18个点。每个点都是A和B中对应点的向量和。现在我们来计算Minkowski和的具体点。计算结果为:Minkowski和的点集有80个点。每个点是A和B中对应点的向量和。

CGAL 5.6 - 3D Minkowski Sum of Polyhedra: User Manual

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