掃描線填充算法的基本原理:
用水平掃描線從上到下(或從下到上)掃描由多條首尾相連的線段構成的多邊形,每根掃描線與多邊形的某些邊產生一系列交點。將這些交點按照x座標排序,將排序後的點兩兩成對,作爲線段的兩個端點,以所填的顏色畫水平直線。多邊形被掃描完畢後,顏色填充也就完成了。
幾個重要的概念:
邊的數據結構 :
typedef struct EDGE{
int ymax; /*邊所交的最高掃描線號(頂點的最大y值)*/
double x;/*當前掃描線與邊的交點x值*/
double dx; /*從當前掃描線到下一掃描線之間的x增量*/
struct EDGE *next;/*下一條邊*/
}Edge;
邊的分類表:
爲了方便活性邊表的建立與更新,我們爲每一條掃描線建立一個“新邊表(NET)”,存放該掃描線第一次出現的邊。
活性邊:把與當前掃描線相交的邊稱爲活性邊。
活性邊表:把它們按與掃描線交點x座標遞增的順序存放在一個鏈表中,稱此鏈表爲活性邊表。
掃描線6的活性邊表如下:P6P1 P6P5 P5P4 P4P3
掃描線4的活性邊表如下:P6P1P4P3
掃描線3的活性邊表如下:P6P1P4P3
掃描線2的活性邊表如下:P1P6P3P2
下面說下算法實現: