版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
7.3多边形的裁剪前面讨论了线段的裁剪,多边形的裁剪是以线段裁剪为基础的,但又不同于线段的裁剪。通常有一种错觉,认为只要把多边形的每条边用直线裁剪方法裁剪后,就完成了对多边形的裁剪。P110其实不然,在计算机图形学中,多边形定义了一个封闭的二维区域,它把平面分成多边形内区和外区,一个多边形的裁剪结果仍应该是封闭的多边形,而不是一些孤立的线段。如图中所示,裁剪后的多边形仍应保留原多边形各边的连接顺序并加入一些新顶点(交点、窗口顶点)及删除界外顶点;一个凹多边形裁剪后,可能分裂为几个多边形。7.3多边形的裁剪多边形裁剪的常用算法
1.Sutherland-Hodgeman多边形裁剪2.Weiler-Atherton任意多边形裁剪7.3.1Sutherland-Hodgeman多边形裁剪
Sutherland-Hodgman算法也叫逐边裁剪法,该算法是萨瑟兰德(I.E.Sutherland)和霍德曼(Hodgman)在1974年提出的。这种算法采用了分割处理、逐边裁剪的方法。一、Sutherland-Hodgeman多边形裁剪算法思想:每次用窗口的一条边界(包括延长线)对要裁剪的多边形进行裁剪,裁剪时,顺序地测试多边形各顶点,保留边界内侧的顶点,删除外侧的顶点,同时,适时地插入新的顶点:即交点和窗口顶点,从而得到一个新的多边形顶点序列。然后以此新的顶点序列作为输入,相对第二条窗边界线进行裁剪,又得到一个更新的多边形顶点序列。依次下去,相对于第三条、第四条边界线进行裁剪,最后输出的多边形顶点序列即为所求的裁剪好了的多边形。如下图所示。7.3.1Sutherland-Hodgeman多边形裁剪
二、Sutherland-Hodgeman多边形裁剪算法实现:
三、Sutherland-Hodgeman多边形裁剪算法演示:四、点在边界内侧的判断方法:为了判断pi点是否在边界内侧可用坐标比较法和更通用的向量叉积符号判别法。1、坐标比较法将点的某个方向分量与边界进行比较。例如,判断某点是否在下边界内侧,用条件判别式:if(p[i][1]>=ymin)即可。对其它边界也一样。但不能写成通用公式。
7.3.1Sutherland-Hodgeman多边形裁剪
2、向量叉积法为简单计,测试点表示为P点。假设窗口边界方向为顺时针,如图中所示,对于其中任一边界向量,从向量起点A向终点B看过去:如果被测试点P在该边界线右边(即内侧),AB×AP的方向与X-Y平面垂直并指向屏幕里面,即右手坐标系中Z轴的负方向。反过来,如果P在该边界线的左边(即外侧),这时AB×AP的方向与X-Y平面垂直并指向屏幕外面,即右手坐标系中Z轴的正方向。设:点P(x,y)、点A(xA,yA)、点B(xB,yB),
向量AB={(xB-xA),(yB-yA)},
向量AP={(x-xA),(y-yA)},那么AB×AP的方向可由下式的符号来确定:V=(xB-xA)·(y-yA)-(x-xA)·(yB-yA)(3-14)因此,当V≤0时,P在边界线内侧;而V>0时,P在边界线外侧。7.3.1Sutherland-Hodgeman多边形裁剪
五、Sutherland-Hodgeman多边形裁剪算法特点:Sutherland-Hodgeman多边形裁剪算法具有一般性,被裁剪多边形可以是任意凸多边形或凹多边形,裁剪窗口不局限于矩形,可以是任意凸多边形。
上面的算法是多边形相对窗口的一条边界进行裁剪的实现,对于窗口的每一条边界依次调用该算法程序,并将前一次裁剪的结果多边形作为下一次裁剪时的被裁剪多边形,即可得到完整的多边形裁剪程序。7.3.1Sutherland-Hodgeman多边形裁剪
7.3.2Weiler-Atherton任意多边形裁剪Sutherland-Hodgeman算法解决了裁剪窗口为凸多边形窗口的问题,但一些应用需要涉及任意多边形窗口(含凹多边形窗口)的裁剪。Weiler-Atherton多边形裁剪算法正是满足这种要求的算法。一、Weiler-Atherton任意多边形裁剪算法描述:在算法中,裁剪窗口、被裁剪多边形可以是任意多边形:凸的、凹的(内角大于180o)、甚至是带有内环的(子区),见下图。裁剪窗口和被裁剪多边形处于完全对等的地位,这里我们称:1、被裁剪多边形为主多边形,记为A;2、裁剪窗口为裁剪多边形,记为B。7.3.2Weiler-Atherton任意多边形裁剪主多边形A和裁剪多边形B的边界将整个二维平面分成了四个区域:
1、A∩B(交:属于A且属于B);
2、A-B(差:属于A不属于B);
3、B-A(差:属于B不属于A);
4、A∪B(并:属于A或属于B,取反;即:不属于A且不属于B)。内裁剪即通常意义上的裁剪,取图元位于窗口之内的部分,结果为A∩B。外裁剪取图元位于窗口之外的部分,结果为A-B。观察右图不难发现裁剪结果区域的边界由被裁剪多边形的部分边界和裁剪窗口的部分边界两部分构成,并且在交点处边界发生交替,即由被裁剪多边形的边界转至裁剪窗口的边界,或者反之。由于多边形构成一个封闭的区域,所以,如果被裁剪多边形和裁剪窗口有交点,则交点成对出现。这些交点分成两类:一类称“入”点,即被裁剪多边形由此点进入裁剪窗口,如图中a、c、e;
一类称“出”点,即被裁剪多边形由此点离开裁剪窗口,如图中b、d、f。7.3.2Weiler-Atherton任意多边形裁剪3、求出被裁剪多边形和裁剪窗口相交的所有交点,并给每个交点打上“入”、“出”标记。
然后将交点按顺序插入序列Ⅰ得到新的顶点序列Ⅲ,并放入数组3中;
同样也将交点按顺序插入序列Ⅱ得到新的顶点序列Ⅳ,放入数组4中;4、初始化输出数组Q,令数组Q为空。接着从数组3中寻找“入”点。
如果“入”点没找到,程序结束。5、如果找到“入”点,则将“入”点放入S中暂存。6、将“入”点录入到输出数组Q中。并从数组3中将该“入”点的“入”点标记删去。7、沿数组3顺序取顶点:如果顶点不是“出点”,则将顶点录入到输出数组Q中,流程转第7步。
否则,流程转第8步。8、沿数组4顺序取顶点:如果顶点不是“入点”,则将顶点录入到输出数组Q中,流程转第8步。
否则,流程转第9步。9、如果顶点不等于起始点S,流程转第6步,继续跟踪数组3。否则,将数组Q输出;流程转第4步,寻找可能存在的分裂多边形。7.3.2Weiler-Atherton任意多边形裁剪算法在第4步:满足“入”点没找到的条件时,算法结束。算法的生成过程见下图所示。7.3.2Weiler-Atherton任意多边形裁剪四、Weiler-Atherton任意多边形裁剪算法实现:1、算法在实现中,需要用到六个数组,分别用来存放:被裁剪多边形、裁剪窗口、交点数组、插入交点后的被裁剪多边形、插入交点后的裁剪窗口、输出多边形。2、由于交点具有“入”、“出”标记,因此凡与交点有关的数组都要采用结构数组类型:
structpoint
{
doublex;
doubley;
intflag;
}交点数组,数组3,数组4;标记flag有三种状态:0:非交点;
1:“入”点;
-1:“出”点。
7.3.2Weiler-Atherton任意多边形裁剪五、Weiler-Atherton任意多边形裁剪算法:六、Weiler-Atherton任意多边形裁剪算法特点:1、裁剪窗口可以是矩形、任意凸多边形、任意凹多边形。2、可实现被裁剪多边形相对裁剪窗口的内裁或外裁,即保留窗口内的图形或保留窗口外的图形,因此在三维消隐中可以用来处理物体表面间的相互遮挡关系。3、裁剪思想新颖,方法简洁,裁剪一次完成,与裁剪窗口的边数无关。七、Weiler-Atherton任意多边形裁剪算法小结:前面介绍的是内裁算法,即保留裁剪窗口内的图形。而外裁算法(保留裁剪窗口外的图形)同内裁算法差不多。外裁算法与内裁算法不同的是:1、从被裁剪多边形的一个“出点”开始,碰到出点,沿着被裁剪多边形按顺时针方向搜集顶点序列;7.3.2Weiler-Atherton任意多边形裁剪2、而当遇到“入点”时,则沿着裁剪窗口按逆时针方向搜集顶点序列。按上述规则,如此交替地沿着两个多边形的边线行进,直到回到起始点为止。这时,收集到的全部顶点序列就是裁剪所得的一个多边形。由于可能存在分裂的多边形,因此算法要考虑:将搜集过的“出点”的出点记号删去,以免重复跟踪。将所有的出点搜集完毕后算法结束。Weiler-Atherton算法的的设计思想很巧妙,裁剪是一次完成,不象Sutherland-Hodgman多边形裁剪算法,每次只对裁剪窗口的一条边界及其延长线进行裁剪,如裁剪窗口有n条边,则要调用n次S-H算法后才能最后得出裁剪结果。但Weiler-Atherton算法的编程实现比Sutherland-Hodgman算法稍难,主要难在入、出点的查寻以及跨数组搜索上。7.4字符的裁剪字符也是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 西京学院《微机原理与接口技术》2022-2023学年期末试卷
- 西南林业大学《地理信息系统原理与应用》2022-2023学年第一学期期末试卷
- 从事专业与所学专业不一致专业技术人员申报职称岗位任职合格证明附件6
- 西京学院《电机学实验》2021-2022学年期末试卷
- 西华师范大学《中学思想政治学科教学论》2021-2022学年第一学期期末试卷
- 西华师范大学《音乐作品分析与写作》2023-2024学年第一学期期末试卷
- 西华师范大学《文艺作品演播》2022-2023学年第一学期期末试卷
- 2024-2025学年高中物理举一反三系列专题4.1 普朗克黑体辐射理论(含答案)
- 房地产金融与投资概论教学课件第二章房地产抵押贷款
- 匆匆 朱自清课件
- 医疗废物流失泄漏应急处理流程图
- 长方形、正方形的面积和周长复习课件
- WI-QA-02-034A0 灯具成品检验标准
- 农业信息技术 chapter5 地理信息系统
- 信号与系统(第十章Z-变换)
- 部编版六年级上语文阅读技巧及解答
- 斯派克max操作手册
- 项目四 三人表决器ppt课件
- 结合子的机械加工工艺规程及铣槽的夹具设计
- 林武樟 完整阳宅讲义 笔记版[方案]
- 《会滚的汽车》ppt课件
评论
0/150
提交评论