基于逐点插入的Delaunay三角化算法原理


一、Lawson算法

Lawson算法是一种基于点插入的Delaunay三角剖分算法。该算法通过不断地向剖分中加入点,来逐步构建整个Delaunay三角剖分。该算法思路简单,易于编程实现。

​Lawson算法基本原理为:首先建立一个大的三角形或多边形,把所有数据点包围起来,向其中插入一点,该点与包含它的三角形三个顶点相连,形成三个新的三角形,然后逐个对它们进行空外接圆检测,同时用Lawson设计的局部优化过程LOP进行优化,即通过交换对角线的方法来保证所形成的三角网为Delaunay三角网。

​Lawson算法中的局部优化过程(LOP:Local Optimization Procedure)是逐点插入法的关键,局部优化过程的思路是,如果一个三角形不符合Delaunay三角剖分的规则,则将一个包含一对三角形的四边形的对角线对换,从而构成符合Delaunay三角剖分的新三角形。简单来说,Lawson算法通过不断地将剖分中非Delaunay边上的点进行“翻转”,使得该边成为Delaunay边,直到所有边都是Delaunay边为止。

​该算法基于散点的构网算法理论严密、唯一性好,网格满足空圆特性,是一种比较理想的算法。其逐点插入的构网过程中如果遇到非Delaunay边时,可以通过删除调整,进而构造形成新的Delaunay边。在完成构网后,增加新点时,无需对所有的点进行重新构网,只需对新点的影响三角形范围进行局部构网。但是在实际应用当中,点集数量较大,分布复杂时构网速度较慢,而且对于区域为非凸,存在内环时,则会产生非法三角形。

具体实现步骤如下:

a) 构建包含所有点的超级三角形(super triangles)T(p0p1p2),将超级三角形加入T中构成初始三角剖分。

在这里插入图片描述

b) 将点集P中的顶点Pr逐一插入现有的三角剖分T 中,并进行如下调整:

➤定位包含点Pr的三角形PiPjPk;

➤若插入的顶点pr位于三角形PiPjPk内部,将pr与三角形的三个顶点连接,生成三条边,从而将三角形PiPjPk一分为三。

➤若pr 正好落在三角形PiPjPk 的某一条边上(假设为PiPj),找到与与PiPj关联的另一三角形的第四个顶点Pl,将Pr 分别与Pl、Pk 联接起来,从而将与PiPj相关联的两个三角形划分成四个三角形;

在这里插入图片描述

➤分别检查新生成的边是否满足Delaunay准则(空圆性),若不满足则进行翻转边操作(将坏边PiPj翻转为PrPk),翻转后对新生成的变也进行空圆检测,若存在坏边则继续翻转,直到没有坏边为止。

在这里插入图片描述

c) 将与超级三角形顶点p-1, p-2, p-3 以及与之关联的所有边都删除,则剩下的三角形就构成点集P的Delaunay三角剖分T。

二、Bowyer-Watson算法

Bowyer算法由英国Bath大学的Bowyer在1981年提出。算法首先构造离散点集的的若干离散点的Voronoi图,根据Voronoi领域准则连接临近点,得到初始Delaunay三角剖分,然后逐步加入剖分点,每加入一个点就对已有的Voronoi图进行修改,构造新点集的Voronoi图,直到所有点都插入完毕。

Watson算法由澳大利亚悉尼大学Watson在1981年提出。算法采用空外接圆准则,直接从三角剖分入手。算法从初始三角划分开始,每加入一个离散点,找出所有外接圆包含此点的三角形,删除这些三角形面向该插入点的边,得到包含此点的多边形,将此点与多边形的定点连接就构成新的Delaunay三角剖分,重复此过程直至所有点插入完毕为止。注意,此算法当四点或以上共圆时将产生错误。

Bowyer-Watson算法是根据上述两者算法相互补充改进得到的,仍然是一种插点增量算法的一种。其主要思想是通过不断地删除不符合Delaunay条件的三角形来构建整个剖分。具体来说,Bowyer-Watson算法插入点时判断网格中的三角形的外接圆是否包含该点,如果是,则删除该三角形,并用该点和剩余的边构造新的三角形,直到所有点都被加入到剖分中为止。

具体实现步骤如下:

a) 构建初始超级三角形,包含所有散点,放入三角形链表(同Lawson算法);

b) 将点集P中的顶点逐一插入现有的三角剖分中,在三角形链表中找出其外接圆包含插入点的三角形(称为该点的影响三角形),删除影响三角形的公共边,将插入点同影响三角形的全部顶点连接起来,从而完成一个点在Delaunay三角形链表中的插入;

在这里插入图片描述

c) 将与超级三角形顶点以及与之关联的所有边都删除。

总结

由于Delaunay三角剖分的唯一性,两种算法在效果上没什么区别。但Bowyer-Watson算法因为缩短了搜索坏边的过程,效率更高一些,所以在实际应用中我们往往会使用Bowyer-Watson算法。


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sankingvenice

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值