- 1、本文档共45页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机图形学第4讲图形裁剪
网上声称的“通常梁友栋-Barsky算法比Cohen-Sutherland算法效率更高,因为需要计算的交点数目减少了。”不成立 * * * * 梁友栋-Barsky裁剪算法 具体计算时,把P0P1写成其参数方程: 其中Δx=x1-x0,Δy=y1-y0 窗口内线段应满足 求u! * 梁友栋-Barsky裁剪算法 不等式可写作: 即 线段与裁剪边界的交点有 * y x yT yB xL xR A B C D P1 P0 梁友栋-Barsky裁剪算法 窗口边界的四条边分成两类,一类称为始边,另一类称为终边 当Δx≥0时,称x=xL为始边, x=xR为终边 当Δx0时,称x=xL为终边, x=xR为始边 当Δy≥0时,称y=yB为始边, y=yT为终边 当Δy0时,称y=yB为终边, y=yT为始边 * y x yT yB xL xR P1 P0 P0 P1 A B 可知边界交点的参数: 当pi0时, 求得的ti必是P0P1和始边的交点的参数 当pi0时, ui必是P0P1和终边的交点的参数 * 梁友栋-Barsky裁剪算法 求出P0P1和两条始边的交点的参数u0’和u0’’,令 u0 = max(u0’,u0’’,0) 则u0 就是图中A、B和P0三点中最靠近P1的点的参数 求出P0P1和两条终边的交点的参数u1’和u1’’,令 u1 = min(u1’,u1’’,1) 则u1 就是图中C、D和P1三点中最靠近P0的点的参数 * x y yT yB xL xR A B C D P1 P0 t0 t1 梁友栋-Barsky裁剪算法 当u1u0时,参数t∈[u0, u1]的线段就是P0P1的可见部分 当u1u0时,整个直线段为不可见 * x y yT yB xL xR C A B D P1 P0 u0 u1 B C A D P1 P0 u0 u1 当pi=0时, 若qi0 则P0P1是完全不可见的 若qi≥0, 则P0P1平行于裁剪边界,并且至少部分在窗口内 * xL xR y x C D A B E F yB yT 梁友栋-Barsky裁剪算法 梁友栋-Barsky裁剪算法 算法步骤 1、初始化线段交点的参数:u1=0,u2=1; 2、计算出4个裁剪边界的p、q值; 3、调用函数clipTest(),在函数中根据p、q来判断:是舍弃线段还是改变交点的参数。 (1) 当p0时,参数r用于更新u0:(u0=max{u0,rk}) (2) 当p0时,参数r用于更新u1:(u1=min{u1,rk}) (3)如果更新了u0或u1后,使u0u1,则舍弃该线段 (4)当p=0且q0时,因为线段平行于边界并且位于边界之外,则舍弃该线段。 4、p、q的4个值经判断后,如果该线段未被舍弃,则裁剪线段的端点坐标由参数u1和u2的值决定。 * 梁友栋-Barsky裁剪算法 特点 通常比Cohen-Sutherland算法效率更高 更新参数u1、u2仅仅需要一次除法 Cohen-Sutherland算法: 而且每次求交计算都需要做乘除法 * 多边形裁剪 多边形裁剪基于直线的裁剪,可以把多边形裁剪分解为边界的线段,逐段来进行裁剪 不仅在于求出新的顶点,删去界外顶点,还在于形成正确的顶点序列 * 多边形的描述方式 多边形可以描述为一组顶点按一定顺序连接而成的有向点列 一般可将多边形的顶点按逆时针方向顺序形成有向线段,进而连接成一个环来描述多边形的组成 数据结构上,可用链表结构来描述 * 2 3 4 1 多边形裁剪的特点 多边形的各条边是顺次连接 直线裁剪 把一条线段的两个端点孤立考虑,会产生鼓励线段 裁剪之后各条边不一定能保持原来的连接顺序 * 裁剪前 错误裁剪 正确裁剪 多边形裁剪算法 Sutherland-Hodgman算法 每次用窗口的一条边界对多边形进行裁剪 把落在窗口外部的图形去掉,落在窗口内部的图形保留 并把它作为下一次待裁剪的多边形 连续用窗口的四条边界对原始多边形进行裁剪后,最后得到的就是裁剪后的结果多边形 * 每一步考虑窗口的一条边界及其延长线构成的裁剪线。该裁剪线把平面分成两个部分,一部分包含窗口,称为可见一侧;另一部分称为不可见一侧。依序处理多边形各边时会有四种情况: 边SP全部处于可见一侧:此时将终点P放入新的顶点序列 边SP全部处于不可见一侧:此时没有点放入新的顶点序列 边SP从可见一侧进入不可见一侧:此时将SP与窗口边界的交点I放入新的顶点序列 边SP从不可见一侧进入可见一侧:此时将SP与窗口边界的交点I和终点P放入新的顶点序列 * S P P S S P I P S I 输出P 无输出
文档评论(0)