改进的三维点集凸包求取算法最新年文档.docx

上传人:b****3 文档编号:27074533 上传时间:2023-06-26 格式:DOCX 页数:9 大小:266.34KB
下载 相关 举报
改进的三维点集凸包求取算法最新年文档.docx_第1页
第1页 / 共9页
改进的三维点集凸包求取算法最新年文档.docx_第2页
第2页 / 共9页
改进的三维点集凸包求取算法最新年文档.docx_第3页
第3页 / 共9页
改进的三维点集凸包求取算法最新年文档.docx_第4页
第4页 / 共9页
改进的三维点集凸包求取算法最新年文档.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

改进的三维点集凸包求取算法最新年文档.docx

《改进的三维点集凸包求取算法最新年文档.docx》由会员分享,可在线阅读,更多相关《改进的三维点集凸包求取算法最新年文档.docx(9页珍藏版)》请在冰豆网上搜索。

改进的三维点集凸包求取算法最新年文档.docx

改进的三维点集凸包求取算法最新年文档

改进的三维点集凸包求取算法

Improvedalgorithmondeterminingconvexhullof3Dpointset

ZHANGFe,iXIEBuying,YANXingyu,LIUZheng

(CollegeofCivilEng.,TongjiUniv.,Shanghai200092,

China)

Toimprovethecomputationefficiencyofconvexhullof3Dpointset,animprovedalgorithmondeterminingconvexhullof3Dpointsetisproposedbymakingfulluseoftheextremepointsandthecharacteroftheconvexhull.

,the

Firstly,theextremepointsin3Dpointsetareobtainedtomakeupoftheinitialconvexhull.Secondlyinternalpointsoftheconvexhullareeliminatedaccording

tothepositionrelationshipbetweentheinitialconvex

 

examinedinturn,thepointset,linesetandfacesetthatmeettherequirementsareacquired,andtheconvexhullis

,linesetandface

expandedtoobtainthefinalpointsetsetoftheconvexhull.Thecomparisonoftimecomplexityanalysiswithnormalalgorithmsandtheexperimentsindicatethatthealgorithmhashigherefficiency.

0引言

点集凸包问题是计算几何学中基本、常见的问题,通常可以分为二维凸包和三维凸包.[1]二维凸包被广泛应用于模式识别、图像处理和设计自动化等领域[2];三维凸包被广泛应用于计算机仿真、建筑体建模、卫星通信和无线电广播等领域[3].二维凸包算法相对比较简单、成熟,已有很多研究成果.随着计算机软件和硬件技术的发展,处理三维的问题越来越多,有必要进研究三维凸包算法.本文在现有二维和三维凸包算法的基础上,提出1种改进的三维点集凸包求取算法

自20世纪70年代以来,不少学者提出有关点集凸包的算法,较为经典的有卷包裹法、格雷厄姆法、分治法、增量法以及周培德在文献[1]中提出的Z3—1和Z3—2算法.在这些算法中,卷包裹法、分治法、增量法以及Z3-2算法能够推广到三维.同样,

也有很多二维算法不能推广到三维,比如格雷厄姆法和文献[4]

提出的算法.

在绝大多数情况下,二维凸包和三维凸包由点集中的部分点构成,其余点则在凸包内部.所以,点集中的点可分为凸包顶点和内部点,因而可以考虑利用一些特殊点(如极值点)先构成凸包

大体形状,再排除内部点中的部分点,以减少点的数目来提高算法效率,这就是快速凸包技术[5].这种思想显然也适用于三维点集凸包算法.

在快速凸包技术的基础上,本文给出1种改进的凸包求取算

法.与传统快速凸包算法相比,本文算法考虑采用更多的极值点,更充分地利用极值点性质,缩小点的搜索范围,提高算法效率

1定义及性质

 

指包含点集中所有点的最小凸多面体.凸包的面均由三角形组成,即使真实的面由多边形组成,这些多边形也均被分割成三角形.

定义2一维极值点.在三维点集中,若只考虑点的3个坐标中的1个坐标并求取其最大值或最小值,所求得的这些点称为一维极值点.如果最大极值点和最小极值点都不止1个,则所有最大极值点在同一平面,所有最小极值点也在同一平面内

定义3二维极值点.在三维点集中,如果把所有点都投影到

1个坐标平面上(如xOy平面,yOz平面,zOx平面),然后在平

面上求取极值点,称这些点为二维极值点.现以投影到xOy平面

坐标值的点构成的子集为Xmin子集和Xmax子集;分别称具有最

