通用扫描线填充算法存在的问题及其解决方法

合集下载

扫描线填充算法讲解

扫描线填充算法讲解

扫描线算法(S c a n-L i n e F i l l i n g)扫描线算法适合对矢量图形进行区域填充,只需要直到多边形区域的几何位置,不需要指定种子点,适合计算机自动进行图形处理的场合使用,比如电脑游戏和三维CAD软件的渲染等等。

对矢量多边形区域填充,算法核心还是求交。

《计算几何与图形学有关的几种常用算法》一文给出了判断点与多边形关系的算法――扫描交点的奇偶数判断算法,利用此算法可以判断一个点是否在多边形内,也就是是否需要填充,但是实际工程中使用的填充算法都是只使用求交的思想,并不直接使用这种求交算法。

究其原因,除了算法效率问题之外,还存在一个光栅图形设备和矢量之间的转换问题。

比如某个点位于非常靠近边界的临界位置,用矢量算法判断这个点应该是在多边形内,但是光栅化后,这个点在光栅图形设备上看就有可能是在多边形外边(矢量点没有大小概念,光栅图形设备的点有大小概念),因此,适用于矢量图形的填充算法必须适应光栅图形设备。

2.1扫描线算法的基本思想扫描线填充算法的基本思想是:用水平扫描线从上到下(或从下到上)扫描由多条首尾相连的线段构成的多边形,每根扫描线与多边形的某些边产生一系列交点。

将这些交点按照x坐标排序,将排序后的点两两成对,作为线段的两个端点,以所填的颜色画水平直线。

多边形被扫描完毕后,颜色填充也就完成了。

扫描线填充算法也可以归纳为以下4个步骤:(1)求交,计算扫描线与多边形的交点(2)交点排序,对第2步得到的交点按照x值从小到大进行排序;(3)颜色填充,对排序后的交点两两组成一个水平线段,以画线段的方式进行颜色填充;(4)是否完成多边形扫描?如果是就结束算法,如果不是就改变扫描线,然后转第1步继续处理;整个算法的关键是第1步,需要用尽量少的计算量求出交点,还要考虑交点是线段端点的特殊情况,最后,交点的步进计算最好是整数,便于光栅设备输出显示。

对于每一条扫描线,如果每次都按照正常的线段求交算法进行计算,则计算量大,而且效率底下,如图(6)所示:图(6)多边形与扫描线示意图观察多边形与扫描线的交点情况,可以得到以下两个特点:(1)每次只有相关的几条边可能与扫描线有交点,不必对所有的边进行求交计算;(2)相邻的扫描线与同一直线段的交点存在步进关系,这个关系与直线段所在直线的斜率有关;第一个特点是显而易见的,为了减少计算量,扫描线算法需要维护一张由“活动边”组成的表,称为“活动边表(AET)”。

复杂连通区域扫描线填充算法的问题及改进

复杂连通区域扫描线填充算法的问题及改进

