多邊形掃描線填充算法(vs2010 c++)

 

掃描線填充算法的基本原理:

用水平掃描線從上到下(或從下到上)掃描由多條首尾相連的線段構成的多邊形,每根掃描線與多邊形的某些邊產生一系列交點。將這些交點按照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的活性邊表如下:P6P1P4P3 
掃描線3的活性邊表如下:P6P1P4P3 
掃描線2的活性邊表如下:P1P6P3P2

下面說下算法實現:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章