文档库

最新最全的文档下载
当前位置:文档库 > 平面点线集三角剖分的扫描算法

平面点线集三角剖分的扫描算法

第24卷 第2期2004年2月北京理工大学学报

T r ansactions of Beijing Instit ute o f T echnolog y V ol.24 N o.2F eb.2004

文章编号:1001-0645(2004)02-0129-04

平面点线集三角剖分的扫描算法

周培德

(北京理工大学信息科学技术学院计算机科学工程系,北京 100081)

摘 要:提出计算平面点线集三角剖分的一种算法.该算法是利用平面扫描的思想,当扫描线达到事件点时,处理事件点,即将事件点与已被扫描的某些点连接,这样便将已扫描的区域三角剖分.当扫描线达到最左边的事件点时,处理该事件点,就完成了平面点线集的三角剖分.证明了算法的时间复杂性为O (N lb N ),其中N 是点线集中点的数目与线段端点数之和.

关键词:散乱点线集;三角剖分;平面扫描;算法;时间复杂性中图分类号:T P 301.6 文献标识码:A

Sweeping Algorithm for Triangulation of Plane Point -Line Set

ZHOU Pei-de

(Depar tment of Co mputer Science and Engineer ing ,School o f Infor matio n Science and T echno lo gy ,Beijing Instit ut e of

T echno lo gy ,Beijing 100081,China)

Abstract :Sw eeping alg orithm is presented fo r the tr iangulation of plane point -line set .T he algor ithm m akes use of the idea of plane sw eeping .When the sw eep -line reaches it ,the event -po int w ill be dealt w ith,viz.,the event-point is connected w ith so me points sw ept and thus the sw ept regions are triang ulated.When the sw eep-line r eaches the leftmost event-point,the point w ill be dealt w ith ,and the triang ulation of the plane point -line set is accom plished .It is prov ed in detail that the time co mplex ities o f the alg orithm is O (N lb N ),w here N is the sum of the num ber of points and the num ber of line-seg ment endpoints w ithin the point-line set.

Key words :debunching point-line set;triang ulation;plane sw eep;alg orithm;tim e co mplex ity 收稿日期:20030321

作者简介:周培德(1941-),男,教授.

平面点集三角剖分问题是计算几何中的一个重要问题,它是从许多实际问题中提出来的,至今,人们已研究了求解该问题的许多算法,其中以Delaunay 算法最为著名.将平面点集中的某些点组成点对并满足某些特殊关系,比如它们为平面线段的两个端点,而另外一些点仍为孤立点,这样便构成点线集.平面点集三角剖分问题可以转换为平面点线集的三角剖分问题,并且它们具有相同的时间复杂性下界.平面点线集三角剖分问题要求三角形的三条边或为点线集中的线段,或为点线集中不同线段端点的连线,或为点线集中点与线段端点的连线,

或为点线集中点与点的连线.三角形的顶点为点线集中的点或线段端点.另外还要求连线与连线,连线与点线集中线段均不相交.给定的平面点线集中线段互不相交(线段端点处相交除外).不难看出,平面散乱点线集三角剖分问题是平面点集三角剖分问题的一个特殊情况.按照常规,求解平面点集三角剖分的算法(比如Delaunay 三角剖分算法)可以用于平面散乱点线集的三角剖分.但在平面点集三角剖分的算法中如何保证点线集中的线段必是三角形的一条边,以及连线与点线集中线段不相交.只要解决这个问题就可以实现点线集的三角剖分.目前解决这

个问题的算法就是先将点(端点)集三角剖分,然后逐条线段进行调整,即删去与线段相交的连线,再添

加某些新连线.Lo S.H.提出的方法适用于平面非凸封闭域[1].其思想是,在平面域内先生成内部结点,然后将内部结点与边界结点连接生成一组三角形,并不断向前推进,直至整个内域被三角剖分.近几年来,国内一些学者提出了求解有约束条件的Delaunay三角剖分算法[2,3],其思想与Lo S.H.提出的算法类似,也是解决平面非凸封闭域三角剖分问题.

作者提出的算法不是针对平面非凸封闭域,而是针对平面任意点线集.利用平面扫描技术设计求解该问题的一种新算法,可以用来解决平面任意点线集的三角剖分问题.此外,作者为求解平面散乱线段集三角剖分问题设计了两个算法[4],这些算法也可求解这里的问题.

与平面点集三角剖分问题类似,对平面散乱点线集三角剖分问题可以提出一些附加条件,比如要求三角形的最小内角最大化;三角剖分边长之和最小化,即最小权三角剖分.

1 概念与算法思想

用y轴自右向左移动的方法可以对平面上的散乱点线集建立全序关系集T[5,6].开始时T为空集, y轴左移遇到线段s1的右端点s1R或者p1时,将s1或p1加入T(也可以用二叉树表示y轴的移动过程[6]).y轴左移遇到线段s1的左端点s1L时,从T中删去s1.

