区域填充则是指先将在点阵表示的多边形区域内的一点(称为种子点)赋予指定的颜色和灰度,然后将这种颜色和灰度扩展到整个区域内的过程。
(1)多边形的扫描转换
多边形扫描转换算法对多边形的形状没有限制,但多边形的边界必须是封闭的,且不自交。我们可以将多边形分为三种:凸多边形、凹多边形、含内环的多边形。
-
凸多边形是指任意两顶点间的连线均在多边形内;
-
凹多边形是指任意两顶点间的连线有不在多边形内的部分;
-
含内环的多边形则是指多边形内再套有多边形,多边形内的多边形也叫内环,内环之间不能相交。
图2.3.1 多边形的种类
(a)扫描线算法
扫描线算法是按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的象素,完成转换工作。区间的端点可以通过计算扫描线与多边形边界线的交点获得。对于一条扫描线,多边形的扫描转换过程可以分为四个步骤:
-
求交:计算扫描线与多边形各边的交点;
-
排序:把所有交点按x值递增顺序排序;
-
配对:第一个与第二个,第三个与第四个等等;每对交点代表扫描线与多边形的一个相交区间,
-
着色:把相交区间内的象素置成多边形颜色,把相交区间外的象素置成背景色。
图2.3.2 一个多边形与若干扫描线
为了提高效率,在处理一条扫描线时,仅对与它相交的多边形的边进行求交运算。我们把与当前扫描线相交的边称为活性边,并把它们按与扫描线交点x坐标递增的顺序存放在一个链表中,称此链表为活性边表(AET)。
活性边表的结点应为对应边保存如下内容:第1项存当前扫描线与边的交点坐标x值;第2项存从当前扫描线到下一条扫描线间x的增量Dx;第3项存该边所交的最高扫描线号ymax。
a. 扫描线6的活性边表
<