河南工业大学-图形学实验二_第1页
河南工业大学-图形学实验二_第2页
河南工业大学-图形学实验二_第3页
河南工业大学-图形学实验二_第4页
河南工业大学-图形学实验二_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2018.02.制第 页实验二:基本图元扫描转换一、实验目的1、掌握图形扫描转换的基本概念;2、掌握直线的绘制算法及程序设计;3、掌握圆弧的绘制算法及程序设计。二、实验要求在MFC单文档应用程序中,利用MFC应用程序向导生成完整的应用程序基本框架,添加“直线”菜单,在“直线”菜单下添加“DDA画线”子菜单,如图1.1所示,对应DDA算法绘制直线,直线端点为(100,100),(300,200),颜色为红色,如图1.2所示。85tesl2-MicrosoftVisualC+-1DR_MAINFRAME(Men,.=|ISM)工ST爼建工R翻口呦舉助凹用Id耳/百二”国咅rftUnUraw|CAb

2、aulDlgAllcIIeissmemberst|.CAbouilDIg|T上丈件旧删旧EiM希曲凹::豆宾曰Qdtest?resources*申匚|feixlcrafor町匚jDialog宙匚jUcon目已Mviu吕innmainfV5Cl.He._5lil.可环馳&矚试,在宴件1中查菇k在文井2中纱X若果视匚血丘盹出;1“|”1就绪_丿图1.1菜单示例图图1.2DDA画线在上题基础上,在“直线”菜单下再添加一个“中点画线”子菜单,如图2.1所示,利用中点画线算法画线,实现鼠标按下抬起绘制直线段的功能,颜色为黑色,如图2.2所示。图2.1菜单示例图图2.1绘制矩形制作动画图3.在上题基础上,

3、添加“圆形”菜单,如图3.1所示,利用Bresenham算法编程实现圆的扫描转换,绘制半径为200的黑色圆,如图3.2所示。图3.1菜单示例图图3.2Bresenham画圆三、实验内容q“直线”菜单,“DDA画线”子菜单,“中点画线”子菜单的构建ggraphit.rc-IDRMAINFRAME(Menu)交何E锯型查看凹帮助凹取圖形iDDAHi:=1卡QDDA画线voidCMainFrame:OnDda()/获得设备指针CDC*pDC=GetDC();/定义直线两端点和直线颜色(红色)Q3Untitled-graphic文件旧輪辑帮助團慈圆形DQ|X|S|?intx0=100,y0=100,x

4、1=300,y1=200,c=RGB(255,0,0);floatx,y,i;floatdx,dy,k;dx=(float)(x1-x0);dy=(float)(y1-y0);k=dy/dx;y=y0;x=x0;if(abs(k)1)for(;xSetPixel(x,int(y+0.5),c);y=y+k;if(abs(k)=1)for(;ySetPixel(int(x+0.5),y,c);x=x+1/k;ReleaseDC(pDC);释放设备指针Q中点画线OWkWl时中点画线算法的算法步骤为:输入直线的两端点PO(xO,yO)和pl(xl,yl)。计算初始值a=yO-y1、b=x1-x0、d

5、=2*a+b、x=xO、y=y0、d1=2*a、d2=2*(a+b)。3绘制点(x,y)。判断d的符号。若d0,贝则(x,y)更新为(x+1,y+1),d更新为d+d2;否则(x,y)更新为(x+1,y),d更新为d+d1。4当直线没有画完时,重复步骤3。否则结束。定义二个全局变量:CPointm_lastEndPoint;CPointm_StartPoint;intflag;voidCTest2_1View:OnLButtonDown(UINTnFlags,CPointpoint)m_StartPoint=point;CView:OnLButtonDown(nFlags,point);voi

6、dCTest2_1View:OnLButtonUp(UINTnFlags,CPointpoint)m_lastEndPoint=point;CDC*pDC=GetDC();if(flag=1)intxO=m_StartPoint.x,yO=m_StartPoint.y,x1=m_lastEndPoint.x,y1=m_lastEndPoint.y,c=RGB(0,0,0);floata,b,d1,d2,d,x,y,m;if(x1SetPixel(x,y,c);if(m=0&m=1)斜率大于0小于1d=2*a+b;d1=2*a,d2=2*(a+b);while(xx1)if(dSetPixel(

7、x,y,c);elseif(m=-1)斜率小于0大于-1d=2*a-b;d1=2*a-2*b,d2=2*a;while(x0)x+,y-,d+=d1;elsex+,d+=d2;pDC-SetPixel(x,y,c);elseif(m1)斜率大于1d=a+2*b;d1=2*(a+b),d2=2*b;while(y0)x+,y+,d+=d1;elsey+,d+=d2;pDC-SetPixel(x,y,c);else斜率小于-1d=a-2*b;d1=-2*b,d2=2*(a-b);while(yy1)if(dSetPixel(x,y,c);ReleaseDC(pDC);CView:OnLButton

8、Up(nFlags,point);voidCTest2_1View:0nMidline()flag=1;QBresenham算法画圆算法步骤:输入圆半径r和圆心(xc,yc),获得第一个点:(x0,y0)=(0,R)计算dO=3-2R;根据公式计算dk+1,确定下一点;如果dk0,选择(xk+1,yk-1)确定对称点;重复步骤3),直至xy酸Jntitlcd-trst2_1刃牛旧歸刁W(V:.巨聂园形voidCTest2_1View:OnBresenham()CDC*pDC=GetDC();intx0=250,y0=250,x,y,r=200,c=0;floate,d;e=3_2*r;x=0;

9、y=r;while(x=y)if(eSetPixel(x+x0,y+y0,c);pDC-SetPixel(-x+x0,y+y0,c);pDC-SetPixel(-x+x0,-y+y0,c);pDC-SetPixel(x+x0,-y+y0,c);pDC-SetPixel(y+x0,x+y0,c);pDC-SetPixel(-y+x0,x+y0,c);pDC-SetPixel(-y+x0,-x+y0,c);pDC-SetPixel(y+x0,-x+y0,c);ReleaseDC(pDC);四、实验结果与总结(列出实验过程中的收获和遇到的困难)此次实验遇到的问题较多。首先就是在MainFrm中建立OnLButtonDown和OnLButtonUp函数时会扌报以下的错误:illegalcallofnon-staticmemberfunction和cannotaccessprotectedmemberdeclaredinclassCWnd,在同学的指导下,在建立类向导的时候,classname选择CXXXXView,便可以解决问题。本来不需要点击中点画线子菜单,就可以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论