计算机图形学第五章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
术,把地图中的局部区域放大显示。在放大显示一幅图形的一部
分区域时,必须确定图形中哪些部分落在显示区之内,哪些部分 落在显示区之外,以便显示落在显示区内的那部分图形。这个选
择处理过程称为裁剪。在进行裁剪时,画面中对应于屏幕显示的
那部分区域称为窗口。一般把窗口定义为矩形,由上、下、左、 右四条边围成。裁剪的实质就是决定图形中哪些点、线段、文字 以及多边形在窗口之内。
对象也可以是规则形体,也可以是 不规则形体。本章重点介绍二维裁 剪,三维裁剪涉及到后面章节三维 消隐等内容,后面再简要介绍。
5.2 二维裁剪
5.2.1 直线段裁剪
直接求交算法 Cohen-Sutherland算法 中点分割算法 Liang-Barskey算法 参数化裁剪算法
5.2.2 多边形裁剪
Sutlerland_Hodgman算法 Weiler-Athenton算法
第五章 裁剪
5.1
裁剪概述 5.2 二维裁剪
5.2.1 直线段裁剪 5.2.2 多边形裁剪
5.1 裁剪概述
在使用计算机处理图形信息时,遇到的情况往往是计算机内
部存储的图形比较大,而屏幕显示只是图的一部分。例如,虽然
计算机内部可以存储全国地图,但是,如果把全国地图整幅显示 在屏幕上,则不能看到各地局部的细节。这时,可以使用缩放技
Cohen-Sutherland裁剪
若P1P2完全在窗口内code1=0,且code2=0,则
“取” 若P1P2明显在窗口外code1&code2≠0,则“弃” 在交点处把线段分为两段。其中一段完全在窗 口外,可弃之。然后对另一段重复上述处理。
1001 1000 1010 P1 0001 0000 0010 P3 P4 0101 0100 0110 P2
(xR,yT )
)
直线段裁剪
裁剪线段与窗口的关系:(1)线段完全可 见;(2)显然不可见;(3)其它 提高裁剪效率: 快速判断情形(1)(2), 对于情形(3),设法减 少求交次数和每次求 交时所需的计算量。
直接求交算法
直线与窗口边都 写成参数形式, 求参数值。
Cohen-Sutherland裁剪
Cohen-Sutherland 直线裁剪算法小结
本算法的优点在于简单,易于实现。他 可以简单的描述为将直线在窗口左边的 部分删去,按左,右,下,上的顺序依 次进行,处理之后,剩余部分就是可见 的了。在这个算法中求交点是很重要的, 他决定了算法的速度。另外,本算法对 于其他形状的窗口未必同样有效。 特点:用编码方法可快速判断线段的完 全可见和显然不可见。
第五章 裁剪
在进行图形的描述中总是尽可能全面地 获取它的有关信息,而在进行图形显示与 研究过程中往往对其中某些部分更感兴趣 和需要,这就涉及到图形裁剪概念与内容。 本章我们将讨论图形系统中重要 的部分——裁剪,研究有关裁剪的算法。
第五章 裁剪
教学学时:6课时 教学目的与要求: 让学生初步了解裁剪的定义,掌握对直线 段裁剪的一些基本算法,掌握简单的对多 边形裁剪的算法,掌握算法的理论原理, 能够分析基本算法的优缺点。 教学重点:Cohen-Sutherland算法,中点 分割算法,梁友栋—Barsky算法,参数化 算法,Sutlerland_Hodgman算法。
中点分割裁剪算法
基本思想: 与前一种Cohen-Sutherland算 法一样首先对线段端点进行编码,并把 线段与窗口的关系分为三种情况: 全部可见、完全不可见和线段部分可见。 对前两种情况,进行一样的处理。对于 第三种情况,用中点分割的方法求出线 段与窗口的交点。
问:算法为什么可行?会不会
求出P0P1与两条始边的交点参 数t0, t1 , 令 tl=max(t0 ,t1,0),则tL即为 三者中离p1最近的点的参数 求出p0p1与两条终边的交点参 数t2, t3, 令 tu=min(t2,t3,1) ,则tU即为 0 三者中离p0最近的点的参数 若tu > tl,则可见线段区间 [tl , tu]
Pm b P2 a P1 P1 P2 Pm c P1 P2
图中,对线段a,求离P1最远的可见点算法在第一步 结束;对线段b,算法在第二步结束;对线段c,算法进
入第三步后开始对分线段,最终重复第二步结束。
中点分割裁剪算法的优点
取中点的目的是用中点逼近线段与
边界的交点。这种方法没有求交计 算,适合于没有乘除运算的计算机, 易于用硬件实现。
参数化算法(Cyrus-Beck)
k条边的多边形,可见线段参数区间的解: Ni·(p(t)-Ai)>=0, i=0,…,k, 0≤t ≤1. 即:Ni·(P1-Ai)+ Ni·(P2-P1) t>=0 可得:
Ni P1 Ai Ni P2 P1 0 t N P P i 2 1 Ni P1 Ai Ni P2 P1 0 t Ni P2 P1 Ni P2 P1 0 Ni P2 P1
E A
B F
Liang-Barsky算法
当Qi
=0时 若Di <0 时,线段不可见 (如图中AB,有QR=0,DR<0) 若Di >0 时, 分析另一D,
E
A
(如图中的EF就是这种情况,它 使QL=0,DL>0和QR=0,DR>0。这 时由于EF和x=xL及x=xR平行,故不 必去求出EF和x=xL及x=xR的交点, 而让EF和y=yT及y=yB的交点决定直 线段上的可见部分。)
5.2.1 直线段裁剪
直线段裁剪算法是复杂图元裁 剪的基础。复杂的曲线可以通过折 线段来近似,从而裁剪问题也可以 化为直线段的裁剪问题。所以本章 重点讨论直线段的裁剪算法。算法 一般取的裁剪多边形都是矩形,有 些特殊的算法采用任意多边形裁剪。
点Biblioteka Baidu裁剪
图形裁剪中最基本的问题。 假设窗口的左下角坐标为 (xL,yB),右上角坐标为 (xR,yT),对于给定点P(x,y), 则P点在窗口内的条件是要 满足下列不等式: (xL,yB xL <= x <= xR 并且yB <= y <= yT 否则,P点就在窗口外。
裁剪可以在世界坐标系中进行,即相对于窗口进行;也可 以把对象变换为设备坐标之后相对于视区进行。前者可以把不
在窗口范围内的部分剪掉, 避免了不必要的变换处理;后者在
设备坐标系中裁剪易于用硬件实现。 裁剪处理的基础是:点在窗口区域内外的判断以及计 算图形元素与窗口区域边界的交点。其原理虽然简单,但涉及 的图形元素多, 提高裁剪速度是算法应考虑的重要问题。以下
介绍直线段裁剪算法及多边形裁剪算法。
最简单的裁剪方法是把各种图形扫描 转换为点之后,再判断各点是否在窗内。 但那样太费时,一般不可取。这是因为有 些图形组成部分全部在窗口外,可以完全 排除,不必进行扫描转换。所以一般采用 先裁剪再扫描转换的方法。
5.2 二维裁剪
裁剪算法有二维的和三维的,裁剪
R N P2
A P1
参数化算法(Cyrus-Beck)
则对于线段P1P2上任一点P(t) N · (P(t)-A)<0->外侧 N · (P(t)-A)>0->内侧 N · (P(t)-A)=0->边界 或其延长线上
参数化算法(Cyrus-Beck)
凸多边形的性质:点P(t)在凸多边形内 的充要条件是,对于凸多边形边界上任 意一点A和该点处内法向N,都有 N· (P(t)-A)>0
令ti= Ni·(P1-Ai)/[Ni·(P2-P1)]
参数化算法(Cyrus-Beck)
Ni·(P2-P1) =0-> 平行于对应边。 此时判断Ni·(P1-Ai) 若Ni·(P1-Ai) <0->P1 P2在多边形外侧->不可见, 若Ni·(P1-Ai) >0->P1P2在多边形内侧->继续其它 边的判断
若x 0 x xL为始边,x xR为终边。 若x 0 x xL为终边,x xR为始边。 若y 0 y y B为始边,y yT 为终边。 若y 0 y y B为终边,y yT 为始边。
Liang-Barsky算法:交点计算
1
t2 t0 t1
t3
Liang-Barsky算法
始边和终边的确定及交点计算: 令
Q L= - △ x DL= x0-xL QR= △x DR= xR-x0 Q B= - △ y DB= y0-yB Q T= △ y DT= yT-y0 交点为 ti= Di / Qi i=L,R,B,T Qi <0 ti为与始边交点参数 Qi >0 ti为与终边交点参数 Qi =0 Di <0 时,线段不可见 Di >0 时, 分析另一D,
无限循环、不断二分? 因为屏幕像素是有限的,一般 计算次数不会太多,而且算法 思想是用取中点的方法最后在 误差允许的范围内去逼近真正 的与裁剪矩形边的交点。
下面我们仅介绍如何在线段P1P2上求离P1最 远的可见点 (求P2最远的可见点同p1) ,其 具体步骤如下: ① 测试P2是否在窗口内,若是,则P2就是 离P1最远的可见点,结束。否则,进行下一 步。 ② 测试P1P2是否在窗外同侧,若是,P1P2 全部不可见,结束。否则,进行下一步。 ③ 取P1P2的中点Pm,若PmP2在窗外同侧,舍 去,剩余段以P2代替Pm重复第二步。否则, 以P1代替Pm重复第二步。直到线段不能再分 为止。
中点分割裁剪算法
中点分割裁剪算法是对Cohen-Sutherland 直线段裁剪算法的改进。 在Cohen-Sutherland 直线段裁剪算法中, 为了避免求直线段与窗口 边界的交点, 用不断对分线段的方法排斥线段 在窗口外的部分, 最后求出离线段端点最远的 可见点(所谓可见点就是线段落在窗口内的点), 若这两点存在, 则这两点就是线段P1P2的可见线 段端点。
基本思想: 对于每条线段P1P2分为三种情况处理: (1)若P1P2完全在窗口内,则显示该线段P1P2 。 (2)若P1P2明显在窗口外,则丢弃该线段。 (3)若线段不满足(1)或(2)的条件,则在 交点处把线段分为两段。其中一段完全在窗口 外,可弃之。然后对另一段重复上述处理。 为快速判断,采用如下编码方法:
设要裁剪的线段是P0P1。 P0P1和 窗口边界交于A,B,C,D四点,见图。 算法是从A,B和P0三点中找出最靠近 的P1点,图中要找的点是P0。从C,D 和P1中找出最靠近P0的点。图中要 找的点是C点。那么P0C就是P0P1线段 上的可见部分。
Liang-Barsky算法
线段的参数表示 x=x0+t△x y=y0+t△y 0<=t<=1 △x=x1-x0 △y=y1-y0 窗口边界的四条边分为两类:始边和终边。
B F
思考:前面几种裁剪直线段
算法的裁剪窗口都是矩形区 域,如何推广裁剪区域呢? 参数化算法(Cyrus-Beck)是 研究使用凸多边形区域作为 裁剪区域进行二维直线段裁 剪的算法。
参数化算法(Cyrus-Beck)
考虑凸多边形区域R 和直线段P1P2 P(t)=(P2-P1)*t+P1 设A是区域R的边界 上一点,N是区域边 界在A点的内法线向 量
图 5.1 区域划分及编码
图 5.2 区位码各位含义
编码的思想在图形学中非常重要。 Sutherland:Coons, 图灵, IEEE 计算机 先驱奖。
Cohen-Sutherland算法
一旦给定所有的线段端点的区 域码,就可以快速判断哪条直 线完全在剪取窗口内,哪条直 线完全在窗口外。所以得到一 个规律:
Liang-Barsky算法
* 写入图形学教科书的唯一中国人的 算 法 * Communication of ACM的论文 梁有栋教授(浙江大学数学系教授)的二 三事 Liang-Barsky算法 几何连续理论 从几何学与纤维缠绕理论到基因工程
Liang-Barsky算法
基本思想: 把二维裁剪化为一维裁剪问 题,并向x(或y)方向投影 以决定可见线段。