率 很低… 。当填充区域 面积较大时 , 由于所 占用 的栈空 间太
大, 因此使填充不 能完成 , 至会 出现 系统崩溃 。相 比之下 , 甚
扫描 线填充算法 由于利用 了扫 描线上像 素之间 的连贯性 , 因 此具有较高 的效率 J 。 文献 [ ] 于多边 形扫 描线填 充算法 的基本 原理 , 过 3基 通 分析水平扫描线与 复杂连 通 区域轮 廓线相 交 的各种 可 能情 况 , 出了一种 求取扫 描线 与轮 廓线 交点 的新方 法 , 以快 给 可 速求取交点 。在此基础上 , 出了一种 任意形状 复杂连 通区 提 域的快速扫描线填充算 法。该算 法具有遍 历轮廓 线次数少 、 逻辑规则简单 、 求交速度快 、 配对 填充 准确等 优点 , 4一连 对 通区域和 8一连通 区域 的填充均 能适用 。 通过研究发现该 算法 对于 两类 特殊 的边 界 区域 会发 生 重复填充的现象 , 当图形内部需要填 充的颜 色与边界 颜色 另 不 同时 , 则发生边界 颜色被改变 的情况 。本文分 析 了产生 这
类 现象的原 因, 出了相应的改进方法 。 提
步骤 2 配对 。对 于每条扫 描线 Y=i i , ) : ( =1 n 的交 点链 表 中的交点 P. j , 两 两配 对 , 式 为 P. _ 、 .P. i( =1 m) i 方 .P. P. . 】 2 3 4


每对 交点之间的 区域就代表 了扫描线与 复杂连通 区域 的
下转第75页比值合成采用etm51提取与铝土矿化有关的蚀变信息采用etm31提取与铁矿化有关的蚀变信息同时采用etm5743然后再通过与主成分分析图像进行新的波段组合选择了既反映地貌特征又能够区分铝土矿化铁矿化及砂岩植被信息的pcalpca3波段和etm51波段组合合成了假彩色信息提取与波罗芬高原铝土矿矿化有关的红土化褐铁矿化高岭土化等蚀变信息结合区域成矿地质条件可以快速有效地提取图像中与实地勘查所确定的矿体边界相吻合的矿化信息

区域填充的扫描线算法

区域填充的扫描线算法

计算机图形学——区域填充的扫描线算法NORTHWESTUNIVER SITY一、实验目的1.通过实验,进一步理解和掌握几种常用多边形填充算法的基本原理2.掌握多边形区域填充算法的基本过程3.掌握在C/C++环境下用多边形填充算法编程实现指定多边形的填充。

4.利用TC2.0编写区域填充的扫描线算法。

二、实验内容算法基本思想:首先填充种子点所在扫描线上位于区域内的区段,然后确定与该区段相邻的上下两条扫描线上位于区域内的区段,并依次将各区段的起始位置保存, 这些区段分别被用区域边界色显示的像素点所包围。

随后,逐步取出一开始点并重复上述过程,直到所保存各区段都填充完毕为止。

算法描述:扫描线填充算法一般包括四个步骤:求交、排序、交点配对、区域填充。

正确求得扫描线与区域填内外轮廓线的交点是算法成败的关键问题。

另一方面,采用合适的数据结构又可以简化操作、提高算法的效率。

本论文由于采用链表结构记录轮廓线和交点,无需焦点排序的过程,因而提高了算法效率。

扫描线来源于光栅显示器的显示原理:对于屏幕上所有待显示像素的信息,将这些信息按从上到下、自左至右的方式显示。

扫描线多边形区域填充算法是按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的象素,即完成填充工作。

区间的端点可以通过计算扫描线与多边形边界线的交点获得。

对于一条扫描线,多边形的填充过程可以分为四个步骤:(1)求交:计算扫描线与多边形各边的交点;(2)排序:把所有交点按x值递增顺序排序;(3)配对:第一个与第二个,第三个与第四个等等;每对交点代表扫描线与多边形的一个相交区间;(4)填色:把相交区间内的象素置成多边形颜色;三、实验原理扫描线填充算法的基本过程如下:当给定种子点(x,y)时,首先填充种子点所在扫描线上的位于给定区域的一个区段,然后确定与这一区段相连通的上、下两条扫描线上位于给定区域内的区段,并依次保存下来。

反复这个过程,直到填充结束。

扫描线填充算法讲解

扫描线填充算法讲解

扫描线算法(Scan-Line F illing)扫描线算法适合对矢量图形进行区域填充,只需要直到多边形区域的几何位置,不需要指定种子点,适合计算机自动进行图形处理的场合使用,比如电脑游戏和三维CAD软件的渲染等等。

对矢量多边形区域填充,算法核心还是求交。

《计算几何与图形学有关的几种常用算法》一文给出了判断点与多边形关系的算法――扫描交点的奇偶数判断算法,利用此算法可以判断一个点是否在多边形内,也就是是否需要填充,但是实际工程中使用的填充算法都是只使用求交的思想,并不直接使用这种求交算法。

究其原因,除了算法效率问题之外,还存在一个光栅图形设备和矢量之间的转换问题。

比如某个点位于非常靠近边界的临界位置,用矢量算法判断这个点应该是在多边形内,但是光栅化后,这个点在光栅图形设备上看就有可能是在多边形外边(矢量点没有大小概念,光栅图形设备的点有大小概念),因此,适用于矢量图形的填充算法必须适应光栅图形设备。

2.1扫描线算法的基本思想扫描线填充算法的基本思想是:用水平扫描线从上到下(或从下到上)扫描由多条首尾相连的线段构成的多边形,每根扫描线与多边形的某些边产生一系列交点。

将这些交点按照x坐标排序,将排序后的点两两成对,作为线段的两个端点,以所填的颜色画水平直线。

多边形被扫描完毕后,颜色填充也就完成了。

扫描线填充算法也可以归纳为以下4个步骤:(1)求交,计算扫描线与多边形的交点(2)交点排序,对第2步得到的交点按照x值从小到大进行排序;(3)颜色填充,对排序后的交点两两组成一个水平线段,以画线段的方式进行颜色填充;(4)是否完成多边形扫描?如果是就结束算法,如果不是就改变扫描线,然后转第1步继续处理;整个算法的关键是第1步,需要用尽量少的计算量求出交点,还要考虑交点是线段端点的特殊情况,最后,交点的步进计算最好是整数,便于光栅设备输出显示。

对于每一条扫描线,如果每次都按照正常的线段求交算法进行计算,则计算量大,而且效率底下,如图(6)所示:图(6)多边形与扫描线示意图观察多边形与扫描线的交点情况,可以得到以下两个特点:(1)每次只有相关的几条边可能与扫描线有交点,不必对所有的边进行求交计算;(2)相邻的扫描线与同一直线段的交点存在步进关系,这个关系与直线段所在直线的斜率有关;第一个特点是显而易见的,为了减少计算量,扫描线算法需要维护一张由“活动边”组成的表,称为“活动边表(AET)”。

多边形扫描线填充算法技巧

多边形扫描线填充算法技巧

多边形扫描线填充算法技巧扫描线填充算法是计算机图形学中常用的一种填充算法,用于对多边形进行填充。

其基本原理是通过扫描线与多边形边界的交点来确定需要填充的像素点。

本文将介绍多边形扫描线填充算法的基本思想以及一些常用的优化技巧。

一、基本思想多边形扫描线填充算法的基本思想是将多边形分解成一系列水平线段,然后对每条水平线段进行扫描,找出与多边形边界相交的点,并进行填充。

具体步骤如下:1. 确定多边形的边界:对于给定的多边形,首先需要确定其边界。

可以使用边界表(edge table)来存储多边形的边界信息,包括每条边的起点和终点坐标以及斜率等。

2. 初始化扫描线:从多边形边界中找出最小的y坐标和最大的y坐标,作为扫描线的起点和终点。

3. 扫描线算法:对于每条扫描线,通过遍历边界表,找出与扫描线相交的边界线段。

根据相交点的x坐标,确定需要填充的像素点范围。

4. 填充像素点:根据上一步确定的像素点范围,将扫描线上的像素点进行填充。

二、技巧和优化1. 边界表的构建:为了提高算法的效率,可以对边界表进行排序,按照扫描线的y坐标来排序。

这样可以减少对边界表的遍历次数,提高算法的执行速度。

2. 边界交点的计算:在扫描线算法中,需要计算扫描线与多边形边界的交点。

可以使用活性边表(active edge table)来存储当前与扫描线相交的边界线段,并根据交点的x坐标进行排序。

这样可以减少计算交点的次数,提高算法的效率。

3. 填充像素点的优化:在填充像素点时,可以使用扫描线种子填充算法来进行优化。

该算法通过选择合适的填充起点,在填充过程中自动推进扫描线,减少不必要的计算和填充操作,提高填充的速度。

4. 填充规则的处理:在实际应用中,可能会遇到一些特殊情况,如多边形内部有孔洞或交叉等。

针对这些情况,可以通过修改填充规则来处理。

常用的填充规则有奇偶填充规则和非零填充规则,可以根据实际情况选择合适的填充规则。

5. 像素点颜色的处理:在多边形填充过程中,可以通过设置填充的颜色或纹理来实现不同的效果。

改进的扫描线填充算法

改进的扫描线填充算法
int last;
}SP_EDGES_TABLE;
改进的扫描线填充算法重点仍然是新“活动边表”的构造,这里给出构造新“活动边表”的算法实现:
双击代码全选
void InitScanLineEdgesTable(SP_EDGES_TABLE& spET, const Polygon& py)
{
EDGE2 e;
}
Polygon定义了一个多边形,其pts数组按照顺序存放了多边形的各个顶点,InitScanLineEdgesTable()函数从Polygon中依次取出三个顶点,前两个顶点构成当前处理的边,后一个顶点用于辅助判断是否是左、右顶点的情况,如果是左、右顶点的情况,就要对边的终点的坐标做调整(调整的方法在3.2小节已经描述)。调整完线段终点坐标后构造边e,然后由InsertEdgeToEdgesTable()函数将e插入到线性表中,插入操作满足线性表按照ymax从大到小有序,这个是插入排序的基本算法,这里就不再列出代码。
“活动边表”的调整指的是在处理完每根扫描线之后,更新“活动边表”中“活动边区间”内的各边的相关属性的值,比如递减dy的值,调整交点xi坐标的值等等。根据EDGE2的定义,每根扫描线处理完之后需要对“活动边区间”内的边做如下调整:
(1)调整“活动边区间”中参与Hale Waihona Puke 交计算的各边的属性值,这些调整算法是:
dy = dy – 1;
e.dy = e.ymax - ps.y + 1;
}
else
{
e.xi = pe.x;
e.ymax = pe.y;
e.dy = pe.y - ps.y + 1;
}
}
else //(pe.y < ps.y)

