Delaunay三角剖分算法

2023-09-22 15:01:54

一. 简介

点集的三角剖分(Triangulation),对数值分析(比如有限元分析)以及图形学来说,都是极为重要的一项预处理技术。尤其是Delaunay三角剖分,由于其独特性,关于点集的很多种几何图都和Delaunay三角剖分相关,如Voronoi图,EMST树,Gabriel图等。Delaunay三角剖分有最大化最小角,最接近于规则化的三角网和唯一性(任意四点不能共圆)两个特性。

Delaunay三角剖分广泛应用于许多不同应用程序中的科学计算。虽然有大量的计算三角剖分的算法,但Delaunay三角剖分以其实用的几何属性广受欢迎。

1.1 三角剖分

三角剖分就是对给定的平面点集,生成三角形集合的过程。考虑平面点集P={P1,…,Pn},我们希望得到三角形集合T=在{t1,…,tm},满足:

  • 所有三角形的端点恰好构成集合P;
  • 任意两个三角形的边不相交(要么重合,要么没有交点);
  • 平面图中所有的面都是三角面,且所有三角形的合集构成P的凸包(convex hull)。

在这里插入图片描述
一般来说,给定一个点集,往往存在不止一个三角剖分。以下图为例,我们只要把第一个三角剖分中的两个相邻三角形的公共边做一次翻转,就可以得到一个新的三角剖分。
在这里插入图片描述
由于给定点集的三角剖分不唯一,我们希望从中挑选出一个“最优”的三角剖分。那么何为最优?这涉及到三角形“质量”的评定。一般在数值计算中,我们不希望三角形过于狭长,也就是说越接近等边三角形越好。以下是几种常见的质量评定标准:

  • 最小角(minimum angle):即所有三角形的内角当中最小的角;
  • 纵横比(aspect ratio):三角形最短边与最长边的比例;
  • 半径比(radius ratio):三角形内接圆半径的两倍与外接圆半径的比例。

1.2 Delaunay三角剖分

所有三角形的外接圆均满足空圆性质的三角剖分,称为一个Delaunay三角剖分。

  1. 空圆性质
    Delaunay三角网是唯一的(任意四点不能共圆),在Delaunay三角网中任一三角形(或边)的外接圆范围内(边界除外)不会有其他点存在。
    在这里插入图片描述
    在这里插入图片描述

左图的三角剖分是Delaunay的,任何一个三角形的外接圆内部都不包含点集中的顶点;
右图的三角剖分不是Delaunay的,因为下面的两个三角形的外接圆内部包含了顶点。

二. Delaunay三角剖分的相关理论

2.1 Delaunay三角形和(局部)Delaunay边的概念

  • 对三角剖分中的一个三角形,如果其外接圆满足空圆性质,称为一个Delaunay三角形
  • 对三角剖分中的一条边,若存在一个外接圆满足空圆性质,称为一条Delaunay边(一条边的外接圆可以是经过这条边两个顶点的任意圆,不唯一);
  • 对三角剖分中的一条属于两个三角形t1,t2的边e,若存在一个外接圆不包含三角形t1,t2中的任何顶点称为局部Delaunay边。若一条边只属于一个三角形,也属于局部Delaunay边。

2.2 Delaunay引理

对一个三角剖分T,以下三个命题互相等价:

  • T中所有三角形均为Delaunay三角形;
  • T中所有三角形的边均为Delaunay边;
  • T中所有三角形的边均为局部Delaunay边。

2.3 翻转边算法(flip algorithm)

定理:对三角剖分T中的一条边e,若它不是局部Delaunay的,则可以被翻转成为一条局部Delaunay边e’。

边的翻转:假设一条边e属于两个三角形t1,t2,这两个三角形的合集所构成的四边形有两条对角线,e为其中一条。现在用另一条对角线e’替换e,得到两个新的三角形t1’,t2’,并用这两个新的三角形替换原三角剖分中的t1,t2,得到新的三角剖分T’。这个操作称为边的翻转。

每进行一次翻转边操作时,都把三角剖分“局部”地改善了。更具体的讲,有以下结论:

  • 最小角增大:翻转边e后的两个相邻三角形的6个内角中的最小角大于等于原先的两个三角形6个内角中的最小角;
  • 外接圆半径缩小:翻转边e后的两个相邻三角形的外接圆半径最大值小于原先的两个三角形外接圆半径的最大值;
  • 四点共圆的情况:若一条边e的两个相邻三角形的顶点A,B,C,D四点共圆,则无论翻转与否,这条边都是局部Delaunay边。

