3. 配对 4. 填色
扫描线基础算法的核心是计算扫描线与多边形的交点,然后配对,着色。其实求解交点这一步工作量是非常大的,所以根据前面介绍的多边形边的连贯性,区域的连贯性规则,我们可以构造更简单的扫描线算法(有的书称为有序边表算法)。下面是其的数据结构实现,改进后的扫描线算法就是简化了不断求解交点这么一个复杂的工作。 边填充法:
基本思想:光栅图形中,如果某区域已着上值为M的颜色值做偶数次求余运算,该区域颜色不变;而做奇数次求余运算,则该区域颜色变为值为新的颜色。这一规律应用于多边形扫描转换,就为边填充算法。 栅栏填充算法:
实质:改进的边填充算法
引入栅栏,以减少填充算法访问象素的次数。
栅栏:与扫描线垂直的直线,通常过一顶点,且把多边形分为左右
二半。
优缺点:减少了象素重复访问数目,但不彻底。 边界标志算法:
引入边标志:以克服象素被重复访问的缺点。 算法思想:
1. 轮廓线:对多边形的每一条边进行扫描转换,即对多边形边界所经过
的象素作一个边界标志。
2.填充:对每条与多边形相交的扫描线,按从左到右的顺序,逐个访问该
扫描线上的象素。
实现细节:
取一个布尔变量inside来指示当前点的状态,Inside 的初始值为假,每当当前访问象素为被打上标志的点,就把inside取反。对未打标志的点,inside不变。
4.3区域填充(种子填充算法)
上一节我们讲述了多边形的扫描转换,在实际应用中,我们可能会遇到任意的区域。要求对任意封闭的区域进行填充,不该变多边形的表示,
若inside为真,则点在多边形内,着色。 若inside为假,则点在多边形外,着背景色
区别于多边形的扫描转换。
种子填充算法思想
进行着色,因为多边形的边是直线,是规则的,所以计算起来也比较容易,但是对于任何不规则区域,考虑到边的不规则性,使用扫描线类填充算法更麻烦。种子填充算法思想是只考虑边界的颜色结构,从被填充区域内部任意一点出发,通过判断周边像素是不是边界而进行填充,直到填充完毕。
区域填充的概念
4连通:从区域内任意一点出发,可通过上、下、左、右四个方向到
达区域内的任意象素;
8连通:从区域内任意一点出发,可通过上、下、左、右、左上、左
下、右上、右下八个方向到达区域内的任意象素;
区域填充图案
多边形扫描转换与区域填充方法联系
4.4反走样
思考题:
1.如何绘制多边形?请在第二章绘制直线的基础上写出绘制多边形的方法。
2.如何判断多边形为凸或凹多边形?
3.试描述多边形扫面转换和区域填充的异同,并给出例子。 4.给出多边形扫描线算法改进的邻接链表算法例子。 用离散量表示连续量引起的失真现象称之为走样(aliasing) 走样原因:
1)光栅图形的象素是离散的,是有面积的,而非数学中面积为零的
点。
2)线段、多边形的边界等都是连续的。
因此,用离散的象素表示连续的线段或多边形的边界时光滑的线段
就成了阶梯状或锯齿状。
用于减少或消除走样现象的技术称为反走样(antialiasing) 硬件方法———提高分辨率
软件方法———区域采样,加权区域采样,半色调技术
前面介绍的扫描线,边填充算法等都是直接考虑多边形的边,最后
第五章 裁剪
教学学时:4课时 教学目的与要求:
让学生初步了解裁剪的定义,掌握对直线段裁剪的一些基本算法,掌握简单的对多边形裁剪的算法,掌握算法的理论原理,能够分析基本算法的优缺点。
教学重点:Cohen-Sutherland算法,中点分割算法,梁友栋—Barsky算法,
参数化算法,Sutlerland_Hodgman算法。
教学内容:
5.1 裁剪概述 5.2 二维裁剪 5.2.1 直线段裁剪 5.2.2 多边形裁剪
5.1 裁剪概述
在使用计算机处理图形信息时,遇到的情况往往是计算机内部存储的图形比较大,而屏幕显示只是图的一部分。例如,虽然计算机内部可以存储全国地图,但是,如果把全国地图整幅显示在屏幕上,则不能看到各地局部的细节。这时,可以使用缩放技术,把地图中的局部区域放大显示。在放大显示一幅图形的一部分区域时,必须确定图形中哪些部分落在显示区之内,哪些部分落在显示区之外,以便显示落在显示区内的那部分图形。这个选择处理过程称为裁剪。在进行裁剪时,画面中对应于屏幕显示的那部分区域称为窗口。一般把窗口定义为矩形,由上、下、左、 右四条边围成。裁剪的实质就是决定图形中哪些点、线段、文字以及多边形在窗口之内。
裁剪可以在世界坐标系中进行,即相对于窗口进行;也可以把对象变换为设备坐标之后相对于视区进行。前者可以把不在窗口范围内的部分剪掉, 避免了不必要的变换处理;后者在设备坐标系中裁剪易于用硬件实现。裁剪处理的基础是:点在窗口区域内外的判断以及计算图形元素与窗口区域边界的交点。其原理虽然简单,但涉及的图形元素多, 提高裁剪速度是算法应考虑的重要问题。以下介绍直线段裁剪算法及多边形裁剪算法。
5.2 二维裁剪
裁剪算法有二维的和三维的,裁剪对象也可以是规则形体,也可以是不规则形体。本章重点介绍二维裁剪,三维裁剪涉及到后面章节三维消隐等内容,后面再简要介绍。 5.2.1 直线段裁剪
直线段裁剪算法是复杂图元裁剪的基础。复杂的曲线可以通过折线段来近似,从而裁剪问题也可以化为直线段的裁剪问题。所以本章重点讨论直线段的裁剪算法。算法一般取的裁剪多边形都是矩形,有些特殊的算法采用任意多边形裁剪。 直接求交算法
Cohen-Sutherland算法
基本思想:
对于每条被裁剪线段P1P2分为三种情况处理: 直线与窗口边都写成参数形式,求参数值。 设直线P0P1为被裁剪线段,裁剪过程如下:
相关推荐: