ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:1.92MB ,
资源ID:5428938      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5428938.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机图形学课程设计实习报告.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机图形学课程设计实习报告.docx

1、计算机图形学课程设计实习报告实验零 Visual C+ 2005绘图系统地点: 土木楼B401机房 时间: 星期三下午 节次: 第三大节 一、 实验目的:1. 了解Visual C+ 2005绘图的基本概念2. 了解Visual C+ 2005绘图环境3. 掌握用Visual C+ 2005设计绘图项目的基本步骤4. 掌握用Visual C+ 2005绘图的基本命令二、 实验内容:实验内容1:创建绘图应用程序主框架实验内容2:应用程序编译运行实验内容3:设置菜单项并生成消息响应函数实验内容4:SetPixel绘图三、 实验步骤: 实验内容1:创建绘图应用程序主框架步骤:1创建一个工作目录D:M

2、yProject2启动 Visual Studio 2005 3单击“文件”-“新建”-“项目”,项目类型对话框中选择“其他语言”-“VC+” -“MFC”,模版选择“MFC应用程序”。在工作目录D:MyProject 下创建一个新应用项目: Sample,如下图所示。4单击“确定”按钮。5单击“下一步”按钮。6在“应用程序类型中”,选择“单文档”类型。7单击“完成”,创建了一项空的工程-绘图应用程序主框架。实验内容2:应用程序编译运行运行版本有两类:Debug、Release, 生成Debug解决方案步骤如下: 1生成解决方案点击“生成-生成解决方案”, 生成了Debug版的可运行程序。2调

3、试运行程序点击菜单“调试开始执行(不调试)”, 执行Debug版的可运行程序。结果如下:生成Release解决方案步骤如下:1生成解决方案点击“生成-批生成”。2勾选“Release”,单击“生成”,生成可以独立于Visual C+ 2005外运行的.exe程序。3查看目录,sample.exe是Release版,单击即可以运行。运行结果:实验内容3:设置菜单项并生成消息响应函数1弹出菜单设计器单击“解决方案管理器”窗口中的资源文件Sample.rc,弹出资源视图,2插入一项菜单双击“资源视图”中的“Menu”展开文件夹,双击“IDR_MAINFRAME”,弹出菜单设计器。右健单击菜单设计器的

4、“帮助”,选择“新插入”,插入一项菜单。在新插入的菜单项的“Caption” 中输入“绘图”。3输入ID输入“打开”菜单项,输入“直线”菜单项,在“直线”菜单项下输入“DDA”菜单,“DDA”菜单的ID为ID_LINE_DDA。IDCaption功能ID_LINE_DDADDA用DDA发绘制直线4调出类视图窗口单击菜单“视图-类视图”, 在“解决方案管理器”窗口中出现“类视图”窗口。4生成菜单消息响应函数在类视图窗口,单击Csample0View类,单击事件按钮,5选择ID_LINE_DDA的COMMAND,添加OnLineDDA事件。6进入代码编辑器在void Csample0View:On

5、LineDda()中的 / TODO: 在此添加命令处理程序代码处输入的自己代码:AfxMessageBox(Hello World,MB_OK,NULL);7修改项目字符集属性选择“项目”菜单-属性-,弹出“属性”对话框,选择“配置属性 -常规-字符集”,改为“未设置”。8运行结果重新生成解决方案,运行结果如下。实验内容4:SetPixel绘图在void Csample0View:OnLineDda()中的 / TODO: 在此添加命令处理程序代码处输入的代码:/ TODO: Add your command handler code hereCClientDC *pdc=new CClie

