`

Delaunay三角剖分算法(转)

阅读更多

1. 三角剖分与Delaunay剖分的定义
     如何把一个散点集合剖分成不均匀的三角形网格,这就是散点集的三角剖分问题,散点集的三角剖分,对数值分析以及图形学来说,都是极为重要的一项预处理技术。该问题图示如下:

1.1.三角剖分定义
    【定义】三角剖分:假设V是二维实数域上的有限点集,边e是由点集中的点作为端点构成的封闭线段, E为e的集合。那么该点集V的一个三角剖分T=(V,E)是一个平面图G,该平面图满足条件:
    1.除了端点,平面图中的边不包含点集中的任何点。
    2.没有相交边。
    3.平面图中所有的面都是三角面,且所有三角面的合集是散点集V的凸包。

1.2.  Delaunay三角剖分的定义
    在实际中运用的最多的三角剖分是Delaunay三角剖分,它是一种特殊的三角剖分。先从Delaunay边说起:
    【定义】Delaunay边:假设E中的一条边e(两个端点为a,b),e若满足下列条件,则称之为Delaunay边:存在一个圆经过a,b两点,圆内(注意是圆内,圆上最多三点共圆)不含点集V中任何其他的点,这一特性又称空圆特性
    【定义】Delaunay三角剖分:如果点集V的一个三角剖分T只包含Delaunay边,那么该三角剖分称为Delaunay三角剖分。

1.3.Delaunay三角剖分的准则
    要满足Delaunay三角剖分的定义,必须符合两个重要的准则:
    1、空圆特性:Delaunay三角网是唯一的(任意四点不能共圆),在Delaunay三角形网中任一三角形的外接圆范围内不会有其它点存在。如下图所示:
 
    2、最大化最小角特性:在散点集可能形成的三角剖分中,Delaunay三角剖分所形成的三角形的最小角最大。从这个意义上讲,Delaunay 三角网是“最接近于规则化的“的三角网。具体的说是指在两个相邻的三角形构成凸四边形的对角线,在相互交换后,六个内角的最小角不再增大。如下图所示:
 
1.4.Delaunay三角剖分的特性
    以下是Delaunay剖分所具备的优异特性:
    1.最接近:以最近临的三点形成三角形,且各线段(三角形的边)皆不相交。
    2.唯一性:不论从区域何处开始构建,最终都将得到一致的结果。
    3.最优性:任意两个相邻三角形形成的凸四边形的对角线如果可以互换的话,那么两个三角形六个内角中最小的角度不会变大。
    4.最规则:如果将三角网中的每个三角形的最小角进行升序排列,则Delaunay三角网的排列得到的数值最大。
    5.区域性:新增、删除、移动某一个顶点时只会影响临近的三角形。
    6.具有凸多边形的外壳:三角网最外层的边界形成一个凸多边形的外壳。

1.5.局部最优化处理
    理论上为了构造Delaunay三角网,Lawson提出的局部优化过程LOP(Local Optimization Procedure),一般三角网经过LOP处理,即可确保成为Delaunay三角网,其基本做法如下所示:
    1.将两个具有共同边的三角形合成一个多边形。
    2.以最大空圆准则作检查,看其第四个顶点是否在三角形的外接圆之内。
    3.如果在,修正对角线即将对角线对调,即完成局部优化过程的处理。
    LOP处理过程如下图所示:
2.Delaunay剖分的算法
    Delaunay剖分是一种三角剖分的标准,实现它有多种算法。
2.1.Lawson算法
    逐点插入的Lawson算法是Lawson在1977年提出的,该算法思路简单,易于编程实现。基本原理为:首先建立一个大的三角形或多边形,把 所有数据点包围起来,向其中插入一点,该点与包含它的三角形三个顶点相连,形成三个新的三角形,然后逐个对它们进行空外接圆检测,同时用Lawson设计 的局部优化过程LOP进行优化,即通过交换对角线的方法来保证所形成的三角网为Delaunay三角网。
    上述基于散点的构网算法理论严密、唯一性好,网格满足空圆特性,较为理想。由其逐点插 入的构网过程可知,遇到非Delaunay边时,通过删除调整,可以构造形成新的Delaunay边。在完成构网后,增加新点时,无需对所有的点进行重新 构网,只需对新点的影响三角形范围进行局部联网,且局部联网的方法简单易行。同样,点的删除、移动也可快速动态地进行。但在实际应用当中,这种构网算法当 点集较大时构网速度也较慢,如果点集范围是非凸区域或者存在内环,则会产生非法三角形。

2.2.Bowyer-Watson算法
    Lawson算法的基本步骤是:
    1、构造一个超级三角形,包含所有散点,放入三角形链表。
    2、将点集中的散点依次插入,在三角形链表中找出其外接圆包含插入点的三角形(称为该点的影响三角形),删除影响三角形的公共边,将插入点同影响三角形的全部顶点连接起来,从而完成一个点在Delaunay三角形链表中的插入。
    3、根据优化准则对局部新形成的三角形进行优化。将形成的三角形放入Delaunay三角形链表。
    4、循环执行上述第2步,直到所有散点插入完毕。
    这一算法的关键的第2步图示如下:

本文来自CSDN博客,http://www.cnblogs.com/RenLiQQ/archive/2008/02/06/1065399.html
分享到:
评论

相关推荐

    Delaunay三角剖分算法 C++

    尤其是Delaunay三角剖分,由于其独特性,关于点集的很多种几何图都和Delaunay三角剖分相关,如Voronoi图,EMST树,Gabriel图等。Delaunay三角剖分有最大化最小角,“最接近于规则化的“的三角网和唯一性(任意四点不...

    Delaunay三角剖分算法(包含部分源码)

    Delaunay三角剖分算法 Delaunay三角剖分算法是一种常用的离散点生成三角网络的算法,主要用于计算机图形学、地理信息系统、计算机视觉等领域。该算法的原理可以分为三步:凸包生成、环切边界法凸包三角剖分和离散的...

    Delaunay三角剖分算法

    Delaunay三角剖分算法 1. 三角剖分与Delaunay剖分的定义 如何把一个散点集合剖分成不均匀的三角形网格,这就是散点集的三角剖分问题,散点集的三角剖分,对数值分析以及图形学来说,都是极为重要的一项预处理技术。 ...

    Python3.6实现delaunay三角剖分算法,不规则三角网的构建

    用python3.6实现delaunay三角剖分算法,读入存有坐标的csv文件,计算出结果用Tkinter库显示。

    带特征线约束的Delaunay三角剖分最优算法的研究及实现.pdf

    并行剖分算法能够显著提升计算速度,而交点插入算法则充分考虑了特征线的影响域以及Delaunay三角形规则的边界条件,确保在满足全局Delaunay三角剖分的同时,插入的点最少,对原有的网格影响最小。 #### 关键词 ...

    基于半边数据结构的逐点插入Delaunay三角剖分算法.pdf

    Delaunay三角剖分算法在科学计算可视化、有限元分析、地学分析、地理信息系统等领域有着广泛的应用。 Delaunay三角剖分算法的实现方法主要分为三类:三角网生长算法、逐点插入算法和分治算法。三角网生长算法由于在...

    点云三维重构delaunay三角剖分,MATLAB源码,正确可运行,有结果图

    在提供的MATLAB源码中,采用了powercrust算法进行点云的Delaunay三角剖分。Powercrust算法是一种基于密度的表面重建方法,它考虑了点云的密度分布,可以处理噪声和不完整的数据。该算法首先构建一个初步的三角网格,...

    三维空间Delaunay三角剖分算法的研究及应用

    Delaunay三角剖分在可视化,GIS,计算机图形学中有着广泛的应用。本文主要是针对3d三角网剖分算法的介绍,研究与应用。

    delaunay三角剖分matlab代码,有注释

    在本压缩包中,提供的是用Matlab实现的Delaunay三角剖分算法。 `DT1.m`和`DT2.m`是两个主要的Matlab脚本文件,它们可能包含了实现Delaunay三角剖分的核心算法。通常,Delaunay三角剖分的实现会基于某种数据结构(如...

    Delaunay三角剖分 VB实现

    在VB(Visual Basic)中实现Delaunay三角剖分,通常涉及到编程技巧和几何算法的结合。以下是关于这个主题的详细解释: 一、Delaunay三角剖分的基础概念 Delaunay三角剖分是由数学家Benoît B. Mandelbrot提出的,其...

    用vc实现任意多边形的Delaunay三角剖分

    在计算机图形学和计算几何领域,Delaunay三角剖分是一种重要的算法,它将一个多边形分割成一系列互不相交的三角形,使得没有一个三角形的顶点位于其任何邻居的内切圆中。这篇计算几何作业的重点是使用VC++(Visual ...

    基于OpenGL实现三维散乱点集的Delaunay三角剖分

    通过结合Delaunay三角剖分算法与OpenGL图形渲染技术,可以有效地将三维散乱点集可视化,这对于理解和分析复杂的数据集非常有用。这种技术不仅在计算机辅助设计(CAD)领域有广泛应用,还在地质学、医学影像分析等领域...

    约束delaunay三角剖分C++源码

    找了半天国内网站上都没找到好用的,好不容易从国外的网站上下载到的..带示例数据和源码 delaunay三角剖分

    delaunay2D_Delaunay_pythondelaunay_三角剖分_

    在计算机科学领域,特别是图形学和几何计算中,Delaunay三角剖分是一种重要的算法,用于将一组离散的点集转化为一个无穿刺的三角网格,使得每个点都被其包围的三角形的内切圆半径最大。在Python编程环境中,实现...

    Delaunay三角剖分的程序

    4. **核心算法**:Delaunay三角剖分的算法可以有许多实现方式,如Gabriel算法、Flip算法、 Incremental方法或者Constrained Delaunay Triangulation (CDT)。这些算法根据点集的特点和性能需求有所不同,但都致力于...

    限定Delaunay三角网格剖分技术-杨钦.rar

    《限定Delaunay三角网格剖分技术-杨钦》一书深入探讨了网格剖分算法的核心内容,特别是在二维平面和三维空间中的限定Delaunay三角剖分技术。Delaunay三角剖分是一种在几何计算、计算机图形学、数值模拟等领域广泛...

    delaunay三角剖分opencv

    delaunay三角剖分是一种在二维空间中组织点集的方法,通过将点连接成一系列互不相交的三角形,形成一个完整的覆盖。这个过程在计算机图形学、地理信息系统、科学计算可视化等领域有着广泛的应用。在OpenCV库中,...

    空间散乱点集Delaunay三角剖分的算法优化及实现

    本文在详细研究和分析了典型的Delaunay三角剖分算法的思想后,针对增量 算法中的关键问题提出改进的方法,从降低算法的时间复杂度的角度出发,以点 定位搜索这一关键问题为切入点,提出新的改进搜索的方法,该算法...

    Delaunay三角剖分演示

    Delaunay三角剖分是一种在几何计算领域广泛使用的算法,它通过将点集分割成一系列互不相交的三角形,使得每个三角形的内切圆内没有其他输入点。这种剖分方法在计算机图形学、地理信息系统、有限元分析、数据可视化等...

    Delaunay三角剖分算法(三维)

    总的来说,Delaunay三角剖分算法在三维空间中的应用是一项复杂但重要的任务,它依赖于精心设计的数据结构和高效的算法。C语言由于其底层控制和性能优势,常被用来实现这类计算密集型的任务。通过使用如tetgen这样的...

Global site tag (gtag.js) - Google Analytics