29
生生 Del aunay 生生生生生生生生

生成 Del aunay 三角网的合成算法

  • Upload
    ceri

  • View
    242

  • Download
    7

Embed Size (px)

DESCRIPTION

生成 Del aunay 三角网的合成算法. 一种生成 Delaunay 三角网的合成算法 2000 武晓波,王世新,肖春生 生成 Del aunay 三角网的快速合成算法 吴宇晓,张登荣 2004. - PowerPoint PPT Presentation

Citation preview

Page 1: 生成 Del aunay 三角网的合成算法

生成 Del aunay三角网的合成算法

Page 2: 生成 Del aunay 三角网的合成算法

• 一种生成 Delaunay三角网的合成算法 2000武晓波,王世新,肖春生• 生成 Del aunay三角网的快速合成算法 吴宇晓,张登荣 2004

Page 3: 生成 Del aunay 三角网的合成算法

• 经过 20多年的研究,自动生成 Delaunay三角网的算法已趋于成熟。它们基本上可分为分治算法逐点插入法、三角网生长法等 3类。其中前两类较第 3类在应用户上更加广泛。但即使这两类算法也分别存在着时间和空间效率上的缺陷,使它们的应用受到了一定的限制。武晓波 ,2000提出了一个融以上两类算法优点于一体,兼顾空间与时间性能的合成算法。经测试,它的运算效率大大高于逐点插入法,在大多数情况下,也高于分治算法,在分割阈值约为总数据量的十分之一时,效率最高。

Page 4: 生成 Del aunay 三角网的合成算法

• 1 引言• 分治算法和逐点插入法由于易于实现,是当前应用较广的两类算法。这两类算法所采用的实现方法决定了它们存在着明显的局限性,分治算法需要大量的内存,逐点插入法运行速度极慢。当数据量较大或计算机性能较差时,它们的使用都将遇到困难。• 武晓波 ,2000 提出了一个成功地解决了上述问题的合成算法。该算法将逐点插入法嵌入到分治算法中,使它们优势互补,弥补了各自的缺陷。经过一个有

2533 个点数据测试,表明合成算法的运算效率大大高于逐点插入法,在大多数情况下也高于分治算法

Page 5: 生成 Del aunay 三角网的合成算法

• 2己有算法介绍 2. 1分治算法 2. 2逐点插入法2. 3三角网生长法

• 3合成算法• 由以上介绍不难看出,目前采用较多的前两类算法各具优势又有局限,同时,它们又具有明显的互补性。分治算法时间性能好,空间性能差 ;逐点插入法空间性能好,时间性能差。我们评价一个算法的优劣是看它对时间和空间的消耗,即时空性能的综合表现。因此,就产生了一个非常自然的想法,为何不把它们结合起来,取长补短,从而提高算法的性能呢 ?

Page 6: 生成 Del aunay 三角网的合成算法

• 把分治算法与逐点插入法结合起来的具体做法是,以分治算法为主体,当递归分割数据集的过程进行到子集中的数据量小于一个预定值——分割阈值时终止,然后用逐点插入法在子集中生成子三角网。我们把这一新的算法称为合成算法。它的流程图见图 1。其中 v表示数据集 :Nv 是 V的数据量 ;Nd是分割阈值 ;Nl, Nr分别表示两个子集的数据量 ;Tl,Tr分别表示在子集中建立的两个子三角网。

Page 7: 生成 Del aunay 三角网的合成算法
Page 8: 生成 Del aunay 三角网的合成算法

• 合成算法结合了传统的递归分割法和逐点插入法的优点,兼顾空间和时间性能然而,该算法不可避免地继承了两种传统算法的不足,在执行效率上受到限制,为了解决执行效率问题,[ 吴宇晓,张登荣 2004] 提出了快速合成算法,对合成算进行了改进和优化。该算法基于面积坐标的点定位算法和简化的高效空外接圆判断算法,从而大大提高算法的整体执行效率 ; 同时充分考虑平面点集的任意性,适用于对任意平面点集构建 Delaunay 三角网。

Page 9: 生成 Del aunay 三角网的合成算法

• 4算法的基本模块• 为了便于分割,在执行各模块之前,首先要对初始点集按升序以 x坐标为主, y坐标为辅进行排列,确保子三角网不相互叠

置 .• 4. 1格雷厄姆法计算凸壳

Page 10: 生成 Del aunay 三角网的合成算法

• 4. 2初始三角网的建立与修正• 以凸壳上 y值最小的点 (设为点 P1)为出发点,按序与凸壳上其余的点相连 (如图

3( b)所示 ).•

