内容发布更新时间 : 2024/12/27 6:30:19星期一 下面是文章的全部内容请认真阅读。
近接触到计算Delaunay三角剖分的问题,也算是计算几何的一个经典问题了。按照别人的算
法,也自己实现了个(
源代码下载
),发现点集大的时候,程序计算起来特慢。后来分析发现,别人程序号称的都是O(nlogn)的,我的却成了O(n*n)的,算法都是一样,后来才发现是数据结构的问题,看来程序=算法+数据结构,有道理。闲着,就整理了些相关知识,组织如下:
1.Delaunay三角剖分&Voronoi图定义 2.计算Delaunay三角剖分的算法及分析 3.例子程序&代码 大话
点集的三角剖分(Triangulation),对数值分析(比如有限元分析)以及图形学来说,都是极为重要的一项预处理技术。
尤其是Delaunay三角剖分,由于其独特性,关于点集的很多种几何图都和Delaunay三角剖分相关,如Voronoi图,EMST树,Gabriel图等。Delaunay三角剖分有几个很好的特性: 1.最大化最小角,“最接近于规则化的“的三角网。 2.唯一性(任意四点不能共圆)。
概念及定义
二维实数域(二维平面)上的三角剖分
定义1:假设V是二维实数域上的有限点集,边e是由点集中的点作为端点构成的封闭线段, E为e的集合。
那么该点集V的一个三角剖分T=(V,E)是一个平面图G,该平面图满足条件: 1.除了端点,平面图中的边不包含点集中的任何点。 2.没有相交边。
3.平面图中所有的面都是三角面,且所有三角面的合集就是点集V的凸包。
那什么是Delaunay三角剖分呢?不过是一种特殊的三角剖分罢了。从Delaunay边说起。
Delaunay边
定义2:假设E中的一条边e(两个端点为a,b),e若满足下列条件,则称之为Delaunay边: 存在一个圆经过a,b两点,圆内不含点集V中任何的点,这一特性又称空圆特性。
Delaunay三角剖分
定义3:如果点集V的一个三角剖分T只包含Delaunay边,那么该三角剖分称为Delaunay三角剖分。
我们看几个图:
由上面的图引出Delaunay三角剖分的另一种定义:
定义4:假设T为V的任一三角剖分,则T是V的一个Delaunay三角剖分,当前仅当T中的每个三角形的外接圆的内部不包含V中任何的点。
Voronoi图
定义5:V的Voronoi图是由多边形区域的集合(有些区域可能不是闭合的),该区域仅含点集中的一个点v,区域中的任何位置到v的距离都比该位置到点集中其它所有点的距离短。
由Voronoi图和Delaunay三角剖分的关系,可以引出另一个Delaunay三角剖分的定义: 定义6:将Voronoi图相邻区域(共边的区域)中的点连接起来构成的图,称为Delaunay三角剖分。 如下图: