第二章2多边形扫描转换
第二章 光栅图形学2--多边形的扫描转换与区域填充

山东科技大学信息学院
区域的连贯性
根据这些性质,实际上只需知道该长方形 区域内任一梯形内一点关于多边形P的内 外关系后,即可确定区域内所有梯形关 于P的内外关系。
山东科技大学信息学院
扫描线的连贯性
设e为一整数,yi0≥e≥yin。若扫描线y=e与多边形P的 Pi-1Pi相交,则记其交点的横坐标为xei。 现设xei1,xei2,xei3,…,xeil 是该扫描线与P的边界各交点 横坐标的递增序列,称此序列为交点序列。由区域的连贯 性可知,此交点序列具有以下性质:
山东科技大学信息学院
三、多边形的扫描转换
山东科技大学信息学院
1 逐点判断法
• 逐个判断绘图窗口内的像素: • 如何判断点在多边形的内外关系?
1)射线法: 2)累计角度法 3)编码法;
山东科技大学信息学院
逐点判断法
1)射线法
• 步骤: 1. 从待判别点v发出射线 2. 求交点个数k 3. K的奇偶性决定了点与多边形的内外关系
山东科技大学信息学院
3 扫描线种子填充算法
• 扫描线种子填充算法
–目标:减少递归层次 –适用于边界表示的4连通区域 算法思想:在任意不间断区间中只取一个种子 像素(不间断区间指在一条扫描线上一组相 邻元素),填充当前扫描线上的该段区间; 然后确定与这一区段相邻的上下两条扫描线 上位于区域内的区段,并依次把它们保存起 来,反复进行这个过程,直到所保存的个区 段都填充完毕。
逐点判断法程序简单, 速度太慢,效率低。
P1
v P2
山东科技大学信息学院
逐点判断法
• 逐点判断的算法虽然程序简单,但不可取。原 因是速度太慢,主要是由于该算法割断了各象 素之间的联系,孤立地考察各象素与多边形的 内外关系,使得几十万甚至几百万个象素都要 一一判别,每次判别又要多次求交点,需要做 大量的乘除运算,花费很多时间。
广工数媒计算机图形学之5基本图形生成算法-多边形扫描转换及区域填充

计算机图形学基础:基本图形生成算法——多边形扫描转换及区域填充 多边形扫描转换——x-扫描线算法 x-扫描线算法填充多边形基本思路:
扫描线与x轴平行。按照扫描顺序,计算每一条扫描线与多边 形的相交区间,用指定颜色显示区间内的像素。区间的端点 可以通过计算扫描线与多边形边界线的交点获得。 x-扫描线算法可以填充凸、凹多边形,也可填充中间有空的 多边形。
广东工业大学机电学院图学与数字媒体工程系
计算机图形学基础:基本图形生成算法——多边形扫描转换及区域填充
多边形扫描转换——x-扫描线算法
x-扫描线算法涉及的问题: 一、扫描线与多边形边界交点的 有效性判别; 扫描线y=5与AB边有无效交点k, 在做求交运算之前,判断该扫 描线的y坐标不在点A和点B的y 坐标之间,不做求交运算。
广东工业大学机电学院图学与数字媒体工程系
计算机图形学基础:基本图形生成算法——多边形扫描转换及区域填充
区域填充——边界填充算法
栈结构实现4-连通边界填充算法步骤: (1)种子像素入栈; (2)栈顶象素出栈; (3)将出栈象素置成填充色; (4)检查出栈象素的4-邻接点,若其中某个象素点不是边 界色且未置成多边形色,则把该象素入栈。 (5)检查栈是否为空,若非空,则执行步骤(2),若为 空,则结束。 4-连通边界填充.SWF
广东工业大学机电学院图学与数字媒体工程系
计算机图形学基础:基本图形生成算法——多边形扫描转换及区域填充 填充算法——边缘填充算法
“边缘填充算法的过程.SWF”演示了边缘填充算法的实现过 程。 该算法的优点是简单,缺点是对于复杂图形,每一像素可 能要访问多次,效率降低。
广东工业大学机电学院图学与数字媒体工程系
描述多边形扫描转换的扫描线算法的基本步骤

描述多边形扫描转换的扫描线算法的基本步骤多边形扫描转换是计算机图形学中一种常用的算法,用于将输入的多边形进行转换和填充。
其基本步骤包括初始化,活性边表的生成,活性边表的更新和扫描线的处理。
1.初始化首先,需要根据输入的多边形构造一个扫描线填充的边表。
这包括对多边形顶点的排序、计算多边形中的水平线交点,并将边表中的数据初始化为初始值。
2.活性边表的生成活性边表是用来存储和管理与扫描线相交的边的数据结构。
生成活性边表的过程包括两个步骤:-遍历多边形的每一条边,将边与当前扫描线的位置进行比较,如果两者相交,则将这条边添加到活性边表中。
-对活性边表中的边按照交点的水平位置进行排序。
这里可以使用插入排序等算法。
3.活性边表的更新活性边表需要在每次扫描线移动时进行更新。
这包括对活性边表中的边进行更新,以反映新的交点或边的状态的变化。
-对于与当前扫描线相交的边,需要计算其交点,并更新到活性边表中。
-对于已经处理完的边或超出当前扫描线范围的边,从活性边表中移除。
4.扫描线的处理在每次扫描线移动时,需要对当前的活性边表进行处理。
这包括两个子步骤:-将活性边表中的边按照两两成对的方式遍历,找到当前扫描线和这两条边所定义的三角形的上顶点和下顶点。
-将这个三角形的内部填充,并进行显示或存储等处理。
5.继续扫描线的移动在处理完一条扫描线后,需要将扫描线的位置向上移动一个单位,并继续执行第3步和第4步,直到所有的扫描线都被处理完毕。
总结:多边形扫描转换的基本步骤包括初始化、活性边表的生成、活性边表的更新和扫描线的处理。
这个算法通常用于实现对多边形的填充。
在每次扫描线移动时,活性边表需要进行更新,以反映新的交点或变化的边的状态。
扫描线的处理包括遍历活性边表中的边,并根据扫描线和这两条边所定义的三角形的顶点来进行填充。
最后,重复执行扫描线的移动和对活性边表的更新和处理,直到所有的扫描线都被处理完毕。
多边形的扫描转换算法

多边形的扫描转换算法概述多边形的扫描转换算法是计算机图形学中用于将多边形转换为像素的常用算法。
它通过扫描线的方式来确定多边形与像素的相交关系,并将多边形的内部区域填充为指定的颜色。
本文将详细介绍多边形的扫描转换算法的原理、步骤和应用。
原理多边形的扫描转换算法基于扫描线的概念,将多边形的边界线与一条水平线或垂直线进行比较,从而确定多边形的内部和外部区域。
算法的关键在于边界线的处理和内部区域的填充。
步骤多边形的扫描转换算法一般包括以下步骤:1.初始化扫描线的位置和内部区域的填充颜色。
2.遍历多边形的边界线,将其与扫描线比较,确定内部和外部区域。
3.根据内部区域的状态,进行填充颜色。
4.更新扫描线的位置,继续扫描下一条线段,直至完成对所有边界线的处理。
算法详解初始化扫描线在开始进行多边形的扫描转换之前,需要初始化扫描线的位置和内部区域的填充颜色。
一般情况下,扫描线的位置可以从多边形的最低点开始,逐渐向上扫描。
内部区域的填充颜色可以根据具体需求进行选择。
边界线处理多边形的边界线可以由多个线段组成,需要按照一定的顺序进行处理。
一种常用的处理方式是按照边界线的上端点的纵坐标从小到大排序,然后依次处理每条线段。
对于每条线段,通过比较线段的上端点和下端点的纵坐标与扫描线的位置,可以确定线段与扫描线的相交关系。
根据线段的斜率可以进一步确定线段与扫描线的交点。
内部区域填充确定了线段与扫描线的相交关系后,就可以确定内部和外部区域。
一般情况下,内部区域被定义为线段上方的区域,而外部区域被定义为线段下方的区域。
根据内部区域的状态,可以进行填充颜色。
如果内部区域是连续的,则可以使用扫描线的颜色进行填充。
如果内部区域有间隙,则需要采用其他填充算法,如边界填充算法或种子填充算法。
更新扫描线处理完当前线段后,需要更新扫描线的位置,继续扫描下一条线段。
一般情况下,扫描线的位置会逐渐向上移动,直至到达多边形的最高点。
应用多边形的扫描转换算法在计算机图形学中有广泛的应用。
计算机图形学_ 光栅图形学算法(一)_24 多边形扫描转换X扫描线算法_

