- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章裁剪概要
梁友栋-Barsky裁剪算法特点: 梁友栋-Barsky算法只能应用于矩形窗口的情形。通常梁友栋-Barsky算法比Cohen-Sutherland算法效率更高,因为需要计算的交点数目减少了。更新参数u1、u2仅仅需要一次除法;线段与窗口边界的交点仅计算一次,就计算出u1、u2最后的值。相比之下,即使一条线段完全落在裁剪窗口之外,Cohen-Sutherland算法也要对它反复求交点,而且每次求交计算都需要做乘除法。 梁友栋-Barsky和Cohen-Sutherland算法还可以扩展为三维裁剪算法。 、梁友栋-Barsky裁剪算法程序: #include graphics.h int clipTest(float p,float q,float *u1,float *u2) { int flag=1; /*flag为标志变量,0:表示舍弃;1:表示可见。*/ float r; if(p0.0) { r=q/p; if(r*u2) flag=0; else if(r*u1) *u1=r; /*u1取进入点的最大参数值*/ } else if(p0.0) { r=q/p; if(r*u1) flag=0; else if(r*u2) *u2=r; /*u2取离开 点的最小参数值*/ } else if(q0.0) /*p=0,且q0。平行于边界,而且在界外的线*/ flag=0; return(flag); } void clipLine(int xwmin,int ywmin,int xwmax,int ywmax, int x1,int y1,int x2,int y2) { float u1=0.0,u2=1.0,dx=x2-x1,dy; if(clipTest(-dx,x1-xwmin,u1,u2)) if(clipTest(dx,xwmax-x1,u1,u2)) { dy=y2-y1; if(clipTest(-dy,y1-ywmin,u1,u2)) if(clipTest(dy,ywmax-y1,u1,u2)) { if(u21.0) { x2=x1+u2*dx; /*通过u2求得裁剪后的p2端点*/ y2=y1+u2*dy; } if(u10.0) { x1=x1+u1*dx; /*通过u1求得裁剪后的p1端点*/ y1=y1+u1*dy; } line(x1,y1,x2,y2); /*裁剪后的线段输出*/ } } } 例 * * 多边形裁剪-1/2 用直线段裁剪算法,可以吗? 新的问题: 图1 因丢失顶点信息而去法确定裁剪区域 A B A B 图2 原来封闭的多边形变成了孤立的线段 边界不再封闭,需要用窗口边界的恰当部分来封闭它 * 1 2 1 2 3 (a) (b) (c) A B 图3 裁剪后的多边形顶点形成的几种情况 分裂为几个多边形 多边形裁剪-2/2 关键: 不仅在于求出新的顶点,删去界外顶点 还在于形成正确的顶点序列 * Sutherland-Hodgman算法-1/4 分割处理策略: 将多边形关于矩形窗口的裁剪分解为多边形关于窗口四边所在直线的裁剪。 流水线过程(左上右下):左边的结果是右边的开始。 亦称逐边裁剪算法 * Sutherland-Hodgman算法-2/4 内侧空间与外侧空间 多边形的边与半空间的关系 线段与当前裁剪边的位置关系 可见一侧 窗口 (a) 输出Pi+1 当前裁剪边 Pi+1 Pi 可见一侧 窗口 (a) 无输出 当前裁剪边 Pi+1 Pi 可见一侧 窗口 (a) 输出I 当前裁剪边 Pi+1 Pi 可见一侧 窗口 (a) 输出I和Pi+1 当前裁剪边 Pi+1 Pi * Sutherland-Hodgman算法-3/4 裁剪结果的顶点构成: 裁剪边内侧的原顶点; 多边形的边与裁剪边的交点。 顺序连接。 优点: 裁剪算法采用流水线方式,适合硬件实现。 可推广到任意凸多边形裁剪窗口 * Sutherland-Hodgman算法-4/4存在的问题 逐边裁剪要求裁剪窗口为凸多边形,那么凹多边形窗口怎么办? 逐边裁剪法对凹多边形裁剪时,裁剪后分裂为几个多边形,这几个多边形沿边框产生多余的线段? 图6 逐边裁剪法对凹多边形裁剪时可能出现的问题 3 2 1 8 7 6 9 5 4 10 3 2 1 7 6 5 4 10 8 9
您可能关注的文档
最近下载
- 广东长大美国科来福道路预防性养护和桥梁无缝伸缩缝系统工艺.pptx VIP
- 九年一贯制学校管理.pptx VIP
- 人力资源服务公司章程(申请人力资源许可证参考用).pdf VIP
- 四川大学生物医学工程基础课件.ppt
- 马克思的剩余价值理论课件(PPT 33页).ppt VIP
- SOC-OCV电池测试报告.docx VIP
- 纯化过滤专题报告之一:离子交换与吸附树脂行业报告,纯,现代工业生产中极致的魅力.pdf VIP
- 人类辅助生殖技术和人类精子库伦理原则.doc VIP
- 投标项目总体架构及技术解决方案.docx VIP
- 高二奋发+勇攀高峰+课件--2025-2026学年高二上学期开学第一课主题班会.pptx VIP
文档评论(0)