在这里插入图片描述
根据Delaunay引理,对任意一个三角剖分T,只要持续进行上述的翻转边操作,最终总可以转化为一个Delaunay三角剖分。

2.4 Delaunay三角剖分的最优性质

  1. 最大化最小角性质:
    在给定点集P的所有三角剖分中,Delaunay三角剖分得到的最小角是最大的。
  2. 最小化外接圆性质:
    在给定点集P的所有三角剖分中,Delaunay三角剖分得到的最大外接圆半径是最小的。
  3. 若点集P中任意四点不共圆,则存在唯一的Delaunay三角剖分T。若点集P中四点A,B,C,D共圆,且△ABC,△BCD属于Delaunay三角剖分T,那么将边BC翻转后得到的三角剖分T’(包含△ABD,△ACD)同样是一个Delaunay三角剖分。

三. Delaunay三角剖分的构造算法

3.1 Lawson算法

  1. 先计算点集P的包围盒(bounding box),将包围盒的四个顶点加入P中得到P’。根据包围盒生成两个超三角形(super triangles),构成初始三角剖分T0。由于只包含两个直角三角形,T0是(包围盒四个顶点的)一个Delaunay三角剖分。
  2. 将点集P中的顶点逐一插入现有的三角剖分Ti中,并进行如下调整:
  • 设插入的顶点v位于三角形t中,将v与三角形的三个顶点连接,使t分裂为3个三角形t1,t2,t3;
  • 分别检查t1,t2,t3是否满足空圆性质,若不满足则进行翻转边操作,直到没有坏边为止。此时得到一个包含顶点v的新Delaunay三角剖分。
  1. 当最后一个顶点插入到三角剖分中,并且完成所有翻转边操作后,我们得到了点集P’的一个Delaunay三角剖分。现在删除第一步中加入的包围盒的四个顶点,并且去除所有与它们连接的三角形,则剩下的三角形就构成点集P的Delaunay三角剖分T。

3.2 Bowyer-Watson算法

  1. 同Lawson算法
  2. 将点集P中的顶点逐一插入现有的三角剖分中,并进行如下调整:
  • 在现有三角剖分中,所有外接圆包含顶点v的三角形的合集构成一个“星形多边形”。星形多边形的含义是多边形的任何一个顶点到v的连线都在多边形内部。
  • 对于上述星形多边形,将其内部的三角形全部删除,形成一个“空穴”。将空穴边界的顶点与新添加的顶点v连接得到新的三角形,替代剖分中被删除的三角形,此时得到一个包含顶点v的新Delaunay三角剖分。
  1. 同Lawson算法

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

四. 基于Delaunay三角剖分法的网格生成算法

在这里插入图片描述

4.1 Delaunay平面区域网格生成算法

生成三角网格与构造三角剖分的主要区别在于,点集P并非给定,需要自己去生成。而一旦确定了点集P,剩下的工作就是构造三角剖分了。实际上,生成点集P与构造三角剖分的过程是同时进行的,其过程如下:

  • 计算区域的包围盒,生成两个超三角形作为初始三角网格,根据边界曲线生成边界点;
  • 将边界点逐一插入到三角网格中,每一步插入后,用Bowyer-Watson算法得到新的Delaunay三角网格;
  • 将第一步插入的辅助顶点删除(同时删除与其连接的三角形),得到关于全部边界点的Delaunay三角网格(亦即边界点的Delaunay三角剖分);
  • 在区域内部的三角形,根据一定的条件,将重心插入三角网格,并根据Bowyer-Watson算法调整,得到新的Delaunay三角剖分。直到不再有需要插入的重心点,此时得到区域的完整Delaunay三角网格。

在这里插入图片描述

4.2 三维模型的Delaunay三角网格生成算法

  1. 遍历模型的所有边(edge),生成边界点;
  2. 遍历模型的所有面(face),收集其边界点在参数区域的坐标。然后在参数区域上按照上面的算法生成Delaunay三角网格;
  3. 将每个面在参数区域上生成的内部点和三角形投射到三维空间,添加到三角网格中;

这里要注意的是,每个面上的点需要两份编号,一个局部(local)编号用于参数区域上的三角网格,及一个全局(global)编号用于三维空间的整体三角网格。在网格生成过程中需要时刻保持这两种编号的对应关系。

参考文章:
https://zhuanlan.zhihu.com/p/459884570
https://ww2.mathworks.cn/help/matlab/math/delaunay-triangulation.html
https://blog.csdn.net/qq_43258953/article/details/105080150

更多推荐

django_model_一对一映射

