计算机图形学--填充

  • 格式:doc
  • 大小:17.00 KB
  • 文档页数:2

扫描线多边形填充算法

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

填充过程:

1 求交:计算扫面线与多边形个边的交点。

2 排序: 把所有交点按x值地震顺序排序。

2 配对:两两配对,1,和2,3和4 等等。每对交点代表扫面线与多边形的 一个相交区间。

4 填充:把相交区间内的像素设置成多边形颜色。

相交顶点的数目确定:检查相交顶点的两条边的另外两个定点的y值。

按这两个y值中大于交点y值得个数是0,1,2来决定是取0,1或2个。

边界像素取舍:对扫描线与多边形的相交区间取左闭右开。

水平边界处理:水平边不参与求交计算,跳过。

相交:

把多边形的所有边放在一个表中,处理每条扫描线是,按顺序从表中取出所有边,分别与扫面线求交。

改进: 效率低,可只求与它相交的多边形的边进行求交运算。

算法思想及实现:

活性边:与当前扫描线相交的边。

活性边表:把活性边按与扫描线线交点x坐标递增的顺序存放在一个链表中。

活性边的每个节点的内容:

X ,X的变化量,Y的最大值,一个指针。

1 存放当前扫描线与边的交点坐标x值。

2 存放从当前扫描线到下一条扫描线间x的增量

3 存放该边所交的最高扫面线号ymax;

4 存放指向下一条边的指针。

算法的主要步骤:

建立NET(new edge list)

从最低扫面线开始到最高扫面线循环。

建立或调整AET(active edge list)

按照AET总的接点顺序填充。

算法描述:

算法描述:

void polyfill (多边形 polygon, 颜色 color)

{

for (各条扫描线i )

{ 初始化新边表头指针NET [i];把ymin = i 的边放进边表NET [i];

}

y = 最低扫描线号;

初始化活性边表AET为空;

for (各条扫描线i )

{ 把新边表NET[i]中的边结点用插入排序法插入AET

表,使之按x坐标递增顺序排列;

遍历AET表,把配对交点区间(左闭右开)上的象素(x,

y),用drawpixel (x, y, color) 改写象素颜色值;

遍历AET表,把y max= i +1的结点从AET表中删除,并

把y max > i+1结点的x值递增D x;

若允许多边形的边自相交,则用冒泡排序法对AET表

重新排序;

}

} /* polyfill */