《2023年计算机图形学实验报告完整版.pdf》由会员分享,可在线阅读,更多相关《2023年计算机图形学实验报告完整版.pdf(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、中南大学信息科学与工程学院实验报告实 验 名 称_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _实 验 地 点 科技楼四楼_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _实 验 日 期 202 3 年 6 月指 导 教 师 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _学 生 班 级 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _学 生 姓 名 _ _ _ _ _ _ _ _ _
2、_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _学 生 学 号 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _提 交 日 期 2023年 6 月实验一 W in d o w图形编程基础一、实验类型:验证型实验二、实验目的1、纯熟使用实验重要开发平台VC 6.0;2、掌握如何在编译平台下编辑、编译、连接和运营一个简朴的Win d o ws图形应用程序;3、掌握Win d o w图形编程的基本方法;4、学会使用基本绘图函数和W i n d o w G DI对象;三、实验内容创建基于MFC的S in g l e Do c u
3、m e n t应用程序(Win 32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下规定:1、用户可以通过菜单选择绘图颜色;2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形;。四、实验规定与指导1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。2、建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形其 中“曲线”项有级联菜单,涉及:圆、椭圆。3、用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。五、实验结果:class members !CMainl-r
4、ame口 7-1六、实验重要代码1、画直 线:CClientDC*m_pDC;再在OnDraw函数里给变量初始化。m_pDC=n ew CC1 i e n tD C(th i s);在 OnDraw函数中添加:om_ pDC=n ew CC 1 i e ntDC(thi s);m_p D C-Mo v eTo(1 0,10);oom_pDC-L i neTo(10 0,100);。m _pDC-Se t P ix e 1 (1 0 0,20 0,RGB(0,0,0);m_pDC-T e x t 0ut(100,1 0 0);2、画圆:void CMy C G:LineD D A 2(in t
5、x a,i n t yaJn t xb,int y b,CDC*p D C)oint d x=x b-x a;int dy=y b-y a;int S tep s,k;fl o at xln c r e m e nt,yl n cr e m e n t;afloat x=x a,y=ya;f(abs(d x)abs(d y)t eps=abs(dx);。e IseStep s=ab s(dy);ox I n creme n t=dx/(fl o at)Step s;oy I n c remen t=d y/(flo a t)St e p s;pD C-S e tP i xel(ROUND(x)
6、,ROUND(y),RGB(0,0,0);for(k=0;k Se t Pixe 1 (ROUND(x),ROUND(y),RGB(0,0,0);3、画矩物vo i d CRect a n g le D1 g::On L B u tt o nDown(UINT n F 1 ags,CP o i nt point)a 1 B utton D ownNo t UpT RUE汽REC T rec t;Am_showRectangl e.G et Clie n tRe c t(&rect);if(p o int.xr e c t.left)&(p oin t.y r e c t.top)r egion
7、 L eftTopTem p=point:)C Dialog:OnLButt o nDown(n F 1 a g s,poi n t);AAAvoid C Recta n gl e DI g::O n MouseMov e(U I NT n F 1 a g s,CP o int point)(A R E CT re c t;m_ s howR e ctangle.GetClien t R e ct(&rect);a i f(point.xrect.lef t)&(point.yre c t.top)(i f(IButtonDow n NotUp=TRUE A r e gio n Righ tB
8、o t t omTemp=poin t;CDC*pDC=m_showR e ctangl e.GetW i ndowDC();ApDC-Rectang 1 e(CRect(reg i on L e ftTopTemp,r e gi o n R i g htB ottomTemp)泠 C D ia 1 og:OnMouseMove(nFl a g s,p o i nt);Av oid C RectangleDlg:OnLB u 11 o nUp(UINT n Fl a gs,CPoin t p o intA IBut tonDow n N o tUp=FALSE;C D i a lo g:OnL
9、Butto n U p(nFlag s,p oin t);)实验二基本图形生成算法一、实验类型:验证型实验二、实验目的1、掌握D D A、Br e sen h am直线生成算法;2、掌握Br e senh a m或中点圆生成算法;3、掌握B r esenham或中点椭圆生成算法;三、实验内容1、实现DDA、B resenham直线生成算法;2、实现Bre s e n ham画圆法或中点画圆法;3、实现B r e s enham或中点法椭圆生成算法;4、运用1、2、3实现的直线、圆、椭圆图形生成函数进行图形绘制;四、实验规定与指导1、按照实验指导书1.6节创建一个基于MFC的S in g le
10、Doc um e n t应用程序。建立名为“图形绘制”的菜单,该菜单的子菜单项可根据下图进行设定,用户通过点击不同的子菜单项,可以选择不同的算法进行绘图。2、建立一个专门用于进行图形绘制的类,比如下图所示的CMyGL类。如无特殊说明,此后都以该类作为演示。3、所有图形的绘制算法都必须封装在CMyGL类中,如下图。4、在View类中实例化一个CM y GL类的对象,比如m _ g l,进行绘图操作。如下图所示:5、用户通过点击“图形绘制”中不同的菜单项,在指定位置进行绘图。五、实验结果:1、画直线:v o id CDraw:D D AL i ne(CDC*pDC,i n t x 1,i n t
11、y 1,i n t x 2,in t y2,COLORREF co 1 or)(d ou b le dx,dy,e,x,y;ed x=x2-x 1;dy=y 2-yl;=(fabs(dx)fab s(dy)?f a b s(dx):fab s(d y);dx/=e;dy/=e;6 x=xl;y=yi;fo r(int i=1;i S e tPixel(int)(x+0.5),(int)(y+0.5),co 1 o r);x+=dx;g y+=dy;0)2、画圆:v o id CM y CG::L i neD D A 2(int xa,i n t y a,in t xb,int yb,CDC*p
12、D C)(i n t d x=xb-x a;i n t dy=yb-ya;i nt S t e p s,k;fl o at x Incremen t,y Increme n t;f loa t x=xa,y=y a;oif(abs(dx)abs(d y)o S teps=a b s(d x);e Ise。S t eps=a b s(d y);o x I n cr e ment=d x/(f loat)St e p s;ylncrem e n t=dy/(flo a t)S t e p s;叩DC-SetPixel(ROUND(x),ROUND(y),RGB(255,0,0);ofor(k=O;
13、kSetP i xel(ROUND(x),R0 UND(y),RGB(2 5 5,0,0);)3、画椭圆void C Dr a w:Br e s en h am E 1 1 i p se(CDC*pDC,int x 0,i nt b,COLO R REF c olor)(“nt x,y,p;A n t aa=a*a,bb=b*b;ox=0;y=b;p=2*b b+a a*(1-2*b);awhile(b b*x=aa*y)(o 叩 D C-Se t Pixel(x+x0,y+yO,c olor);pDC-SetPi x e 1 (-x+xO,y+y 0,color);p DC-Set P i
14、x e l(x+x 0,-y+y 0,color);pD C-S e tPixel(-x+x 0,-y+y0,co l o r);i f(p=0)00 p+=4*aa*(1-y)+bb*(4*x+6);oy_;00。日 s ei nt y 0,in t a,00 I 0p+=b b*(4*x+6);X+;ox=a;y=0;p=2*aa+b b*(1 -2次a);w h ile(b b*x a a*y)呼 DC-SetP i x e 1 (x+x O,y+y 0,c o 1 or);pDC-SetP i xel(x+xO,y+y 0,c ol o r);叩 DC-Se t Pi x el(x+x
15、0,y+yO,colo r);叩DC-SetPixel(x+x 0,-y+yO,c o lor);。i f(p=0)00 p+=4*bb*(1-x)+aa*(4*y+6);。0 X;“els e00 I。p+=a a*(4*y+6);呼+;实验三、0 p enGL图形程序设计基础一.实验目的1)了解。P e n GL 图形库的功能和结构;2)学习使用V i sua l C+开发基于控制台的图形程序;3)学习使用V i sua l C+开发基于单文档(G U I界面)的图形程序。4)学习使用O p e n G L生成基本图形;5 )学习使用O p e n GL实现图形变换;二.实验内容1)使用
16、V i s ua l C+建立一个 W i n 3 2 C o n s o l e A p p l i c a t i。n(控制台应用程序),定义若干点坐标,绘制点、线段、不闭合折线、闭合折线、多边形、三角形、四边形、三角扇、三角条带、四边形条带。尝试不同尺寸的点、不同线宽的线、设立颜色等操作。2)使 用M F C A p p W i z a rd建立一个S D I 程序,根据参考资料2和3中的环节设立0 p e n G L图形绘制环境。增长绘制4种基本图形(选择其中之一)。3.实验过程:1 )建立一个控制台应用程序,在R enderS cene。函数中调用不同的系统函数分别绘制不同属性的点、
17、线、折 线、多边形、扇 形 等;2)建 立 一 个SDI程序,按照所给资料设立0 p enG L图形绘制环境,并照敲老师所给实列,观看结果,查看关键代码区;3)仿照所给列子,改写代码,绘制彩色的正方体;三.实 验 结 果基本图形显示对的基本图形截图:,CM MM MGL VIMMICis)(a;Q 0 冷-声 言.聃HulQlock-m M|ConsoleOpe2J|Win32 Debugg lU e rte x 2 F(-#.7,-a.7 S);glUertex2F(1.0,1.0):glU ertex2f(0.5.0.9);g lE n tfO;-/三棱柱截图:实验四、二维图形变换程序设计
18、一.实验目的:1)掌握图形变换实现原理,基本几何变换,复合变换等;2)学 习 使 用V i sua l C+开发菜单,对话框等交互界面的设计;3)学习使用M F C单文档程序,实现二维图形的基本几何变换。二.实验内容:使用V i sua l C+建立一个单文档程序,采用实验二中定义的基本图形类。在程序中增长图形变换菜单(各基本变换相应菜单项),各图形变换的参数通过对话框提供(设计提供变换参数的对话框,如平移,旋转,比例等),实现二维图形的变换。(提醒:在各个图形类中增长相应的成员函数实现平移;菜单选择变换弹出相应变换的参数对话框,对话框中提供参数后取出参数传递给图形对象,通过调用图形变换成员函
19、数实现图形对象的变换)。规定实现直线段、圆、多边形等基本图形的几何变换。三.实验过程:(1).根据实验规定,新建菜单,增长二维图形变换子菜单,然后在菜单上添加平移,比例,对称,旋转以及错切选项。(2).对菜单中的每一项方法构造响应函数,并给几个需要弹出对话框的选项添加对话框响应函数。(3).在弹出的对话框输入参数,获取输入的参数,调用相应的变换函数,实现图形的变换。四.实验结果:结果对的。平移 xy(1 0 0,0)五、实验重要代码class CT r a nsf o rm/二维几何变换publ i c:CT r a nsform();ov i rtu a 1 CTra n s f o rm(
20、);void SetMat(CP 2*,int);v o id I de n t ity();void Tr a n s late(d o ubl e,doub 1 e);/平移变换矩阵void Sea 1 e(d o ub 1 e,doubl e);比例变换矩阵0Voic1 S c ale(doub 1 e,doub 1 e,C P2);相对于任意点的比例变换矩阵ov o id Rotate(doub 1 e):旋转变换矩阵o id R o tate(doubl e,C P2);/相对于任意点的旋转变换矩阵vo i d R e flectO r g();原点反射变换矩阵 void Refle
21、c tX ();/X轴反射变换矩阵-void ReflectY();/Y轴反射变换矩阵avoid Sh e ar(double,d o u b 1 e);/错切变换矩阵voi d M u 1 tiMatrix();矩阵相乘pu b 1 i c:odo u b 1 e T 33;oCP2*P01d;oint num;v oid CTrans f orm::T r an s 1 ate(d o ub 1 e tx,double ty)平移变换矩阵(IdentityO;T 2 O=tx;T MultiM a t rix();v oid CTra n s f orm::Sc a le(do uble
22、s x,do u b 1 e sy)比例变换矩阵(。I dentityO;oT00=sx;T L 1 l=sy;Mu 1 t iMa t r i x();)vo i d CTran s f o rm:S cale(d o ub 1 e sx,d o u b l e sy,CP2 p)/相对于任意点的整体比例变换矩阵(oTransla t e(-p.x,-p.y);S ca 1 e(s x,s y);Translat e(p.x,p.y)?)v o id C T ra ns f orm::Ro t a t e(do u b le bet a)旋转变换矩阵(Ide n tity();d o u b
23、 1 e r ad=b e t a*P 1/180;T 00=cos(ra d);T 0 J 1 J=s in(rad);3T 1 0 =-sin(rad);T11 =c o s(ra d);Mui t iMatrix。;。实验五、二维交互式图形程序设计一、实验目的:1)综合使用VC+编写W in 3 2应用的方法(单文档、多文档、对话框);2 )掌握交互式绘图程序设计及MF C相关类的使用;3)掌握使用MF C的编写简朴动画程序。二、实验任务:1)使用M FC A p p W i z ar d建立一个S D I程序。综合前几次二维绘图实验的结果,实现基本功能:建立绘制点、直线段、圆、椭圆、圆
24、弧、多 段 线(折线)、多边形、贝塞尔(Be z ie r )曲线的相关类(对于封闭图形,应能多种方式填充)、字符串。使用实验二中自定义的CCl ie n t D C的派生类,实现交互式(鼠标)绘制以上图形。实现颜色、线型、字体等的交互式选择,实现除曲线、圆弧外其他图形的鼠标拾取(框选、点选)。实现新建文献、保存文献,打开文献(打开保存的自定义图形文献,并绘制图形)。软 件 界 面 设 计(工具栏、菜单、光标等)。可选扩展功能:(1)实现平移、旋转、缩放、对称、错切等图形几何变换(2)图形的显示控制涉及缩放(按比例、选取框)、平 移(上、小、左、右)。(3)实现图层功能(可见性、颜色、锁定等)
25、、图块功能(及选中多个图形形成一组,图块的生成、引用、编辑)。(4 )图形的显示控制涉及实时缩放、实时平移和定点平移等。(5)图形的编辑控制涉及撤消、反复、剪切、复制、粘贴、删除、清除。2 )本任务是在以上程序的基础上,增长动画功能(可单独增长相 应 菜 单):交互式绘制三个圆作为太阳、地球、月 球(规定填充,注意位置。数据放入文档类,即文档类有变量太阳、地球、月球等),实现二维动画:月球绕地球转、地球自转(地球采用图案填充)、地球绕太阳公 转(准时间比例,可设立参数:时间、颜色、调整大小)。三、实验过程:1)建立绘制点、直线段、圆、椭圆、圆弧、多 段 线(折线)、多边形、贝 塞 尔(Be z ie r )曲线的相关类2)在菜单栏上增长相应的菜单,用来选择不同的功能3)对增长的菜单栏设立I D,并且在Vie w类中添加相应的事件响应函数,在各自的响应函数中实现各自的功能四、实验结果:基本功能:在附加功能中,点 击“开始”图形开始变换,点 击“停止”图形静止。