settings相关配置#settings.py...DATABASES={'default':{'ENGINE':'django.db.backends.mysql','NAME':'djangos','USER':'root','PASSWORD':'990212','HOST':'localhost','PORT

【TCP】滑动窗口、流量控制 以及拥塞控制

滑动窗口、流量控制以及拥塞控制1.滑动窗口(效率机制)2.流量控制(安全机制)3.拥塞控制(安全机制)1.滑动窗口(效率机制)TCP使用确认应答策略,对每一个发送的数据段,都要给一个ACK确认应答。收到ACK后再发送下一个数据段。这样做有一个比较大的缺点,就是性能较差。尤其是数据往返的时间较长的时候。既然这样一发一收的

大厂超全安全测试--关于安全测试的分类及如何测试

安全测试(总结)1.jsonNP劫持(其实json劫持和jsonNP劫持属于CSRF跨站请求伪造)的攻击范畴,解决方法和CSRF一样定义:构造带有jsonp接口的恶意页面发给用户点击,从而将用户的敏感信息通过jsonp接口传输到攻击者服务器json语法规则:数据在名称/值对中、数据由逗号分隔、花括号保存对象、方括号保存

循环神经网络——中篇【深度学习】【PyTorch】【d2l】

文章目录6、循环神经网络6.4、循环神经网络(`RNN`)6.4.1、理论部分6.4.2、代码实现6.5、长短期记忆网络(`LSTM`)6.5.1、理论部分6.5.2、代码实现6.6、门控循环单元(`GRU`)6.6.1、理论部分6.6.2、代码实现6、循环神经网络6.4、循环神经网络(RNN)6.4.1、理论部分原理

18.3 【Linux】登录文件的轮替(logrotate)

18.3.1logrotate的配置文件logrotate主要是针对登录文件来进行轮替的动作,他必须要记载“在什么状态下才将登录文件进行轮替”的设置。logrotate这个程序的参数配置文件在:/etc/logrotate.conf/etc/logrotate.d/logrotate.conf才是主要的参数文件,至于l

Android官方推荐 无需向应用授予的照片选择器工具

官网链接Photopicker|AndroidDevelopers不能跳转链接看这Photopicker照片选择器对话框会显示在您的设备上的媒体文件中。选择一张照片与应用程序分享。图1.照片选择器提供了一个直观的用户界面,用于与您的应用程序分享照片。照片选择器提供了一个可浏览、可搜索的界面,向用户呈现了他们的媒体库,按

个人电脑(windows、mac)安装Docker Desktop

目录什么是Docker?DockerDesktop在个人电脑上的作用安装DockerDesktop在学习大数据、人工智能等技术时,常常需要安装相应软件来支持我们的学习和实践。然而,很多这样的软件更适合在Linux环境下进行部署和运行。通过在个人电脑安装DockerDesktop可以解决该类问题,在个人电脑上轻松地搭建软

[hive]搭建hive3.1.2hiveserver2高可用可hive metastore高可用

参考:Apachehive3.1.2从单机到高可用部署HiveServer2高可用Metastore高可用hiveonsparkhiveserver2webUI高可用集群启动脚本_薛定谔的猫不吃猫粮的博客-CSDN博客没用里头的hiveonspark,测试后发现版本冲突一、Hive集群规划(蓝色部分)ck1ck2ck3

SpringCloud OpenFeign--声明式WebService 客户端

😀前言本篇博文是关于SpringCloudOpenFeign的基本介绍,希望你能够喜欢🏠个人主页:晨犀主页🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰如果文章有什么需要改进的地方还请大佬不吝

2023华为OD统一考试(B卷)题库清单(按算法分类),如果你时间紧迫,就按这个刷

目录专栏导读华为OD机试算法题太多了,知识点繁杂,如何刷题更有效率呢?一、逻辑分析二、数据结构1、线性表①数组②双指针2、map与list3、优先队列4、滑动窗口5、二叉树6、并查集7、栈三、算法1、基础算法①贪心算法②二分查找③分治递归④搜索算法⑤排序算法2、字符串①KMP②字符串处理③正则表达式3、深度优先搜索①广

携手共赴数智未来|维视智造出席2023英特尔工业物联网大会

​​9月20日,“数智芯生力”2023英特尔工业物联网大会”于上海隆重举办。作为主办方,英特尔邀请了赋能工业数字化技术创新的多位合作伙伴,展示当前中国工业物联网领域的优秀技术与成果,共聚一堂积极探讨数字化机器视觉、控制机器人等领域的热点话题。在工业数字化转型和“双碳”目标驱动下,制造业众多领域正在以前所未有的速度步入工

热文推荐