T中s1的上、下相邻线段的概念.设s1,s2,s3是平面上的3条线段,s1上存在一点a,过点a作垂线l,l与s2,s3分别交于b,c,并且b y

断层折线的概念.图2中,s1,s2,…,s6是给定的线段,虚线是线段端点的连线,则连线f a,ab,bc,cd 与de构成扫描过程中的断层折线,用E表示.点a 是s1的右端点,并将E划分为两个子断层折线:其中1条折线由f a组成,另一条折线由ab,bc,cd与de 组成.点a是线段s1的端点,s1称为a的顶点线段.

线段s6的右端点g与第2条线折线中顶点连接时,要求连线与第2条折线中线段不相交,此条件

平面点线集三角剖分的扫描算法

平面点线集三角剖分的扫描算法

称为不相交条件,记为NI.点p与E中顶点连接时,也要求满足条件NI.

图1 相邻线段

Fig.1 Ad jacent segmen ts

图2 断层折线

Fig.2 Fault b roken line

算法的思想.首先将点线集中线段的端点及点线集中的点按其x,y坐标排序.然后设想有一条垂直x轴的直线l(即y轴)由右向左扫描,当l达到线段s右端点s R或点p(称为事件点)时,将该线段s 或点p插入数据结构T中,并判定T中与s或p相邻的线段s1(上相邻)、s2(下相邻),连接s的右端点s R或p与s1,s2的右端点,这些连线构成断层折线E.类似处理l达到线段s左端点s L(事件点)时的情况.随着l的左移,E不断被修改,扫过的区域被三角剖分.当l达到最左线段的左端点或最左的点p 时,连接该左端点或点p与E的某些顶点,便完成了点线集三角剖分的工作.这种方法的优点是只考虑当前事件点能与E中哪些点连接,减少了运算次数,从而降低了时间复杂性.

2 算法描述

算法(平面点线集三角剖分的扫描算法).

输入 平面上点线集S={s1,s2,…,s n,p1,p2,…,p m},线段s i的左、右端点s i L,s i R的x,y坐标,i= l,n.点p i的x,y坐标,i=l,m.

输出 平面三角形集合T1={t1,t2,…,t k},各三角形的顶点为线段s i的端点(i=l,n)或点p i(i=

130北京理工大学学报第24卷 

l,m).边为s i或者s j(i,j=l,n,i≠j)端点的连线,端点与点p j(j=l,m)的连线,点p j与p k(j,k=l,m, j≠k)的连线.边与边之间不相交(顶点处相交除外).

步1 将m个点p j及n条线段端点按其x,y 坐标排序.

步2 断层折线E←§,F←§.F为存储扫描过程中已产生的连线.

步3 垂直扫描线l由右向左移动,遇到线段s 的右端点同时又是另一条线段s″左端点时,s插入T,并从T中删去s″.转步3.

垂直扫描线l由右向左移动,当遇到线段s的右端点s R或点p时,E←s R∨p,s或p插入数据结构T.在T中寻找s或p的上、下相邻线段.从T中删去p.

如果s或p在T中没有上、下相邻线段∧E= s R∨p,则转步3或步4.

如果s或p在T中没有上、下相邻线段∧E=1个s R1个点p∨两个s R∨两个点p,则连接E中点,修改E和F.转步3或步4.

如果s或p在T中没有上、下相邻线段∧E中至少有一条边,则将s R或p与E的顶点连接(满足NI条件),修改E和F.转步3或步4.