Page 11: 生成 Del aunay 三角网的合成算法

• 需要注意的是,点集是任意离散的,出发点P1可能与多点共线 .如图 3 ( a)所示,点 P1 一P5共线,而事实上点 P2 一 P4不参加构成初始三角网,因此,需要在建立初始三角网前对凸壳进行修正。如果存在点 P3, P4,...Pk(2< k<n),与 P1P2共线,则必须删去点 P2, P3, ..., Pk-1,并由 P1Pk代替 P1P2成为初始边 .同样,如果存在点 Pk,Pk+1...,Pn-1(2< k<n) 与 PnP1共线,则必须删去点 Pk+1...,Pn-1,并由 PkP1代替 PnP1,成为终止边 (如图 3所示 ).经修正后,所有凸壳点按逆时针重新编号 .

Page 12: 生成 Del aunay 三角网的合成算法

• 4. 3插点入网• 该了模块分为两个步骤 :首先,定位待插入点,即确定点在哪个三角形中 ;然后,根据点在三角形的位置,修改三角网 .

Page 13: 生成 Del aunay 三角网的合成算法

• 4. 3. 1基于面积坐标的点定位算法• 随着点数增加,三角形数目也成倍增

加 .当三角形数目较大时,利用点在多边形中的判断方法,扫描整个或局部三角网格,是相当费时的 .快速合成算法利用三角形面积坐标和三角网拓扑关系来解决这一问题。

Page 14: 生成 Del aunay 三角网的合成算法

• 如图 4所示,面积坐标 (L1,L2,L3),其中, • 这里的三角形面积是有向面积,按顶点顺序,逆时针旋转为正,顺时针旋转为负 .

Page 15: 生成 Del aunay 三角网的合成算法

• 若 P 在三角形中,必有其所有面积坐标大于零( 见图 4(a)) ,即 L1>0, L 2>0, L 3>0; 若 P 在三角形外,则至少有一个面积坐标小于零 . 如图 4( b) 所示, P 在三角形 P2P3 边外侧,则 L1<0, L 2>0, L 3>0; 若 P 在三角形边上 ( 这儿排除 P 与三角形顶点重合的情况 ) ,那么必有值为 0 的面积坐标 . 如图 4c 所示, P 在三角形 P2P3 边上,则有 L1=0, L 2>0, L 3>0;

Page 16: 生成 Del aunay 三角网的合成算法

• 综上分析可知,正是小于 0的面积坐标指明了目标三角形的方向 .在建立了三角形拓扑关系的三角网中,利用面积坐标的这一特性,可很快查到包含点所在的三角形或所处的三角边 .

Page 17: 生成 Del aunay 三角网的合成算法

• 基于面积坐标的定位过程如图 5所示 .设三角形P1P2P3为搜索的起点,计算点 P的面积坐标可知 L1< 0,取 L1的对应边 P2P3的邻接三角形 P3P2P4 作为下一个判断的三角形 . 依次进行判断,直至三角形P7P6P8.此时若 L1>0, L 2>0, L 3>0 都大于 0,则点 P在三角形 P7P6P8 内 ; 若 Li(i=1 , 2, 3)=0,则点 P 在 Li所对应的边上 .

Page 18: 生成 Del aunay 三角网的合成算法

• 4.3.2点定位后的三角网修改• 由于所有待插入点必在凸壳内,所以待插入点必在三角形内或三角边上 . 跟据点与所处三角形的关系,点插入三角网的情况及相应的三角网修改方法分为如下 3种情

况 (见图 6) .

Page 19: 生成 Del aunay 三角网的合成算法

• 插入点在三角形内 . 如图 6( a) 所示,待插入点 P 在三角形 P1P2P3 内 . 此时,将点 P 与此三角形的三个顶点相连,形成 3 个三角形 .• 待插入点在非凸壳边上 . 由于所在边不是凸壳边,此边必是两个三角形的公共边 . 如图 6( b) 所示,待插入点 P 在边 P2P3 上, P2P3 是三角形 P1P2P3 和

P2P3P4 的公共边 . 此时,点 P 与 P2P3 两个三角形的对应点 P1 和 P4 相连,形成 4 个三角形 .• 待插入点在凸壳边上 . 凸壳边有且仅有一个相邻三角形,因此图 6(c) 中,只需将点 P 与 P2P3 惟一的相邻三角形 P1P2P3 的对应点 P1 相连,形成两个三角形 .