6、ntDC(this); CPen pen; pen.CreatePen(PS_DOT,1,RGB(255,0,0); CPen *oldpen=(CPen*)pdc-SelectObject(&pen);int x,y;y=100;for(x=100;xSetPixelV(x,y,RGB(255,0,0); pdc-DeleteDC();运行结果如下。四、 实验结果:实验内容1:创建绘图应用程序主框架结果实验内容2:应用程序编译运行结果实验内容3:设置菜单项并生成消息响应函数实验内容4:SetPixel绘图五、 回答如下问题: 解释以下每条命令的含义CClientDC *pdc=new CCl

7、ientDC(this);/定义一个指针类型的CClientDC对象,客户区设备上下文用于客/户区的输出,与特定窗口关联CPen pen;/定义一个画笔对象pen.CreatePen(PS_DOT,1,RGB(255,0,0);/赋予pen对象以风格CPen *oldpen=(CPen*)pdc-SelectObject(&pen);/pdc-SetPixelV(x,y,RGB(255,0,0);/画出像素坐标为(x,y),风格为红色的一点六、 其它的实验内容:答:工具条按钮的添加七、 实验中发现的问题及你解决的方法:答:发现的问题:调试过程中出现如下错误解决的方法:重新生成解决方案,如还出现

8、则多生成几次。实验一 直线的生成算法地点: 土木楼B401机房 时间: 星期三下午 节次: 第三大节 一、 实验目的:1理解DDA算法2理解中点Bresenham算法3理解改进的Bresenham算法4了解DDA和Bresenham算法的区别,以及生成图形的差异原因二、实验内容:实验内容1:设计DDA算法程序实验内容2:设计中点Bresenham算法程序实验内容3:改进的Bresenham算法三、 实验步骤: 实验内容1:设计DDA算法程序添加函数:void DDALine(int Xa, int Ya, int Xb, int Yb)/DDA算法void CSampleView:DDALin

9、e(int Xa, int Ya, int Xb, int Yb) CClientDC *pdc=new CClientDC(this); CPen pen; pen.CreatePen(PS_DOT,1,RGB(255,0,0); CPen *oldpen=(CPen*)pdc-SelectObject(&pen); float delta_x,delta_y;int x,y; int dx,dy,steps,k; dx=Xb-Xa; dy=Yb-Ya; if(abs(dx)abs(dy) steps=abs(dx); else steps=abs(dy); delta_x=(float)d

10、x/(float)steps; delta_y=(float)dy/(float)steps; x=Xa; y=Ya; pdc-SetPixelV(x,y,RGB(255,0,0); for(k=1;kSetPixelV(x,y,RGB(255,0,0); pdc-DeleteDC();添加事件响应函数:/ 消息响应函数DDA算法程序的设计画直线void CSampleView:OnDdaLine() DDALine(100,100,300,300);实验内容2:设计中点Bresenham算法程序添加函数:void LineBresenhams(int Xa,int Ya,int Xb,int

11、 Yb)/Bresenhams算法程序的设计画直线的实现void CSampleView:LineBresenhams(int Xa,int Ya,int Xb,int Yb) CClientDC *pdc=new CClientDC(this); CPen pen; pen.CreatePen(PS_DOT,1,RGB(255,0,0); CPen *oldpen=(CPen*)pdc-SelectObject(&pen); int dx=abs(Xa-Xb); int dy=abs(Ya-Yb); int p=2*dy-dx; int twody=2*dy; int twodydx = 2

12、*(dy-dx); int x,y,xend; if(XaXb) x=Xb; y=Yb; xend=Xa; else x=Xa;y=Ya; xend=Xb; pdc-SetPixelV(x,y,RGB(255,0,0); while(xxend) x+; if(pSetPixelV(x,y,RGB(255,0,0); 添加事件响应函数:void CSampleView:OnBresenhamline() / TODO: 在此添加命令处理程序代码 LineBresenhams(100,200,300,300);实验内容3:改进的Bresenham算法添加函数:void ImproveBresen

13、hams(int Xa, int Ya, int Xb, int Yb)/Bresenham算法改进算法的实现void CSampleView:ImproveBresenhams(int Xa, int Ya, int Xb, int Yb) CClientDC *pdc=new CClientDC(this); CPen pen; pen.CreatePen(PS_DOT,1,RGB(255,0,0); CPen *oldpen=(CPen*)pdc-SelectObject(&pen); int dx,dy,e,x,y; dx=Xb-Xa; dy=Yb-Ya; e=-dx; x=Xa; y

14、=Ya; while(xSetPixelV(x,y,RGB(255,0,0); x+; e+=2*dy; if(e0) y+; e-=2*dx; 添加事件响应函数:/菜单响应函数生成直线ImproveBresenhams算法void CSampleView:OnImprove() / TODO: 在此添加命令处理程序代码 ImproveBresenhams(200,100,300,300);四、 实验结果:实验内容1:设计DDA算法程序实验内容2:设计中点Bresenham算法程序实验内容3:改进的Bresenham算法五、 回答如下问题: DDA算法的缺点是什么?答:DDA算法的缺点是:它的

15、y和斜率k必须用浮点数表示,而且每一步都必须对y进行舍入取整,这不利于用硬件实现。六、 其它的实验内容:答:添加工具栏按钮DDA,Bresenham,Bresenham改进画直线在SampleView.cpp中添加代码:ON_COMMAND(ID_BUTTONDDALine,OnDda)ON_COMMAND(ID_BUTTONBresenham,OnBresenham)ON_COMMAND(ID_BUTTONImprovedBresenham,OnImprovedbresenham)调试点击工具栏按钮查看效果。七、 实验中发现的问题及你解决的方法:发现的问题:在生成Release文件时出现错误

16、,但调试时没有错误。解决的方法:查了资料,现在还没有解决。实验二:圆和椭圆的生成算法地点: B401机房 时间: 星期四 节次: 第一大节 一、 实验目的:1、了解Bresenham法生成圆和椭圆方法2、掌握Bresenham生成圆和椭圆算法的基本思想、推导和算法二、实验内容:实验内容1:Bresenham法生成圆实验内容2:Bresenham法生成椭圆三、 实验步骤:实验内容1:Bresenham法生成圆步骤1:添加菜单“实验二”,子菜单如下:圆 ID_Circle步骤2:在SampleView类中添加函数bool CircleLine(x1,y1,r)实现代码:bool CSampleVi

17、ew:CircleLine(int x1, int y1, int r) CClientDC *pdc=new CClientDC(this); CPen pen; pen.CreatePen(PS_DOT,1,RGB(255,0,0); CPen *oldpen=(CPen*)pdc-SelectObject(&pen); int x,y,d; x = 0; y = r; d = 3 - 2 * r; while(x SetPixelV(x+x1,y+y1,RGB(255,0,0); pdc-SetPixelV(y+x1,x+y1,RGB(255,0,0); pdc-SetPixelV(-y

18、+x1,x+y1,RGB(255,0,0); pdc-SetPixelV(-x+x1,-y+y1,RGB(255,0,0); pdc-SetPixelV(-x+x1,y+y1,RGB(255,0,0); pdc-SetPixelV(-y+x1,-x+y1,RGB(255,0,0); pdc-SetPixelV(y+x1,-x+y1,RGB(255,0,0); pdc-SetPixelV(x+x1,-y+y1,RGB(255,0,0); if(d SetPixelV(x+x1,y+y1,RGB(255,0,0); pdc-SetPixelV(y+x1,x+y1,RGB(255,0,0); pdc

19、-SetPixelV(-y+x1,x+y1,RGB(255,0,0); pdc-SetPixelV(-x+x1,-y+y1,RGB(255,0,0); pdc-SetPixelV(-x+x1,y+y1,RGB(255,0,0); pdc-SetPixelV(-y+x1,-x+y1,RGB(255,0,0); pdc-SetPixelV(y+x1,-x+y1,RGB(255,0,0); pdc-SetPixelV(x+x1,-y+y1,RGB(255,0,0); return true;步骤3;添加画圆菜单响应函数:void CSampleView:OnCircle() / TODO: 在此添加

20、命令处理程序代码 CircleLine(200,200,100);步骤四:调试运行。实验内容2:Bresenham法生成椭圆步骤1:添加菜单“实验二”,子菜单如下:椭圆:ID_Ellipse步骤2:在SampleView类中添加函数void Ellipse(int x1,int y1,int a, int b)实现代码:/ 画椭圆的函数void CSampleView:Ellipse(int x1,int y1,int a, int b) CClientDC *pdc=new CClientDC(this); CPen pen; pen.CreatePen(PS_DOT,1,RGB(255,0

21、,0); CPen *oldpen=(CPen*)pdc-SelectObject(&pen); float d1,d2; int x,y; x=0; y=b; d1=b*b+a*a*(-b+0.25); pdc-SetPixelV(x+x1 ,y+y1 ,RGB(255,0,0); pdc-SetPixelV(-x+x1 ,-y+y1 ,RGB(255,0,0); pdc-SetPixelV(x+x1 ,-y+y1,RGB(255,0,0); pdc-SetPixelV(-x+x1 ,y+y1,RGB(255,0,0); while(b*b*(x+1)a*a*(y-0.5) if(d1Set

22、PixelV(x+x1 ,y+y1 ,RGB(255,0,0); pdc-SetPixelV(-x+x1 ,-y+y1 ,RGB(255,0,0); pdc-SetPixelV(x+x1 ,-y+y1,RGB(255,0,0); pdc-SetPixelV(-x+x1 ,y+y1,RGB(255,0,0); d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b; while(y0) if(d2SetPixelV(x+x1 ,y+y1 ,RGB(255,0,0); pdc-SetPixelV(-x+x1 ,-y+y1 ,RGB(255,0,0); pdc-

23、SetPixelV(x+x1 ,-y+y1,RGB(255,0,0); pdc-SetPixelV(-x+x1 ,y+y1,RGB(255,0,0); 步骤3;添加画圆菜单响应函数:void CSampleView:OnEllipse() / TODO: 在此添加命令处理程序代码 Ellipse(100,100,20,10);步骤四:调试运行。四、 实验结果:1.程序:程序在实验步骤中已有2.图形:五、 回答如下问题: 1、屏幕上显示圆的几部分?为什么? 答:8部分,因为我们采用的画圆方法是八分法画圆,在屏幕上画出的是圆的8部分。2、屏幕上显示椭圆的几部分?为什么?答:8部分,因为我们在画圆的

24、时候在第一象限内画出的有两部分:上半部分和下半部分;因此在四个象限内画出的是8部分。六、 其它的实验内容:答:用动态画圆和椭圆的的方法来画圆:七、 实验中发现的问题及你解决的方法:答:发现的问题:在调用函数的时候用传参的方法传递CClientDC *pdc不能运行;解决方法:舍弃传参,每次画图形时重新声明CClientDC指针对象。实验三:二维图形的基本几何变换地点: B401机房 时间: 星期四 节次: 第四大节 一、 实验目的:1、掌握二维图形基本的几何变换原理及变换矩阵2、掌握矩阵运算的程序设计二、实验内容:1、平移2、旋转三、实验步骤: 1、平移步骤1:初始化函数,画出图形平移前的状态

25、。实现在void CSampleView:OnDraw(CDC* pDC) CSampleDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); /初始化画出图形平移旋转前的状态 static double x1=0.0,10.0,100.0,110.0,0.0; static double y1=0.0,50.0,50.0,0.0,0.0; static double x25; static double y25; int i; double r; pDC-MoveTo(scx(0),scy(-ymax/2); pDC-LineTo(scx(0),scy

26、(ymax/2); pDC-MoveTo(scx(-xmax/2),scy(0.0); pDC-LineTo(scx(xmax/2),scy(0.0); for(int x=0;x=1;x=x+20) parallel(x,x/2); for (i=0;i=4;i+) x2i=affinex(x1i,y1i,1.0); y2i=affiney(x1i,y1i,1.0); for (i=0;iMoveTo(scx(x2i),scy(y2i); pDC-LineTo(scx(x2i+1),scy(y2i+1); 步骤2:旋转函数的添加,在CSampleView类里添加旋转函数void Rotate

27、();/ 旋转再依次添加辅助函数及变量public: int scx(double xj); int scy(double yj);public: double affinex(double x,double y,double d); double affiney(double x,double y,double d);public: void parallel(double dx,double dy);public: double f33; /成员变量 double xmax; double ymax; void rotate(double theta);在SampleView.cpp中依次实现他们,函数如下:/平移函数void CSampleView:Pan() / TODO: Add your command handler code here static double x1=0.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1