算法系列(十二)多边形区域填充算法:扫描线填充算法(有序边表法)2014-04-30 csdn博客 吹泡泡的小猫二、扫描线算法(Scan-Line Filling)扫描线算法适合对矢量图形进行区域填充,只需要 直到多边形区域的几何位置,不需要指定种子点,适合计算机自动进行图形处理的场合使用,比如电 脑游戏和三维CAD软件的渲染等等。对矢量多边形区域填充,算法核心还是求交。《计算几何 与图形学有关的几种常用算法》一文给出了判断点与多边形关系的算法――扫描交点的奇偶数判断算 法,利用此算法可以判断一个点是否在多边形内,也就是是否需要填充,但是实际工程中使用的填充 算法都是只使用求交的思想,并不直接使用这种求交算法。究其原因,除了算法效率问题之外,还存 在一个光栅图形设备和矢量之间的转换问题。比如某个点位于非常靠近边界的临界位置,用矢量算法 判断这个点应该是在多边形内,但是光栅化后,这个点在光栅图形设备上看就有可能是在多边形外边 (矢量点没有大小概念,光栅图形设备的点有大小概念),因此,适用于矢量图形的填充算法必须适 应光栅图形设备。2.1扫描线算法的基本思想扫描线填充算法的基本思想是:用水平扫 描线从上到下(或从下到上)扫描由多条首尾相连的线段构成的多边形,每根扫描线与多边形的某些 边产生一系列交点。将这些交点按照x坐标排序,将排序后的点两两成对,作为线段的两个端点,以所 填的颜色画水平直线。多边形被扫描完毕后,颜色填充也就完成了。扫描线填充算法也可以归纳为以 下4个步骤:(1)求交,计算扫描线与多边形的交点(2)交点排序,对第2步得到的 交点按照x值从小到大进行排序;(3)颜色填充,对排序后的交点两两组成一个水平线段,以 画线段的方式进行颜色填充;(4)是否完成多边形扫描?如果是就结束算法,如果不是就改 变扫描线,然后转第1步继续处理;整个算法的关键是第1步,需要用尽量少的计算量求出交点 ,还要考虑交点是线段端点的特殊情况,最后,交点的步进计算最好是整数,便于光栅设备输出显示 。对于每一条扫描线,如果每次都按照正常的线段求交算法进行计算,则计算量大,而且效率 底下,如图(6)所示:

图(6) 多边形与扫描线示意图