您好,欢迎来到年旅网。
搜索
您的当前位置:首页基于凸剖分的多边形窗口线裁剪算法

基于凸剖分的多边形窗口线裁剪算法

来源:年旅网
维普资讯 http://www.cqvip.com 第19卷第4期 计算机辅助设计与图形学学报 JOURNAL OF COMPUTER—AIDED DESIGN&COMPUTER GRAPHICS Vo1.19.No.4 Apr.,2007 2007年4月 基于凸剖分的多边形窗口线裁剪算法 李 静 ’ 王文成 吴恩华 ’ ”(中国科学院软件研究所计算机科学国家重点实验室(中国科学院研究生院北京100049) ) 北京 100080) (大学科学技术学院电脑与资讯科学系(1ij@ios.ac.cn) 摘要 以不增加新点的方式将多边形剖分为一些凸多边形,并基于这些多边形的边建立二叉树进行管理.裁剪计 算时,根据二叉树快速地找到与被裁剪线有相交的凸多边形,然后运用高效的凸多边形裁剪算法进行线裁剪.该方 法能自适应地降低裁剪计算的复杂度,使其在O(1ogn)和O( )之间变化,并在大多数情况下小于O( ),其中 是 多边形边数.虽然该方法需要进行预处理,但在许多应用(如多边形窗口对多边形的裁剪)中,其总执行时间(包括预 处理时间和裁剪时间)比已有的不需要预处理的裁剪算法少很多. 关键词 多边形窗口;线裁剪;凸剖分;二叉树;加速 中图法分类号TP391 Line Clipping Against a Polygon Based on Convex Decomposition Li Jing1,2)Wang Wencheng )Wu Enhua , ) (StateKeyLaboratory ofComputer Science,InstituteofSoftware,ChineseAcademyofSciences,Beijing 100080) (Graduate UniversityofChineseAcademyofSciences,Beijing 100049) (Department ofComputer and Information Science,FacultyofScience and Technology,UniersivtyofMacau,Macao) Abstract A novel line clipping algorithm against a general polygon is proposed in the paper.By the approach,the polygon is first decomposed into a set of convex polygons without adding new points and then these convex polygons are organized in a binary space partition tree,as a search tree.In the clipping procedure,the search tree is used to find the candidate convex polygons that intersect the clipped line segment and then an efficient line clipping algorithm against a convex polygon is applied to each such candidate.The algorithm can adaptively decrease the time complexity for line clipping,ranging from O(1ogn)to 0( ),but less than O( )in most cases,where is the number of the edges of the polygon. Although a preprocess is required。in many applications(e.g.clipping a polygon against another polygon), the total time consumed by the new method,including the time for preprocess and clipping calculation,is much less than that by the existing algorithms without preprocess. Key words acceleration olpygonal window; line clipping;convex decomposition;binary space partition tree; 关于凸多边形窗口的线裁剪问题,有比较深入 的研究 一。 ;而对于一般多边形窗口的线裁剪问题 理的效率并不高 .所以,已有方法大多不1进行预 处理而直接检测多边形的每条边,以找到与被裁剪 线所在直线(简称裁剪直线)相交的边,再进行裁剪 的研究还不多.虽然文献[1]提出将一般多边形进 行凸剖分,再基于凸多边形进行线裁剪;但该方法处 计算.为快速地找到这些相交的边,文献[4-6]用 修回日期:2006—09—01.基金项目:国家自然科学基金(6O373O51);国家“九七三”重点基础研究发展规划项目(2002CB312102);国家“八六 三”高技术研究发展计划(2006AA01Z306);国家“/k ̄ ̄--”高技术研究发展计划(2006AA01Z306);大学科研基金.李静,女,1972年生, 博士研究生,主要研究方向为计算机图形学.王文成,男,1967年生,博士,研究员,博士生导师,主要研究方向为科学计算可视化、虚拟现实. 吴恩华,男,1947年生,博士,研究员,博士生导师,主要研究方向为计算机图形学、真实感成像、虚拟现实、科学计算可视化. 维普资讯 http://www.cqvip.com 426 计算机辅助设计与图形学学报 2007正 简单的运算来尽量排除那些不相交的边.其中文献 [6]的方法是最快的,它通过对被裁剪线进行变换, 1基于凸剖分的裁剪算法 1.1 凸剖分及二叉树组织 使其平行x轴,然后用同样的变换处理多边形的顶 点;由此只需进行y坐标的检测就能得到相交的 边.这些方法要处理每条边,计算复杂度为0( ). 被裁剪线一般只与多边形的少数边相交.为 此,我们提出一种新的裁剪算法,避免处理许多不相 我们使用文献[7]的算法将多边形剖分成相对 于y轴的单调多边形,并仿照其单调多边形三角化 的方法将各个单调多边形凸剖分,即可完成多边形 的凸剖分. 对于剖分的凸多边形,我们建立二叉树来管理, 即用与多边形边共线的直线(称为分割直线)进行空 间划分,使得凸多边形迭代地被分到分割直线的两 边(与分割直线相交的凸多边形要在左右2个子结 点中都存在).这样选择分割直线是为了减少分割 直线与凸多边形相交的情况,以利于裁剪计算.二 叉树的中间结点存储分割直线,而叶子结点存储各 个凸多边形.如图1所示,图1 a所示为剖分的凸多 边形;图1 b,1 C所示为生成的2个二叉树,其中,中 间结点存放分割直线所在边,叶子结点存放凸多边 形,以编号表示. 交的边,可自适应地降低计算复杂度.它先将多边 形进行凸剖分,然后建立二叉树来管理这些凸多边 形.与已有的基于凸剖分的算法…不同,本文算法 对凸多边形进行了高效的管理.这样,在进行裁剪 计算时,先根据二叉树找到与被裁剪线相交的凸多 边形,再利用凸多边形线裁剪方法进行裁剪计算. 这样可以避免处理许多不相关边,因为没有被处理 的凸多边形有许多原多边形的边,而利用高效的凸 多边形线裁剪方法也可避免处理一些边. 虽然本文算法需要预处理,但因为许多应用中 要相对于一个多边形进行很多的线裁剪计算,所以 该算法还是能发挥积极作用的,如3D动态场景中 的阴影线裁剪. a被凸剖分的多边形 b较差的二叉树组织 c较好的二叉树组织 图1 凸多边形的二叉树组织示意图 由于2个子结点中都包含与分割直线相交的凸 多边形,所以会增加树结构的冗余.为去掉冗余并 使树结构尽可能平衡,以降低树的高度,提高裁剪时 剔除不相交凸多边形的效率,我们采用了下面2个 措施: 为提高选择速度,我们用一定的计算来定量地衡量 每个候选者,并设定一个阈值;然后,逐个考核候选 者,一旦得到满足阈值要求的,就以它为实际的分割 直线,不再考查其余候选者.这样虽然会略微降低 树的质量,但对裁剪效率的影响不大,且可将建树的 复杂度大幅度降低. 1)建立三叉树来替代二叉树,即每个结点分成 3个子结点,分别包含在其分割直线左边、右边及与 分割直线相交的凸多边形.显然,它是支持二分查 找检索的. 2)考查每条候选分割直线,衡量哪条能更好地 平衡左右子结点并减少中间子结点中的凸多边形个 数,由此来选择其中最好者为该结点的真正分割直 线.如图1 C中选择了好的分割直线,使得其树的高 度比图1 b少一层. 衡量计算是根据位于一条候选直线左边、右边 及与它相交的凸多边形个数来进行的.设 L, 和 分别表示左侧集合S L、右侧集合S 和相交集合 S 中所包含的凸多边形个数,下面计算3个参数, 并以“选择度”的值最大者为分割直线. 纯净度(pure degree,PD).PD=( L+ R)/ ( I+ R+ I),用于考查一个分叉方案中SI的容 量,该值越大,则S。所带来的树的冗余部分就越少. 平衡度(balance degree,BD).BD=1一} L一 显然,以遍历的方式来选择分割直线是费时的. 维普资讯 http://www.cqvip.com 4期 李 静等:基于凸剖分的多边形窗口线裁剪算法 427 R J/( L+ R),用于考查左、右子树是否平衡,该值 O( logn).后者的分析如下:设一个包含 个顶点 越大,则树越平衡. 的多边形被剖分成m个凸多边形,且每个凸多边形 选择度(selection degree,SD).SD=min(PD, 的边数平均为“.由欧拉公式可知O(mu)=O( ). BE)),协调参数PD与BE). 它对应的二叉树共有k层,找出每一层所有结点的最 1.2裁剪计算 佳分割直线所需要的总时间分别为 (1≤i≤k). 本文算法先根据二叉树找到很可能与被裁剪线 从根结点R包含的m个凸多边形中找出最佳分割 段相交的凸多边形,然后根据这些找到的凸多边形 直线S需要的时间T :L(mu) ,其中L是测试一 对被裁剪线段进行裁剪. 个点位于一条边哪一侧的计算开销,为常量. 在寻找很可能相交的凸多边形时,我们考查被 在找到S后,设位于S左侧、右侧和与其相交 裁剪线段的2个端点是否位于中间结点所对应分割 的多边形分别有a×m,b×m和c×m个,其中, 直线的两边.如果是,则该结点的2个子结点都要 a,b,C均为[0,1]间的实数,且a+b+C:1.故 进一步的检测;否则,只需要进一步检测包含被趁剪 T2=L((a+C)mu)2+L((b+c)mu)2=L((口+ 线段的那个子结点,而另一个子结点中的凸多边形 C) +(b+C) )(mu) .由于在选择分割直线时进行 则不需要参加后续的裁剪计算.如此迭代进行,直 了质量控制,因此一般有C <2ab.所以,T,< 至达到树的叶子结点,就找到了很可能与被裁剪线 L(a+b+c) (mu) =L(mu) T1=g2 T1,O< 段相交的凸多边形. g2<1.类似地,T =g ( —1)…g2 Tl,i=3,4,…; 根据找到的凸多边形对被裁剪线段进行裁剪 设g2,g3,g4,…g …中最大者为g,则建立二叉树 时,可选用各种高效的裁剪算法,如复杂度为0(1) ∞ 的凸多边形裁剪算法[引,但这种算法需要大量的空 的时间为∑ ≤T。∑g 一 <T。∑g 一 = =1 i=1 f=1 间存储预计算结果.为节约存储开销,我们将选用 T 没有额外空间需求且复杂度为0(1ogn)的凸多边 ,其时间复杂度为0((mu) ),即0( ). 1一g 形裁剪算法【2J.最后,综合被裁剪线段相对于所有 如果不以遍历的方式选择分割直线,则建树的 这些凸多边形的裁剪结果,得到该被裁剪线段相对 复杂度可降低很多.其分析如下: 于此多边形的裁剪结果. 首先,从一个结点所有的C条候选边中选择分 为进一步提高计算速度,我们采用了如下优化 割直线所需处理的直线数量将小于C,姑且记之为 技术: .对于任意一条边E,其选择度的取值范围为[O, 1)细分被裁剪线段.当被裁剪线段与一分割直 1],故设f(s)为边E所对应的选择度的概率密度 线相交时,根据交点剖分被裁剪线段,然后再对各个 函数.由概率密度的定义可知,边E的选择度优于 剖分的部分在各自相关的子结点中分别进行后续的 r1 处理.这样能减少考查很多无关的结点,提高检索 阈值 的概率P({s(E)≥ })=I f(s)ds,记之 Jtu 速度. 为P1.由于 ,1皆为常数,因此P1亦为常数.由P1 2)包围盒检测.相对于凸多边形裁剪时,先对 定义可知 =1的概率为P1, =2的概率为P1(1一 其包围盒进行检测,可以以较少的代价排除许多不 P1), =3的概率为P1(1一P1) ….由概率论相关 相交的凸多边形. 定理易知, 的期望值为1/P.,为・常数.因此,从 3)省略与新边的求交计算.对凸多边形进行裁 总边数为C的候选者中寻找分割直线所需的期望时 剪时,如果被裁剪线段与一个新边(为凸剖分而新加 间为D(Oc)=0(C). 的边)相交,则不计算该交点,因为该交点肯定属于 其次,由于树的形式由二叉变为三叉,任一多边 多边形内部. 形都不会在同一层次的不同结点中重复出现,因此 每一层次所有结点相关的凸多边形的边总数都相 2算法分析 同,为mu=0( ),故计算每一层次所有结点的分 割直线需要的时间皆为0( ).又由于树的总层次 2.1预处理的时间复杂度 数为K=0(1ogm),因此建立树结构总时间的期望 预处理时间包括2个部分:多边形的凸剖分和 值为KO( )=0( logm).由于多边形凸剖分的 树结构的建立.根据文献[7],前者的时间复杂度为 凸多边形数量与多边形凹点数r呈线性关系,即 维普资讯 http://www.cqvip.com 计算机辅助设计与图形学学报 2007正 0(m)=0(r),因此该时间复杂度可改写为 0( logr),当凹点数很多,达到0( )级别时,时间 边形进行裁剪计算,此时的复杂度为0(mlogu). 当m为0( )时,0(mlogu)=0( ).由于本文算 法的裁剪复杂度是与被裁剪线段关联的凸多边形个 复杂度即为0(nlogn). 综上可知,预处理的时间复杂度最坏情况下为 O( ),期望值为0( logr). 2.2预处理的空间复杂度 数相关的,而大多数情况下被裁剪线段不会与所有 的凸多边形相交.因此,本文算法在大多数情况下 的复杂度小于0( ). 在凸剖分过程中,剖分得到的凸多边形的个数 的复杂度是0( ),空间复杂度也是0( ).树结构 的空间需求包括在树的中间结点存储的分割直线的 线方程(即线方程 =口 +bf中的参数a 和bf)和在 叶子结点存储的各个凸多边形的顶点序列.由于凸 多边形的个数的复杂度是0( ),而树结构中所有 结点的数目与其叶子结点的数目呈线性关系,所以 树结构的空间复杂度是0( ).因此,本文算法的空 间复杂度为0(n). 2.3裁剪时间分析 3对比实验 我们用Visual C++6.0实现了本文算法,并与 文献[62算法进行对比.实验环境为AMD Athlon64+ 2.4GHz CPU,1 GB内存的PC机.在实验中,我们 基于椭圆来随机生成多边形,即根据多边形的顶点 数目在椭圆上随机取点,并在这些点中选定一些点, 使它们沿着与椭圆中心的连线进行一定幅度的随机 位移来形成凹点.被裁剪线段在比多边形包围盒稍 大的矩形区域内中随机生成.本文设计了3组实验. 实验1.本文算法预处理时间、空间以及裁剪时 间随窗口多边形规模变化的情况.共有10个随机多 边形参与实验,其边数由300均匀地增长到3000. 图2a~2 c所示分别为预处理时间、辅助结构占用 本文算法的裁剪计算复杂度与具体的裁剪计算 密切相关,因为该算法是通过选取被裁剪线段附近 的凸多边形来进行裁剪计算.当被裁剪线段与绝大 部分凸多边形相交时,该算法要处理原多边形的大 部分边,此时的复杂度较高;反之则低. 最好情况时,本文算法通过树结构找到只有一 个凸多边形是与被裁剪线段相交的,其计算包括基 于树结构找到此凸多边形的计算和关于此凸多边形 的空间以及裁剪时间随多边形的边数变化的曲线, 其中裁剪时间是1 000条随机线段的平均裁剪时 间,随机线段的长度与裁剪窗口多边形的边长度相 近.作为对比,图2 c中也绘制了文献[6]算法的裁 的线裁剪计算.容易推出,此时的复杂度为O(1ogm+ logu)=0(1og( “))=0(1ogn). 剪时间曲线.实验结果表明,本文算法比文献[6]算 法降低了计算复杂度. 15 \ 最坏情况时,被裁剪线段需要相对于所有凸多 5o0 ∞50 400 300 兰40 厘9 厘30 詈: 多边形边数 a预处理时间随窗口 多边形边数的变化 :亲 ̄制2。。。00 蓉e 箍3 0 蓉20 箍10 0 0 多边形边数 b空间随窗口多边形 边数的变化 多边形边数 c裁剪时间随窗口多边形 边数的变化 被裁剪边长度/% d裁剪时间随被裁剪线 长度的变化 图2本文算法性能实验结果 实验2.被裁剪线段长度对于裁剪时间的影响. 实验中以一个边数为2400的随机多边形作为窗口. 被裁边分为11组,每组1000条边,每组的边长与窗 口包围盒对角线的长度之比从0.01变化到0.99. 图2 d所示为各组的平均裁剪时间随被裁边长度变 实验3.本文算法在具体应用之一——多边形 窗口的多边形裁剪中的性能.实验中所用模型如图 3所示,表1所示为本文算法和文献[6]算法完成这 些操作需要的总时间(即将被裁剪多边形的每条边 相对于裁剪多边形窗口进行裁剪计算的总时间). 实验结果显示,即使加上预处理时间,本文算法的性 能也比文献[6]算法分别提高了1.42倍和9.36倍. 化的曲线.实验结果表明,本文算法可自适应地降 低计算复杂度,且被裁剪线越短,'速度越快. 维普资讯 http://www.cqvip.com 4期 李静等:基于凸剖分的多边形窗口线裁剪算法429 a多边形窗口 b被裁剪多边形 c被裁剪多边形位于 裁剪窗口内的边 图3多边形窗口对多边形裁剪的实验结果 4 结 语 本文提出针对一般多边形的线裁剪算法,能根 据裁剪计算的具体情况自适应地降低复杂度.该算 法将多边形进行凸剖分,并建立二叉树来管理剖分 的凸多边形,以便裁剪计算时可根据二叉树快速找 到与被裁剪线段很可能相交的凸多边形,再使用高 效的凸多边形裁剪算法进行裁剪计算.对于一个有 条边、r个凹点的多边形,本文算法的预处理时间 复杂度的期望值为0( logr),线裁剪计算的复杂 度在0(1ogn)与o( )之间自适应地变化,且大部 分情况下是小于0( )、甚至接近0(1ogn)的.实验 结果表明,本文算法能很好地提高裁剪速度,并在一 些应用(如多边形窗121对多边形的裁剪)中即使包括 预处理的执行速度,依然要比不需要预处理的同类 裁剪算法快很多. 参 考 文 献 [1]Rogers David F.Procedural dements for computer graphics [M].2nd ed.Beijing:China Machine Press.2002 [23 Skala V.O(1gN)line clipping algorithm in E [J].Computers &Graphics,1994,18(4):517—524 [3]Skala V.Line clipping in E with o(1)processign complexity [J].Computers&Graphics,1996,20(4):523—530 【4]Liu Yongkul,Yan Ye,Shi Jiaoying.An efficient algorithm for line clipping against a polygon[J].Chinese Journal of Computers,1999,22(11):1209—1214(in Chinese) (刘勇奎,颜叶,石教英.一个有效的多边形窗IZl的线裁剪 算法[J].计算机学报,1999,22(11):1209—1214) [5]Lu Guodong,Xing Shihai,Peng Qunsheng. An efficient lagorithm of line clipping against polygonal window based on the vertex encoding[J].Chinese Journal of Computers,2002,25 (9):987—993(in Chinese) (陆国栋,邢世海,彭群生.基于顶点编码的多边形窗口线裁 剪高效算法[J].计算机学报,2002,25(9):987—993) [6]Huang Y Q,Liu Y K.An algorithm for the clippign against a oplygon based on shearing transformation[J].Computer Graphics Forum,2002,21(4):683—688 [7]de Berg Mark,Overmars Mark.Computational geometry: lagorithms and applications[M].2nd ed.Bedin:Sprigner. 2000 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务