西安交通大学计算机图形学,西安交大计算机图形学实验报告材料.doc

文档介绍:

《计算机图形学课内实验》实验报告班级:姓名:学号:日期:一:实验目的及要求(1)理解和掌握计算机中的基本图形绘画算法,包括直线DDA算法,直线Bresenham算法,圆Bresenham算法,椭圆Bresenham算法。(2)学****MFC类程序编程,巩固提高编程能力。(3)提高调试纠错能力,提高自学能力。二:实验环境Windows8.1系统,VisualStudio2015社区版,MFC类库。三:实验内容直线的DDA算法实现。四:数据结构与算法描述(1)问题分析设直线方程y=kx+b,该算法从直线端点(x1,y1)开始画点,画到(x2,y2)为止,分|k|<=1和|k|>1两种情况。|k|<=1时,以横坐标为步进,x每次加1或-1(取决于x1小于x2还是大于x2),y每次加k(k为正数或负数),y以浮点数计算,画点时取整形数,画到另一端点为止。|k|>1时,方程改为x=y/k-b/k,以纵坐标为步进,y每次加1(取决于y1小于y2还是大于y2),x每次加1/k(1/k为正数或负数),x以浮点数计算,画点时取整形数,画到另一端点为止。(2)C++代码表示的算法概述:该程序在对话框中输入(x1,y1)(x2,y2)坐标,点击确定后在用户区画线(使用消息处理程序)。画线算法为程序核心,如下:CDialog::OnOK();UpdateData(TRUE);//将输入对话框的数据送入变量,该对话框类包含四个成员变量://m_x1,m_y1为第一个点坐标,m_x2,m_y2为第二个点坐标CDC*p=k;//创建CDC对象指针,用于调用画点函数p->(683,300);//坐标轴提前画好,原点在(683,300)inti,x=m_x1,y=m_y1;floatxi,yi,st,dx=m_x2-m_x1,dy=m_y2-m_y1,xf=(float)x,yf=(float)y;st=abs(dx);//设定步进,以下三行代码确定横坐标差和纵坐标差中较大的,abs()为绝对值函数if(abs(dx)SetPixel(CPoint(x,-y),RGB(255,0,0));//画初始点,mfc坐标系y轴正方向朝下for(i=1;i<=st;i++){ xf+=xi; yf+=yi;//用浮点数计算,否则带入画点时小数部分始终被舍去,使得整数无法增加 x=xf; y=yf; p->SetPixel(CPoint(x,-y),RGB(255,0,0));//循环画点 Sleep(10);}(3)执行结果事例输入:绘制结果:(4)遇到的问题和解决手段①在编写界面时不知道如何实现在菜单点击后出现上图所示对话框,查询得知需设置消息处理程序打开对话框。②对话框点击确定后仅仅对话框消失不画线,研究后发现需在其他文件内声明函数。③画线时发现只能画出平行于x轴或y轴的线,研究后发现画点时不能用整形数计算下一个点的位置,而应该用浮点数计算。六:总结心得体会:编写程序时在建立界面和对话框,让程序协调运行方面耗费了较大时间精力,绘制算法部分则相对简单。本次实验,让我对各类绘制算法的原理有了较好的认识,了解了计算机内绘制的方式。除了学****到计算机内的绘制算法以外,还巩固了编程知识,学****了文件协调工作的手段,学****到界面的设计和运行方式。改进意见:本程序无法自行控制线色,应当再编写程序使得使用者可以自行控制线色,时间仓促未能完成。七:附录(源程序清单)有重要改动的相关文件共计10个,包括MainFrm.h,MFCApplication3.h,MFCApplication3Doc.h,MFCApplication3View.h,Clinedda.h五个头文件及同名源文件。(MFCApplication3为工程名,8个文件内含有直线Bresenham算法,圆Bresenham算法,椭圆Bresenham算法的使用,这里未给出)(1)MainFrm.h//MainFrm.h:CMainFrame类的接口//#pragmaonceclassCMainFrame:FrameWnd{ protected://仅从序列化创建 CMainFrame(); DECLARE_DYNCREATE(CMainFrame)//特性public://操作public://重写public: virtualBOOLPreCreateWindow(CREATESTRUCT&cs);//实现public: virtual~CMainFrame();#ifdef_DEBUG virtualvoidAssertValid()const; virtualvoi

内容来自淘豆网www.taodocs.com转载请标明出处.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值