扫描线填充算法讲解

扫描线算法(Scan-Line F illing)扫描线算法适合对矢量图形进行区域填充,只需要直到多边形区域的几何位置,不需要指定种子点,适合计算机自动进行图形处理的场合使用,比如电脑游戏和三维CAD软件的渲染等等。

对矢量多边形区域填充,算法核心还是求交。

《计算几何与图形学有关的几种常用算法》一文给出了判断点与多边形关系的算法――扫描交点的奇偶数判断算法,利用此算法可以判断一个点是否在多边形内,也就是是否需要填充,但是实际工程中使用的填充算法都是只使用求交的思想,并不直接使用这种求交算法。

究其原因,除了算法效率问题之外,还存在一个光栅图形设备和矢量之间的转换问题。

比如某个点位于非常靠近边界的临界位置,用矢量算法判断这个点应该是在多边形内,但是光栅化后,这个点在光栅图形设备上看就有可能是在多边形外边(矢量点没有大小概念,光栅图形设备的点有大小概念),因此,适用于矢量图形的填充算法必须适应光栅图形设备。

扫描线算法的基本思想扫描线填充算法的基本思想是:用水平扫描线从上到下(或从下到上)扫描由多条首尾相连的线段构成的多边形,每根扫描线与多边形的某些边产生一系列交点。

