4 区域填充算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
P1 P3 P7 Xe1 P0 P8 Xe8 Xe7 P6 Xe2 P2 P4
23
Xe3
Xe4
P5
边的连贯性
设d为一整数,并且d=e-1, yi0 ≥ d ≥ yin。设位于扫描线y=d 为一整数,并且d=e设位于扫描线y=d 上的交点序列为x 上的交点序列为xdj1,xdj2,xdj3,…,xdjk 。 若多边形的边P 若多边形的边Pr-1Pr与扫描线y=e,y=d都相交,则交点序列 与扫描线y=e,y=d都相交, 都相交 中对应元素x 满足下列关系: 中对应元素xer,xdr满足下列关系: xer= xdr + 1/kr (1) 其中k 为边P 的斜率。 其中kr为边Pr-1Pr的斜率。
8
奇偶规则举例: 奇偶规则举例: 自相交多边形ABCDEFG的内 的内- 自相交多边形ABCDEFG的内-外测试
内部 A D C G E F B
外部
9
非零环绕数规则
统计多边形以逆时针方向 统计多边形以逆时针方向环绕某一特定点的次 逆时针方向环绕某一特定点的次 环绕数。 数,这个数称为环绕数。 这个数称为环绕数 环绕数初始为零; 环绕数初始为零; 从位置P作不经过顶点的射线; 从位置P作不经过顶点的射线; 多边形边从右至左穿过射线,环绕数加 多边形边从右至左穿过射线,环绕数加1; 从右至左穿过射线 多边形边从左至右穿过射线,环绕数减 多边形边从左至右穿过射线,环绕数减1; 从左至右穿过射线 环绕数非零则该点为内部点;否则为外部点。 环绕数非零则该点为内部点;否则为外部点。
19
P2
区域的连贯性
梯形的两底边分别在y=y 梯形的两底边分别在y=yik和y=yik+1两条扫描线上,腰在多 两条扫描线上, 边形的边上或在显示屏幕的边界上。 边形的边上或在显示屏幕的边界上。 这些梯形可分为两类:一类位于多边形的内部;另一类在 这些梯形可分为两类:一类位于多边形的内部; 多边形的外部。 多边形的外部。 两类梯形在长方形区域{ 两类梯形在长方形区域{yik,yik+1}内相间的排列,即相邻的 内相间的排列, 两梯形必有一个在多边形内,另一个在外。 两梯形必有一个在多边形内,另一个在外。
16
2.扫描线填充算法 2.扫描线填充算法
目标 利用相邻像素之间的连贯性,提高算法效率 利用相邻像素之间的连贯性, 处理对象 非自交多边形( 非自交多边形(边与边之间除了顶点外无其它 交点) 交点)
17
2.扫描线填充算法 2.扫描线填充算法
扫描线填充算法是进行多边形填充的常用算法。 扫描线填充算法是进行多边形填充的常用算法。 它充分利用了相邻像素之间的连贯性,避免了对像 它充分利用了相邻像素之间的连贯性, 素的逐点判断和反复求交的运算, 素的逐点判断和反复求交的运算,达到了减少了计 算量和提高速度的目的。 算量和提高速度的目的。 扫描线填充算法综合利用了区域的连贯性 扫描线填充算法综合利用了区域的连贯性、扫 区域的连贯性、 描线连贯性和边的连贯性这三种形式的连贯性。 描线连贯性和边的连贯性这三种形式的连贯性。 这三种形式的连贯性
5
1.逐点判断法 1.逐点判断法
逐个判断绘图窗口内的像素 如何判断点在多边形的内外关系 射线法 累计角度法 编码法
6
逐点判断法— 逐点判断法—射线法
奇偶规则
从任意位置P作不经过顶点的射线; 从任意位置P作不经过顶点的射线; 计算射线穿过的多边形边的数目; 计算射线穿过的多边形边的数目; 奇数为内部点,否则为外部点。 奇数为内部点,否则为外部点。
n
P0
v
θ0 θ1
θ2
P1 P2
13
逐点判断法— 逐点判断法—编码法
预处理:测试v点是否落在多边形的边上,若是则v位于多边 预处理:测试v点是否落在多边形的边上,若是则v 形内,判别结束,否则继续判别; 形内,判别结束,否则继续判别; 以v为原点建立局部坐标系,对其各象限按逆时针顺序编码; 为原点建立局部坐标系,对其各象限按逆时针顺序编码; 对多边形的各顶点编码,顶点落在那个象限, 对多边形的各顶点编码,顶点落在那个象限,其编码即为该象 限的编码,记为I 限的编码,记为Ipi y 1 v 2 3
P1 P2 P0
0 x
15
逐点判断法
逐点判断的算法虽然程序简单,但不可取。 逐点判断的算法虽然程序简单,但不可取。 速度太慢, 原因是速度太慢 原因是速度太慢,主要是由于该算法割断了各 像素之间的联系, 像素之间的联系,孤立地考察各像素与多边形 的内外关系,使得几十万甚至几百万个像素都 的内外关系, 要一一判别,每次判别又要多次求交点, 要一一判别,每次判别又要多次求交点,需要 做大量的乘除运算,花费很多时间。 做大量的乘除运算,花费很多时间。
P1 P3 P7 Xe1 P0 P8 Xe8 Xe7 P6 Xe2 P2 P4
22
Xe3
Xe4
P5
扫描线的连贯性
由区域的连贯性可知,交点序列具有以下性质: 由区域的连贯性可知,交点序列具有以下性质:
•l总是偶数,即交点个数是偶数。 总是偶数, 交点个数是偶数。 • 在该扫描线上,只有区段(xeik,xeik+1),k=1,3,5,…,l-1位于多边 在该扫描线上,只有区段(x ),k=1,3,5,…,l形内,其余区段都在多边形外。 形内,其余区段都在多边形外。 以上性质称为扫描线的连贯性,它是多边形区域连贯性在 以上性质称为扫描线的连贯性, 一条扫描线上的反映。 一条扫描线上的反映。
4
扫描线多边形填充
扫描线多边形填充 把多边形的顶点表示转换为点阵表示, 把多边形的顶点表示转换为点阵表示,也就是从 多边形的给定边界出发, 多边形的给定边界出发,求出位于其内部的各个 像素,并给帧缓冲器内的各个对应单元设置相应 单元设置相应 像素,并给帧缓冲器内的各个对应单元 的灰度和颜色,通常称这种转换为扫描线多边形 扫描线多边形 的灰度和颜色,通常称这种转换为扫描线 填充算法。 填充算法。 扫描线多边形填充的方法 逐点判断法、扫描线算法、边界标志法。 逐点判断法、扫描线算法、边界标志法。
21
P2
扫描线的连贯性
若扫描线y=e与多边 设e为一整数,yi0 ≥ e ≥ yin。若扫描线y=e与多边 为一整数, 形的P 形的Pi-1Pi相交,则记其交点的横坐标为xei。 相交,则记其交点的横坐标为x 现设x 现设xei1,xei2,xei3,…,xeil 是该扫描线与多边形的边界 是该扫描线与多边形 多边形的边界 各交点横坐标的递增序列 称此序列为交点序列 各交点横坐标的递增序列,称此序列为交点序列。 递增序列, 交点序列。
A D C 内部 F B 外部 G E
12
逐点判断法— 逐点判断法—累计角度法
从v点向多边形各顶点发出射线,形成有向角 θi 点向多边形各顶点发出射线, 规定绕v点逆时针方向旋转为正,顺时针为负。 规定绕v点逆时针方向旋转为正,顺时针为负。 计算有向角的和, 计算有向角的和,得出结论
2 偶 倍 , 于 边 之 0(或 π的 数 ) v位 多 形 外 ∑θi = ±2π(或 π的奇数倍 v位于多边形之内 2 ), i=0
P2 P1 P0
7
奇偶规则举例
自相交多边形(边与边之间除了顶点外还有其它交点) 自相交多边形(边与边之间除了顶点外还有其它交点)的顶 点分别为A 如图所示, 点分别为A、B、C、D、E、F、G,如图所示,试用奇偶 规则判断此多边形的内部和外部。 规则判断此多边形的内部和外部。 A D C G E F B
P1 P2
14
P0
0 x
逐点判断法— 逐点判断法—编码法
对多边形的各边编码,边PiPi+1的编码记为∆PiPi+1 的编码记为∆ 对多边形的各边编码, ∆PiPi+1 = Ipi 1 - Ipi + 计算Σ 计算Σ ∆PiPi+1,其中∆PnPn+1= ∆PnP0 ,若Σ ∆PiPi+1 =0,则v 其中∆ 位于多边形之外;若Σ ∆PiPi+1 = ±4,则v位于多边形之内。 位于多边形之内。 位于多边形之外; y 1 v 2 3
10
非零环绕数规则举例
自相交多边形的顶点分别为A 自相交多边形的顶点分别为A、B、C、D、E、 F、G,如图所示,试用非零环绕数规则判断此多 如图所示, 边形的内部和外部。 边形的内部和外部。
A D C G E F B
11
非零环绕数规则举例: 非零环绕数规则举例: 自相交多边形ABCDEFG的内 的内- 自相交多边形ABCDEFG的内-外测试
P1 P3 P7 P0 P8 P6 P5 P4
20
P2
区域的连贯性
根据这些性质,实际上只需知道该长方形区 根据这些性质, 域内任一梯形内一点和多边形的内外关系后, 域内任一梯形内一点和多边形的内外关系后, 即可确定长方形区域内所有像素点与多边形的 内外关系。 内外关系。
P1 P3 P7 P0 P8 P6 P5 P4
3
多边形的表示方法
顶点表示
用多边形顶点的序列来刻划多边 直观、几何意义强、 形。直观、几何意义强、占内存 不能直接用于面着色。 少;不能直接用于面着色。
P5
P4 P1 P2
P3
点阵表示
用位于多边形内的像素的集合来 刻划多边形。 刻划多边形。失去了许多重要的 几何信息; 几何信息;便于运用帧缓冲存储 器表示图形,易于面着色。 器表示图形,易于面着色。
第四章
区域填充算法
主要内容
3.4 区域填充算法 3.5 字符的生成
2
3.4 区域填充
区域填充就是在一个闭合区域内填充某种颜色 或图案。区域填充一般分两类: 或图案。区域填充一般分两类: 扫描线填充算法 通过确定横越区域的扫描线的覆盖间隔来填充 种子填充算法 将填充区域内的一点(种子)赋予给定的颜色, 将填充区域内的一点(种子)赋予给定的颜色, 然后将这种颜色扩展到整个区域的过程。 然后将这种颜色扩展到整个区域的过程。
P1 P3 P7 Xe1 Xd1 P0 P8 Xe8 Xe7 Xd8 Xd7 P6 Xe2 Xd2 P2 P4
25
Biblioteka Baidu
Xe3 Xd3
Xe4 Xed4
P5
边的连贯性
特别是当存在某一个整数k 特别是当存在某一个整数k,0 ≤ k ≤ n-1,使得yik>e, d>yik+1 使得y 成立时,则由区域的连贯性可知d的交点序列和e的交点序 成立时,则由区域的连贯性可知d的交点序列和e 列之间有以下关系: 列之间有以下关系: 1)两序列元素的个数相等,如上图所示。 两序列元素的个数相等,如上图所示。 2)点(xeir,e)与(xdjr,d)位于多边形P的同一边上,于是 ,e)与 ,d)位于多边形 的同一边上, 位于多边形P xeir= xdjr + 1/kjr (2) 这样,运用递推关系式(2)可直接由d的交点序列和e的获得 这样,运用递推关系式(2)可直接由 的交点序列和e 可直接由d e的交点序列。 的交点序列。 以上性质称为边的连贯性,它是区域的连贯性在相邻两扫 以上性质称为边的连贯性, 描线上的反映。 描线上的反映。
P1 P3 P7 Xe1 Xd1 P0 P8 Xe8 Xe7 Xd8 Xd7 P6 Xe2 Xd2 P2 P4
24
Xe3 Xd3
Xe4 Xed4
P5
边的连贯性
可利用d的交点序列计算e的交点序列: 可利用d的交点序列计算e的交点序列:先运用递推关 系式(1)求得与扫描线 系式(1)求得与扫描线y=e和y=d都相交的所有多边形上的 求得与扫描线y=e和y=d都相交的所有多边形上的 交点x 交点xer;再求得与扫描线y=d不相交但与扫描线y=e相交 再求得与扫描线y=d不相交但与扫描线 不相交但与扫描线y=e相交 的所有边P 的所有边PqPq+1上的交点xeq。然后把这两部分按递增的 上的交点x 顺序排列,即可得e的交点序列。 顺序排列,即可得e的交点序列。
18
区域的连贯性
设多边形的顶点P 设多边形的顶点Pi(xi,yi),i=0,1, …,n,又设yi0,yi1,…yin …,n,又设y 是各顶点P 坐标y 递减数列, 是各顶点Pi纵坐标yi的递减数列,即yik≥yik+1,0 ≤ k ≤ n-1 这样, 屏幕上位于y=y 这样,当yik ≥ yik+1,0 ≤ k ≤ n-1时,屏幕上位于y=yik和y=yik+1两 条扫描线之间的长方形区域被多边形 被多边形P 条扫描线之间的长方形区域被多边形P的边分割成若干梯形 三角形可看作其中一底边长为零的梯形), ),它们具有下列 (三角形可看作其中一底边长为零的梯形),它们具有下列 性质: 性质: P1 P3 P7 P0 P8 P6 P5 P4
相关文档
最新文档