- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
直线裁减,多边形裁剪[]
实验报告
学院:计算机科学与信息学院 专业:计算机科学与技术 班级:07软件2
姓名 学号 实验组 实验时间 2010-5-10 指导教师 成绩 实验项目名称 直线裁减,多边形裁剪 实验目的 掌握常用的裁减及消隐算法:直线、多边形的裁减。
在MFC上实现基本算法。
实验要求 在其中的一种算法中中选取一种完成直线的裁减算法。
实验原理 Cohen-SutherLand算法(编码算法)
直线算法原理
对于每条线段P1P2分为三种情况处理:
(1)若P1P2完全在窗口内,则显示该线段P1P2。
(2)若P1P2明显在窗口外,则丢弃该线段。
(3)若线段不满足(1)或(2)的条件,则在交点处把线段分为两段。其中一段完全在窗口外,可弃之。然后对另一段重复上述处理。
为快速判断,采用如下编码方法:
由窗口四条边所在直线把二维平面分成9个区域(右图),每个区域赋予一个四位编码:CtCbCrCl(上下右左);直线的端点都按其所处区域赋予相应的区域码,用来标识出端点相对于裁剪矩形边界的位置。
各位编码含义:
上:if yymax,Ct=1,else, 0;
下:if yymax,Cb=1,else, 0;
右:if xxmax,Cr=1,else, 0;
左:if xxmax,Cl=1,else, 0;
对某线段的两个端点的区号进行位与运算,可知这两个端点是否同在视区的上、下、左、右;
如果两端点的编码均为0000,表示直线在窗口内。
如果两端点的编码相与不为0000,表示直线在窗口外。
如果两端点的编码不全为0000,但相与为0000,则该直线部分可见,需计算直线与窗口的交点,确定哪一部分可见。
Sutherland-Hodgema算法(多边形裁减算法原理)
通过对单一边或面的裁剪来实现多边形的裁剪
分割处理策略:将多边形关于矩形窗口的裁剪分解为多边形关于窗口四边所在直线的裁剪。一次用窗口的一条边裁剪多边形。
流水线过程(左上右下):前边的结果是后边的输入。
亦称逐边裁剪算法。
算法的每一次输出(包括中间结果)都是一个多边形的顶点表,且所有顶点均位于相应窗口裁剪边或面的可见一侧。由于多边形的每一条边需要与裁剪边或面分别进行比较,因此只需要讨论单条边和单个裁剪边或面之间可能的
位置关系。假设S,P为多边形的两个相邻顶点,且S为该边的起点,P为该边的终点,则变SP与裁剪边或面之间只有4种可能的关系
把平面分成两个部分:一部分包含窗口,成为可见一侧;另一部分称为不可见一侧。依序考虑多边形各边的两端点S,P。它们与裁剪线的位置关系只有4中情况。
可见一侧 S 可见一侧
P
S P
(1)S,P 均在可见一侧,计为P点 (2)S,P均不在可见一侧
P 可见一侧 可见一侧
P
S S
(3)S可见,P不可见 (4)S不可见,P可见
由上可见,每一次将多边形的边与裁剪边或面比较后,输出一个或两个顶点,也可能无输出点。如果SP边完全可见,则输出P点,不必输出起点S,因为顶点是按顺序处理的,S是作为前一边的终点输出的。如果SP边完全不可见,则无输出。如果SP边部分可见,则SP边可能进入或离开裁剪边或面的可见一侧。 如果SP边离开裁剪边或面的可见一侧,则输出SP与裁剪边或面交点。如果SP边进入裁剪边或面的可见一侧,则输出两点,一个为SP与裁剪边或面的交点,一个是P点。
对于多边形的第一个顶点,只需判断其可见性。如果可见,则输出且作为起点S;否则无输出,但还是要作为S保存,以便后续点处理。
对于最后一条边PnP1,其处理方法是:标志第一顶点为F,这样最后一条边则为PnF,可与其他边作相同的处理。
实现方法:
设置二个表:
输入顶点表:用于存放被裁剪多边形的顶点p1-pm。
输出顶点表:用于存放裁剪过程中及结果的顶点q1-qn。
输入顶点表中各顶点要求按一定顺序排列,一般可采用顺时针或逆时针方向。
相对于裁剪窗口的各条边界,按顶点表中的顺序,逐边进行裁剪
实验环境 Visual studio VC++ 6.0
实验步骤 根据Cohen-Sutherland直线剪裁算法思想,编写相应的程
文档评论(0)