《计算机图形学》新版实验指导书(4)

2018-11-26 21:29

《计算机图形学》实验指导书暨实验报告

湖北汽车工业学院实验报告

班 级 课程名称

学 号

完成日期

姓 名

实验三 实现圆的生成算法

一、实验目的

1、熟悉CDC图形程序库; 2、掌握中点画圆生成算法; 3、掌握Bresenham画圆算法; 二、实验性质

验证性 三、实验要求

1、认真阅读本次实验的目的,了解本次实验要求掌握的内容; 2、能够根据实验指导书的要求,完成相关的内容; 四、实验内容

(一)生成绘图应用程序的框架(如下图) 具体实现见第一次实验,过程不再详细说明。

(二)在应用程序中增加菜单

完成相关菜单的设计,具体的效果如下图所示,并设置好相关菜单消息的映射,具体的实现在前面的实验中介绍过,再此不在详细说明。

《计算机图形学》实验指导书暨实验报告

(三)在应用程序中增加一个圆参数设置的对话框

在VC++6.0环境中打开资源视图,插入一个对话框,如图所示(具体实现过程见

实验二):

(四)在绘图函数中添加代码

通过以上步骤,得到了与菜单对应的消息映射,就可以在函数中添加代码绘制图形了。 1、利用中点画圆算法实现圆的生成(算法的详细原理见教材)。 void CDraw_CirView::OnMid() { // TODO: Add your command handler code here InputCircleInfo Dlg; Dlg.DoModal(); //打开圆参数设置对话框 CDC*pDC=GetDC();//得到绘图类指针 RedrawWindow();//重绘窗口

《计算机图形学》实验指导书暨实验报告

int x,y,x0,y0;//圆的圆心为(x0,y0),半径为r float r,d; x0=Dlg.yuanxin_x; y0=Dlg.yuanxin_y; r=Dlg.yuan_r; x=0; y=r; d=1.25-r;

pDC->SetPixel(x+x0,y+y0,RGB(255,0,0)); pDC->SetPixel(y+x0,x+y0,RGB(255,0,0)); pDC->SetPixel(y+x0,-x+y0,RGB(255,0,0)); pDC->SetPixel(x+x0,-y+y0,RGB(255,0,0)); pDC->SetPixel(-x+x0,-y+y0,RGB(255,0,0)); pDC->SetPixel(-y+x0,-x+y0,RGB(255,0,0)); pDC->SetPixel(-y+x0,x+y0,RGB(255,0,0)); pDC->SetPixel(-x+x0,y+y0,RGB(255,0,0)); while(x<=y) { if(d<0) { d=d+2*x+3; x++; } else { d=d+2*(x-y)+5; x++; y--;} pDC->SetPixel(x+x0,y+y0,RGB(255,0,0)); pDC->SetPixel(y+x0,x+y0,RGB(255,0,0)); pDC->SetPixel(y+x0,-x+y0,RGB(255,0,0)); pDC->SetPixel(x+x0,-y+y0,RGB(255,0,0)); pDC->SetPixel(-x+x0,-y+y0,RGB(255,0,0)); pDC->SetPixel(-y+x0,-x+y0,RGB(255,0,0)); pDC->SetPixel(-y+x0,x+y0,RGB(255,0,0)); pDC->SetPixel(-x+x0,y+y0,RGB(255,0,0)); } }

2、利用Bresenham算法生成圆(算法的详细原理见教材)。 void CDraw_CirView::OnBre() { // TODO: Add your command handler code here InputCircleInfo Dlg; Dlg.DoModal(); //打开圆参数设置对话框

《计算机图形学》实验指导书暨实验报告

CDC*pDC=GetDC();//得到绘图类指针 //RedrawWindow();//重绘窗口 int x,y,x0,y0,r;//圆的圆心为(x0,y0),半径为r int delta,delta1,delta2,direction; x0=Dlg.yuanxin_x; y0=Dlg.yuanxin_y; r=Dlg.yuan_r; x=0;y=r; delta=2*(1-r); while(y>=0) {

pDC->SetPixel(x+x0,y+y0,RGB(0,0,255)); pDC->SetPixel(x+x0,-y+y0,RGB(0,0,255)); pDC->SetPixel(-x+x0,y+y0,RGB(0,0,255)); pDC->SetPixel(-x+x0,-y+y0,RGB(0,0,255)); if(delta<0) { delta1=2*(delta+y)-1; if(delta<=0)direction=1; else direction=2; } else if(delta>0) { delta2=2*(delta-x)-1; if(delta2<=0)direction=2; else direction=3; } else direction=2; switch(direction) { case 1:x++; delta+=2*x+1; break; case 2:x++;y--; delta+=2*(x-y+1); break; case 3:y--; delta+=(-2*y+1); break; } } }

程序运行效果如下:

《计算机图形学》实验指导书暨实验报告

3、以上是本次实验的基本部分,利用中点画圆和Bresenham画圆算法实现的基本图形的绘制。能不能利用该算法,完成一些复杂图形的生成,比如利用基本的画圆算法绘制一个奥运五环。甚至根据画圆算法,实现二次曲线的生成,如椭圆的生成等等。请同学们认真考虑,完成这部分的内容,并将具体的实现过程撰写在实验报告上。 五、思考

1、如何实现圆心为任意位置的圆的绘制; 2、两种画圆算法的比较。 六、实验总结


《计算机图形学》新版实验指导书(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:暑假中最高兴的一件事 我学会了洗碗

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: