《计算机图形学》实验指导书暨实验报告
湖北汽车工业学院实验报告
班 级 课程名称
学 号
完成日期
姓 名
实验五 实现多边形的种子填充算法
一、实验目的
1、熟悉CDC图形程序库; 2、掌握多边形与区域的概念; 3、掌握多边形的种子填充算法; 二、实验性质
验证性 三、实验要求
1、认真阅读本次实验的目的,了解本次实验要求掌握的内容; 2、能够根据实验指导书的要求,完成相关的内容; 四、实验内容
(一)生成绘图应用程序的框架(如下图) 具体实现见第一次实验,过程不再详细说明。
(二)在应用程序中增加菜单
完成相关菜单的设计,具体的效果如下图所示,并设置好相关菜单消息的映射,具体的实现在前面的实验中介绍过,再此不在详细说明。
《计算机图形学》实验指导书暨实验报告
(三)在绘图函数中添加代码
通过以上步骤,得到了与菜单对应的消息映射,就可以在函数中添加代码绘制图形了。 1、利用CDC相关的绘图函数生成一个多边形(本例子中为一矩形)。 void CFillView::OnRectangle() { // TODO: Add your command handler code here CDC*pDC=GetDC();//得到绘图类指针 RedrawWindow();//重绘窗口
CPen bluepen(PS_SOLID,2,RGB(0,0,255));//创建画实线、线宽为2的蓝色画笔 CPen *old=pDC->SelectObject(&bluepen); pDC->Rectangle(50,50,120,120);
//绘制一个矩形,该函数的参数为矩形左上角和右下角坐标 }
由以上代码绘出的图形如下:
《计算机图形学》实验指导书暨实验报告
2、利用种子填充算法的思想完成对该矩形区域的填充(算法的详细原理见教材)。。 void CFillView::OnFill() { // TODO: Add your command handler code here int x,y; x=70; y=80;//设置种子点坐标
boundaryfill4(x,y,RGB(0,0,255),RGB(255,0,0)); }
void CFillView::boundaryfill4(int x, int y, int boundarycolor, int newcolor) {
//种子填充的4向算法,本算法要求待填充区域的面积不能太大, //否则会产生内存溢出的错误。 int color; CClientDC dc(this); color=dc.GetPixel(x,y); if(color!=newcolor&&color!=boundarycolor) { dc.SetPixel(x,y,newcolor); boundaryfill4(x,y+1,boundarycolor,newcolor);//填充顺序为下,上,左,右 boundaryfill4(x,y-1,boundarycolor,newcolor); boundaryfill4(x-1,y,boundarycolor,newcolor); boundaryfill4(x+1,y,boundarycolor,newcolor);
《计算机图形学》实验指导书暨实验报告
} }
由以上代码绘出的图形如下:
3、以上是本次实验的基本部分,如何利用该算法,完成任意形状的多边形区域的填充,请同学们认真考虑,完成这部分的内容,并将具体的实现过程撰写在实验报告上。 五、思考
1、任意形状的多边形如何生成; 2、任意形状的多边形如何实现填充。 六、实验总结