x
d、区间填色:把这些相交区间内的 像素置成不同于背景色的填充色
当扫描线与多边形顶点相交时,交点的取舍问题(交点的个数 应保证为偶数个)
y 12 11 10 9 8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 9 101112 x
解决方案:
y
(1)若共享顶点的两条边分别落
12 11
x
算法的核心是按X递增顺序
排列交点的X坐标序列。由 y P7
此,可得到X-扫描线算法步
12 11
骤如下:
10 9
P6
P5
8
(3)对一条扫描线填充的过
7 6
P1
P3
5
程可分为四个步骤:
4 3
2
a、求交:计算扫描线与多边
1
1 2P23 4 5 6 7 8P4 9 101112 x
形各边的交点
b、排序:把所有交点按递增 顺序进行排序
任意两顶点间的连线均在多边形内
(2)凹多边形 任意两顶点间的连线有不在在多边形内
(3)含内环的多边形 多边形内包含多边形
现在的问题是,知道多边形的边界,如何找到多边形内部 的点,即把多边形内部填上颜色
P2
P3
P4
P1 P6
P5
顶点表示
点阵表示
1、X-扫描线算法
X-扫描线算法填充多边形的基本思想是按扫描线顺序,计算 扫描线与多边形的相交区间,再用要求的颜色显示这些区间 的像素,即完成填充工作
区间的端点可以通过计算扫 描线与多边形边界线的交点 获得
扫描线
交点 交点
交点
交点
如扫描线y=3与多边形的边界相 y
交于4点:
11
多边形扫描转换算法

多边形扫描转换算法多边形扫描转换算法是一种计算机图形学中常用的算法,用于将一个多边形转换为一组水平线段,以便进行填充或渲染。
该算法的基本思想是将多边形沿着水平方向进行扫描,找出多边形与水平线段的交点,并将这些交点按照从左到右的顺序进行排序,最终得到一组水平线段。
多边形扫描转换算法的实现过程可以分为以下几个步骤:1. 找出多边形的顶点首先需要找出多边形的顶点,这些顶点可以通过遍历多边形的边来得到。
在遍历边的过程中,需要注意将相邻的边进行合并,以便得到多边形的完整轮廓。
2. 找出多边形与水平线段的交点在进行扫描转换时,需要将多边形沿着水平方向进行扫描,找出多边形与水平线段的交点。
这些交点可以通过遍历多边形的边来得到,对于每条边,需要判断其是否与当前扫描线相交,如果相交,则计算出交点的坐标。
3. 对交点进行排序得到多边形与水平线段的交点后,需要将这些交点按照从左到右的顺序进行排序。
这可以通过对交点的x 坐标进行排序来实现。
如果有多个交点具有相同的 x 坐标,则需要按照其 y 坐标进行排序。
4. 将交点组成线段将交点按照从左到右的顺序进行排序后,就可以将它们组成一组水平线段。
对于相邻的两个交点,可以将它们之间的部分作为一条水平线段。
如果两个交点之间没有其他交点,则可以将它们之间的部分作为一条水平线段。
5. 进行填充或渲染得到一组水平线段后,就可以进行填充或渲染。
对于填充操作,可以使用扫描线算法来实现。
对于渲染操作,可以将每条水平线段转换为一组像素点,并将这些像素点进行绘制。
多边形扫描转换算法的优点是可以处理任意形状的多边形,并且可以得到一组水平线段,方便进行填充或渲染。
但是该算法的缺点是需要进行大量的计算,特别是在多边形较复杂时,计算量会非常大,导致性能下降。
为了提高多边形扫描转换算法的性能,可以采用一些优化技术。
例如,可以使用空间分割技术来减少计算量,将多边形分割成多个小块进行处理。
另外,可以使用并行计算技术来加速计算过程,将多个处理器或计算机同时进行计算。
计算机图形学(多边形的扫描转换)ppt课件

