多边形扫描线填充算法(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

下面说下算法实现:

 

 

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