将这些交点按照x坐标排序,将排序后的点两两成对,作为线段的两个端点,以所填的颜色画水平直线。

多边形被扫描完毕后,颜色填充也就完成了。

扫描线填充算法也可以归纳为以下4个步骤:(1)求交,计算扫描线与多边形的交点(2)交点排序,对第2步得到的交点按照x值从小到大进行排序;(3)颜色填充,对排序后的交点两两组成一个水平线段,以画线段的方式进行颜色填充;(4)是否完成多边形扫描?如果是就结束算法,如果不是就改变扫描线,然后转第1步继续处理;整个算法的关键是第1步,需要用尽量少的计算量求出交点,还要考虑交点是线段端点的特殊情况,最后,交点的步进计算最好是整数,便于光栅设备输出显示。

对于每一条扫描线,如果每次都按照正常的线段求交算法进行计算,则计算量大,而且效率底下,如图(6)所示:图(6)多边形与扫描线示意图观察多边形与扫描线的交点情况,可以得到以下两个特点:(1)每次只有相关的几条边可能与扫描线有交点,不必对所有的边进行求交计算;(2)相邻的扫描线与同一直线段的交点存在步进关系,这个关系与直线段所在直线的斜率有关;第一个特点是显而易见的,为了减少计算量,扫描线算法需要维护一张由“活动边”组成的表,称为“活动边表(AET)”。

区域填充的扫描线算法

区域填充的扫描线算法区域填充是一种常见的计算机图形学算法,用于将一个封闭区域内的所有像素点填充为指定的颜色。

扫描线算法是区域填充的一种常用方法,本文将介绍扫描线算法的基本原理、实现步骤和一些优化技巧。

扫描线算法的基本原理是利用扫描线从图像的上边界向下扫描,检测每个扫描线与区域的交点。

