德劳内三角网

德劳内三角(DelaunayTriangulation)

1、定义:

       它是对于平面上给定的一组离散的点集,对它进行三角划分
       Delaunay三角剖分其实并不是一种算法,它只是给出了一个“好的”三角网格的定义,它的优秀特性是空圆特性最大化最小角特性,这两个特性避免了狭长三角形的产生,也使得Delaunay三角剖分应用广泛。
       空圆特性其实就是对于两个共边的三角形,任意一个三角形的外接圆是空圆,不含有任何点,这种形式的剖分产生的最小角最大。
  在这里插入图片描述在这里插入图片描述

2、维诺图(Voronoi diagram):

对相邻的两个点之间作垂直频平分线,所构成的图叫又称泰森多边形。

在这里插入图片描述

它和德劳内三角网是对偶(Duality)的关系。

维诺图中的点是德劳内三角网三角形外接圆的圆心。
在这里插入图片描述

维诺图中两个点之间之所以连一条边,是因为反映的是德劳内三角网的三角形的邻接关系。

3、唯一性:

四点共圆是合法的:

在这里插入图片描述

如果不存在四点共圆,必然出现一种情况是合法的,也就是唯一性。

在这里插入图片描述

4、判断点的位置?

在这里插入图片描述

在这里插入图片描述

5、双向链接边表:

在这里插入图片描述
下面那条公式是欧拉公式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

怎么读图呢?
       可以通过f1找它的半边,一直一直找它的后继,就可以访问面所围成的半边;通过v2找它的后继,再访问它的twin,一直重复,来遍历一个顶点的所有入度出度。

6、如何在DCEL结构中添加结点呢?

       会引起一张平面被撕裂成三张平面,引入6条半边,一个顶点,并且会大量的对原先的三条半边进行前驱后继的修改。
在这里插入图片描述
原先e1的前驱是e2,现在变为了e3

在这里插入图片描述
在这里插入图片描述
半边修改的地方比较多。

7、边翻转

将原先的两条半边删除,引入两条新的半边。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8、算法的执行(The Implemation of RIC):

已掌握的技能(Mastered skills):

注:真不是屌英语,是英语真的很重要!!!

InTriangleTest(a,b,c,s); //判断一个点是否在三角形的内部
IncircleTest(a,b,c,s);//判断一个点是否在三角形外接圆的内部
AddingAvertex(DT(p),s);//增加一个节点
Edgeflipping(*);//边翻转

在这里插入图片描述
首先引入一个超三角形,它是做够大的三角形,以至于它把所有输入的点都包含在内;插入第一个点,这时仍能保持德劳内三角网,不需要进行修改;插入第二个节点的时候引入三条可移边,这三条边会连续进行边翻转操作;第一条边是超三角形的边,不需要进行边翻转,剔除;在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再引入一个点,去除外围边;在这里插入图片描述
剔除并进行翻转;
在这里插入图片描述
引入两条可移边,并判断,发现可行;
在这里插入图片描述在这里插入图片描述

最后一条边判断,发现仍然可行,此时就完成了对三个节点,进行的德劳内三角网构造的算法;    最后判断这三个点构成的三角形外接圆包不包含超三角形的三个顶点,不包含就将它输出;     最终的到的是这个三角形,也就是一张德劳内三角网。
在这里插入图片描述

9、算法思考?

如何进行点定位?

是怎么找到这个点是在这个面内的呢?引入一种结构——
刚开始的节点都在超三角形内部,这些节点构成了一个桶,从桶中随机挑选一个节点,进行插入,它会把这个面撕裂成三个部分,与此同时,点也被撕裂成了三个部分;那么下次随机挑选一个点的时候,只需要找到这个点所对应的桶号,桶号与点号建立了一一对应的关系。
在这里插入图片描述
在边翻转的过程中,点发生了什么变化呢?
显然我们只需要将这两个面内的所有节点进行归类,判断这个点是否在新的面内,如果在的话就加入这个桶,不在的话就加入另一个桶。

在这里插入图片描述

10、这个算法是正确的吗?是可靠的吗?

它能实现德劳内三角网的构造吗?
在这里插入图片描述
每次边翻转都会靠近蓝色的曲线,直到最后这个序列变成了蓝线;
显然,这张网中只会唯一得存在一个从小到大的序列,它是最平均的;
所以这个算法能够实现将离散的点集进行delanuay三角化。

11、算法性能:

在期望意义上讲时间和空间复杂度是不会超过O(nlogn) 和O(n)的。

Abstract
In this paper we give a new randomized incremental algorithm for the construction of planar Voronoi diagrams and Delaunay triangulations. The new algorithm is more “online” than earlier similar methods, takes expected time O(nlog n) and space O(n), and is eminently practical to implement. The analysis of the algorithm is also interesting in its own right and can serve as a model for many similar questions in both two and three dimensions. Finally we demonstrate how this approach for constructing Voronoi diagrams obviates the need for building a separate point-location structure for nearest-neighbor queries.

RIC算法主要的time costedge-flipping 和bucket的point location上面,所以将它们相加求和,就可以算出时间复杂度(time complexity).

在这里插入图片描述
我们在三角网中插入节点的时候,实际上进行的边翻转操作是在将那些不合法的边都剔除,然后将最外层的星形多边形上的点全部向节点引一条连线,这样就将它调整成了一个德劳内三角网;而调整所需要的数量,这些边翻转的操作刚好等于新型多边形边的数量,也等于向点引入的数量;它是不会超过6条的。
也就是说,我们只需要常数次的操作,就能将插入节点所引起的变化,调整为一个合法的德劳内三角网。
在这里插入图片描述
在这里插入图片描述

12、应用:

三维建模,low poly低多边形,面部构建等等。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 20
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值