2.3 多边形的扫描转换与区域填充
多边形的扫描转换
边界标志算法
边界标志算法的基本思想是:在帧缓冲器中对多边形的每条边进行直线扫描转换,亦即对多边形边界所经过的象素打上标志。然后再采用和扫描线算法类似的方法将位于多边形内的各个区段着上所需颜色。对每条与多边形相交的扫描线依从左到右的顺序,逐个访问该扫描线上的象素。使用一个布尔量inside来指示当前点是否在多边形内的状态。Inside的初值为假,每当当前访问的象素为被打上边标志的点,就把inside取反。对未打标志的象素,inside不变。若访问当前象素时,inside为真,说明该象素在多边形内,则把该象素置为填充颜色。
边界标志算法:
void edgemark_fill(polydef, color)
多边形定义 polydef; int color;
{ 对多边形polydef 每条边进行直线扫描转换;
inside = FALSE;
for (每条与多边形polydef相交的扫描线y )
for (扫描线上每个象素x )
{ if(象素 x 被打上边标志)inside = ! (inside);
if(inside!= FALSE) drawpixel (x, y, color);
else drawpixel (x, y, background);
}
}
图2.3.6 正方形内切n个圆的边界标志算法
用软件实现时,扫描线算法与边界标志算法的执行速度几乎相同,但由于边界标志算法不必建立维护边表以及对它进行排序,所以边界标志算法更适合硬件实现,这时它的执行速度比有序边表算法快一至两个数量级。
页首
[上一页] [练习题] [下一页] [返回]