基于分治法和DCEL数据结构的Delaunay三角剖分

平面点集的 Delaunay 三角剖分简介

以下文字摘自互动百科:   

Voronoi图,又叫泰森多边形或 Dirichlet图,它是由一组由连接两邻点直线的垂直平分线组成的连续多边形组成。 N个在平面上有区别的点,按照最邻近原则划分平面,每个点与它的最近邻区域相关联。 Delaunay三角形是由与相邻 Voronoi多边形共享一条边的相关点连接而成的三角形。 Delaunay三角形的外接圆圆心是与三角形相关的 Voronoi多边形的一个顶点。 Delaunay三角形是 Voronoi图的偶图。
对于给定的初始点集 P,有多种三角剖分方式,其中 Delaunay三角剖分具有以下特征:
  1. Delaunay三角剖分是唯一的;
  2. 三角网的外边界构成了点集P的凸包;
  3. 没有任何点在三角形的外接圆内部,反之,如果一个三角网满足此条件,那么它就是Delaunay三角网。
  4. 如果将三角网中的每个三角形的最小角进行升序排列,则Delaunay三角网的排列得到的数值最大,从这个意义上讲,Delaunay三角网是“最接近于规则化”的三角网。
选题动机: 由于Delaunay三角网是“最接近于规则化”的三角网,与普通的三角剖分相比更加具有实际运用价值,因此实现它比实现普通三角剖分更有意义。

 

实现内容: 本次作业主要实现了平面点集的Delaunay三角剖分。为了验证Delaunay三角剖分的正确性,系统提供了“圆测试”的功能,供用户对生成的三角形进行测试验证;为了验证DCEL数据结构的正确性,系统提供了“DCEL测试”的功能,用户输入任意一条测试线,系统将先后显示出测试线贯穿过的三角形;为了形象显示三角剖分的分治过程,系统提供了动态显示分治剖分过程。

报告组成: 首先对算法依赖的数据结构DCEL进行说明,然后对基于DCEL的分治算法进行介绍,接着介绍DCEL测试和圆测试的相关细节,最后是对作品操作进行介绍,以及展示和分析实验结果。


数据结构与操作:Quad-Edge vs DCEL

Guibas[1]在文章中提出了一种Quad-Edge结构,使得Delaunay三角剖分的操作过程变得比较简单,并且由于这种结构保存了边的对偶信息,因此Delaunay三角与Voronoi diagrams之间的相互转换也非常容易。

此次实验要求使用DCEL(Doubly-Connected Edge List)结构,该结构比Quad-Edge简单,并未保存边的对偶信息。下面的两幅图显示了两种数据结构在信息存储上的区别。

Quad-Edge中的next为以origin为起点,逆时针找到的e[0]的下一条边。

虽然DCEL没有存储Quad-Edge中的对偶边e[1]e[3],可能对从Delaunay三角转化为Voronoi图有所不便,但是对于实现Delaunay三角剖分来说DCEL已经足够用了,用Quad-Edge可以找得到的与e[0]相关联的边,使用DCEL结构也可以很轻易的找到,下面给出这些关联边的图示。

几个重要的函数操作

1.void splice(Edge* a, Edge* b)

该函数的功能为:若a和b的起点是一个点,那么 ab将会被分成两条不相干的边;若 ab原本是两条不相干的边,那么这两条边的起点就会被连起来。下面是 Guibas文章的中一张对 splice进行解释的图:
DCELsplice的具体实现与 Quad-Edge略有不同,只要掌握了 splice具有上述功能的本质原因,就能很容易的实现了。具体实现请参考源码 dtriangulation

2.Edge* connect(Edge* a, Edge* b)

该函数的功能为:把 a的终点与 b的起点连起来。

3.void swap(Edge* e)

该函数的功能为:在 inCircle*测试失败后(意味着与 e相邻的两个三角不是 Delaunay三角),从 e的起点、终点沿四边形内部逆时针找到下两个点作为新的起
  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值