小和最大y坐标值的点构成的子集为Ymin子集和Ymax子集.在

Xmin子集中,称对应y坐标的最小的点为左下点,称对应y坐

标最大的点为左上点;在Xmax子集中,称对应y坐标的最小的

点为右下点,称对应x坐标最大的点为右上点;在Ymin子集中,称对应x坐标最小的点为下左点,称对应x坐标最大的点为下右

点;在Ymax子集中,称对应x坐标的最小的点为上左点,称对应x坐标最大的点为上右点.

定义4极值点.包括一维极值点和二维极值点.在现实情况下,某点可能既是一维极值点也是二维极值点.在算法应用的过程中并不严格区分.

性质1空间中给定的若干个点的凸包是唯一的,且凸包的顶点必须是原给定点集中的点.[3]

性质2极值点必为凸包的顶点中的点.

性质3在三维点集中,必存在一维极值点,且至少有1个.

如果只有1个一维极值点,则凸包为平面,这种情况将不形成凸

包.所以,构成凸包的点集中,至少有2个一维极值点.

 

二维极值点可以构成1个平面或者空间凸环.文献[4]中给出的在二维情况下的证明,也适用于三维点集中二维极值点的情况

推论由性质3和性质4,在三维点集中,只要存在凸包,

2算法思路描述

求取三维点集的凸包,一般要求求出凸包的顶点集、棱边集以及面集.当然,在3个集合中,顶点集和面集是必需的,棱边

集可以由面集直接推出.

算法的总体思路是:

通过依次考察点集中的点,找出极值点,利用极值点快速形成初步凸包.初步凸包把原点集中的点分为初步凸包上点、外部点和内部点3个部分.外部点可能在凸包上,而内部点一定不在凸包上.算法的第2步则是删除内部点.第3步

依次进行考察外部点,不断扩展初步凸包,最终形成所要得到的凸包.在扩展初步凸包的过程中,将待考察的点依次与上一步扩展凸包中的棱边构成面,并用极值点和上一步扩展凸包中的顶点集中的点判断该面是否应加入新的扩展凸包中,这样就可以找到所有应加入新扩展凸包中的面.再利用该待加入点和极值点验证原扩展凸包中的面,排除不满足新扩展凸包的所有的点、棱边和面.当考察完毕所有外部点时就可以得到最终所要求得凸包的点集、棱边集和面集.

2.1算法主体流程

算法主体流程见图1.

图1算法主体流程

2.2算法具体步骤

步骤1求极值点并形成初步凸包,分为4个小步骤进行.

(1)依次考察点集中点的z坐标,分别求出1个最大和1个最小的一维极值点,并把点号保存在极值点集链表utdot中

(2)依次考察点集中点的x坐标和y坐标,按照左下点、下左点、下右点、右下点、右上点、上右点、上左点和左上点的顺

(3)

序依次求出所有存在的二维极值点,并将点号保存到极值点集链

表utdot中

于三角形初步凸包.

(4)在步骤1的第(3)步中,把依次连接的边保存到棱边集链

同时,初始化顶点集链表endplist后,继续下

步骤2删除初步凸包内部点,又分为2个小步骤进行.

(1)依次考察点集中的点,从该点出发引1条平行于x轴的

射线,如果该射线与初步凸包的面不相交或有2个交点,则该点

在初步凸包的外部;如果只有1个交点,则该点在初步凸包的内

z轴的射线,然后再按照前面的方法判定.如果3个方向的射线

均与初步凸包的顶点或棱边相交,则该点在初步凸包的内部.[1]

(2)在步骤2的第

(1)步中,把初步凸包外部点的点号保存到

步骤3从点集链表plist中依次取出点PP,如果链表Plist

中点都取完,则执行步骤5,否则继续下一步.

中取出

步骤4共有10个小步骤.依次从棱边集链表llist

棱边lP,如果链表llist中的棱边都取完,则执行步骤4中第

(5)步,否则继续步骤4中第

(1)步.

(1)由步骤3中的点PP和步骤4中的棱边Ip构成1个面,

 

点都在该面的同一侧,则继续下一步,否则退出本轮循环,执行步骤4.

jK

(2)从顶点集链表endPIist中依次取出点来判断该面的性

质,如果所有点都在该面的同一侧,则继续下一步,否则退出本轮循环,执行步骤4.

(4)

把步骤4的第

(1)和

(2)步中满足要求的面加入到面集链

 

IIisttemP中.

(5)继续步骤4.

(6)若aIisttemP为空,执行步骤4中第(10)步,否则执行

下一步.

 

 

中,否

