实验三 多边形的有效边表填充算法 一、实验目的与要求 1、理解多边形的扫描转换原理、方法; 2、掌握有效边表填充算法; 3、掌握链表的建立、添加结点、删除节点的基本方法; 3、掌握基于链表的排序操作。 二、实验内容 在实验二所实现工程的基础上,实现以下内容并把实现函数封装在类CMyGL 中。 1、C++实现有效边表算法进行多边形扫描转换 2、利用1进行多边形扫描转换和区域填充的实现; 三、实验原理 请同学们根据教材及上课的PPT 独立完成。 四、实验步骤(程序实现)。 1、建立并选择工程项目。打开 VC6.0->菜单 File 的New 项,在 projects 属性页选择MFC AppWizard(exe)项,在 Project name 中输入一个工程名,如“Sample”。单文档。 2、新建一个图形类。选择菜单 Insert New class,Class type 选择“Generic Class”,Name 输入类名,如“CMyCG。 3、向新建的图形类中添加成员函数(实际就是加入实验要求实现的图形生成算法的实现代码)。在工作区中直接鼠标右键单击,选择“Add Member Function… ”项,添加绘制圆的成员函数。 void PolygonFill(int number, CPoint *p, COLORREF color, CDC* pDC) 添加其他成员函数: CreatBucket(); CreatET(); AddEdge(); EdgeOrder(); 4、成员函数的实现。实现有效边表填充算法。这一部分需要同学们去实现。 参考实现: 多边形的有效边表填充算法的基本过程为: 1、定义多边形: 2、初始化桶 3、建立边表 4、多边形填充 1) 对每一条扫描线,将该扫描线上的边结点插入到临时AET 表中,HeadE. 2) 对临时AET 表排序,按 照 x 递 增 的顺 序存 放 。 3) 根据 AET 表中边表结点的ymax 抛 弃 扫描完的边结点,即 ymax>=scanline 4) 扫描 AET 表,填充扫描线和多边形相 交 的区间 。 5) 根据的边连贯性,更新AET 表。 0、构造桶结点的数据结构和有效边表的数据结构: 有效边表的数据结构:类 AET class AET { public: AET(); virtual ~AET(); double x; int yMax; double k;//代替 1/k AET *next; } 桶结点的数据结构:类 Bucket class Bucket { public: Bucket(); virtual ~Bucket(); int ScanLine; AET *p;//桶上的边表指针 Bucket *next; } 1、定义多边形: CPoint Point[7];//定义多边形 //设置多边形的7个顶点 Point[0]=CPoint(550,400);//P0 Point[1]=CPoint(3...