第3章 基本图形生成算法(Ⅱ)
1-03基本图形生成算法
![1-03基本图形生成算法](https://img.taocdn.com/s3/m/12971607e87101f69e3195d6.png)
3基本图形生成算法由于绘图机传动机构的限制,绘图时绘图笔只能作四个基本方向及组合的运动(共8个方向)。
每送一个信号就会驱使绘图笔沿8个方向之一移动一个步距,经过多次移动(形成阶梯状折线),即可给出人们需要的由折线逼近的复杂图形。
在显示器中绘制图形时,由于图形显示器像元的点阵分布,只能在显示器所给定的有限个像素组成的矩阵中,确定最佳逼近于该图形的一组像素。
绘图机的移动步距及显示器的像素决定着绘图的精度。
3.1直线的生成3.1.1数值微分法直线的斜率:x y k ∆∆=/。
其中,),(),(,,11000101y x y x y y y x x x 和-=∆-=∆分别是直线的端点坐标。
然后,从直线的起点开始,确定最佳逼近于直线的y 坐标。
假定端点坐标均为整数,让x 从起点到终点变化,每步递增1,计算对应的y 坐标,y=kx+B ,并取像素(x ,round(y))。
用这种方法既直观,又可行,然而效率较低。
这因为每步运算都需要一个浮点乘法与一个舍入运算。
注意到 xk y xk B kx Bx x k Bkx y i i i i i ∆+=∆++=+∆+=+=++)(11因此,当1=∆x 时,又k y y i i +=+1,既当x 每递增1时,y 递增k (即直线斜率)。
一开始,直线起点(x 0,y 0注意上述分析和算法仅适用于|k|<=1的情形。
在这种情况下,x 每增加1,y 最多增加1,故在迭代过程的每一步,只要确定一个像素。
而当直线斜率k 的绝对值超过1时,必须把x,y 的地位交换,y 每增加1,x 相应增加1/k 。
数值微分法的本质,是用数值方法解微分方程,通过同时对x,y 各增加一个小增量,计算下一步的x,y 值。
在一个迭代算法中,如果每一步的x,y 值是用前一步的值加上个增量来获得的,那么,这种算法就成为增量算法。
在这个算法中,y 和k 必须用浮点数表示,而且每一步运算都必须对y 进行舍入取整。
计算机图形学第3章 基本图形生成算法
![计算机图形学第3章 基本图形生成算法](https://img.taocdn.com/s3/m/c7a0630e10661ed9ad51f3c2.png)
例题:有点P0(4,3);P1(6,5);P2(10,
6 );P3(12,4),用以上4点构造2次B样条曲线。
2.1.7 非均匀有理B样条
非均匀有理B样条NURBS(Non Uniform Rational BSpline);
3.2.2
Bresenham画圆法
该算法是最有效的算法之一。
不失一般性,假设圆心(xc,yc) ,圆上的点(x′,y′),则:
x' x xc
y ' y yc
圆心为原点,半径为R的位于第一象限1/8圆弧的画法,即(0, R)~( R , R )。
2 2
yi ), 思想:每一步都选择一个距离理想圆周最近的点P( xi , 使其误差项最小。
画其他曲线。
3.3
自由曲线的生成
正弦函数曲线
指数函数曲线
多项式函数曲线
自 由 曲 线
概率分布曲线及样条函数曲线
3.3.1 曲线的基本理论
基本概念
2.1.4
规则曲线:可用数学方程式表示出来的,如抛物 线等。
自由曲线:很难用一个数学方程式描述的,如高
速公路等。可通过曲线拟合(插值、逼近)的方法来
例题: 利用Bresenham算法生成P (0,0)到Q(6,5)的直 线所经过的像素点。要求先 列出计算式算出各点的坐标 值,然后在方格中标出各点。
(1,1)
3.1.5 双步画线法 原理
模式1:当右像素位于右下角时,中间像素位于底线 模式4:当右边像素位右上角时,中间像素位于中线 模式2和模式3:当右像素位于中线时,中间像素可能位于底线 上,也可能位于中线上,分别对应于模式2和模式3,需进一步 判断。 当0≤k≤1/2时,模式4不可能出现,当1/2≤k≤1时,模式1不 可能出现。
第3章基本图形的生成与计算2
![第3章基本图形的生成与计算2](https://img.taocdn.com/s3/m/a3dd2e237c1cfad6185fa70e.png)
的中点对准直线的一端点,然后让刷子中心往直线的另
一端移动,即可“刷出”具有一定宽度的线。如下图
3.5.1所示:
2021年3月9日星期二
4
3.5 线宽的处理与字符的生成
5个象素长 的线刷子
第3章 基本图形的生成与计算
图3.5.1 用线刷子绘制的具有 5个象素宽的线
注意:在具体实现线刷子时,只要对直线扫描转换算法 的内循环稍作修改即可。例如:对于斜率在[-1,1]之 间的直线,若要生成一定象素宽的线,只需把每步迭代 所得的点的正上方和正下方半线宽之内的像素全部置成 直线颜色。
点阵字符的显示分为两步。首先从字库中将它的位图检
索出来。然后将检索到的位图复制到帧缓冲器中指定的单 元。在拷贝过程中,可以施加变换,以获得简单的变化。
例如:图3.5.11(b)~(d)列出了P字母原型的一些变化 例子。相应的变换算法是:
(a)
(b)
(c)
(d)
图3.5.11
2021年3月9日星期二
➢ 一般英文常采用的点
3F
阵大小有5X7、7 X 9、8
1111 1110
X 8、16 X 16;汉字常采 用16X16、24X24、40X40、
FE
72X72点阵字符。
2021年3月9日星期二
16
3.5 线宽的处理与字符的生成
第3章 基本图形的生成与计算
又如有图3.5.10所示:一个8X8的英文字母B
1.标题行中,形编号是1到255的整数值;字节数表 示形定义描述行中包括结束符0在内的字节数目;形名称 用大写字母才可以被调用,否则只作为形的一种解释性信 息,不存入存储器,因而不占用存储空间。
2021年3月9日星期二
第3章基本图形的生成与计算
![第3章基本图形的生成与计算](https://img.taocdn.com/s3/m/cca5a17fd1f34693dbef3e25.png)
2.中点画线算法
3.直线的Bresenham算法
2021年3月4日星期四
14
3.2 直线段的生成算法
第3章 基本图形的生成与计算
画一条从(x1,y1)到(x2,y2)的直线,实质上是确定 最佳逼近直线的像素序列,并填入色彩数据的过程。
当我们对直线进行光栅化时,只能在显示器所给定的 有限个象素组成的矩阵中,确定最佳逼近于该直线的一 组象素,并且按扫描线顺序,对这些象素进行写操作, 这就是通常所说的用显示器绘制直线或直线的扫描转换。
2021年3月4日星期四
10
3.1 基本绘图元素
第3章 基本图形的生成与计算
✓ 1.在几何学中,一个点即没有大小,也没有维数,点只是 表示坐标系统中的一个位置。
✓ 2.在计算机图形学中,点是用数值坐标来表示的。在直角 坐标系中点由(x,y)两个数值组成的坐标表示,在三维坐 标系中点由(x,y,z)三个数值组成的坐标表示,如下图:
此时 |K|<1
本算法的基本思想:从直线的起点开始,选定 x2 x1 和
y2 y1 中较大者为步进方向,不妨假设 x2 x1 较大,即让 x从起点到终点变化,每步递增1(即一个像素单位),然
后利用递推式 yi1 yi kx 计算相应的y值,取像素
点 ( xi 1, round ( yi1) )作为当前点坐标输出到显示器上, 则得到光栅化的直线。
第3章 基本图形的生成与计算
Loading …………
欢迎进入
第 3章
第3章 基本图形的生成与计算
本章概述:主要介绍了基本图形的生成与计
算,包括:基本绘图元素,直线段、圆与椭圆的 生成算法,区域填充算法,字符的生成,图
第三讲基本图形生成
![第三讲基本图形生成](https://img.taocdn.com/s3/m/fa8f1ab7c77da26925c5b055.png)
两种定义方法: 1)像素理想化为点
2)像素有一定面积
`
2013年8月13日11时54分
倘若已知直线段两端点的坐标(x0,y0)(x1,y1), 如何求得屏幕上显示的各点的坐标?
2013年8月13日11时54分
根据直线方程表达式: y=m×x+b 其中:m是直线的斜率, b是y方向的截距。
2013年8月13日11时54分
(x,y)坐标
…
地址线性表 1D表示 显示屏幕 2D表示
像素由其左下角坐标表示
y ymax ymin x
xmin
xmax
地址 = (xmax-xmin) * (y-ymin) + (x-xmin) + 基地址
每行像素点数
行数
行中位置
Address(x,y) = (xmax-xmin) * (y-ymin) + (x-xmin) + 基地址 = k1 + k2y + x 对像素连续寻址时,如何减少计算量? Address(x±1,y) = k1 + k2y + (x±1) = Address(x,y) ± 1 Address(x,y±1) = k1 + k2(y ±1) + x = Address(x,y) ± k2 Address(x±1,y±1) = k1 + k2(y ±1) + (x±1)
直线Bresenham算法描述
由图中可以知道:在x=xi+1处,直线上点的y值是y=m(xi+1)+b,该 点离象素点(xi+1,yi)和象素点(xi+1,yi+1)的距离分别是d1和d2: d1=y-yi=m(xi+1)+b-yi d2=(yi+1)-y=(yi+1)-m(xi+1)-b 两个距离差是 d1-d2=2m(xi+1)-2yi+2b-1
第3章基本图形算法
![第3章基本图形算法](https://img.taocdn.com/s3/m/818be52abd64783e09122b28.png)
数值微分(DDA)法 数值微分(DDA)法
void DDALine(int x0,int y0,int x1,int y1,int color) DDALine( { int x; float dx, dy, y, k; dy, dx, = x1-x0; dy=y1-y0; k=dy/dx, y=y0; k=dy/dx, for (x=x0; x≤x1, x++) x≤ { drawpixel (x, int(y+0.5), color); int(y+0.5), y=y+k; y=y+k; } }
直线的扫描转换算法
直线的扫描转换: 直线的扫描转换: 确定最佳逼近于该直线段的一 组象素,并且按扫描线顺序, 组象素,并且按扫描线顺序,对这些象素进行写 操作。 操作。 三个常用算法: 三个常用算法: 数值微分法(DDA) 数值微分法(DDA) 中点画线法 Bresenham算法。 Bresenham算法。 算法
P2 Q
P=(xp,y-> P2离直线更近更近->取P2 的下方离直线更近更近。 M在Q的上方-> P1离直线更近更近->取P1 的上方离直线更近更近M与Q重合, P1、P2任取一点。
P2 Q
P=(xp,yp) P1
问题:如何判断M 问题:如何判断M与Q点的关系?
直线的绘制要求: 直线的绘制要求: 1.直线要直 2.直线的端点要准确,即无定向性和断裂情况 直线的端点要准确, 3.直线的亮度、色泽要均匀 直线的亮度、 4.画线的速度要快 5.要求直线具有不同的色泽、亮度、线型等 要求直线具有不同的色泽、亮度、
数值微分法(DDA) 数值微分法(DDA)
假定直线的起点、终点分别为:(x0,y0), (x1,y1), 假定直线的起点、终点分别为:(x0,y0), (x1,y1), :( 且都为整数。 且都为整数。
计算机图形学基本图形生成算法
![计算机图形学基本图形生成算法](https://img.taocdn.com/s3/m/4f02ea34bcd126fff7050ba6.png)
y= k· x+b
k=0.571429
b=0.428571
2 X[0]=1 y0 X[1]=2
Y[0]=1 Y[0]=1 Y[1]=kx[1]+b=1.57 Y[1]=y0+k=1.57 Y[2]=y1+k=2.14 Y[2]=kx[2]+b=2.14 Y[3]=y2+k=2.71 Y[3]=kx[3]+b=2.71 Y[4]=y3+k=3.28 Y[4]=kx[4]+b=3.28 Y[5]=y4+k=3.85 Y[5]=kx[5]+b=3.85 Y[6]=y5+k=4.4 Y[6]=kx[6]+b=4.4 Y[7]=5 Y[7]=5
第3章 基本图形生 成算法
1 直线生成算法(DDA、BRES) 2 圆生成算法(Mid) 3 多边形填充算法(扫描线、区域) 4 字符图元算法
2015/4/19
1
图元
• 图元:图形软件包中用了描述各种几何 图形元素的函数称为图形输出原语,简 称图元。 • 描述对象几何要素的输出图元一般称为 几何图元。点的定位和直线段是最简单 的几何图元。 • 在选定坐标系中指定一个图形的几何要 素后,输出图元投影到该输出设备显示 区域对于的二维平面上,并扫描转换到 帧缓存的整数像素位置。
2015/4/19
5
1 直线生成算法(DDA、BRES) 2 圆生成算法(Mid) 3 多边形填充算法(扫描线、区域) 4 字符图元算法
1 直线的DDA算法
2015/4/19
6
OpenGL画点和画线函数 1) 画点函数 glVertex*( ); (*={234}{sifd}[v]) 表示该函数有后缀,指 明空间尺寸、坐标数据类型或向量形式描述。 Ex: glBegin(GL_POINTS); glVertex2i(100,50); glEnd(); glBegin(GL_POINTS); glVertex2i(100,50); glVertex2i(75,90); glVertex2i(300,590); glEnd();
计算机图形学第3章
![计算机图形学第3章](https://img.taocdn.com/s3/m/10d0f978f5335a8103d2201b.png)
第3章 基本图形生成算法
3.1 生成直线的常用算法
均假定所画直线的斜率k∈[0,1]。
3.1.1 DDA画线算法
DDA(Digital Differential Analyzer)画线 算法也称数值微分法,是一种增量算法。它的算 法实质是用数值方法解微分方程,通过同时对x和 y各增加一个小增量,计算下一步的x、y值。
边界表示的四连通区域种子填充算法 内点表示的四连通区域种子填充算法 边界表示的八连通区域种子填充算法 内点表示的八连通区域种子填充算法
第3章 基本图形生成算法
1.边界表示的四连通区域种子填充算法
基本思想:从多边形内部任一点(像素)出发,依“左 上右下”顺序判断相邻像素,若其不是边界像素且没有被填 充过,对其填充,并重复上述过程,直到所有像素填充完毕。 可以使用栈结构来实现该算法,算法的执行步骤如下: 种子像素入栈,当栈非空时,重复执行如下三步操作: (1)栈顶像素出栈; (2)将出栈像素置成多边形填充的颜色; (3)按左、上、右、下的顺序检查与出栈像素相邻的 四个像素,若其中某个像素不在边界上且未置成多边形色, 则把该像素入栈。
过各行各列像素中心构造一组虚拟网格线,按直 线从起点到终点的顺序计算直线与各垂直网格线的交 点,然后确定该列像素中与此交点最近的像素。 由图3-5不难看出:若s<t, 则Si比较靠近理想直线,应 选Si;若s≥t,则Ti比较靠近 理想直线,应选Ti。
第3章 基本图形生成算法
令dx=x2-x1,dy=y2-y1 递推公式 :di 1 di 2dy 2dx( yi yi 1 ) di的初值: d1 2dy dx 当di≥0时,选Ti,
第3章 基本图形生成算法
3_3基本图形生成算法
![3_3基本图形生成算法](https://img.taocdn.com/s3/m/d838ceeeaeaad1f346933fee.png)
直线段裁剪(16/16) 直线段裁剪(16/16)
Liang-Barsky裁剪算法 Liang-Barsky裁剪算法
AB有可见部分的充分必要条件也可表示为 AB有可见部分的充分必要条件也可表示为
max[xmin , min( x A , x B ), min( xT , xU )] ≤ min[ x max , max(x A , x B ), max(xT , xU )]
端点编码: 端点编码:
定义为它所在区域的编码
快速判断“完全不可见”: 快速判断“
当线段的两个端点的编码的逻辑“ 当线段的两个端点的编码的逻辑“与”非零时 ,显然不可见 非零时 逻辑
1001
a
1000
1010
0001
窗口 0010 0000
b c
0101
0100
0110
11
直线段裁剪(10/16) 直线段裁剪(10/16)
6
直线段裁剪(5/16) 直线段裁剪(5/16)
待裁剪线段和窗口的关系
完全落在窗口内 完全落在窗口外 部分在内, 部分在内,部分在外
7
直线段裁剪(6/16) 直线段裁剪(6/16)
为提高效率,算法设计时应考虑: 为提高效率,算法设计时应考虑: 1. 快速判断情形 快速判断情形(1)(2); ; 2. 设法减少情形 求交次数和每次求交时所需的计算量 设法减少情形(3)求交次数和每次求交时所需的计算量
B
U
S
Aห้องสมุดไป่ตู้
P2
T R L xmin
xmax
直线L与区域的交: 直线L与区域的交:
Q
AS是一维窗口 中的可见部分 是一维窗口TS中的可见部分 是一维窗口
第3章基本图形生成算法
![第3章基本图形生成算法](https://img.taocdn.com/s3/m/8e29b9a5b9d528ea81c77986.png)
第3章 基本图形生成算法
假设在圆弧生成过程中,当前象素点为 P(xp ,yp), 则下一个
象 素 只 能 是 其 正 右 方 象 素 p1(x +1,y) 和 右 下 方 象 素 p2(x+1 ,y-1)二者之一,各点之间的相互位置关系如图所示。
第3章 基本图形生成算法
判别式d: d的初始值为: 在d≥0的情况下,取右下方像素P2,
d 0 F (1, R 0.5) 1 (R 0.5) 2 R 2 1.25 R
在d<0的情况下,取正右方像素P1,
第3章 基本图形生成算法
3.2.3 Bresenham画圆算法
判别式: 用i+1代替i,得:
第3章 基本图形生成算法
di=D(p1i)+D(p2i)=2(xi+1)2+yi2+(yi-1)2-2r2 di+1=D(p1i+1)+D(p2i+1)=2(xi+1+1)2+yi+12+(yi+11)2-2r2 判断式d的初始值为: d0= 3-2r。
如果d i>=0,则选p2i, yi+1=yi-1,
8. 根据d的符号选取增量。若d<0,则先执行
d=d+ b2(2x+2)+ a2(-2y+3),再将(x,y)修改为(x+1,y-1);否则 先执行d=d+ a2(-2y+3),再将(x,y)修改为(x,y-1); 9. 当y≥0时,重复步骤7和8,否则算法结束。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2010-4-7
6
X-扫描线算法——原理
基本思想:按扫描线 顺序,计算扫描线与
y 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 x
多边形的相交区间, 再用要求的颜色显示 这些区间的所有象素。
图3.2 x-扫描线算法填充多边形
2010-4-7 7
多边形顶点相交时, 交点的取舍,保证
交点正确配对。
图3.5 取整规则3
2010-4-7
12
X-扫描线算法——取整规则
解决方法:
当扫描线与多边形的顶点相交时, 若共享顶点的两条边分别落在扫描线的两边, 交点只算一个; 若共享顶点的两条边在扫描线的同一边,这 时交点作为零个或两个。
2010-4-7 13
2010-4-7 16
改进的有效边表算法(Y连贯性算法)
有效边(Active Edge):指与当前扫描线相 交的多边形的边,也称为活性边。
有效边表(Active Edge Table, AET):把 有效边按与扫描线交点x坐标递增的顺序存放 在一个链表中,此链表称为有效边表。 有效边表的每个结点:
要较大的存储空间。 递归执行,算法简单,但效率不高,区域内每
一像素都引起一次递归,进/出栈费时费内存。 通过沿扫描线填充水平象素段,来代替处理4邻接点和8-邻接点。
2010-4-7 40
区域填充算法——边界填充算法
扫描线种子填充算法: 扫描线通过在任意不 间断扫描线区间中只 取一个种子像素的方 法使堆栈的尺寸极小 化。不间断区间是指 在一条扫描线上的一 组相邻像素。
x
图3.10 多边形P0P1P2P3P4P5P6
2010-4-7 22
改进的有效边表算法——算法步骤
(1)初始化:构造边表,AET表臵空;
(2)将第一个不空的ET表中的边与AET表合并; (3)由AET表中取出交点对进行填充。填充之后删除 y=ymax的边;
(4)yi+1=yi+1,根据xi+1=xi+1/k计算并修改AET表,同
x ymax 1/k next
2010-4-7 17
改进的有效边表算法——构造边表
首先构造一个纵向链表,链表的长度为多边形 所占有的最大扫描线数,链表的每个结点,称
为一个桶,则对应多边形覆盖的每一条扫描线。 将每条边的信息链入与该边最小y坐标(ymin ) 相对应的桶处。也就是说,若某边的较低端点 为ymin,则该边就放在相应的扫描线桶中。
p3 p2 3 6 -1/3
p3p4 3 5 3/4
p5 p4 8 5 -1/2
p5p6 8 9 1/2
y
p2 p1 1 12 2/5 7 12 -1 p0 p1
7 9 p0p6
5
桶
(c) 边表
12 11 10 9 8 7 6 5 4 3 2 1
p1
p0 p2 p4
p6
p3 p5 1 2 3 4 5 6 7 8 9 10 11 12
2010-4-7
36
区域填充算法——边界填充算法
算法的输入:种子点坐标(x,y),填充色以及边 界颜色。 利用堆栈实现简单的种子填充算法 算法从种子点开始检测相邻位臵是否是边界 颜色,若不是就用填充色着色,并检测该像素 点的相邻位臵,直到检测完区域边界颜色范围 内的所有像素为止。
2010-4-7
图3.3 取整规则1
X-扫描线算法——取整规则
规则2:边界上象素的取舍问题,避免填充扩大化。 规定落在右边边界上的像素不予填充。(具体实现 时,只要对扫描线与多边形的相交区间左闭右开)
图3.4 取整规则2
2010-4-7 11
X-扫描线算法——取整规则
规则3:当扫描线与
y 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 x
2010-4-7
图3-17 扫描线种子填充算法
41
区域填充算法——边界填充算法
基本过程:当给定种子点时,首先填充种子点
所在的扫描线上的位于给定区域的一个区段, 然后确定与这一区段相通的上下两条扫描线上 位于给定区域内的区段,并依次保存下来。反 复这个过程,直到填充结束。
2010-4-7
42
区域填充算法——边界填充算法
14
X-扫描线算法——取整规则
图5.21 与扫描线相交的多边形顶点的交点数
填充过程实例
2010-4-7 15
改进的有效边表算法(Y连贯性算法)
改进原理: 处理一条扫描线时,仅对 有效边求交。 利用扫描线的连贯性。 利用多边形边的连贯性。
1 xi,yi 1/k xi+1,yi+1
图3.7 与多边形边界相交的两条 连续扫描线交点的相关性
2010-4-7
30
内点表示法:枚举出给定区域内所有象素的表 示方法。以内点表示法为基础的区域填充算法称为 泛填充算法(Flood-fill Algorithm)。
图3-13 区域的表示方法
区域的分类
4-连通区域,8-连通区域
4 4 p 4 4
(a) 4-邻接点
8 8 8 8 p 8 8 8 8
边标志算法
基本思想:先用特殊的颜色在帧缓存中将多边 形的边界勾画出来,然后将着色的象素点依x 坐标递增的顺序配对,再把每一对象素构成的 区间臵为填充色。 分为两个步骤:打标记-多边形扫描转化;填充。 当用软件实现本算法时,速度与改进的有效边 表算法相当,但本算法用硬件实现后速度会有 很大提高。
第三章 基本图形生成算法(Ⅱ)
如何在指定的输出设备上根据坐标描述构造基 本二维几何图形(点、直线、圆、椭圆、多边 形域、字符串及其相关属性等)。
2010-4-7
1
图形生成的概念
图形的生成:是在指定的 输出设备上,根据坐标描
述构造二维几何图形。 图形的扫描转换:在光栅 显示器等数字设备上确定 一个最佳逼近于图形的象
p2p1 p0p1 p0p6
1 7 7
12 12 9
2/5 -1 5
12 11 10 9 8 7 6 5 4 3 2 1
p1
p0 p2 p4
p6
p3 p5 1 2 3 4 5 6 7 8 9 10 11 12
图3.9 多边形P0P1P2P3P4P5P6
x
2010-4-7
21
1 2 3 4 5 6 7 8 9 10 11 12
X-扫描线算法——算法步骤
1.确定多边形所占有的最大扫描线数,得到多边形
顶点的最小和最大y值(ymin和ymax)。 2.从y=ymin到y=ymax,每次用一条扫描线进行填充。 3.对一条扫描线填充的过程可分为四个步骤: 求交;排序;交点配对;区间填色。
2010-4-7
8
X-扫描线算法——取整规则
2010-4-7 19
解决顶点交点计为1时的情形:
扫描线y+1 扫描线y 扫描线y-1
(a)原图
(b)缩短ymax的边
(c)缩短ymin的边
图3.8 将多边形的某些边缩短以分离那些应计为1个交点的顶点
2010-4-7
20
y
p3p2
p3p4
3
3
6
5
-1/3
3/4
p5p4 p5p6
8 8
5 9
-1/2 1/2
时合并ET表中y=yi+1 桶中的边,按次序插入到AET 表中,形成新的AET表;
(5)AET表不为空则转(3),否则结束。
2010-4-7 23
边缘填充算法
基本思想:按任意顺序处理多边形的每条边。 处理时,先求出该边与扫描线的交点,再对扫 描线上交点右方的所有象素取反。 算法简单,但对于复杂图型,每一象素可能被 访问多次
37
区域填充算法——边界填充算法
栈结构实现4-连通边界填充算法的算法步骤为:
种子象素入栈;当栈非空时重复执行如下三步 操作: (a)栈顶象素出栈;
(b)将出栈象素臵成填充色; (c)检查出栈象素的4-邻接点,若其中某个象素
点不是边界色且未臵成多边形色,则把该象素入栈。
2010-4-7 38
区域填充算法——边界填充算法
栈结构实现8-连通边界填充算法的算法步骤为:
种子象素入栈;当栈非空时重复执行如下三 步c)检查出栈象素的8-邻接点,若其中某个像 素点不是边界色且未臵成多边形色,则把该像素 入栈。
2010-4-7 39
区域填充算法——边界填充算法
可以用于填充带有内孔的平面区域。 把太多的像素压入堆栈,降低了效率,同时需
X-扫描线算法——取整规则
实际处理:只要检查 顶点的两条边的另外 两个端点的Y值,两个 Y值中大于交点Y值的 个数是0,1,2,来
决定取0,1,2个交 点。
2010-4-7
y 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 x
图3.6 取整规则3
扫描线种子填充算法:我们可以在任意一个扫 描线与多边形的相交区间中, 只取一个种子像
素, 并将种子像素入栈, 当栈非空时作如下四步 操作:
2010-4-7
28
图3.12 区域的概念
区域的表示方法
边界表示法:把位于给定区域的边界上的象素 一一列举出来的方法。
边界表示法中,由于边界由特殊颜色指定,填 充算法可以逐个象素地向外处理,直到遇到边 界颜色为止,这种方法称为边界填充算法 (Boundary-fill Algorithm)。
(b)8-邻接点
图3-14 4-邻接点与8-邻接点
2010-4-7