多边形的扫描转换过程,实际上是给多边形包围的区域着色的过程
2014-2015-1:CG:SCUEC
33
为什么研究图形的扫描转换与区域填充?
与单纯由线条所构成的线画图形相比,采用面着色绘制的 光栅图形显得更为生动、直观,真实感更强
哪个长方形在前,哪个在后? 哪个长方形在前,哪个在后?
面着色可以使使光栅图形的画面明暗自然,色彩丰富,形象 逼真,具有真实感
计算机图形学
第三章 基本光栅图形算法
1
本章内容
1
直线的扫描转换
2
圆的扫描转换
3
多边形的扫描转换
4
区域填充
5 光栅图形的反走样算法
2014-2015-1:CG:SCUEC
22
多边形的扫描转换
多边形的表示方法
– 顶点表示: 用多边形的顶点序列来刻 划多边形
• 该表示方法几何意义强、占内存少
P1 P3
yi+1
y = yi yi-1
Pi
yi+1 y = yi
yi-1 Pi
非极值点的处理
2014-2015-1:CG:SCUEC
15 15
算法的实现步骤
对于每一条扫描线,多边形的扫描转换可分为以下4步:
1 求交点:计算扫描线与多边形各边的交点,设交点个 数为n。
2 交点排序:把所有的交点按x值递增的顺序进行排列。 3 交点配对:将排序后的第1个与第2个交点,第3个与第
设多边形某一条边的方程为 ax by c 0,当前扫描线 y yi
与该边的交点坐标为 (xi , yi ),则下一条扫描线 y yi1与该边
的交点 (xi1, yi1)不需要重新计算,只要加一个增量 x即可。 因为此时有
多边形的扫描转换

