图形学实验报告直线段的裁剪算法.docxVIP

  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文档。上传文档
查看更多
实验报告 Experimentation 应port of Taiyuan teachers College 旅 一、 实验目的 二、 实验原理 三、 实验仪器及材料 四、 实验方法 五、 实验记录及数据处理 六、 误差分析及讨论 系部计算机系 姓名 年级三年级 同组者 课程图形学 口期 项 同 直线段的裁剪算法 一、实验目的: 熟悉图形裁剪的基木知识 掌握Cohen-Sutherland直线裁剪算法 二、实验内容: 在矩形窗口的裁剪算法中,考虑到构成图形的基本元素就是线段,曲线可看 成是有很多小线段逼近而成的,因此,讨论线段的裁剪算法更为实用,即 Cohen-Sutherland 裁剪算法。 Cohen-Sutherland裁剪算法具体思路如下。 任意平面线段和矩形窗口的位置关系只会有如下3种: 完全落在窗口内。 完全落在窗口外。 部分落在窗口内,部分落在窗口外。 要想判断线段和窗口的位置关系,只要找到线段的两端点相对于矩形窗口的 位置即可, 线段的两端点相对于矩形窗口的位置可能会有如下几种情况: 线段的两个端点均在窗口内,这时线段全部落在窗口内,完全可见,应予 以保留。 线段的两个端点均在窗口边界线外同侧,这时线段全部落在窗口外,完全 不可见,应予以舍弃。 线段的一个端点在窗口内,另一个端点在窗口外,这时线段部分可见,应 求出线段与窗口边界线的交点,从而得到线段在窗口内的可见部分。 线段的两个端点均不在窗口内,但不处于窗口边界线外同侧,这时有可能 线段是部分可见的,也可能是完全不可见的。 Cohen-Sutherland裁剪算法就是按照上述思路来对线段进行裁剪的,只是 在线段的两端点相对于矩形窗口的位置上,巧妙地运用了编码的思想。 首先,延长窗口的四条边界线,将平面划分成9个区域,然后,用四位二进 制数C3C2C1C0对这9个区域进行编码,编码规则如下: 第0位CO:当线段的端点在窗口的左边界之左时,该位编码为1,否则,该 位编码为Oo 第1位Cl:当线段的端点在窗口的右边界之右吋,该位编码为1,否则,该 位编码为0。 第2位C2:当线段的端点在窗口的下边界之下时,该位编码为1,否则,该 位编码为Oo 第3位C3:当线段的端点在窗口的上边界之上时,该位编码为1,否则,该 位编码为Oo 于是算法步骤可描述如下: 步骤1:根据上述编码规则,对线段的两个端点进行编码。 步骤2:根据线段的两端点编码判断线段相对于窗口的位置关系,从而决定 对线段如何剪取。 两端点编码全为0000吋,说明线段完全位于窗口内,是完全可见的,于是 显示此线段。 两端点编码逐位逻辑与不为0时,说明线段的两个端点位于窗口外同侧, 即此线段完全位于窗口外,是完全不可见的,于是全部舍弃,不显示此线段。 两端点编码逐位逻辑与为0时,说明此线段或者部分可见,或者完全不可 见。此吋需要计 算出线段与窗口某一边界线或边界线的延长线的交点,若交点 在窗口边界线的延长线上,则说明该线段完全位于窗口外,不予以显示;若交 点在窗口边界线上,则对以其中一个交点为分割点的两端线段,再分别对其端 点进行编码,并按照上述(1)和(2)所示的方法进行测试,从而舍弃完全位 于窗口外的一段线段,保留并显示完全位于窗口内的一段线段。 三、实验代码: Cohen-SutherLand实现裁剪直线的两个关键函数 //计算点x, y的编码 void CCohenSutherLandView::CompOutCode(float x,float y,CRect* rcct,OutCode* outCodc) { outCode-all 二 0; outCode-top = outCode-〉bottom =0; if (y rect-top) { outCode-top = 1; outCode-all +二 1; } else if (y rect-bottom) outCode-bottom = 1; outCode-all +二 1; } outCode~right 二 outCodc~left 二 0; if (x rect-right) { outCode-right 二 1; outCode~all +二 1; } else if(x rect-left) { outCode-left 二 1; outCode-all +二 1; //Cohen-SutherLand线段裁剪算法 void CCohenSutherLandView::CohenSutherLineClip(CDC* pDC, float xO, float yO,float xl,float yl, CRect* rect) { BOOL accept, done; OutCode outCodeO, o

文档评论(0)

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

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

1亿VIP精品文档

相关文档