计算机图形学--填充
- 格式: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 */