平面离散点集Delaunay三角化

2023-11-17


定义:

在数学和计算几何中,三角化就是对于给定的平面中的离散点集P,生成三角形集合T的过程。一般来说给定一个点集,往往存在不止一个三角剖分。其中基于 Delaunay 准则的三角化是一种特殊的三角化,也叫 Delaunay三角化。
在这里插入图片描述


准则:

  1. 空圆性:任何一个三角形的外接圆内部都不包含点集中的顶点。
  2. 最大化最小角:三角形的最小角(所有三角形的内角中的最小值)最大。具体的说是在两个相邻的三角形构成凸四边形的对角线,在相互交换后,两个内角的最小角不再增大。

特性:

  1. 最接近:以最接近的三点形成三角形,且各线段(三角形的边)皆不相交。
  2. 唯一性:不论从区域何处开始构建,最终都将得到一致的结果(点集中任意四点不能共圆)。
  3. 最优性:任意两个相邻三角形构成的凸四边形的对角线如果可以互换的话,那么两个三角形六个内角中最小角度不会变化。
  4. 最规则:如果将三角剖分中的每个三角形的最小角进行升序排列,则 Delaunay 三角剖分的排列得到的数值最大。
  5. 区域性:新增、删除、移动某一个顶点只会影响邻近的三角形。
  6. 具有凸边形的外壳:三角剖分最外层的边界形成一个凸多边形的外壳。

算法:

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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

平面离散点集Delaunay三角化 的相关文章

随机推荐

  • 锐星服务器怎么上传文件,协议转换器仪表远程配置方法专利_专利申请于2019-06-06_专利查询 - 天眼查...

    1 一种协议转换器仪表远程配置方法 其特征在于 包括以下步骤 步骤1 在平台端开发一个基于页面配置的配置程序 为指定的CAN仪表协议提供配置工具 输出配置文件 该配置文件是由版本信息 报文CAN ID配置语句 车载机使用数据项ID配置语句
  • 【干货】--手把手教你完成文本情感分类

    作者 刘顺祥 个人微信公众号 每天进步一点点2015 前言 2017年12月9日 参加了天善组织的线下沙龙活动 在沙龙中自己分享了如何借助于R语言完成情感分析的案例 考虑的其他网友没能够参与到活动现场 这里通过微信公众号作一个简单的分享 在
  • 【Angular中的HTTP请求】- JSONP 详解

    JSONP JSON with Padding 是JSON的一种 使用模式 可用于解决主流浏览器的跨域数据访问的问题 基于XMLHttpRequest的数据请求会受到同源策略限制 而 JSONP 以
  • 为什么离不开 Stackoverflow

    作为一名程序员 如果没有听过 Stackoverflow 那么你最好去面壁思过一下 程序员最需要阅读的一本编程书籍 其实编程书留下这本就够了 那些还没有读过这本书的程序员 是时候买一本了 如果还在犹豫 那么先看下这篇文章 看看为什么离不开
  • linux创建链接命令

    1 软链接 符号链接 1 软链接文件有类似于Windows的快捷方式 2 在符号连接中 文件实际上是一个文本文件 其中包含的有另一文件的位置信息 3 它只会在你选定的位置上生成一个文件的镜像 不会占用磁盘空间 linux创建链接软命令 具体
  • C语言调用C++函数

    前阵子被问及一个在C中如何调用C 函数的问题 当时简单回答是将函数用extern C 声明 当被问及如何将类内成员函数声明时 一时语塞 后来网上查了下 网上有一翻译C 之父的文章可以作为解答 遂拿来Mark一下 将 C 函数声明为 exte
  • JS 5种遍历对象的方式

    From https blog csdn net qq 53225741 article details 127073295 我根据阮老师的 ES6标准入门 学习并总结了七种遍历对象的方法 我会将分别介绍这七种方法并进行详细的区分 并将从属
  • Linux Ubuntu 能PING IP但不能PING主机域名的解决方法

    vi etc nsswitch conf hosts files dns networks files 改成 hosts files dns wins networks files 如果不一样的话 就在hosts 原来那行后面加个wins
  • Vue2转Vue3快速上手第一篇(共两篇)

    Vue3 v2 v3的学习成本不高 只要有v2基础 基本可以上手vue3 一 setup语法 setup中不能访问v2的配置比如data methods等 二 ref响应数据 使用ref可以创建一个对象 可以是基本类型 也可以是对象 例如
  • SpringBoot获取resources 目录下的文件的方式

    SpringBoot获取resources 目录下的文件的方式在Spring Boot项目中 读取resources目录下文件的方式是非常常见的操作 为了确保项目的稳定性和可靠性 我们需要采取一种高效的方法来获取这些文件 因此 在本文中 我
  • overloading与overriding的区别

    1 overloading 重载 1 方法重载是让类以一种统一的方式处理不同类型数据的手段 多个同名函数同时存在 具有不同参数个数 类型 重载是一个类中多态性的表现 2 java方法重载就是在同一个类中创建多个具有相同的方法名 但是参数类型
  • MAC M1安装VMware 安装windows11

    目录 前言 一 安装包列表 二 VMware安装Windows11过程 总结 前言 最近想着给自己的mac安装windows虚拟机 因为mac是m1芯片的 所以也是从网上找了很多资料 用PD安装了Windows11 在找资料的时候发现VM也
  • Hbuild X 下载以及插件安装

    1 下载 下载地址 https www dcloud io 2 进入Hbuilder 官方网站 3 下载HBuilder 点击下载按钮 Download for Windows 点击后会直接下载 也可以鼠标移动到 more 选择对应的版本点
  • VC使用ActiveX控件常见问题

    转自 http lingchuangsong blog 163 com blog static 126932322008631104133309 一方面 它表示将你联系到Microsoft Internet和业界的新技术的小型快速的可重用组
  • 大数据应用——Hadoop运行模式(本地运行)

    Hadoop运行模式包括 本地模式 伪分布式模式以及完全分布式模式 Hadoop官方网站 http hadoop apache org 4 1本地运行模式 4 1 1 官方Grep案例 1 创建在hadoop 2 7 1文件下面创建一个in
  • pycharm注释、查看函数用法快捷键

    单行或多行注释 选中代码 ctrl 查询函数用法 ctrl 鼠标左击函数名 便可以直接进入原文件查看此函数的定义 自动填充空格 ctrl alt L 将光标置于需要调整的代码行 或者选择一个区域 按下快捷键后 代码会自动填充空格 自动对齐代
  • matlab figure函数的用法

    https blog csdn net qq 30387863 article details 80301996
  • (三) 区块链数据结构 – 交易

    区块由交易组成 区块体中包含若干项交易数据 交易 交易主要包含两类数据 交易输入和交易输出 交易输入用来指明钱的来源 交易输出用来指明钱的去向 除了交易输入和交易输出外 交易中还包含版本号和锁定时间 交易数据的存储结构如下 交易对象中的各个
  • Flink State 和 Fault Tolerance详解

    有状态操作或者操作算子在处理DataStream的元素或者事件的时候需要存储计算的中间状态 这就使得状态在整个Flink的精细化计算中有着非常重要的地位 记录数据从某一个过去时间点到当前时间的状态信息 以每分钟 小时 天汇总事件时 状态将保
  • 平面离散点集Delaunay三角化

    文章目录 定义 准则 特性 算法 1 逐点插入法 2 分治算法 3 生长算法 对比 参考 定义 在数学和计算几何中 三角化就是对于给定的平面中的离散点集P 生成三角形集合T的过程 一般来说给定一个点集 往往存在不止一个三角剖分 其中基于 D