一、实验目的
- 掌握双缓冲绘图技术。
(2)掌握人机交互技术。
(3)掌握填充动态多边形的有效边表算法。
二、实验步骤
(1)在VS2017环境下创建MFC应用程序工程(单文档)
(2)添加命令消息处理函数、双缓冲技术函数
(3)定义边节点类、桶节点类、填充多边形类
(3)添加成员函数及成员变量
(4)编写函数内容
(4)绘制与填充多边形
三、实验结果
四、实验体会
通过本次实验,我掌握了双缓冲绘图技术、人机交互技术、填充动态多边形的有效边表算法,加深了对算法的理解。通过亲自动手将理论运用于实践,加强了动手能力,对MFC应用程序工程的编写更为熟悉了,对于实际的操作有了质的飞跃,整体对计算机图形学的理解有了不少提高。
附录:源代码
类视图
class CBucket //桶节点类
{
public:
CBucket();
virtual ~CBucket();
public:
int ScanLine;//扫描线
CAET *pET; //边表
CBucket *next;
};
class CAET //边节点类
{
public:
CAET();
virtual ~CAET();
public:
double x; //当前扫描线与有效边的交点的 x 坐标
int yMax; //边的最大 y 值
double k; //斜率的倒数(x 的增量)
CAET *next;
};
填充多边形类
CFill::CFill()
{
PNum=0;
P=NULL;
pEdge=NULL;
pHeadB=NULL;
pHeadE=NULL;
}
CFill::~CFill()
{
if(P!=NULL)
{
delete[] P;
P=NULL;
}
ClearMemory();
}
void CFill::SetPoint(CPoint p[],int m)//动态创建多边形顶点数组
{
P=new CPoint[m];
for(int i=0;i<m;i++)
{
P[i]=p[i];
}
PNum=m;
}
void CFill::CreateBucket()//创建桶表
{
int yMin, yMax;
yMin