任意多边形的剪裁算法设计与实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
任意多边形的剪裁算法设计与实现.doc

本课题任意多边形的剪裁算法设计与实现 如有需要,请至 / 下载,最新最好的设计资料,尽在96paper 资源简介 该毕业设计使用C++编程语言,开发工具:Visual C++ 6.0 截图信息 论文摘抄 3.多边形剪裁算法设计 3.1 多边形剪裁算法概述 为了便于下面对算法的讲解,本节首先介绍有关多边形裁剪的一些基本概念及术语. (1) 多边形的边的方向与内外区域的关系. 如果多边形的边的方向是顺时针的(即多边形的顶点是以顺时针的顺序输入的),则在沿着多边形的边走时,右侧区域为多边形的内部;相反,如果多边形的边的方向是逆时针的,则在沿着多边形的边走时,左侧区域为多边形的内部. (2) 进点和出点的定义. 设I是多边形S和C的一个交点,如果S沿着C的边界的方向在I点从C的外部进入C的内部,则称I为对于C的一个进点.反之,如果S在I点从C的内部出到C的外部,则称I为对于C的一个出点. 例如,对于如图1所示的多边形C和S及其交点I,若S的方向为逆时针方向S1→S2→S3→S4→S5,则I5I1I3是对于C的进点,I4I2I6是对于C的出点.如果S的方向为顺时针方向S5→S4→S3→S2→S1,则对于C来说,I2I4I6是进点,I1I5I3是出点. (3) 进点和出点的判定. 假设多边形S的一条边SiSi+1与另一多边形C有交点.当点Si是C的外点时,则沿着S的走向,边SiSi+1与C的第一个交点I必是C的进点;而当Si是C的内点时,I必是C的出点.由于沿着S的边界对于C的进点和出点是交替出现的(两多边形的边重合或者两多边形在顶点处相交的情况除外.这类特殊情况的处理将在第5节进行讨论),所以,只需判断第1个交点是进点还是出点,其他交点的进出性则可依次确定. 对于一个多边形裁剪另一个多边形的过程,就是求两个多边形的相交区域(我们称其为结果多边形或输出多边形).结果多边形是由实体多边形位于裁剪多边形内的边界和裁剪多边形位于实体多边形内的边界组成的. 3.2 多边形剪裁算法原理 多边形是计算机制图中常用的图形元素,大到行政区域,小到各种地物图块,都是多边形元素。 多边形的裁剪比直线要复杂得多。因为经过裁剪后,多边形的轮廓线仍要闭合,而裁剪后的边数可能增加,也可能减少,或者被裁剪成几个多边形,这样必须适当地插入窗口边界才能保持多边形的封闭性。这就使得多边形的裁剪不能简单地用裁剪直线的方法来实现。 ??? 对于多边形的裁剪,人们研究出了多种算法,其中萨瑟兰德-霍奇曼(Sutherland-Hodgman)算法根据相对于一条边界线裁剪多边形比较容易这一点,把整个多边形先相对于窗口的第一条边界裁剪,然后再把形成的新多边形相对于窗口的第二条裁剪,如此进行到窗口的最后一条边界,从而把多边形相对于窗口的全部边界进行了裁剪。 ?其算法描述为: 取多边形顶点Pi(i=1,2,…,n) ,将其相对于窗口的第一条边界进行判别,若点Pi位于边界的靠窗口一侧,则把Pi记录到要输出的多边形顶点中,否则不作记录。检查Pi点与Pi-1点(i=1时,检查Pi与Pn点)是否位于窗口边界的同一侧。若是,Pi点记录与否,随Pi-1点是否记录而定;否则计算出PiPi-1与窗口边界的交点,并将它记录到要输出的多边形的顶点中去。如此而已判别所有的顶点P1P2…Pn后,得到一个新的多边形Q11,Q12,…,Qm,然后用新的多边形重复上述步骤1、2,依次对窗口的第二、第三和第四条边界进行判别,判别完后得到的多边形Q14,Q24,…,Qm4即为裁剪的最后结果。 ?? 对于多边形的裁剪,人们研究出了多种算法,其中Sutherland-Hodgeman算法解决了裁剪窗口为凸多边形窗口的问题,但一些应用需要涉及任意多边形窗口(含凹多边形窗口)的裁剪。Weiler-Atherton多边形裁剪算法正是满足这种要求的算法。在算法中,裁剪窗口、被裁剪多边形可以是任意多边形:凸的、凹的(内角大于180度)、甚至是带有内环的(子区)。 裁剪窗口和被裁剪多边形处于完全对等的地位,则称:   被裁剪多边形为主多边形,记为A;   裁剪窗口为裁剪多边形,记为B。 主多边形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。 观察图3不难发现裁剪结果区域的边界由被裁剪多边形的部分边界和裁剪窗口的部分边界两部分构成,并且在交点处边界发生交替,即由被裁剪多边形的边界转至裁剪窗口的边界,或者反之。由于多边

文档评论(0)

docindoc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档