Scan-Line Polygon Fill
扫描线填充算法是计算机图形学中一种高效的填充多边形内部区域的算法。与逐个像素检测的泛洪填充(Flood Fill)或边界填充(Boundary Fill)算法不同,它利用了图形的连贯性,一次处理一条水平线上的所有像素,效率很高。
关键步骤与数据结构
为了高效地实现这一过程,算法通常使用两个关键的数据结构:
-
边表 (Edge Table, ET):一个数组或链表列表,用于存放多边形的所有边的信息。整个表按边的最小 y 坐标进行索引。每条边信息通常包括:
- ymax: 该边的最大 y 坐标。
- x_at_ymin: 该边在最小 y 坐标处的 x 值。
- 1/m: 斜率的倒数 (dx/dy),用于在扫描线每向上移动一行时,快速更新边与扫描线的 x 交点。
-
活性边表 (Active Edge Table, AET):一个链表,用于存放当前扫描线正在相交的边。AET 中的边始终按其与当前扫描线交点的 x 坐标从小到大排序。
算法流程如下:
- 初始化:遍历多边形的所有顶点,建立边表(ET)。水平的边通常被忽略。
- 开始扫描:设置一个 y 值,从多边形的最低扫描线开始。
- 处理循环:只要活性边表(AET)不为空,或者边表(ET)中还有未处理的边,就重复以下步骤:
- 更新AET:检查边表(ET),将所有 ymin =
订阅专栏 解锁全文
1067

被折叠的 条评论
为什么被折叠?