当遇到一个交点时,根据该交点的左右两侧的交点情况,确定将该交点连接到哪个交点上。

通过不断地扫描和连接交点,最终将整个区域填充为指定的颜色。

下面是扫描线算法的具体实现步骤:1.首先需要确定区域的边界,可以由用户提供或通过其他算法生成。

边界可以用一系列的线段、多边形或曲线表示。

2. 创建一个数据结构来存储每个扫描线与区域的交点。

常用的数据结构是活性边表(Active Edge Table,AET)和扫描线填充表(Scanline Fill Table,SFT)。

AET用于存储当前扫描线与区域边界的交点,SFT用于存储所有扫描线的交点。

3.初始化扫描线的起始位置为图像的上边界,并创建一个空的AET。

4.开始扫描线的循环,直到扫描线到达图像的下边界。

每次循环都进行以下操作:-将扫描线与区域边界进行相交,找出所有与区域相交的线段,并将它们的交点加入到AET中。

-对AET按照交点的x坐标进行排序。

-从AET中取出相邻的两个交点,根据这两个交点之间的像素点是否在区域内来决定是否填充这些像素点。

5.当扫描线到达图像的下边界时,完成填充。

扫描线算法的实现可能会遇到一些边界情况和优化需求。

下面是一些常见的优化技巧:1.边界处理:在AET中存储的交点需要进行边界处理,确保交点处于图像范围内。

2.垂直线段处理:对于垂直线段,可以进行特殊处理,避免在AET中重复存储相同的交点。

3.区域内部边界处理:当区域内部有不连续的边界时,需要对交点进行合并,避免出现多余的像素点填充。

4.使用扫描线填充算法优化:对于大尺寸的区域填充,可以使用扫描线填充算法进行优化。

扫描线区域填充算法

扫描线区域填充算法
扫描线区域填充算法,又称为"扫描线填涂算法",它用于对平面中特定区域填充指定的颜色、灰度或纹理,是计算机图形学中常用的算法之一。

该算法的原理是:给定待填充的区域内的点的有限个边界,从某一顶点开始,以某一规则遍历所有的边界点,形成边界数组,接着顺次扫描边界数组,将包含在边界中的每个合理像素点标记成已填充状态,由此而达到填充区域的目的。

算法步骤如下:
(1)设置起始点A,判断是否存在右方向上有没有边界点,若有,则把下一个边界点B作为起始点;
(2)从起始点A 开始,以扫描线的形式一次扫描边界点,把有效的像素点标记为“已填充”;
(3)把已扫描的点加入边界数组,直到下一个边界点C,且C点不等于起始点A;
(4)重复步骤(2)和(3),直至再回到起始点A,完成一次区域填充;
(5)如果还有未填充的区域,则重复步骤(1)至(4),直至所有区域填充完成。

实际应用中,为了避免停滞,可以采用八方向搜索策略;此外,由于扫描线填充算法中填充空间的范围是由边界点定义的,因此,当边界未经处理的是孤立的点或直线时,将无法实现实际的填充效果。

扫描线种子填充算法的改进_573303868

由上述算法的描述中可以看出, 对种子所在扫描 线的填充与搜索新种子点的操作是分别进行的, 这就 需对大量的像素进行重复判读. 为了对当前扫描线填 充和搜索新种子像素, 需要对当前扫描线以及其相邻 的上下扫描线等 3 条扫描线进行扫描, 这就使得多数 扫描线被重复扫描, 即使该扫描线上的像素已经全部 填充也要被再次扫描. 甚至扫描 3 次, 大大降低了程 序的效率和运行速度. 另外, 在该算法中堆栈操作频 繁, 每搜索到一个新的填充区间就要入栈, 对每一条 扫描线至少有一个区间入栈, 每次开始另一条扫描线 搜索时都要先出栈, 这不仅占用了大量的存储空间, 还降低了算法的效率.
针对重复扫描的问题, 文献[4]根据当前扫描线与 相邻扫描线间的位置关系以及区间端点的坐标大小 关系减少了不必要的重复扫描, 缩小了重复扫描区间 范围, 但所提出的算法仍然将填充与搜索新种子点的 操作分别进行, 没有克服堆栈频繁操作的缺点. 文献 [5]将种子点入栈改为新旧区间端点入栈, 并将区间填 充与搜索新区间合并进行, 进一步减少了重复扫描, 但算法中并没有减少堆栈操作的频率, 并且对每一条 当前扫描线都要判断其相邻的两条扫描线是否需要 重复扫描. 文献[2]提出对图 1 所示的凹型或有孔区域 可能产生漏填问题, 实际上, 根据上述算法不会产生 漏填现象. 如图 2 所示, 以像素点 S 作为种子点填充 凹型区域, 在填充扫描线 y 以上的区域时会造成右上 粗线区域漏填, 但是当种子点在扫描线 y 上时, 填充 完 y 后会扫描其上下相邻的扫描线, 自然会将右上粗 线区域填充.
以上描述适用于对四连通区域的搜索填充. 对于 八连通区域, 由于其特殊性, 产生新区和需要回溯的 条件有所不同. 填充过程中, 如果 xl=xpl 且 xr=xpr, 则扫 描线 y 上不会产生新的填充区, 也不需对扫描线 yp 进 行回溯. 向上或向下填充时 xr<xpr- 1, 则在扫描线 y 上 可能出现新的向上或向下的填充区, 但不需对 yp 进行 回溯; 若 xr=xpr- 1, 是否产生新的区域要看点( xpr+1, y) 是否为未填充点, 若其为未填充点, 则产生新区, 否 则不产生新区, 如图 4 ( a) 所示. 向上或向下填充时, 若 xl<xpl- 1 或 xr>xpr+1 则 应 回 溯 yp, 搜 索 yp 上 是 否 有 新的未填充区; 若 xl=xpl- 1 或 xr=xpr+1, 是 否 需 要 回 溯 yp, 要看点( xl- 1, yp) 或( xr+1, yp) 是否为未 填 充 点 , 若 其为未填充点, 则需要回溯 yp 以搜索新区, 否则不需
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文献标识码 : A 中图分类号 :T 0 . P3 16
通 用扫描 线 填充 算法 亦 称 扫 描线 多 边 形 填 充 算 法 、 扫 描 或
线算法 , 是多边形 扫描转换填充算法中重要 的一种。在 国内外 多种计算机图形学文献 ( 尤其是教材) 对此算法 的介绍尽管 中, 有所差异, 但基本原理都是一致的 ¨ “ 。但是, 这个原理却存
I C X顶 点 。 型 Q
图6 多 形区 在 一 扫 线 边 域 同 条 描 上
判断 I C X顶点 : A L 中某一边与 当前扫描线的交点满足如下相依的三个条件 , 型 Q 若 E表 此点即为 条件 n 交点所在边的上端点的 Ya : m值为交点所在扫描线的 Y值, x 即交点是其所在边的上端点 。 条件 b在条件 n基础上 , : 交点( 亦是端点 ) 的另一边为水平边 . 且水平边在交点的右侧 。 条件 c在条件 n 条件 6 : 、 基础上 , 交点是个凹拐点 , 即交点的左 、 上部 区域均为多边形内区域。判定
该 点 为 凹拐点 的方法 是 : A L表 中交 点所 在边 , 出前 一 条扫 捕 线 ( 其 Y值 为 Y ) 该边 的交 点 沿 E 求 设 与
( , , , 中: , ./ I为边的斜率 , 为边与 当前扫描线 交点 、 , )其 一 = ,m( 儿一 n ' 即被判断点的 值 ) 。进 而判断点( 一 一 , ) 1Y 是否已被填充 , 若是则被判断交点就是凹拐点( 因为连贯性原则) 也就是 I , 型 C X顶点 , Q 否则就不是 。 参考判断 I C X顶点的算法可制定出判断 Ⅱ型 C X顶点的算法。 型 Q Q 判断 Ⅲ型 、 Ⅳ型 C X顶点 的算法也可参考判 断 I C X顶点 的方法 , Q 型 Q 所不同处在于 Ⅲ型 、 型 Ⅳ C X顶点是其所在边 ( Q 非水平的那条边) 的下端 点. 且在判断是否凹拐点时只需 看点 ( ,¨ ) Y 是否被
收 稿 日期 :0 6— 6一l 20 0 O
作者简介 : 陈西矗( 97一 男, 1 6 ) 东北电力大学信息化教学 中心讲师 , 主要从事计算机基础教学.
维普资讯
第 6期
陈西矗等: 通用扫描 线填充算法存在的问题及其解决方法
53
种基 本情 况及 其组合 。
结果 。
第三 种基本 情况 , 带有 C X顶点 的多边 形 区域在 同一 条扫 描线 上有 多个 相 邻 的 C X顶点 , 图 6 Q Q 如 所示 ( 部分 情况 ) 则此 种情 况填充 时 , 相 邻 的 C X顶点 问 的公 共水 平边 线 或区域不 被填 充 。 , 两个 Q 对 于带有 C X顶 点 的多边形 在采 用通用 扫 描线填 充算法 进行 填充 时 , Q 可产 生的 问题 不外 乎 以上 三
在 着一个 突 出的 问题 , 即对带有 C X顶 点 的 多边 形 区域 不 能进 Q
行正 确 的填充 。
所 谓 C X顶点 是 以发 现 者 姓名 汉 语 拼 音 首 字 母 命 名 的 一 Q 类带水 平边 的凹拐 点 , 图 l所示 。这 类 顶 点 的 特 征 是顶 点 的 如

维普资讯

第2 6卷第 6期
20 06年 1 2月







Vo . 6. o 6 I2 N . Ie at a l U ies y o r a O o tes Dini nvri t

要: 通用扫描线填充算法在做带 C X顶 点 的多 边形 区域 的填充 时存在着 明显 的问题 。 出算 Q 找
法 中活化边表 A L中以 C X顶点为交点的边 并将其从 A L中删除 是解决 问题 的关 键。只有这样 , E Q E 通 用扫描线填充算法才能做到真正 的通用 。 关 键 词: 扫描转换填充 ; 扫描线 ; 多边形填充 ; 算法
的多边形 ( 正确填充 ) .
的 多边形 ( 不正确填充 )
2 问题 的解 决
面对如上所述的问题 , 解决问题总 的原则就是找出算法中边
的活 化链表 A L中 的这 样 的边 , 与 当前 扫 描 线 的交 点 为 C X E 其 Q

有 个 的cx 点 多 相邻 Q 顶
顶点 . 并将该边从 A L中删除 , E 问题即可得到解决。其 中判断交 点为 C X顶点 的具体方法如下 。 Q
Nau a ce c i o t r l in eEdt n S i
文章编号 :0 5-29 ( 06)6—05 0 10 9 2 20 0 0 2— 3
通 用 扫描 线 填 充 算 法存 在 的 问题 及 其解 决方 法
陈西 矗 , 陈 伟 , 丽芳2 佟
(. 1东北 电力大学 信息化教学中心 , 吉林 吉林 12 2 ;. 3 0 12 东北 电力大学 工程训练中心 , 吉林 吉林 122 ) 30 1

宫 目 鱼 ¨ G 壹 :

: 目

图2 带 I 、 型 Ⅲ型 C X顶 点 Q
图3 带 I 、 型 Ⅲ型 C X 顶点 Q
图 4 带 Ⅱ型 、 Ⅳ型 C X 顶 点 图 5 带 Ⅱ型 、 型 C X 顶 点 Q Ⅳ Q
的多边形( 正确填充 )
的多边彤( 不正确填 充)
囊 薯 I V 型
图 l C X顶点 ( Q 阴影部分 为多边形区域)
条边 必 须是水 平 边 线 , 点 的另 一 条边 线 与 水 平 边线 的 内夹 顶
角 ( 于 多边形 区域 内 的夹 角 ) 须大 于 10 位 必 8 。
1 问题 的产 生
第 一种 基本 情况 , I型或 Ⅲ型 C X顶 点 的多边 形 , 图 2所 示 。此 种 情况 的多边 形 在 做通 用扫 带 Q 如
描线填充时 ,Q C X顶点(I 型或 Ⅲ型) 的水平边 , 即图2中的 F G边和 E D边不能被填充。如图 3 填充后 ,
的结果 。
第二种基本情况 , Ⅱ 带 型或 Ⅳ型 C X顶点的多边形 , Q 如图4所示 。填充时 C X顶点( 型或Ⅳ型) Q Ⅱ 的水平边 , B 边 和 E 即 c D边所在 的扫描线位于多边形 区域 内的部分不能被填充。如图 5 填充后的 ,
相关文档
最新文档