10二维裁剪要点.pptVIP

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

第六章 二维裁剪;裁剪定义;裁剪对象和窗口;处理裁剪;直线段裁剪的常用算法: Cohen-Sutherland算法 梁友栋—Barsky算法 Nicholl-Lee-Nicholl算法 中点算法 ;一、点在窗口内外的判断;二、线段在窗口内外的判断;图示; 三、Cohen-Sutherland算法; 为了能快速判断出线段与裁剪窗口的关系,采用四位数码来标识线段的端点与窗口区域的关系,所以Cohen- SutherLand算法又称为编码算法。 四位数码的表示。;编码的含义; 这样的编码方法将窗口及其邻域分为9个区域:;这就带来二个优点: 1、容易将不需剪裁的线段挑出 规则是: 如果两个端点的编码全为0,则完全可见,直接显示不需裁剪 如果线段的两个端点位于同一个域(上域、下域、左域、右域),它们的编码按位与不全为0,该线段显然不可见,不需剪裁; 否则,该线段为可能剪裁线段。 ;2、对可能剪裁的线段缩小了与之求交的边框范围 规则是:如果线段的一个端点在上(下,左,右)域,其对应的位为1,则此线段与上边框求交,然后删去上边框以上的部分。这样,一条线段至多只需与四条边框求交。该规则对直线的另一端点也适用。;算法;如何求交点;然后,计算交点;算法流程;算法实现;编码;编码; { x=rect-xmax; y=y1+(y2-y1)*(x-x1)/(x2-x1);} else if ((BOTTOMcode)!=0) { y=rect-ymin; x=x1+(x2-x1)*(y-y1)/(y2-y1); } if (code==code1) { x1=x; y1=y; encode(x,y,code1); } else { x2=x; y2=y; encode(x,y,code2); } }//for else进行求交测试 }while(!done) if(accept) Line((int)x1,(int)y1,(int)x2,(int)y2); }// for C-S-L程序 ;6.2 多边形裁剪;多边形裁剪; ;一、Sutherland-Hodgman算法;令多边形的顶点按边线顺时针/或逆时针走向排序:P1, P2, …, Pn。则该多边形由P1P2,P2P3, …… PnP1共n条边首尾相接组成。 各边先与上窗边求交。求交后删去多边形在窗之上的部分,并插入上窗边及其延长线的交点之间的部分 ,从而形成一个新的多边形。 然后,新的多边形按相同方法与右窗边相剪裁。如此重复,直至与各窗边都剪裁完毕。 多边形与每一条窗边的裁剪,是依次处理多边形各顶点并生成新多边形顶点序列的过程, 。 如何确定新多边形的顶点?;内侧空间与外侧空间,窗口边将整个空间划分为两个半空间 多边形的边与半空间的关系 ;情况1:如果s, p均在窗边之内侧,那么,将p保存。 情况2:如果s在窗边内侧,p在外侧,那么,求出sp边与窗边的交点i,保存i,舍去p。 情况3:如果s, p均在窗边之外侧,那么,舍去p。 情况4:如果s在窗边之外侧,p在内侧,那么,求出sp边与窗边的交点i,依次保存i和p。;;typedef struct{ float x,y; }Vertex; typedef Vertex Edge[2]; typedef Vertex Vertexarray[MAX];/*MAX允许的多边形最大顶点个数 void Intersect(Vertex *s, Vertex *p, Edge clipBoundary, Vertex *I) { if(clipBoundary[0].y==clipBoundary[1].y)//表示水平裁剪窗边 { I-y=clipBoundary[0].y; I-x=s-x+(c

文档评论(0)

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

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

1亿VIP精品文档

相关文档