第4章(2) 多边形填充算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多边形的填充方法: 扫描线方法
边缘填充方法 栅栏填充方法 边界标志方法
4.3.2 多边形填充的扫描线算法 算法特点:
Computer Graphics
充分利用了相邻象素之间的连续性,避免对象素的逐点判 断和反复求交运算,减少了计算量,提高了算法速度,是 效率较高的多边形填充算法,处理对象为非自交多边形。
xe1
xe8
xe 7
6
xe 2
xe 3
xe 4
2
5 4 若已知某一点与多边形的位置关系,就可知该点所在线段与 8 多边形的位置关系 0
边的连续性
xdi1 , xdi2 , xdi3 ,, xdik
Computer Graphics
若d为一整数,d=e–1,且yi0≥y≥yin;设位于扫描线y=d上的交点序列为 则两交点序列之间有以下关系: 1 两序列元素的个数相等 2 点( x eir , e )与( x dir , d )位于多边形P的同 1 一边上,即 1
Computer Graphics
为了使交点个数保持为偶数,规定当奇点是P的极值点 时,该点按两个交点计算;否则按一个交点计算。
预处理: 若Pi是非极值点,则将
pi 1 pi , pi pi 1 两边中位于扫描线
y=yi上方的那条边在Pi点处截去 一单位长
Computer Graphics
扫描线算法的数据结构和实现步骤
[P0P1P2P3P4P5 P6] =[(2,5) (2,10) (9,6) (16,11) (16,4) (12,2) (7,2)]
对奇点采用了预处理的边y筒
Computer Graphics
多边形P0P1P2P3P4P5P6P0
[P0P1P2P3P4P5 P6] =[(2,5) (2,10) (9,6) (16,11) (16,4) (12,2) (7,2)]
扫描线算法实现步骤伪代码
Polygonfill(polydef,color) Int color 多边形定义 polydef { for(各条扫描线I) { 初始化新边表表头指针ET[I]; 把ymin=I的边放进边表ET[I]; } y=最低扫描线号; 初始化活化边表AEL为空; for(各条扫描线I) { 把新边表ET[I]中的边结点用插入排序法插入AEL表,使 之按x递增顺序排列; 遍历AET表,把配对交点之间的区间上的各像素(x,y)用待填颜色改写 遍历AET表,把ymax=I的结点从AEL中删除,并把ymax>I的结点的 x递增dx; 若允许多边形的边自交,则用冒泡排序法对AEL表重新排序; } }
M
边缘填充算法的实现 对多边形P的每一非水平边(i=0,1,…,n)上的各像素 做向右求反运算即可 2 3 2 2
Computer Graphics
4
3
0 4 3
1 4 3
1
0
Computer Graphics
步骤2:(y初始化)取扫描线纵坐标y的初始值为ET中非空元素的最小序号 步骤3:按从下到上的顺序对纵坐标值为y的扫描线(当前扫描线)执 行下列步骤,直到边的分类表ET和边的活化链表AEL都变成空为止。 (1) 如边分类表ET中的第y类元素非空,则将属于该类的所有 边从ET中取出并插入边的活化链表AEL中,AEL中的各边按照 x值(当x的值相等时,按Δx值)递增方向排序。 (2) 若相对于当前扫描线,边的活化链表AEL非空,则将AEL中 的边两两依次配对,即第1,2边为一对,第3,4边为一对,依此 类推。每一对边与当前扫描线的交点所构成的区段位于多边形内, 依次对这些区段上的点(象素)按多边形属性着色。 (3) 将边的活化链表AEL中满足y=ymax的边删去。 (4) 将边的活化链表AEL剩下的每一条边的x域累加Δx,即x=x+Δx。 (5) 将当前的扫描线的纵坐标值y累加,即y=y+1
Computer Graphics
多边形P0P1P2P3P4P5P6P0
[P0P1P2P3P4P5 P6] =[(2,5) (2,10) (9,6) (16,11) (16,4) (12,2) (7,2)]
Computer Graphics
分类表ET是按边下端点的纵坐标y对边进行分类的 指针数组 下端点的纵坐标y等于i的边归入第i类,水平边除外 同一类中,各边按x值递增的顺序排列成行
位于y= y i 和y=yi 两条扫描线之间的长方形区域被多边形P的边
k
Computer Graphics
k 1
分割成若干梯形 它们具有下列性质(设( xi , yi ) 为整数): (1)梯形的两底边分别在y=y i 和y= yi 两条扫描线上,腰在多边 形P的边上或在显示屏幕的边界上。 (2) 梯形可分为两类:一类位于多边形P的内部;另一 类在多边形P的外部。 y (3) 两类梯形在长方形区域{y i ,i }内相间的排列。
16 -5/3 3
e5 4 14 2
AEL
e7 5
11 -5/3 3
e5
4 16 2
AEL 在 y=4扫 描 线上 的当前状态 E4边做了预处理 (也 可以不做预处理,但 要清楚的知道此点要 在AEL中计几次)
扫描线算法实现步骤
步骤1:(AEL初始化)将边的活化链表AEL设置为空。
Computer Graphics
Computer Graphics
4.3.3 边缘填充算法wk.baidu.com
Computer Graphics
算法特点:
采用对图像进行逐位求反的方法,免去对边排序 的工作量
预备知识:
•对图像M作偶数次求反运算,其结果还是M;而对M作奇数次 求反运算的结果是反的 •在光栅图形中,如某区域已着上值为M的某种颜色,则上述 求反运算得到的结果是: 对区域作偶数次求反运算后,该区域的颜色不变; 作奇数次求反运算后,该区域的颜色则变成值为 的颜色。
关于一般多边形的填充过程,对于一条扫描线, 可分为四步: y
求交 排序 交点配对 8
7 6 5 4 3 2 1 0 P1 I1 I2 P4 扫描线2 P2 x I3 P5 P3 I4 扫描线5
区间填色
基本概念:
区域的连续性 扫描线的连续性 边的连续性 奇点的处理
1 2 3 4 5 6 7 8 9 10
对奇点采用了预处理的边y筒
边的活化链表AEL由与当前扫描线相交的所有多边形的边组成
Computer Graphics
它记录了多边形沿扫描线的交点序列,并根据递推关系,不断地更新交点序列 它是一个动态列表,新边插入,旧边删除
[P0P1P2P3P4P5 P6] =[(2,5) (2,10) (9,6) (16,11) (16,4) (12,2) (7,2)]
Computer Graphics
扫描线算法特点
数据结构较复杂
Computer Graphics
但充分利用了扫描线、多边形边的连续性,避免 了反复求交点的运算,是一种较快的填充方法
对各种表的维持和排序开销太大,适合软件 实现而不适合硬件实现
Computer Graphics
• 优点:
– 对每个像素只访问一次 – 与设备无关
该表示几何意义强、占内存少 但它不能直观地说明哪些像素在多边形内
P1 P2
P4
P3
Computer Graphics
点阵表示是用位于多边形内的像素的集合来刻划 多边形
该方法虽然没有多边形的几何信息
是面着色所需要的图像表示形式
Computer Graphics
多边形填充就是把多边形的顶点表示转 换为点阵表示 即从多边形的给定边界出发,求出位于其内 部的各个像素,并将帧缓冲器内的各个对应 元素设置相应的灰度或颜色。
扫描线算法的数据结构
Computer Graphics
数据结构 边的分类表ET和边的活化链表AEL ET和AEL中的多边形的边由四个域组成:
ymax 边的上端点的y坐标 在ET中为边的下端点的x坐标 在 AEL中是边与扫描线交点的x坐标 边的斜率的倒数 指向下一条边的指针
x
Δx next
多边形P0P1P2P3P4P5P6P0
缺点:
数据结构复杂 只适合软件实现
y
例习题1: 用扫描线算法来扫描转换一个多边形
P4
Computer Graphics
8 7 6 5 4 3 2
P6 P5
P3 P1
1 0 1 2 3 4
P2 5 6 7 8 9 10 11
x
y
边的Y筒ET
8 P6 7 6 P5 5 4 3 P3 2 P1 1 P2 0 1 2 3 4 5 6 7 8 9 10 11 P4
区域的连续性
设多边形P的顶点 Pi ( xi , yi ),
Computer Graphics
i 0,1,, n,
yik yik 1 , 0 k n 1
p3
各顶点Pi的纵坐标yi的递减数列
yi0 yi1 yin
p1 p7
p6 p0
p2
p5 p8 p4
p1,p7,p3,p6,p2,p5,p0,p4,p8
AEL
e7 5
e5 -5/3 4 12
AEL在 y=2扫 描 线上 的当前状态
7
2
Computer Graphics
[P0P1P2P3P4P5 P6] =[(2,5) (2,10) (9,6) (16,11) (16,4) (12,2) (7,2)]
AEL
AEL 在 y=3扫 描 线上 的当前状态 e7 5
Computer Graphics
第4章 基本光栅图形生成算法 4.3 多边形的填充
4.3.1 多边形的表示方法
多边形的分类:
Computer Graphics
凸多边形
凹多边形
含内环的多边形
表示方法:顶点表示和点阵表示
4.3.1 多边形的表示方法
Computer Graphics
顶点表示是用多边形的顶点的序列来描述多边形
Computer Graphics
x
5
7 8
5
-3/2
8
5
2
4
3
11 0
7
2
0
2 1
2 5 -3
3
5
3
y
边的活化链表
8 P6 7 6 P5 5 4 3 P3 2 P1 1 P2 0 1 2 3 4 5 6 7 8 9 10 11 P4
Computer Graphics
x
3
Y=1
2
5
-3
3
5
(5,1) Y=2
xeir x dir
xe 4 xd 4
7 y=e y=d
3
mir
xe1
xd 1
xe8 xd 8
xe 7 xe 2 xd 7 xd 2
6 5
xe 3
2
xd 3
以上性质称为 边的连续性
0 8
4
奇点的处理
Computer Graphics
奇点定义
当扫描线与多边形P的边界的交点是P的顶点时, p1 要把奇点作为几个交点来处理呢?? 则称该交点为奇点
p7 p3
p6
p0
p2 p4
p5 p8
多边形P的顶点可分为两类: 极值点和非极值点 如果( yi 1 yi )( yi 1 yi ) 0 ,则称顶点Pi为极值点; 否则称Pi为非极值点。
如果把每一奇点简单地计为一个交点,则交点个数可能出现奇数。 若将每一奇点都简单地计为两个交点,同样会导致反常的结果
k
k 1
k
k 1
p1
由区域的相关性知
y yik
y yik 1
p7
p3
p6
p0
p2 p4
p5 p8
当知道一个区域内一点与多边形的位置关系,即可确定该区域 内所有点与多边形之间的内外关系
扫描线的连续性
扫描线的连续性是区域连续性在扫描线上的体现
Computer Graphics
该扫描线与P的边界各交点横坐标的递增序列 设e为一整数 y i0≥e≥ y in xei1 , xei2 , xei3 ,, xeil 若扫描线y=e与多边形P的边 此交点序列具有以下性质: Pi-1Pi相交,则记其交点的横坐标为x ei (1) l是偶数 1 由区域的连贯性和 (2)扫描线被分成好多区段,一部 扫描线的连续性知: 分在多边形内,一部分在多边形外 3 7 (3)两类线段间隔排列 y=e
2 2 -3
3
(5,1)
8 3
(2,2)
(8,2)
y
例习题1:
Computer Graphics
P4 8 7 6 5 4 3 2 P1 1 0 1 2 3 4 P2 5 6 7 8 9 10 11 P3 P6 P5
x
Computer 习题 设现在要用扫描线算法来扫描转换一个多边形,该多 Graphics P 边形的顶点分别为, (1,1), P2 (8,1), P (8, 6), P4 (5,3), P (1, 7) 如图 1 3 5 所示。 先写出边y桶,然后试给出边的活化链表AEL,完成扫描转换
边缘填充方法 栅栏填充方法 边界标志方法
4.3.2 多边形填充的扫描线算法 算法特点:
Computer Graphics
充分利用了相邻象素之间的连续性,避免对象素的逐点判 断和反复求交运算,减少了计算量,提高了算法速度,是 效率较高的多边形填充算法,处理对象为非自交多边形。
xe1
xe8
xe 7
6
xe 2
xe 3
xe 4
2
5 4 若已知某一点与多边形的位置关系,就可知该点所在线段与 8 多边形的位置关系 0
边的连续性
xdi1 , xdi2 , xdi3 ,, xdik
Computer Graphics
若d为一整数,d=e–1,且yi0≥y≥yin;设位于扫描线y=d上的交点序列为 则两交点序列之间有以下关系: 1 两序列元素的个数相等 2 点( x eir , e )与( x dir , d )位于多边形P的同 1 一边上,即 1
Computer Graphics
为了使交点个数保持为偶数,规定当奇点是P的极值点 时,该点按两个交点计算;否则按一个交点计算。
预处理: 若Pi是非极值点,则将
pi 1 pi , pi pi 1 两边中位于扫描线
y=yi上方的那条边在Pi点处截去 一单位长
Computer Graphics
扫描线算法的数据结构和实现步骤
[P0P1P2P3P4P5 P6] =[(2,5) (2,10) (9,6) (16,11) (16,4) (12,2) (7,2)]
对奇点采用了预处理的边y筒
Computer Graphics
多边形P0P1P2P3P4P5P6P0
[P0P1P2P3P4P5 P6] =[(2,5) (2,10) (9,6) (16,11) (16,4) (12,2) (7,2)]
扫描线算法实现步骤伪代码
Polygonfill(polydef,color) Int color 多边形定义 polydef { for(各条扫描线I) { 初始化新边表表头指针ET[I]; 把ymin=I的边放进边表ET[I]; } y=最低扫描线号; 初始化活化边表AEL为空; for(各条扫描线I) { 把新边表ET[I]中的边结点用插入排序法插入AEL表,使 之按x递增顺序排列; 遍历AET表,把配对交点之间的区间上的各像素(x,y)用待填颜色改写 遍历AET表,把ymax=I的结点从AEL中删除,并把ymax>I的结点的 x递增dx; 若允许多边形的边自交,则用冒泡排序法对AEL表重新排序; } }
M
边缘填充算法的实现 对多边形P的每一非水平边(i=0,1,…,n)上的各像素 做向右求反运算即可 2 3 2 2
Computer Graphics
4
3
0 4 3
1 4 3
1
0
Computer Graphics
步骤2:(y初始化)取扫描线纵坐标y的初始值为ET中非空元素的最小序号 步骤3:按从下到上的顺序对纵坐标值为y的扫描线(当前扫描线)执 行下列步骤,直到边的分类表ET和边的活化链表AEL都变成空为止。 (1) 如边分类表ET中的第y类元素非空,则将属于该类的所有 边从ET中取出并插入边的活化链表AEL中,AEL中的各边按照 x值(当x的值相等时,按Δx值)递增方向排序。 (2) 若相对于当前扫描线,边的活化链表AEL非空,则将AEL中 的边两两依次配对,即第1,2边为一对,第3,4边为一对,依此 类推。每一对边与当前扫描线的交点所构成的区段位于多边形内, 依次对这些区段上的点(象素)按多边形属性着色。 (3) 将边的活化链表AEL中满足y=ymax的边删去。 (4) 将边的活化链表AEL剩下的每一条边的x域累加Δx,即x=x+Δx。 (5) 将当前的扫描线的纵坐标值y累加,即y=y+1
Computer Graphics
多边形P0P1P2P3P4P5P6P0
[P0P1P2P3P4P5 P6] =[(2,5) (2,10) (9,6) (16,11) (16,4) (12,2) (7,2)]
Computer Graphics
分类表ET是按边下端点的纵坐标y对边进行分类的 指针数组 下端点的纵坐标y等于i的边归入第i类,水平边除外 同一类中,各边按x值递增的顺序排列成行
位于y= y i 和y=yi 两条扫描线之间的长方形区域被多边形P的边
k
Computer Graphics
k 1
分割成若干梯形 它们具有下列性质(设( xi , yi ) 为整数): (1)梯形的两底边分别在y=y i 和y= yi 两条扫描线上,腰在多边 形P的边上或在显示屏幕的边界上。 (2) 梯形可分为两类:一类位于多边形P的内部;另一 类在多边形P的外部。 y (3) 两类梯形在长方形区域{y i ,i }内相间的排列。
16 -5/3 3
e5 4 14 2
AEL
e7 5
11 -5/3 3
e5
4 16 2
AEL 在 y=4扫 描 线上 的当前状态 E4边做了预处理 (也 可以不做预处理,但 要清楚的知道此点要 在AEL中计几次)
扫描线算法实现步骤
步骤1:(AEL初始化)将边的活化链表AEL设置为空。
Computer Graphics
Computer Graphics
4.3.3 边缘填充算法wk.baidu.com
Computer Graphics
算法特点:
采用对图像进行逐位求反的方法,免去对边排序 的工作量
预备知识:
•对图像M作偶数次求反运算,其结果还是M;而对M作奇数次 求反运算的结果是反的 •在光栅图形中,如某区域已着上值为M的某种颜色,则上述 求反运算得到的结果是: 对区域作偶数次求反运算后,该区域的颜色不变; 作奇数次求反运算后,该区域的颜色则变成值为 的颜色。
关于一般多边形的填充过程,对于一条扫描线, 可分为四步: y
求交 排序 交点配对 8
7 6 5 4 3 2 1 0 P1 I1 I2 P4 扫描线2 P2 x I3 P5 P3 I4 扫描线5
区间填色
基本概念:
区域的连续性 扫描线的连续性 边的连续性 奇点的处理
1 2 3 4 5 6 7 8 9 10
对奇点采用了预处理的边y筒
边的活化链表AEL由与当前扫描线相交的所有多边形的边组成
Computer Graphics
它记录了多边形沿扫描线的交点序列,并根据递推关系,不断地更新交点序列 它是一个动态列表,新边插入,旧边删除
[P0P1P2P3P4P5 P6] =[(2,5) (2,10) (9,6) (16,11) (16,4) (12,2) (7,2)]
Computer Graphics
扫描线算法特点
数据结构较复杂
Computer Graphics
但充分利用了扫描线、多边形边的连续性,避免 了反复求交点的运算,是一种较快的填充方法
对各种表的维持和排序开销太大,适合软件 实现而不适合硬件实现
Computer Graphics
• 优点:
– 对每个像素只访问一次 – 与设备无关
该表示几何意义强、占内存少 但它不能直观地说明哪些像素在多边形内
P1 P2
P4
P3
Computer Graphics
点阵表示是用位于多边形内的像素的集合来刻划 多边形
该方法虽然没有多边形的几何信息
是面着色所需要的图像表示形式
Computer Graphics
多边形填充就是把多边形的顶点表示转 换为点阵表示 即从多边形的给定边界出发,求出位于其内 部的各个像素,并将帧缓冲器内的各个对应 元素设置相应的灰度或颜色。
扫描线算法的数据结构
Computer Graphics
数据结构 边的分类表ET和边的活化链表AEL ET和AEL中的多边形的边由四个域组成:
ymax 边的上端点的y坐标 在ET中为边的下端点的x坐标 在 AEL中是边与扫描线交点的x坐标 边的斜率的倒数 指向下一条边的指针
x
Δx next
多边形P0P1P2P3P4P5P6P0
缺点:
数据结构复杂 只适合软件实现
y
例习题1: 用扫描线算法来扫描转换一个多边形
P4
Computer Graphics
8 7 6 5 4 3 2
P6 P5
P3 P1
1 0 1 2 3 4
P2 5 6 7 8 9 10 11
x
y
边的Y筒ET
8 P6 7 6 P5 5 4 3 P3 2 P1 1 P2 0 1 2 3 4 5 6 7 8 9 10 11 P4
区域的连续性
设多边形P的顶点 Pi ( xi , yi ),
Computer Graphics
i 0,1,, n,
yik yik 1 , 0 k n 1
p3
各顶点Pi的纵坐标yi的递减数列
yi0 yi1 yin
p1 p7
p6 p0
p2
p5 p8 p4
p1,p7,p3,p6,p2,p5,p0,p4,p8
AEL
e7 5
e5 -5/3 4 12
AEL在 y=2扫 描 线上 的当前状态
7
2
Computer Graphics
[P0P1P2P3P4P5 P6] =[(2,5) (2,10) (9,6) (16,11) (16,4) (12,2) (7,2)]
AEL
AEL 在 y=3扫 描 线上 的当前状态 e7 5
Computer Graphics
第4章 基本光栅图形生成算法 4.3 多边形的填充
4.3.1 多边形的表示方法
多边形的分类:
Computer Graphics
凸多边形
凹多边形
含内环的多边形
表示方法:顶点表示和点阵表示
4.3.1 多边形的表示方法
Computer Graphics
顶点表示是用多边形的顶点的序列来描述多边形
Computer Graphics
x
5
7 8
5
-3/2
8
5
2
4
3
11 0
7
2
0
2 1
2 5 -3
3
5
3
y
边的活化链表
8 P6 7 6 P5 5 4 3 P3 2 P1 1 P2 0 1 2 3 4 5 6 7 8 9 10 11 P4
Computer Graphics
x
3
Y=1
2
5
-3
3
5
(5,1) Y=2
xeir x dir
xe 4 xd 4
7 y=e y=d
3
mir
xe1
xd 1
xe8 xd 8
xe 7 xe 2 xd 7 xd 2
6 5
xe 3
2
xd 3
以上性质称为 边的连续性
0 8
4
奇点的处理
Computer Graphics
奇点定义
当扫描线与多边形P的边界的交点是P的顶点时, p1 要把奇点作为几个交点来处理呢?? 则称该交点为奇点
p7 p3
p6
p0
p2 p4
p5 p8
多边形P的顶点可分为两类: 极值点和非极值点 如果( yi 1 yi )( yi 1 yi ) 0 ,则称顶点Pi为极值点; 否则称Pi为非极值点。
如果把每一奇点简单地计为一个交点,则交点个数可能出现奇数。 若将每一奇点都简单地计为两个交点,同样会导致反常的结果
k
k 1
k
k 1
p1
由区域的相关性知
y yik
y yik 1
p7
p3
p6
p0
p2 p4
p5 p8
当知道一个区域内一点与多边形的位置关系,即可确定该区域 内所有点与多边形之间的内外关系
扫描线的连续性
扫描线的连续性是区域连续性在扫描线上的体现
Computer Graphics
该扫描线与P的边界各交点横坐标的递增序列 设e为一整数 y i0≥e≥ y in xei1 , xei2 , xei3 ,, xeil 若扫描线y=e与多边形P的边 此交点序列具有以下性质: Pi-1Pi相交,则记其交点的横坐标为x ei (1) l是偶数 1 由区域的连贯性和 (2)扫描线被分成好多区段,一部 扫描线的连续性知: 分在多边形内,一部分在多边形外 3 7 (3)两类线段间隔排列 y=e
2 2 -3
3
(5,1)
8 3
(2,2)
(8,2)
y
例习题1:
Computer Graphics
P4 8 7 6 5 4 3 2 P1 1 0 1 2 3 4 P2 5 6 7 8 9 10 11 P3 P6 P5
x
Computer 习题 设现在要用扫描线算法来扫描转换一个多边形,该多 Graphics P 边形的顶点分别为, (1,1), P2 (8,1), P (8, 6), P4 (5,3), P (1, 7) 如图 1 3 5 所示。 先写出边y桶,然后试给出边的活化链表AEL,完成扫描转换