[计算机软件及应用]二维图形裁剪课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《[计算机软件及应用]二维图形裁剪课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件及应用 计算机软件 应用 二维 图形 裁剪 课件
- 资源描述:
-
1、二维图形裁剪二维图形裁剪u裁剪概述裁剪概述u 线段裁剪线段裁剪直接求交算法;直接求交算法;Cohen-Sutherland算法;(重点,算法实现)算法;(重点,算法实现)梁友栋梁友栋-Barsky算法算法u 多边形裁剪多边形裁剪 Sutlerland_Hodgman算法(难点,算法实现)算法(难点,算法实现)Weiler-Athenton算法算法 u 字符裁剪字符裁剪裁裁 剪剪二维图形裁剪二维图形裁剪预备知识:求交预备知识:求交(矩形窗口)(矩形窗口)裁剪裁剪三维裁剪三维裁剪长方体裁剪体长方体裁剪体棱锥体体裁剪体棱锥体体裁剪体编码裁剪算法编码裁剪算法被裁剪对象:被裁剪对象:直线段、多边形直线段
2、、多边形、三维实体、三维实体一、裁剪概述一、裁剪概述 裁剪:裁剪:是裁去窗口之外物体或物体部分的一种操作。是裁去窗口之外物体或物体部分的一种操作。剪裁的应用剪裁的应用1 1、从定义的场景中抽取出用于观察的部分;、从定义的场景中抽取出用于观察的部分;2 2、在三维视图中标识出可见面;、在三维视图中标识出可见面;3 3、防止线段或对象的边界混淆;、防止线段或对象的边界混淆;4 4、用实体造型来创建对象;、用实体造型来创建对象;5 5、显示多窗口的环境;、显示多窗口的环境;6 6、允许选择图形的一部分来进行拷贝,移动和删除。、允许选择图形的一部分来进行拷贝,移动和删除。“取景器”=窗口l裁剪的目的裁
3、剪的目的判断图形元素是否落在裁剪窗口之内并找出其位判断图形元素是否落在裁剪窗口之内并找出其位于内部的部分于内部的部分l裁剪处理的基础裁剪处理的基础图元关于窗口内外关系的判别图元关于窗口内外关系的判别图元与窗口的求交图元与窗口的求交l假定条件假定条件矩形裁剪窗口:矩形裁剪窗口:xmin,xmaxymin,ymax待裁剪点或线段:待裁剪点或线段:点裁剪点裁剪 点点(x,y)在窗口内的充分必要条件是:在窗口内的充分必要条件是:问题:对于任何多边形窗口,如何判别?问题:对于任何多边形窗口,如何判别?xxxminmaxyyyminmaxWytWybWxlWxrP1P2P3线段相对于该窗口的情况有线段相对
4、于该窗口的情况有:线段线段全部全部位于位于窗口的内部窗口的内部(A););线段线段全部全部位于位于窗口外部窗口外部(B、C););线段的线段的中间部分中间部分在在窗口内窗口内,而二端点在窗口外部,而二端点在窗口外部(D););线段的线段的一端在窗口内一端在窗口内,而,而另一端在窗口外另一端在窗口外(E)。)。x=xLx=xRy=yBy=yTABCDE二、线段裁剪二、线段裁剪待裁剪线段和窗口的关系待裁剪线段和窗口的关系 线段完全可见线段完全可见显然不可见显然不可见 线段至少有一端点在窗口之外,但非显然不可见线段至少有一端点在窗口之外,但非显然不可见 保留丢弃裁剪为提高效率,算法设计时应考虑:为提
5、高效率,算法设计时应考虑:(一)快速判断线段完全在窗口内或外的情形;一)快速判断线段完全在窗口内或外的情形;(二二)设法减少裁剪情形中求交次数和每次求交时所需的计算量设法减少裁剪情形中求交次数和每次求交时所需的计算量。直接求交直接求交算法算法基本思想基本思想是:判断直线与窗口的位置关系,确定该直是:判断直线与窗口的位置关系,确定该直线是完全可见、部分可见或完全不可见,然后输出处线是完全可见、部分可见或完全不可见,然后输出处于窗口内线段的端点,并显示此线段。于窗口内线段的端点,并显示此线段。根据直线段和窗口的关系可知:根据直线段和窗口的关系可知:(1 1)整条线在窗口之内。此时,不需剪裁,显示整
6、条线段。)整条线在窗口之内。此时,不需剪裁,显示整条线段。(2 2)整条线在窗口之外,此时,不需剪裁,不显示整条线段。)整条线在窗口之外,此时,不需剪裁,不显示整条线段。(3 3)部分线在窗口之内,部分线在窗口之外。)部分线在窗口之内,部分线在窗口之外。此时,需要求出线段与窗口边界的交点,并将窗口外的线段部此时,需要求出线段与窗口边界的交点,并将窗口外的线段部分剪裁掉,显示窗口内的部分。分剪裁掉,显示窗口内的部分。例例1 设有直线段设有直线段P0P1,有一个矩形裁剪窗口,写出,有一个矩形裁剪窗口,写出对该线段裁剪的算法。对该线段裁剪的算法。1)求出直线)求出直线P0P1与窗口的交点与窗口的交点
7、I,如图(,如图(a)所示。)所示。2)取)取P0 I线段显示,擦除线段显示,擦除I P1线段,并将线段,并将P1替换替换I,即,即得得P0P1线段,裁剪结束。如图(线段,裁剪结束。如图(b)所示。)所示。P0P1IP0P1(a)(b)求线段与窗口交点求线段与窗口交点设线段两端点坐标为:和则过这两点设线段两端点坐标为:和则过这两点的直线方程为:的直线方程为:其中其中k为斜率。上述直线方程与窗口各边界的交点为:为斜率。上述直线方程与窗口各边界的交点为:左:左:右:右:下:下:上:上:11111212)()(yxxkyxxxxyyykyxxkyxxLL11)(kyxxkyxxRR11)(0)(/1
8、(11kyyyykxxBB0)(/1(11kyyyykxxTT)(111yxP,)(222yxP,基本思想基本思想:对于每条待裁剪的线段:对于每条待裁剪的线段P1P2分三种情况处理:分三种情况处理:若若P1P2完全在窗口内,则显示该线段完全在窗口内,则显示该线段P1P2,简称,简称“取取”之;之;若若P1P2完全在窗口外,则丢弃该线段,简称完全在窗口外,则丢弃该线段,简称“舍舍”之;之;若线段既不满足若线段既不满足“取取”的条件,也不满足的条件,也不满足“舍舍”的条件,的条件,则求线段与窗口边界的则求线段与窗口边界的交点交点,在交点处把线段分为两段,在交点处把线段分为两段,其中一段完全在窗口外
9、,可舍弃之,然后对另一段重复上其中一段完全在窗口外,可舍弃之,然后对另一段重复上述处理。述处理。核心思想:分区编码和线段分割核心思想:分区编码和线段分割。Cohen-Sutherland 算法算法(编码算法编码算法)分区编码方法:图形分区编码方法:图形区域划分成九个区域划分成九个区域。区域。四位编码四位编码 表示端点所处的位置:表示端点所处的位置:(-)(-)上上 下下 右右 左左第第一一位为位为“1”1”时,表示点在时,表示点在y=yy=yT T的上方的上方;第第二二位为位为“1”1”时,表示点在时,表示点在y=yy=yB B的下方的下方;第第三三位为位为“1”1”时,表示点在时,表示点在x
10、=xx=xR R的右方的右方;第第四四位为位为“1”1”时,表示点在时,表示点在x=xx=xL L的左方的左方。000000010010100001001001101001010110 x=xLx=xRy=yBy=yT11111 1 1 1 1 1 1 1#define LEFT 1#define RIGHT 2#define BOTTOM 4#define TOP 8编码原则编码原则每个区域赋予一个四位编码,每个区域赋予一个四位编码,CtCbCrCl,上下右左;,上下右左;elseyyCt0max1当elsexxCr0max1当elsexxCl0min1当elseyyCb0min1当编码方法
11、编码方法练习:请给出右图的线练习:请给出右图的线段端点编码(段端点编码(端点编码:端点编码:定义为它所在区域的编码)定义为它所在区域的编码)x=xLx=xRy=yBy=yTABCDE第一步第一步 判别线段两端点是否都落在窗口内,如果是,判别线段两端点是否都落在窗口内,如果是,则线段则线段完全可见完全可见;否则进入第二步;否则进入第二步;第二步第二步 判别线段是否为判别线段是否为显然不可见显然不可见,如果是,则裁,如果是,则裁 剪结束;否则进行第三步剪结束;否则进行第三步 ;第三步第三步 求线段与求线段与窗口边延长线窗口边延长线的交点,这个交点将的交点,这个交点将 线段分为两段,其中一段显然不可
12、见,丢弃。线段分为两段,其中一段显然不可见,丢弃。对余下的另一段重新进行第一步,第二步判断,对余下的另一段重新进行第一步,第二步判断,直至结束直至结束 Cohen-Sutherland 算法算法步骤编码判断编码判断当线段的两个端点的编码的当线段的两个端点的编码的逻辑逻辑“与与”非零非零时时,线段,线段为显然不可见的。为显然不可见的。也可以进行也可以进行“按位于按位于”运算运算,可知,可知这两个端点是否同在视区的上、下、左、右;这两个端点是否同在视区的上、下、左、右;如如code1=0101,code2=0110,则,则code1&code2=0100,表示表示在窗口下方。在窗口下方。问题:问题
13、:显然可见的编码如何判断?显然可见的编码如何判断?编码判断编码判断对一条线段的可见性测试方法:对一条线段的可见性测试方法:(1)若线段两个端点的四位二进制编码全为)若线段两个端点的四位二进制编码全为0000,即两端,即两端点编码逻辑或运算为点编码逻辑或运算为0,那么该线段完全位于窗口内,可直,那么该线段完全位于窗口内,可直接保留;接保留;(2)对两端点的四位二进制编码进行逻辑与运算,若结果)对两端点的四位二进制编码进行逻辑与运算,若结果不为零,那么整条线段必位于窗口外,可直接舍弃;不为零,那么整条线段必位于窗口外,可直接舍弃;(3)否则,这条线段既不能直接保留,也不能直接舍弃,)否则,这条线段
14、既不能直接保留,也不能直接舍弃,它可能与窗口相交。它可能与窗口相交。此时,需要对线段进行再分割,即找到与窗口边线的一个交此时,需要对线段进行再分割,即找到与窗口边线的一个交点,根据交点位置,赋予四位二进制编码,并对分割后的线点,根据交点位置,赋予四位二进制编码,并对分割后的线段按照一定的顺序(如左右下上)进行检查,决定保留、舍段按照一定的顺序(如左右下上)进行检查,决定保留、舍弃或再次进行分割。重复这一过程,直到全部线段均被舍弃弃或再次进行分割。重复这一过程,直到全部线段均被舍弃或保留为止。或保留为止。例:例:P1P2C1=0001C2=0000P1P2C1=0100C2=0101BCP1P2
15、C1=0101C2=1010P1P2ADC1=0000C2=0000例:例: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|codeB0,对,对AB不能全部保留;又因为不能全部保留;又因为codeA&codeB
16、=0,对,对AB不能全部舍弃,因此要对不能全部舍弃,因此要对AB进行求交处理。进行求交处理。由由codeA=0001知知A在窗口左边外侧,按左右下上的顺序求在窗口左边外侧,按左右下上的顺序求AB与窗口左边与窗口左边交点为交点为P1,AP1必在窗口外,故裁剪掉,并用必在窗口外,故裁剪掉,并用A替换替换P1。如图(。如图(b)所示。)所示。(交点替换是为了方便编程循环)。(交点替换是为了方便编程循环)。对对P1B重复上述处理。重复上述处理。A(原(原P1)编码为)编码为0000,B编码为编码为0110;由于;由于A(原(原P1)已在窗口内,交换)已在窗口内,交换A和和B的坐标值与编码,则的坐标值与
17、编码,则B编码为编码为0000,A编码变为编码变为0110,按左右下上顺序求得右交点为,按左右下上顺序求得右交点为P3;A(原(原B)P3必在窗口外,故裁剪掉,必在窗口外,故裁剪掉,并用并用A替换替换P3。如图(。如图(c)所示。)所示。A的编码还没有达到的编码还没有达到0000,再求得下边交点为,再求得下边交点为P2,AP2必定在窗口外,故必定在窗口外,故裁剪掉,并用裁剪掉,并用A替换替换P2。如图(。如图(d)所示。)所示。对剩下的直线段对剩下的直线段AB再进行判断,现在再进行判断,现在A编码为编码为0000,B编码为编码为0000,由于,由于codeA|codeB=0,全在窗口中,故全部
18、保留。,全在窗口中,故全部保留。最后得到裁剪后的线段为最后得到裁剪后的线段为AB,算法结束。,算法结束。求交测试顺序固定求交测试顺序固定(左上右下)左上右下)最坏情形,线段求交四次。最坏情形,线段求交四次。对于那些非完全可见、又非显然不可见的线段,需要对于那些非完全可见、又非显然不可见的线段,需要求交求交(如线段(如线段AD),求交前,求交前先测试先测试与窗口哪条边所在与窗口哪条边所在直线有交?直线有交?(按序判断端点编码中各位的值按序判断端点编码中各位的值ClCtCrCb)1)特点:用编码方法可快速判断线段)特点:用编码方法可快速判断线段-完全可见和显然不可见。完全可见和显然不可见。2)特别
展开阅读全文