您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 《计算机图形学》新版实验指导书
《计算机图形学》实验指导书暨实验报告湖北汽车工业学院实验报告班级学号姓名课程名称完成日期实验二实现直线的生成算法一、实验目的1、进一步熟悉CDC图形程序库;2、掌握数值微分直线生成算法;3、掌握中点画线算法;4、掌握Bresenham直线生成算法。二、实验性质验证性三、实验要求1、认真阅读本次实验的目的,了解本次实验要求掌握的内容;2、能够根据实验指导书的要求,完成相关的内容;3、根据实验指导书提供的基本思想,完成任意斜率直线的生成。四、实验内容(一)生成绘图应用程序的框架(二)在应用程序中增加菜单(三)在应用程序中增加一个直线参数设置的对话框(四)在绘图函数中添加代码1、利用数值微分算法生成直线(算法的详细原理见教材)。voidCDraw_LineView::OnDda(){//TODO:AddyourcommandhandlercodehereInputLineInfoDlg;Dlg.DoModal();//打开直线参数设置对话框CDC*pDC=GetDC();//得到绘图类指针//RedrawWindow();//重绘窗口intx,x0,y0,x1,y1;//(x0,y0)为直线的起点,(x1,y1)为直线的终点floatdx,dy,k,y;x0=Dlg.qidian_x,y0=Dlg.qidian_y;x1=Dlg.zhongdian_x,y1=Dlg.zhongdian_y;dx=x1-x0;dy=y1-y0;k=dy/dx;y=y0;for(x=x0;x=x1;x++){pDC-SetPixel(x,int(y+0.5),RGB(255,0,0));y=y+k;}《计算机图形学》实验指导书暨实验报告}2、利用中点画线算法生成直线(算法的详细原理见教材)。voidCDraw_LineView::OnMid(){//TODO:AddyourcommandhandlercodehereInputLineInfoDlg;Dlg.DoModal();//打开直线参数设置对话框CDC*pDC=GetDC();//得到绘图类指针//RedrawWindow();//重绘窗口intx0,y0,x1,y1;//(x0,y0)为直线的起点,(x1,y1)为直线的终点inta,b,delta1,delta2,d,x,y;x0=Dlg.qidian_x,y0=Dlg.qidian_y;x1=Dlg.zhongdian_x,y1=Dlg.zhongdian_y;a=y0-y1;b=x1-x0;d=2*a+b;delta1=2*a;delta2=2*(a+b);x=x0;y=y0;pDC-SetPixel(x,y,RGB(0,0,255));//SetPixel为CDC类里面的画点函数,具体参数while(xx1)//有3个,分别是点的坐标和画点所用的颜色。{if(d0){x++;y++;d+=delta2;}else{x++;d+=delta1;}pDC-SetPixel(x,y,RGB(0,255,0));}}3、利用Bresenham画线算法生成直线(算法的详细原理见教材)voidCDraw_LineView::OnBre(){InputLineInfoDlg;Dlg.DoModal();//打开直线参数设置对话框CDC*pDC=GetDC();//得到绘图类指针//RedrawWindow();//重绘窗口intx,y,x0,y0,x1,y1;//(x0,y0)为直线的起点,(x1,y1)为直线的终点intdx,dy;floatk,e;《计算机图形学》实验指导书暨实验报告x0=Dlg.qidian_x,y0=Dlg.qidian_y;x1=Dlg.zhongdian_x,y1=Dlg.zhongdian_y;dx=x1-x0;dy=y1-y0;k=float(dy)/dx;e=-0.5;x=x0;y=y0;for(inti=0;i=dx;i++){pDC-SetPixel(x,y,RGB(0,0,255));x++;e=e+k;if(e=0){y++;e--;}}}4、运行效果如图:5、以上的内容为本次实验的基本部分,我们给出的示例代码只能解决直线斜率的绝对值不超过1的情形(|k|≤1)。当直线的斜率不满足这个条件的时候,如何处理,请同学们根据相关算法的思想,完成任意斜率直线的生成,上机调试通过,并撰写在实验报告书上。五、思考1、MFC开发绘图程序时,工作窗口坐标系是怎么样的,坐标原点在哪儿?2、实现任意斜率直线生成问题时,能不能使用模块化的思想,即将各个画线算法程序《计算机图形学》实验指导书暨实验报告进一步分解,通过不同的函数来完成不同斜率的生成?3、三种不同的直线生成算法的分析和比较。六、实验总结《计算机图形学》实验指导书暨实验报告湖北汽车工业学院实验报告班级学号姓名课程名称完成日期实验三实现圆的生成算法一、实验目的1、熟悉CDC图形程序库;2、掌握中点画圆生成算法;3、掌握Bresenham画圆算法;二、实验性质验证性三、实验要求1、认真阅读本次实验的目的,了解本次实验要求掌握的内容;2、能够根据实验指导书的要求,完成相关的内容;四、实验内容(一)生成绘图应用程序的框架(如下图)(二)在应用程序中增加菜单(三)在应用程序中增加一个圆参数设置的对话框(四)在绘图函数中添加代码1、利用中点画圆算法实现圆的生成(算法的详细原理见教材)。voidCDraw_CirView::OnMid(){//TODO:AddyourcommandhandlercodehereInputCircleInfoDlg;Dlg.DoModal();//打开圆参数设置对话框CDC*pDC=GetDC();//得到绘图类指针RedrawWindow();//重绘窗口intx,y,x0,y0;//圆的圆心为(x0,y0),半径为rfloatr,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(d0){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算法生成圆(算法的详细原理见教材)。voidCDraw_CirView::OnBre(){//TODO:AddyourcommandhandlercodehereInputCircleInfoDlg;Dlg.DoModal();//打开圆参数设置对话框CDC*pDC=GetDC();//得到绘图类指针//RedrawWindow();//重绘窗口intx,y,x0,y0,r;//圆的圆心为(x0,y0),半径为rintdelta,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(delta0){delta1=2*(delta+y)-1;if(delta=0)direction=1;elsedirection=2;}elseif(delta0){delta2=2*(delta-x)-1;if(delta2=0)direction=2;elsedirection=3;}elsedirection=2;switch(direction){case1:x++;delta+=2*x+1;break;case2:x++;y--;delta+=2*(x-y+1);break;case3:y--;delta+=(-2*y+1);break;}}}程序运行效果如下:3、以上是本次实验的基本部分,利用中点画圆和Bresenham画圆算法实现的基本图形的绘制。能不能利用该算法,完成一些复杂图形的生成,比如利用基本的画圆算法绘制一个奥运五环。甚至根据画圆算法,实现二次曲线的生成,如椭圆的生成等等。《计算机图形学》实验指导书暨实验报告五、思考1、如何实现圆心为任意位置的圆的绘制;2、两种画圆算法的比较。六、实验总结
本文标题:《计算机图形学》新版实验指导书
链接地址:https://www.777doc.com/doc-2803333 .html