(xi-3,yi-3)
20
奇异点的处理
奇异点的处理
在极值点处,按两个交点计算 在非极值点处,按一个交点计算
实际计算前,奇异点(非极值点)的预处理
将扫描线上方线段截断一个单位,这样扫描线就只与多边形有 一个交点。
21
奇异点的处理
22
多边形扫描转换算法
核心思想(从下到上扫描)
12
扫描线连贯性
扫描线的连贯性
交点序列:扫描线与 多边形的交点个数为 偶数(1,2,3,4,5,6)
红色区间(1,2)、(3,4)、 (5,6)位于多边形内部
其余绿色区间位于多 边形外部
两类区间相间排列
13
扫描线连贯性
推论:如果上述交点区间属于多边形内(外),那么该区间 内所有点均属于多边形内(外)。
活化边链表实例
31
多边形扫描转换算法
1. (y初始化) 取扫描线纵坐标y的初始值为ET中非空元素的 最小序号 (y=2)
32
多边形扫描转换算法
2. (AEL初始化) 将边的活化链表AEL设置为空 3. 按从下到上的顺序对纵坐标值为y的扫描线(当前扫描线)
执行如下步骤,直到分类边表ET和边的活化链表AEL 都变成空为止
28
分类的边表实例
29
活化边链表(AEL)
活化链表由与当前扫描线相交的边组成
记录了多边形的边沿扫描线的交点序列 根据边的连贯性不断刷新交点序列
基本单元是边(与扫描线相交的边) 与分类边表不同
分类边表记录初始状态 活化边表随扫描线的移动而动态更新
30
ymax xcur dx
与分类边 表的区别
34
多边形扫描转换算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
x
ymax
1/k
next
边表(Edge Table) 边表的构造:
(1)首先构造一个纵向链表,链表的长度为多边形所占有
的最大扫描线数,链表的每个结点,称为一个桶,则
对应多边形覆盖的每一条扫描线。
(2)将每条边的信息链入与该边最小y坐标(ymin )相对应
的桶处。也就是说,若某边的较低端点为 ymin,则该
解决顶点交点计为1时的情形:
扫描线y+1 扫描线y 扫描线y-1
(a)原图
(b)缩短ymax的边
(c)缩短ymin的边
图2-28 将多边形的某些边缩短以分离那些应计 为1个交点的顶点
y 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
2. 泛填充算法
算法的输入:种子点坐标(x,y),填充色和内部点的颜
色。
算法原理:
算法从指定的种子(x,y)开始,用所希望的填充颜色赋
给所有当前为给定内部颜色的象素点。
8-连通泛填充算法步骤如下: 种子象素入栈;当栈非空时重复执行如下三步操作: (1)栈顶象素出栈; (2)将出栈象素置成填充色; (3) 检查出栈象素的 8- 邻接点,若其中某个象素点不 是给定内部点的颜色且未置成新的填充色,则把 该象素入栈。
• 把太多的象素压入堆栈
改进
通过沿扫描线填充水平象素段,来代替处理 4- 邻
接点和8-邻接点。
沿扫描线填充水平象素段的4-连通边界填充算法步骤:
种子象素入栈;当栈非空时作如下三步操作: (1)栈顶象素出栈; (2) 填充出栈象素所在扫描行的连续象素段,直到遇到 边界象素为止,即每出栈一个象素,就对包含该象 素的整个扫描线区间进行填充; (3) 在区间中检查与当前扫描线相邻的上下两条扫描线 的有关象素是否全为边界象素或已填充的象素,若 存在非边界、未填充边界的象素,则把每一区间的 最右象素取作种子象素入栈。
x
(a)
多边形P0P1P2P3P4P5P6P0
1 2 3 4 5 6 7 8 9 10 11 12
3
p3p2 6 -1/3
3
p3p4 5 3/4
8
p5p4 5 -1/2
8
p5p6 9 1/2
x|ymin 1 7 p2p1 12 2/5 12 -1 p0p1 桶
ymax 1/k next
7
9 p0p6
• 多边形分为凸多边形、凹多边形、含内环的多边形。
2. 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
图2-23 x-扫描线算法填充多边形
算法步骤:
(1)确定多边形所占有的最大扫描线数,得到多边形顶 点的最小和最大y值(ymin和ymax)。 (2)从y=ymin到y=ymax,每次用一条扫描线进行填充。 (3)对一条扫描线填充的过程可分为四个步骤: a.求交 b.排序
且未置成多边形色,则把该象素入栈。
栈结构实现8-连通边界填充算法的算法步骤为: 种子象素入栈;当栈非空时重复执行如下三步操作: (1)栈顶象素出栈; (2)将出栈象素置成填充色; (3)检查出栈象素的8-邻接点,若其中某个象素点不是
边界色且未置成多边形色,则把该象素入栈。
特点:
• 可以用于填充带有内孔的平面区域。
y 12 11 10 9 8 7 6 5 4 3 2 1 p1
p3p2 6 -1/3 p3p4 3/4 p5p4 -1/2 p5p6 9 1/2
p0 p2 p4
p6
p3 p5 1 2 3 4 5 6 7 8 9 10 11 12
x
1 2 3 4 5 6 7 8 9 10 11 12
3
3
5
8
5
8
x|ymin 1 7 p2p1 12 2/5 12 -1 p0p1 桶
c.交点配对
d.区间填色
存在问题:当扫描线与多边形顶点相交时,交点
的取舍问题。
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
图2-24 与多边形顶点相交的交点的处理
解决:
当扫描线与多边形的顶点相交时, • 若共享顶点的两条边分别落在扫描线的两边,交 点只算一个; • 若共享顶点的两条边在扫描线的同一边,这时交
边就放在相应的扫描线桶中。
(3)每条边的数据形成一个结点,内容包括:该扫描 线与该边的初始交点x(即较低端点的x值),1/k,
以及该边的最大y值ymax。
x|ymin ymax 1/k NEXT
(4) 同 一 桶 中 若 干 条 边 按 X|ymin 由 小 到 大 排 序 , 若
X|ymax 相等,则按照1/m由小到大排序。
5
(c)
边表
算法步骤:
(1)初始化:构造边表,AET表置空; (2)将第一个不空的ET表中的边与AET表合并; (3) 由 AET 表中取出交点对进行填充。填充之后删除 y=ymax的边;
(4)yi+1=yi+1, 根据 xi+1=xi+1/m 计算并修改 AET 表,同时
合并 ET 表中 y=yi+1 桶中的边,按次序插入到 AET 表
(c)以边界表示的8-连通区域
(d)以内点表示的8-连通区域
图2-32 区域的边界32 区域的边界表示和内点表示
1. 边界填充算法
算法的输入:种子点坐标(x,y),填充色和边界颜色。
栈结构实现4-连通边界填充算法的算法步骤为:
种子象素入栈;当栈非空时重复执行如下三步操作:
(1)栈顶象素出栈;
(2)将出栈象素置成填充色;
(3) 检查出栈象素的 4- 邻接点,若其中某个象素点不是边界色
把位于给定区域的边界上的象素一一列举出来的方法称
为边界表示法。
边界填充算法(Boundary-fill Algorithm)。
枚举出给定区域内所有象素的表示方法称为内点表示。
泛填充算法(Flood-fill Algorithm)
(a)以边界表示的4-连通区域
(b)以内点表示的4-连通区域
(c)以边界表示的8-连通区域
点作为零个或两个。
0
1
1
1
0 2 2 2
1
图2-25 与扫描线相交的多边形顶点的交点数
3. 改进的有效边表算法(Y连贯性算法)
改进原理: • 处理一条扫描线时,仅对 有效边求交 • 利用扫描线的连贯性 • 利用多边形边的连贯性
xi+1,yi+1
1 xi,yi 1/k
图2-26 与多边形边界相交的两条连 续扫描线交点的相关性
ymax 1/k next
7
9 p0p6
5
(c)
边表
(a)
多边形P0P1P2P3P4P5P6P0
有效边(Active Edge):指与当前扫描线相交的多边 形的边,也称为活性边。
有效边表(Active Edge Table, AET):把有效边按与
扫描线交点 x 坐标递增的顺序存放在一个链表中,
此链表称为有效边表。
中,形成新的AET表;
(5)AET表不为空则转(3),否则结束。
2.3.2
区域填充
区域是指已经表示成点阵形式的填充图形,它是像
素集合。
4-邻接点和8-邻接点
4 4 p 4 4 (a)p的4-邻接点 8 8 8 8 p 8 8 8 8 (b)p的8-邻接点
图2-33 邻接点的定义
4-连通区域和8-连通区域
注意: 当以边界表示时,4-连通边界填充算法只能填充4连通区域,8-连通边界填充算法也只能填充8-连 通区域。 当以内点表示时,8-连通泛填充算法可以填充8-连 通区域也可以填充4-连通区域,当然4-连通泛填 充算法还是只能填充4-连通区域。
(a)以边界表示的4-连通区域
(b)以内点表示的4-连通区域