如果(s1,s2是s或p的上、下相邻线段∨E=s′)∧(s R x

步4 当遇到s的左端点s L或点p时,E←s L∨p,s′←s,E←s′,F←s′.在T中寻找s的上、下相邻线段.从T中删去s或p.

如果s或p在T中没有上、下相邻线段∧E= s′,则转步3或步4.

如果s或p在T中没有上、下相邻线段∧E中至少有一条边,则将s L或p与E的顶点连接(NI成立).修改E和F.转步3、步4或步6.

如果(上、下相邻线段是s′

1,s′2)∧(s L x

i R x∨

p x

i R(NI成立),修改E和F.连接s L或p与E的顶点(NI成立),修改E 和F.转步4或步5.

如果(上、下相邻线段是s′

1,s′

2)∧(s L x

i L x∨

p x

i L x),则连接s L与s′i L或p与s′

i L(NI成立),修改

E和F.连接s L或p与E的顶点(NI成立),修改E 和F.转步4或步5.

步5 遇到线段s的右端点s R或点p时,将s 或p插入T,在T中寻找s或p的上、下相邻线段,设为s1,s2.连接s R或p与E的顶点(NI成立).修改E和F.转步4或步5.

步6 当l移出点线集时,输出F′,F′=F∪{s1,s2,…,s n}.终止.

说明:“转步3或步4”意为:满足步3条件则转步3,满足步4条件则转步4.其它类似情况含义相同.

算法中,修改E和F时采用四边形取较短对角线的方法,可以使三角剖分的各三角形边长之和(1条边的长度只计数1次)优化.

3 正确性与复杂性

平面扫描算法将m个点和n条线段端点按其x,y坐标排序.扫描线l采用由右向左的方向进行移动,遇到事件点(点或线段端点)便停止移动.在事件点s R或p处,算法在找到线段或点p的上、下相邻线段s1,s2,并且判断s R x

2所界定的区域均被三角剖分.由于事件点是由点p i和线段端点(i=l,m)构成的,所以算法无一遗漏地划分相关区域,即点线集凸壳所围区域.并且由算法的执行过程,可知每个三角形的顶点都是点线集中的点或线段端点,而三角形的边不是点线集中线段就是点线集中线段端点的连线,或者端点与点、点与点的连线.因此算法正确地产生了所需要的三角剖分.

定理 设点线集中点与线段端点数之和为N,则算法的时间复杂性是O(N lb N).

证明 算法的步1耗费O(N lb N)时间进行排序;步2用常数时间;步3中扫描线停于右端点或点p i时,利用线段端点及点的x,y坐标已排序的结果和二叉树搜索技术,至多在O(lb N)时间内可以找到上、下相邻线段s1与s2.为了分析算法其它步骤的

131

 第2期周培德:平面点线集三角剖分的扫描算法

时间耗费,假设点和线段分布在k 层上(k

且∑k

i =1

m i =N ,1≤m i ≤n -1.如图3所示

平面点线集三角剖分的扫描算法

.

图3 复杂性证明示意图

Fig .3 Illu strative diagram for a proof of complexity

算法处理第k 层的时间耗费为(m k -1)+m k lb N .

算法处理第k -1层的时间耗费至多为m k +m k -1lb N +2(m k -1-1).

算法处理第k -2层的时间耗费至多为m k -1+m k -2lb N +2(m k -2-1).

算法处理第1层的时间耗费至多为m 2+m 1lb N +2(m 1-1).

上述表达式求和得到

2m k +m k -1+…+m 2+(m k +m k -1+…+m 1)lb N +

2[(m k -1+m k -2+…+m 1)-k ]=N -m 1+N lb N +2[N -m k -k ]≤

3N +N lb N =O (N lb N ).

算法的时间复杂性为O (N lb N )+O (N lb N )=O (N lb N ).

图4 例1Fig.4 Example 1

平面点线集三角剖分的扫描算法

 

4 应用举例

图4中,n =6,m =4,即点线集由6条线段和4个点组成.应用作者给出的算法得到点线集的三角剖分,其中粗线是给定的线段,细线为增加的连线.

图5中,n =6,m =32,即点线集由6条线段和32个点组成,并且6条线段构成一条折线.应用本文中算法得到该点线集的三角剖分,图中粗线是给定的线段,细线为增加的连线.

图5 例2Fig.5 Ex amp le 2

作者利用平面扫描思想设计求解平面散乱点线集三角剖分问题的算法,其优点是时间复杂性低,易于编程,且对大输入数据N 不易出错.本文中提出的算法为平面散乱点线集三角剖分问题的解决提供了一条新的途径.

参考文献:

[1] L o S H.Delaunay t riang ulat ion o f non-co nvex pla nar

do mains [J ].Inter nat ional Jo urnal for N umerical M etho ds in Engineer ing ,1989,28:2695-2707.[2] 闵卫东,唐泽圣.二维任意域内点集的Delaunay 三角

剖分的研究[J].计算机学报,1995,18(5):357-364.M in

W eido ng ,

T ang

Zesheng .

T he

D elav na y

tr iang ulatio n of a po int set w ithin an arbit rar y 2D domain [J].Chinese Jo ur nal of Computers,1995,18(5):357-364.(in Chinese)

[3] 周晓云,刘慎权.实现约束D elaunay 三角剖分的健壮

算法[J].计算机学报,1996,19(8):615-624.Zho u Xiao yun,L iu Shenquan.A r obust alg or ithm for constr ained D elaunay t ria ng ulation [J ].Chinese

Journal o f Co mputer s ,1996,19(8):615-624.(in

Chinese)

[4] 周培德.平面线段集三角剖分的算法[J].计算机工程

与科学,2003,25(1):20-22.

Zhou P eide .A lg or ithms for the tr iangulatio n of plane line-segment stes [J ].

Computer Eng ineer ing &

Science ,2003,25(1):20-22.(in Chinese )

[5] 周培德.计算几何[M ].北京:清华大学出版社,2000.

Zhou P eide .Computatio nal geo metr y [M ].Beijing :T sing hua U niver sity P ress,2000.(in Chinese)[6] 周培德.算法设计与分析[M ].北京:机械工业出版

社,1992.

Zhou Peide .T he desig n and analysis o f alg or ithms

[M ].Beijing :China M achine Pr ess,1992.(in

Chinese )

132

北京理工大学学报第24卷