Delaunay三角化算法

1、首先了解一下什么是Delaunay三角网

Delaunay三角剖分是前苏联数学家 Delaunay在 1934年提出的:对于任意给定的平面点集 ,只存在着唯一的一种三角剖分方法 ,满足所谓的“ 最大 — 最小角 ” 优化准则 ,即所有最小内角之和最大 ,这就是 Delaunay三角剖分。这种剖分方法遵循“ 最小角最大 ” 和“ 空外接圆 ” 准则
“ 最小角最大 ” 准则是在不出现奇异性的情况下,Delaunay三角剖分最小角之和均大于任何非 Delaunay剖分所形成三角形最小角之和 ,三角形的最小内角之和最大 ,从而使得划分的三角形不会出现某个内角过小的情况 ,比较有利于有限元的后续计算。

“ 空外接圆 ” 准则是 Delaunay三角剖分中任意三角形的外接圆内不包括其他结点。因此 ,在各种二维三角剖分中 ,只有 Delaunay三角剖分才同时满足全局和局部最优。

2、Delaunay区域增长算法

  • 建立第一个三角形

         选择第一个顶点,第一个顶点作为p1;

         选择第二个顶点,距离p1最近的顶点,记为p2;

         选择第三个顶点,和p1 p2构成的三角形的外接圆没有其他顶点,并且该三角形中点p3所在的三角形内角最大

         生成三个边,加入边表;

         生成第一个三角形,组建三角形表;

  • 扩展三角形网格

          从边表头选择一个边,标志位为假(表示目前仅仅存在于一个三角形中);

          从点链表中搜索一个符合下述条件的点:

          在边所在三角形中第三个点的对侧;

          该点和该边构成的三角形的外接圆中没有其他点;

          满足上述条件的点在新三角形中的内角最大的点作为p3;

          如果边表中没有新生的边,将其加入边表尾,并设置标志位维false;如果已经存在,则设置其标志位为true;

          将生成的三角形加入三角形表;

          将从边表头选择的那条边标志位设为true;

           转至该过程的第一步,直至所有的边的标志位均为true;

注:如果需要进行限制三角剖分,则可利用重心法取出不要的三角形,必要时,可对边界进行限制,不让生成的边与边界相交

2、Delaunay三角化的实现算法

一般都会用到的局部最优化(LOP)处理:

        将两个具有公共边的三角形合并成一个凸多边形

        以最大空外接圆为准则,观察第四个顶点是否在三角形的外接圆之内

        如果在,修正对角线,对调对角线,优化结束

Delaunay三角化算法_第1张图片

Delaunay三角形只是一种三角化的标准,实现方法有多种:,这里笔者只介绍两种逐点插入的两种实现算法

  • Lawson算法

    这是一种逐点插入的方法

    基本原理是建立一个大的三角形或者多边形,将所有数据点包围起来,插入一点,将其和所在三角形的三个顶点进行连接,形成三个新的三角形,对于新三角形进行空外接圆检测,局部最优处理;

    这种算法的基本步骤:

          构造一个超级三角形,包含了所有数据点,放入三角形list;

          将数据点中散点依次逐个加入,找到该点所在的三角形,将该点和所在三角形顶点进行连接,构成三个小三角形;

          计算每个小三角形的外接圆,如果外接圆中均不包含其他点,则进入下一步,插入新顶点;如果某个小三角形中包含其他顶点(四个点,两个具有一个公共边的三角形),互换对角线,形成新的三角形,检查新三角形中是否包含其他点,直至所有的都满足空外接圆的条件;

          循环执行上述第二步,直至所有的数据点插入完毕,最后删除超级三角形关联的三角形即可;

  • Bowyer-Watson算法

    这个也是一种逐点插入的三角化方法,,OSG中的DelaunayTriangulator就是使用这种方法

    算法过程步骤:

          构造超级三角形,包围所有数据点;

          依次逐个加入新的顶点,找到包含新顶点的外接圆对应的三角形;

          删除中间的边,围绕新点构成一个凸多边形;

          将新顶点与多边形每一个顶点相连,形成新的三角形;

          返回第二步继续,直至所有顶点增加完毕结束;

     

    Delaunay三角化算法_第2张图片

     

    Delaunay三角剖分算法可以分为针对二维的局部剖分和三维的全局剖分算法。在二维情况下建立的基于简单的三角形构面的方式,而三维情况下则是需要建立基于四面体的方式构造空间曲面。在遇到三维空间散乱点的构面问题时,可以直接采用三维Delaunay剖分,亦可先将三维坐标预处理转换到二维坐标系中,间接的采用二维Delaunay剖分算法,这里我选择简单的第二种方式。

 

 

 

 

 

你可能感兴趣的:(三维重建之曲面重建)