面相交1点,则把该点加入到待处理点集链表PIistdIe

则继续步骤4中第(7)步.当面集aIistdIe中所有点面都考察完

毕时,执行下

条棱边,则从棱边集llist中删除该棱边.当alistdle中的面全

中,执行下

部考察完毕时,把llisttemp添加到llist

(10)继续步骤3.

步骤5把极值点集链表utdot合并到链表plist中.最终凸包的点集为链表plist,棱边集为链表llist,面集为链表alist.

算法完成.

2.3算法改进方法

上述算法利用z轴方向的2个一维极值点和xy平面上最多

8个二维极值点形成初步凸包.根据定义3,x,y和z轴方向的一维极值点均分别在2个平面上.根据极值点的性质,所有一维

极值点均为凸包顶点.所以改进的方法是:

求出所有一维极值点并由其构成1个新初步凸包,这个新初步凸包大于等于上述算法中的初步凸包.新凸包可以排除更多的内部点,从而减少步骤3

和4中的判断次数,提高算法效率.

2.4时间复杂度分析

文献[7]证明凸包算法的时间复杂度下限为o(nlogn),该

结论也适用于三维凸包算法[1].常见的三维凸包算法中,卷包裹

法和文献[1]中

Z3—8算法的时间复杂度为o(n2)[1,6];分治

法和增量法为o(nlogn)[1].经典的普通算法是利用定义1的性质,通过3点构成的面,然后用点集中的点是否都在该面同一侧的方法来判断该面是否为凸包的面.当考察完毕点集中任意3

点所构成的面时,就可以得到凸包的所有面,进而求出凸包.其

算法的复杂度为o(n3).

 

时o(n);步骤2

中,删除内部点的复杂度为o(n);步骤3和4

构成1个用外部点扩展初步凸包的循环.外部点的数目与点集的数目相关,故循环外部的复杂度为o(n).循环内部中步骤4的第

(1)〜⑷步求顶点与棱边构成的面,并用扩展凸包顶点集中的点判断面的性质,其复杂度与扩展凸包中点的数目和棱边的数目相关.由于扩展凸包中点的数目相对于点集中点的数目和棱边的数目非常少,也可以认为是常数.所以,一般情况下其计算的复杂度为o

(1).由性质和推理知,极值点可以构成初步凸包,进而可以排除内部点.所以,即使在最坏情况下,其时间复杂度也不会达到o(n),可以认为其时间复杂度接近o(logn).步骤4的第(5)〜(10)步的时间复杂度为o

(1),所以步骤3和4的最坏时间

复杂度接近o(nlogn).步骤5耗时可以忽略不计.所以,整个

算法的最坏时间复杂度接近于o(nlogn),即接近于时间复杂度的下限.

3实验分析

实验所用计算机的CPU为AMD2500+内存为512MB.在

VC++6.0中的MFC编程环境中,分别实现普通算法和改进算法

图2给出点集中点的数目为500个时的三维凸包计算结果.分别对普通算法和改进算法求三维点集凸包进行程序实验.对不同容量(小于104)的点集分别进行100次实验,然后求出平均消耗的时间列于表1和图3.同时,表1对普通算法和改进算法平均消耗时间的比值进行计算.图3中横轴表示点集中的数目,纵轴表

示计算点集凸包运行所需要的平均消耗时间

图2500个点的凸包计算结果

图3实验比较

从表1和图3可见,随着点集容量的增大,改进算法的优势越发明显.普通算法与改进算法的消耗时间比随着点集容量的增大而增大.在第2.4节中普通算法和改进算法的时间复杂度分别为o(n3)和o(nlogn),它们之间的比值为o(n2/logn),与表

1中的比值相符合,从而证明理论分析与实验分析一致

但当点

从改进算法与普通算法的比较中可见,对于求102数量级的三维点集凸包,普通方法也能提供比较满意的求取时间,集容量达到103时,普通算法就不能满足要求.改进算法可以快速求取大量三维点集的凸包,不仅在时间上取得较大突破,而且充分利用极值点在凸包上以及凸包的性质,为算法优化提供新的思路.

另外,改进算法效率高的原因还在于:

(1)充分利用极值点,形成最大可能的初步凸包,排除初步凸包内部点,减少点的判断次数;

(2)在判断面的性质中,优先用极值点进行判断,利用极值点的性质,可以很快得出该面的性质,减少判断的工作量;(3)

在求取过程中,每次向扩展凸包中添加1个点,都构成1个新的扩展凸包,充分利用上一步中求取的成果,大大减少后面的计算工作量.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1