第6章二维裁剪技巧.pptVIP

  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文档。上传文档
查看更多
课堂练习;第六章二维裁剪;知识点;要求;6.1直线段裁剪;待裁剪线段和窗口的关系;6.1.1点裁剪 ;6.1.2 直接求交算法 ;6.1.3 Cohen-Sutherland 算法 ;编码方法;端点编码:也就是它所在区域的编码。结论: 当端点的编码值全0时,该端点必在窗口内部,完全可见。 当线段的两个端点的编码的逻辑“与”非零时 ,线段为显然不可见的。 当线段两个端点的编码不同时,比如两个端点的Cl编码一个为1,一个为0,则线段与窗口左边有交点,求出该交点。进行下一步判断。;裁减算法:见P110页。 示例:裁减过程(以线段AD,EJ为例)。;编码方法适用场合:大窗口与小窗口 问题:裁剪一条直线段需要多次求交点 PD:在最坏情况下,Cohen-Sutherland裁剪算法中,一条线段需要求交4次。P110第08次课结束;6.1.4 Nicholl-Lee-Nicholl算法;(1)窗口四边所在的直线将二维平面划分成9个区域,假定P1落在区域0、4、5;(2)从P0点向窗口的四个角点发出射线,这四条射线和窗口的四条边所在的直线一起将二维平面划分为更多的小区域 。;(3)确定P1所在的区域(根据斜率计算) 。求交点,确定P0P1的可见部分 。;6.1.5 中点分割算法 ;算法过程:同时从P0 ,P1出发找最近可见点;6.1.6 梁友栋-Barskey算法;6.1.6 梁友栋-Barskey算法 ; 一维裁剪问题: 定义数轴: P0 为坐标原点,P0P1 的长度为单位长度。坐标点的参数表示成: Q0、Q1对应的参数为 、 ,假定 P0、P1 、Q0、Q1的位置关系,见下一页;情况1; P0、P1 、Q0、Q1的位置参数分别为: 因此裁剪的结果也就是满足条件的参数t的区间。 接下来就是找到这个满足条件的参数区间。;生成诱导窗口;P0P1和竖直方向始边终边的交点的参数记为: 和 P0P1和水平方向始边终边的交点的参数记为: 和 。 LR和TB所对应参数区间分别为;结论:当 时,P0P1有可见部分,且对应参数区间为 ;否则P0P1完全不可见。;具体计算时,把P0P1写成参数方程 x = x0 + Δx t y = y0 + Δy t 其中Δx=x1 - x0,Δy=y1 - y0。把窗口边界的四条边分成两类,一类称为始边,另一类称为终边。 当Δx≥0(Δy≥0)时,称x=xL(y=yB)为始边,x=xR(y=yT)为终边。 当Δx0(Δy0)时,???x=xL(y=yB)为终边, x=xR(y=yT)为始边。;这样可以根据Qi来判断始边,终边,以及交点的参数t;点的参数为 ti = Di/Qi, i= L,R,B,T 当Qi0时(比如QLQB小于0),求得的ti必是P0P1和始边的交点的参数。 当Qi0时,ti必是P0P1和终边的交点的参数。 当Qi=0时,直线段与窗口水平或者垂直,可以特殊情况特殊处理 若Di0,则P0P1是完全不可见的。如图4中AB,有QR=0,DR0)。 Di≥0时则是另一种情况,图中的EF就是这种情况,它使QL=0,DL0和QR=0,DR0。这时由于EF和x=xL及x=xR平行,故只要求出EF和y=yT及y=yB的交点即可决定直线段上的可见部分。;3、梁友栋-Barsky算法的C程序实现:;Boolean ClipT(float q, float d, float *t0, float *t1) If (q0){ r=d/q; if (rt1) return false; else if (rt0) {t0=r;return true;} } else if (q0){ r=d/q; if (rt0) return false; else if (rt1) {t1=r;return true;} else if (d0) return flase; else return true; };6.2 多边形裁剪;;6.2.1 Suthlerland-Hodgman算法 ;;;多边形:V0 V1 V2 … Vn-1 内侧空间与外侧空间:裁剪窗口所在的一边为内侧,另一侧为外侧。 多边形的任一条边SP关于窗口某一条边的裁剪:如下图;关于裁剪窗口某一条边的裁剪算法流程;示例:;s;关于下边裁减;推广:关于任意凸多边形窗口的裁剪。;6.2.2 Weiler-Athenton算法 ;约定多边形顶点的排列顺序(使多边形区域位于有向边的左侧 ) 外环:逆时针 内环:顺时针 四个区域 : 内裁剪结果: 外裁剪结果:;成对出现的两类交点(假设矩形环是裁剪多边形) 进点:主多边形边界由此进

文档评论(0)

过各自的生活 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档