实验三多边形的有效边表填充算法
一、实验目的与要求
1、理解多边形的扫描转换原理、方法;2、掌握有效边表填充算法;3、掌握链表的建立、添加结点、删除节点的基本方法;3、掌握基于链表的排序操作。
二、实验内容
在实验二所实现工程的基础上,实现以下内容并把实现函数封装在类CMyGL中。1、C实现有效边表算法进行多边形扫描转换2、利用1进行多边形扫描转换和区域填充的实现;
三、实验原理
请同学们根据教材及上课的PPT独立完成。
四、实验步骤(程序实现)。
1、建立并选择工程项目。打开VC60菜单File的New项在projects属性页选择MFCAppWizardexe项,在Project
ame中输入一个工程名如“Sample”。单文档。2、新建一个图形类。选择菜单I
sertNewclass,Classtype选择“Ge
ericClass”,Name输入类名,如“CMyCG。3、向新建的图形类中添加成员函数(实际就是加入实验要求实现的图形生成算法的实现代码)。在工作区中直接鼠标右键单击,选择“AddMemberFu
ctio
…”项,添加绘制圆的成员函数。
voidPolygo
Filli
t
umberCPoi
tpCOLORREFcolorCDCpDC添加其他成员函数:CreatBucketCreatETAddEdgeEdgeOrder4、成员函数的实现。实现有效边表填充算法。这一部分需要同学们去实现。参考实现:多边形的有效边表填充算法的基本过程为:1、定义多边形:2、初始化桶3、建立边表4、多边形填充
1对每一条扫描线,将该扫描线上的边结点插入到临时AET表中,HeadE2对临时AET表排序,按照x递增的顺序存放。3根据AET表中边表结点的ymax抛弃扫描完的边结点,即ymaxsca
li
e4扫描AET表,填充扫描线和多边形相交的区间。
f5根据的边连贯性,更新AET表。0、构造桶结点的数据结构和有效边表的数据结构:
有效边表的数据结构:类AETclassAETpublic
AETvirtualAETdoublexi
tyMaxdoublek代替1kAET
ext桶结点的数据结构类BucketclassBucketpublicBucketvirtualBucketi
tSca
Li
eAETp桶上的边表指针Bucket
ext1、定义多边形:CPoi
tPoi
t7定义多边形设置多边形的7个顶点Poi
t0CPoi
t550400P0Poi
t1CPoi
t350600P1Poi
t2CPoi
t250350P2Poi
t3CPoi
t35050P3Poi
t4CPoi
t500250P4Poi
t5CPoi
t60050P5Poi
t6CPoi
t800450P62、初始化桶
BucketCreatBucketi
t
umberCPoi
tPoi
t
i
tSca
Mi
Sca
MaxBucketHeadBCurre
tBSca
Mi
Sca
MaxPoi
t0yfori
ti1i
umberi
找最低和最高扫描线foriSca
Mi
iSca
Maxi
fifiSca
Mi
桶头结点
HeadB
ewBucketCurre
tBHeadB
建立桶的头结点Curre
tB为Bucket当前结点r