第三讲 图形变换与裁剪.pptVIP

  • 0
  • 0
  • 约4.45千字
  • 约 33页
  • 2022-10-04 发布于山西
  • 举报
1)特点:用编码方法可快速判断线段-- 完全可见和显然不可见。 2)特别适用二种场合: 大窗口场合; 窗口特别小的场合(如, 光标拾取图形时, 光标看作小的裁剪窗口。) 编码算法特点: 5.6中点分割直线段裁剪算法 5.6.1 中点分割算法原理 算法的思路: 采用与前相似的线段端点编码和相应的检查方法,先判定完全可见线段和显然不可见线段。 否则,将线段分割成相等的两段,然后对每一小段重复上述的检查,直至找到每段与窗口边界的交点或分割小段的长度充分小,可以视为一点时为止。 5.6.2 中点计算公式 对于端点坐标为P0(x0,y0)和P1(x1,y1)的直线段,中点坐标的计算公式为: 展开形式为 P0 P1 P 中点分割算法 对分辩率为2N*2N的显示器,上述二分过程至多进行N次。 主要过程只用到加法和除法运算,适合硬件实现,它可以用左右移位来代替乘除法,这样就大大加快了速度。 中点分割裁剪算法特点 * 假设窗口是标准矩形,由上(y=wyt)、下(y=wyb)、左(x=wxl)、右(x=wxr) 4条边组成,如图5-32所示。 * * * * 相当于:对分查找法求交,分割次数最多不超过线段端点的表示精度。 * 第5章 二维变换和裁剪 5.5 Cohen-Sutherland直线裁剪算法 5.6中点分割直线段裁剪算法 裁剪的目的 判断图形元素是否落在裁剪窗口之内并找出其位于内部的部分 裁剪处理的基础 图元关于窗口内外关系的判别 图元与窗口的求交 假定条件 矩形裁剪窗口:[xmin,xmax]×[ymin,ymax] 待裁剪点或线段: 裁剪概述 点裁剪 点(x, y)在窗口内的充分必要条件是: 问题:对于任何多边形窗口,如何判别? Wyt Wyb Wxl Wxr P1 P2 P3 线段相对于该窗口的情况有: ①线段全部位于窗口的内部(A); ②线段全部位于窗口外部(B、C); ③线段的中间部分在窗口内,而二端点在窗口外部(D); ④线段的一端在窗口内,而另一端在窗口外(E)。 x=xL x=xR y=yB y=yT A B C D E 线段裁剪 待裁剪线段和窗口的关系 : 线段完全可见 显然不可见 线段至少有一端点在窗口之外,但非显然不可见 保留 丢弃 裁剪 为提高效率,算法设计时应考虑: 快速判断线段完全在窗口内或处的情形; 设法减少裁剪情形中求交次数和每次求交时所需的计算量 线段裁剪 直接求交算法 基本思想是:判断直线与窗口的位置关系,确定该直线是完全可见、部分可见或完全不可见,然后输出处于窗口内线段的端点,并显示此线段。   根据直线段和窗口的关系可知: (1)整条线在窗口之内。此时,不需剪裁,显示整条线段。 (2)整条线在窗口之外,此时,不需剪裁,不显示整条线段。 (3)部分线在窗口之内,部分线在窗口之外。此时,需要求出线段与窗口边界的交点,并将窗口外的线段部分剪裁掉,显示窗口内的部分。 直接求交算法 例1 :设有直线段P0P1,有一个矩形裁剪窗口,写出对该线段裁剪的算法。 1)判断线段端点的位置。 2)保持线段起始点在裁剪窗口内:交换两点,使P0在内。 3)求出直线与窗口的交点I。 4)取P0 I线段显示,擦除I P1线段,并将P1替换I,即得P0P1线段,裁剪结束。 P1 P0 P0 P1 P0 P1 I P0 P1 求线段与窗口交点 设线段两端点坐标为:    和       则过这两点的直线方程为: 其中k为斜率。 求线段与窗口交点 左: 右: 下: 上: 5.5 Cohen-Sutherland直线裁剪算法 5.5.1 编码原理 每段直线的端点都被赋予一组四位二进制代码,称为区域编码(region code,RC) ,用来标识直线段端点相对于窗口边界及其延长线的位置。 分区编码方法:图形区域划分成九个区域。 四位编码 表示端点所处的位置: (---) 上 下 右 左 第一位为“1”时,表示点在y=yT的上方; 第二位为“1”时,表示点在y=yB的下方; 第三位为“1”时,表示点在x=xR的右方; 第四位为“1”时,表示点在x=xL的左方。 x=xL x=xR y=yB y=yT 1111 1 1 1 1 #define LEFT 1 #define RIGHT 2 #define BO

文档评论(0)

1亿VIP精品文档

相关文档