平面离散点集Delaunay三角化
文章目录
- 定义:
- 准则:
- 特性:
- 算法:
- 1.逐点插入法
- 2.分治算法
- 3.生长算法
- 对比:
- 参考:
定义:
在数学和计算几何中,三角化就是对于给定的平面中的离散点集P,生成三角形集合T的过程。一般来说给定一个点集,往往存在不止一个三角剖分。其中基于 Delaunay 准则的三角化是一种特殊的三角化,也叫 Delaunay三角化。
准则:
- 空圆性:任何一个三角形的外接圆内部都不包含点集中的顶点。
- 最大化最小角:三角形的最小角(所有三角形的内角中的最小值)最大。具体的说是在两个相邻的三角形构成凸四边形的对角线,在相互交换后,两个内角的最小角不再增大。
特性:
- 最接近:以最接近的三点形成三角形,且各线段(三角形的边)皆不相交。
- 唯一性:不论从区域何处开始构建,最终都将得到一致的结果(点集中任意四点不能共圆)。
- 最优性:任意两个相邻三角形构成的凸四边形的对角线如果可以互换的话,那么两个三角形六个内角中最小角度不会变化。
- 最规则:如果将三角剖分中的每个三角形的最小角进行升序排列,则 Delaunay 三角剖分的排列得到的数值最大。
- 区域性:新增、删除、移动某一个顶点只会影响邻近的三角形。
- 具有凸边形的外壳:三角剖分最外层的边界形成一个凸多边形的外壳。
算法:
Delaunay定理由俄国数学家Delaunay提出,使用该准则进行剖分得到的三角网格叫作Delaunay三角网格。Delaunay网格的空外接圆特性和最小内角最大的特性决定了Delaunay网格是网格化质量最好的网格。
关于二维点集的Delaunay三角化算法,有逐点插入法、三角网生长法和分治法以及隶属于3类方法的各种不同实现算法。
1.逐点插入法
Lawson算法是一种基于点插入的Delaunay三角剖分算法。该算法通过不断地向剖分中加入点,来逐步构建整个Delaunay三角剖分。Lawson算法中的局部优化过程(LOP:Local Optimization Procedure)是逐点插入法的关键,局部优化过程的思路是,如果一个三角形不符合Delaunay三角剖分的规则,则将一个包含一对三角形的四边形的对角线对换,从而构成符合Delaunay三角剖分的新三角形。简单来说,Lawson算法通过不断地将剖分中非Delaunay边上的点进行“翻转”,使得该边成为Delaunay边,直到所有边都是Delaunay边为止。
该算法基于散点的构网算法理论严密、唯一性好,网格满足空圆特性,是一种比较理想的算法。其逐点插入的构网过程中如果遇到非Delaunay边时,可以通过删除调整,进而构造形成新的Delaunay边。在完成构网后,增加新点时,无需对所有的点进行重新构网,只需对新点的影响三角形范围进行局部构网。但是在实际应用当中,点集数量较大,分布复杂时构网速度较慢,而且对于区域为非凸,存在内环时,则会产生非法三角形。
2.分治算法
分治思想(Divide-and-Conquer)的Delaunay三角网构建算法由Lewis和Robinson提出,后由Lee和Schachter改进。Delaunay三角网分治算法的主要思想就是递归地将点集进行划分为多个子集,当每个子点集的点云数量被划分到一定程度时生成三角网格,通过递归的过程将不同三角网进行向上合并,最终得到一个完整的三角网。不同Delaunay三角网分治算法的实现差别往往体现在如何对数据划分进行。基于分治的Delaunay三角网生成算法,在最坏情况下的时间复杂度为O(nlogn),在处理同样数量的点云数据的时候,分治的Delaunay三角网生成算法的时间复杂度最小,相对的,因为Delaunay三角网分治算法需要进行大量的递归,需要大量的内存。对于处理大规模的点云数据可能会因为内存空间问题而影响Delaunay三角网分治算法的使用。
3.生长算法
三角形生长算法最早是由Green和Sibson提出,算法的主要思想是以点集中任意一个点开始,寻找与该点欧式距离最小的点构成一条边,根据最大最小角的原则寻找另一个点构成三角形,不断选择新的点与三角形的边构成新的三角形,使三角形的区域不断扩大,知道点集中所有的点都被并入三角网中。由于三角形生长算法需要为三角形的边寻找符合条件的点构成新的三角形,需要遍历点集中的点,往往需要消耗很多时间寻找点。因此,三角形生长法很难达到线性时间,如果点集分布不平均,最坏情况下时间复杂度为O(n2)。
对比:
三角网生成法的时间效率最低,分治算法的时间效率最高,逐点插入法效率居中。由于区域生长法本质的缺陷,导致其效率受限,这种方法在80年代中期以后已经很少使用。分治算法时间效率相对较高,但是由于其递归执行,所以需要较大的内存空间,导致其空间效率较低。此外,分治法的数据处理及结果的优化需要的工作量也比较大。逐点插入算法实现简单,时间效率比较高,而运行占用的空间也较小,从时间效率和空间效率综合考虑,性价比最高,因而应用广泛。
逐点插入算法最坏情况下的时间复杂度是O(N2)。但是,若点是随机插入的话,其性能将能达到O(NlogN)。但由于算法过程需要排序,其时间复杂度不能进一步改进。生长算法的效率最差,最坏情况下的时间复杂度为O(N2 ),性能最高也只能达到O(N3/2)。分治算法的效率很高,最坏情况下的时间复杂度都能达到O(NlogN),最好情况下其性能甚至能达到O(loglogN),同时输入点集对分治算法的效率影响较小,无论输入点集好坏都不会对分治算法的效率产生明显影响。3类方法各自典型的实现算法的时间复杂度如下表:
表1 几种Denauhy三角网生成算法的时间复杂度[1]
参考:
[1] Chuang T , 陶闯. A Comparative Research on Methods of Delaunay TriangulationDelaunay三角网构建方法比较研究[J]. 中国图象图形学报, 1995, 15(8):1158-1167.
平面离散点集Delaunay三角化相关推荐
- Delaunay三角化实现原理
Delaunay三角化实现原理 https://blog.csdn.net/renhaofan/article/details/82261681
- Delaunay三角化算法
1.首先了解一下什么是Delaunay三角网 Delaunay三角剖分是前苏联数学家 Delaunay在 1934年提出的:对于任意给定的平面点集 ,只存在着唯一的一种三角剖分方法 ,满足所谓的&qu ...
- Delaunay三角化
点集的三角剖分(Triangulation),对数值分析(比如有限元分析)以及图形学来说,都是极为重要的一项预处理技术. 尤其是Delaunay三角剖分,由于其独特性,关于点集的很多种几何图都和Del ...
- Jonathan Richard Shewchuk的德罗奈三角化(Delaunay Triangulation) 崩溃(Crash)问题
Jonathan Richard Shewchuk的德罗奈三角化(Delaunay Triangulation) 崩溃(Crash)问题 研究网格化的同学一定知道德罗奈三角化(Delaunay Tri ...
- CGAL4.4_2D限定三角化及网格(2D Conforming Triangulations and Meshes)
1限定三角化 1.1 定义 Delaunay三角剖分: Delaunay三角剖分是 Boris Delaunay 于1934 年提出的.它具有一些优秀的性质,例如说它最大化三角剖分T中所有三角形的最小 ...
- php 画low poly,用canvas 实现个图片三角化(LOW POLY)效果_javascript技巧
之前无意中看到Ovilia 用threejs做了个LOW POLY,也就是图片平面三角化的效果,觉得很惊艳,然后就自己花了点时间尝试了一下. 我是没怎么用过threejs,所以就直接用canvas的2 ...
- PCL中GreedyProjection三角化算法简介与示例
文章目录 前言 一.PCL点云三角化 1.1 Delaunay三角剖分 1.2 贪婪三角化 二.程序示例 总结 前言 Delaunay三角剖分最初应用于2维领域,而与Greedy三角化算法的结合,使之 ...
- 采样点 求拐点 算法 c语言,平面曲线离散点集拐点的快速查找算法.pdf
平面曲线离散点集拐点的快速查找算法 第 25 卷 第 6 期 北 方 交 通 大 学 学 报 Vol . 25 No . 6 200 1 年 12 月 J OU RNAL OF NOR THERN J ...
- 三维点云质心与三角化 — python open3d
1 质心介绍 质心概念与重心的计算方式相同.如下所示: (1) 即 ...
最新文章
- HDU 4946 Area of Mushroom 凸包
- Shell printf 命令
- 有关转换流中涉及的【乱码问题】
- [SDOI 2010]外星千足虫
- oracle 列 连续,sql 查寻某列连续的几个值是否相同
- (二)pscc学习笔记
- Linux系统下公式编辑器KLatexFormula
- 用latex生成pdf文件后,文本复制粘贴显示乱码
- COMSOL数据导入的案例
- 软件测试的分类(按是否查看代码划分)
- 微型计算机求RAM片数,微机原理随堂练习答案及解析..doc
- 二 docker安装ca证书
- SmartBI入门(一)介绍和安装
- java https双向验证_Https双向验证与Springboot整合测试-人来人往我只认你
- 卷积神经网络的训练过程,卷积神经网络如何训练
- nand flash、nor flash、sdram、ram、dram的区别
- 安全设计 -- 会话安全
- 字符 正则表达式详解
- 【深度学习】用CNN实现全景图像语义分割!
- 【Web开发】Python实现Web服务器(Sanic)