第3章2D图形作物.ppt

  1. 1、本文档共57页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章2D图形作物

计算机图形学基础;本章主要内容;裁 剪;“取景器”=窗口;裁剪的目的 判断图形元素是否落在裁剪窗口之内并找出其位于内部的部分 裁剪处理的基础 图元关于窗口内外关系的判别 图元与窗口的求交 假定条件 矩形裁剪窗口:[xmin,xmax]×[ymin,ymax] 待裁剪点或线段:;点裁剪 点(x, y)在窗口内的充分必要条件是: 问题:对于任何多边形窗口,如何判别?;线段相对于该窗口的情况有: ①线段全部位于窗口的内部(A); ②线段全部位于窗口外部(B、C); ③线段的中间部分在窗口内,而二端点在窗口外部(D); ④线段的一端在窗口内,而另一端在窗口外(E)。;待裁剪线段和窗口的关系 线段完全可见 显然不可见 线段至少有一端点在窗口之外,但非显然不可见 ;3.2.1 直接求交算法;例1 设有直线段P0P1,有一个矩形裁剪窗口,写出对该线段裁剪的算法。;求线段与窗口交点;基本思想:对于每条待裁剪的线段P1P2分三种情况处理:①若P1P2完全在窗口内,则显示该线段P1P2,简称“取”之;②若P1P2完全在窗口外,则丢弃该线段,简称“舍”之;③若线段既不满足“取”的条件,也不满足“舍”的条件,则求线段与窗口边界的交点,在交点处把线段分为两段,其中一段完全在窗口外,可舍弃之,然后对另一段重复上述处理。 核心思想:分区编码和线段分割。 ; 分区编码方法:图形区域划分成九个区域。 四位编码 表示端点所处的位置: (---) 上 下 右 左 第一位为“1”时,表示点在y=yT的上方; 第二位为“1”时,表示点在y=yB的下方; 第三位为“1”时,表示点在x=xR的右方; 第四位为“1”时,表示点在x=xL的左方。;每个区域赋予一个四位编码,CtCbCrCl,上下右左;;第一步 判别线段两端点是否都落在窗口内,如果是, 则线段完全可见;否则进入第二步; 第二步 判别线段是否为显然不可见,如果是,则裁 剪结束;否则进行第三步 ; 第三步 求线段与窗口边延长线的交点,这个交点将 线段分为两段,其中一段显然不可见,丢弃。 对余下的另一段重新进行第一步,第二步判断, 直至结束 ;当??段的两个端点的编码的逻辑“与”非零时 ,线段为显然不可见的。也可以进行“按位与”运算,可知这两个端点是否同在视区的上、下、左、右; 如code1=0101,code2=0110,则code1code2=0100,表示在窗口下方。 问题:显然可见的编码如何判断??;对一条线段的可见性测试方法: (1)若线段两个端点的四位二进制编码全为0000,即两端点编码逻辑或运算为0,那么该线段完全位于窗口内,可直接保留; (2)对两端点的四位二进制编码进行逻辑与运算,若结果不为零,那么整条线段必位于窗口外,可直接舍弃; (3)否则,这条线段既不能直接保留,也不能直接舍弃,它可能与窗口相交。此时,需要对线段进行再分割,即找到与窗口边线的一个交点,根据交点位置,赋予四位二进制编码,并对分割后的线段按照一定的顺序(如左右下上)进行检查,决定保留、舍弃或再次进行分割。重复这一过程,直到全部线段均被舍弃或保留为止。;Cohen-Sutherland裁剪算法;例:分别给下列直线段编码,并判断是否需要剪裁。;例:Cohen-SutherLand算法过程:;过程: 1)输入线段AB的两端点坐标A(x0,y0)、B(x1,y1),以及裁剪窗口的四条边界:yt,yb,xl,xr。 2)对AB编码,A的编码codeA=0001,B的编码为codeB=0110。 3)线段AB裁剪的基本过程(按左右下上的顺序): ①由于codeA | codeB≠0,对AB不能全部保留;又因为codeA codeB=0,对AB不能全部舍弃,因此要对AB进行求交处理。 ②由codeA=0001知A在窗口左边外侧,按左右下上的顺序求AB与窗口左边交点为P1,AP1必在窗口外,故裁剪掉,并用A替换P1。如图(b)所示。(交点替换是为了方便编程循环)。 ③对P1B重复上述处理。A(原P1)编码为0000,B编码为0110;由于A(原P1)已在窗口内,交换A和B的坐标值与编码,则B编码为0000,A编码变为0110,按左右下上顺序求得右交点为P3;A(原B)P3必在窗口外,故裁剪掉,并用A替换P3。如图(c)所示。 ④A的编码还没有达到0000,再求得下边交点为P2,AP2必定在窗口外,故裁剪掉,并用A替换P2。如图(d)所示。 ⑤对剩下的直线段AB再进行判断,现在A编码为0000,B编码为0000,由于codeA

文档评论(0)

sy78219 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档