- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
天津大学计算机学院
Cohen-Sutherland直线裁剪算法小结 本算法的优点在于简单,易于实现。他可以简单的描述为将直线在窗口左边的部分删去,按左,右,下,上的顺序依次进行,处理之后,剩余部分就是可见的了。在这个算法中求交点是很重要的,他决定了算法的速度。另外,本算法对于其他形状的窗口未必同样有效。 特点:用编码方法可快速判断线段的完全可见和显然不可见。 缺点:裁剪一条直线段仍然需要多次求交! 问题:如何确定t的范围? 设P0(x0,y0),P1(x1,y1),线段P0P1上任一点P(x,y), 线段的参数表示为: x=x0+t△x y=y0+t△y ( 0=t=1) 其中 △x=x1-x0 △y=y1-y0 若P在窗口内,则应满足: 梁友栋-Barsky算法 令 p1= - △x q1= x0-xmin p2= △x q2= xmax-x0 p3= - △y q3= y0-ymax p4= △y q4= ymax-y0 则上述四个不等式可以表示为 piti≤ qi i=1,2,3,4对应于左、右、上、下边界 pi 0 ti≥ qi/pi pi 0 ti ≤ qi/pi pi =0 qi 0 时,线段不可见 qi 0 时 梁友栋-Barsky算法 当pi =0时 若qi 0 时,线段不可见 (如图中AB,有pR=0,qR0) 若qi 0 时, ti任意, (如图中的EF就是这种情况,它使pL=0,qL0和pR=0,qR0。这时由于EF和x=xL及x=xR平行,故不必去求出EF和x=xL及x=xR的交点,而让EF和y=yT及y=yB的交点决定直线段上的可见部分。) * 对于线段裁剪,最简单的裁剪方法是把各种图形扫描转换为点之后,再判断各点是否在窗口内。但那样太费时,一般不可取。这是因为有些图形组成部分全部在窗口之外,可以完全排除,不必进行扫描转换。所以,一般采用先裁剪再扫描转换的方法。 * * * Cohen-sutherland算法的大意是:对于每条线段P1P2,分为三种情况处理。(1)若P1P2完全在窗口内,则显示该线段;(2)若P1P2明显在窗口外,则丢弃;(3)若线段既不满足取的条件,也不满足舍的条件,则把线段分为两端。其中一段完全在窗口外,可弃之。然后重复上述处理。 例如对上页图,线段AB的两个端点均在窗口内,故整条线段均可取之显示。线段EF的两端点均在窗口外,且两端点均在窗口下边界的左方,即处于左边界与其延长线所定义的半平面不含窗口的一侧。故该线段明显在窗口外,可弃之。线段IJ虽然全在窗口外,但由于没有简单的判断条件,故放到第三种情况。其余线段都只有一部分落在窗口内,不能简单的取或者舍。 * 为了使计算机能够快速的判断一条线段与窗口属何种关系,采用如下的编码方法:延长窗口的边,把未经裁剪的图形区域分为9个区,每个区具有一个四位代码,即四位二进制数。 一旦给所有的线段点建立了区域码,就可以快速判断哪条线段完全在裁剪窗口内,哪条线段完全在窗口外。 * 若线段两个端点的的编码均为0时,怎说明线段的端点P1、P2均在窗口内,那么整条线段必在窗口内,应取之。 当两个编码按位与运算后的结果不为0时,则说明两个端点同在窗口的上方、下方、左方或右方。不可见,舍弃。 若不满足上述两种情况,则列为第三种。 * 如果上述两种情况均不成立,则按第三种情况处理。求出线段与窗口某边的交点,在交点处把线段一分为二,其中必有一段完全在窗口外,可以弃之。再对另一段重复进行上述处理。 * * * 在cohen-sutherland算法中,在找到与裁剪矩形边界的交点之前或者完全舍弃该线段之前,必须对一条线段进行多次求交计算。NLN算法在求交计算前进行更多的区域测试来减少求交计算。与cohen-sutherland算法相比,NLN算法的比较次数和除法次数减少。 * 对于端点为P0P1的线段,首先决定P0相对于裁剪矩形九个区域的位置。 我们只考虑这三个区域。如果p0位于其他六个区域中的任何一个位置,则可以用对称变换将其变换到三个区域中的一个。例如在裁剪窗口的正上方的区域,可以对直线y= - x的对称变换到裁剪窗口的左边区域,或者用90度逆时针旋转也可以。 * * 如果P0在裁剪窗口之内,P1在窗口外,我们就设置了四个区域,LTRB。如果P1在窗口内,则直接将线段存储显示。 如果P0位于窗口的左侧,则设定如图b所示的四个区域,这四个区域决定了线段的唯一边界。
文档评论(0)