Page 20: 生成 Del aunay 三角网的合成算法

• 4.4 LOP 优化• 一旦三角网被修改,必须进行 LOP 优化 . 使用

Delaunay 空外接圆准则考查新生成三角形,如不满足,则调换与相邻三角形所组成的凸四边形的对角线 . 若对角线发生交换,则继续向相邻三角形扩展此过程,直至满足空外接圆准则或到达三角网边界 .• LOP 优化时,首要的问题是对新增三角形和其相邻三角形所组成的凸四边形进行空外接圆检测 . 在算法中,空外接圆检测具有累计性,当数据量较大时,其在整个程序执行中所占用的时间不容忽视 . 该检测过程是一个数值分析与计算过程,因而应在计算稳定可靠的前提下,尽量减少计算次数和低效的函数,从而提高执行效率 .下面提出了一个简化的空外接圆检测算法 .

Page 21: 生成 Del aunay 三角网的合成算法

• 如图 7 所示,新增三角形 PP3P2 与三角形P1P2P3 相邻,组成凸四边形,且有公共边P2P3. 当 a<a’ 时,点 P 在三角形 P1P2P3 的外接圆外 ; 当 a= a’ 了时,点 P 在三角形P1P2P3 的外接圆上 ; 当 a> a’ 时,点 P 在三角形 P1P2P3 的外接圆内 . 由于 a’+B=180 ,故通过比较 cos a 和 cosB 的大小来判断点 P与三角形 P1P2P3 的外接圆的关系 .

Page 22: 生成 Del aunay 三角网的合成算法

• 若 点 P在三角形P1P2P3的外接圆外 ;

• 若 点 P在三角形P1P2P3的外接圆上 ;

• 若 点 P在三角形 P1P2P3的外接圆内 .

Page 23: 生成 Del aunay 三角网的合成算法

• 如点 P 在外接圆内,则交换凸四边形的对角线 ( 如图 8 ( a) 所示 ). 当点在外接圆上时,则比较凸四边形两个对角线,保留较短的那条 ( 如图 8(b) 所示 ). 若凸四边形的对角线发生交换,应继续向相邻三角形扩展优化,直至被检测三角形满足空外接圆准则或到达三角网边界 .

Page 24: 生成 Del aunay 三角网的合成算法

• 4.5上下切线的查找算法• 该模块找出连接相邻两个子三角网的外凸壳的上切线和下切线 . 设 SL, SR分别表示左右两个凸壳。• 首先在左凸壳 SL上任取一凸壳点,按上述三角形面积判定法找出右凸壳上的第一条通视边的第一个凸壳点。若无通视边,则在 SL上顺时针取下一点再作搜索判断,直到找到通视边。

Page 25: 生成 Del aunay 三角网的合成算法

• 以右凸壳 SR 上刚找到的点仍按面积判定法搜索左凸壳 SL 上最后一条通视边的第二个凸壳点。• 重复以上两个步骤,在 SL 和 SR 上循环搜索,直到从 SL 上的凸壳点不再能找到 SR 上的通视边,目从 SR 上的凸壳点也不再能找

到 SL 上的通视边。• 此时,连接在 SL 和 SR 上分别找到的最后的凸壳点,所连线即为左右凸壳的下底线。

Page 26: 生成 Del aunay 三角网的合成算法
Page 27: 生成 Del aunay 三角网的合成算法

• 2. 6子网合并• 找到左右两个了三角网的下底线后如图

(ac) 中的,就可从下底线 ac开始向上分别在 SL 上找到 a 的上一个凸壳点 b ,在 SR 上找到 c 的下一个凸壳点 d 。对四边形 acdb通过 LOP 优化新生两个三角形 abc 和 bdc 。

Page 28: 生成 Del aunay 三角网的合成算法

• 将新生三角形在左右两个了三角网中分别和与其共边的三角形进行优化处理,并按照共边即需优化的原则,一直优化到底,直到己是最优化为止。• 再以 bd 为底边,重复上述步骤,分别向上找点生成新的优化三角形,直到出现三角形的面积值为正值时停止。就完成了两子三角网的合并。

Page 29: 生成 Del aunay 三角网的合成算法

• 3 算法测试• 4 结语• 本文提出了经过优化改进的快速合成算

法 . 该算法不但继承了合成算法的优点,可根据实际的点集数目和运算环境,调节阀值,从而动态平衡时空性能 ; 而且时间效率和稳定性大大提高,既有很高的执行效率,又适用于任意平面点集分布状况 .