课程实验报告
课程名称 姓名 实验名称 实 验 目 的 及 要 求 实 验 内 容 算 法 描 述 及 实 验 步 骤 (1) (2) (3) (4) (5) (6) 计算机图形学 汪智 班级 学号 1120541 41 实验日期 实验成绩 2014.04 绘制金刚石图案 掌握二维坐标系模式映射方法。 掌握动态内存的分配和释放方法。 掌握二维点类的定义方法。 掌握对话框的创建及调用方法。 掌握对话框的数据交换和数据校验方法。 掌握Test工程课程设计框架的创建方法。 (7) 掌握金刚石图案的设计方法 将半径为r的圆周n等份,然后用直线将各等分点隔点相连,形成的图案称为“金刚石”图案,试编程实现。 在Visual C++集成开发环境中,选择File|New,弹出的New对话框,切换到“Projects”标签页。在左边窗口中选择MFC AppWizard [exe],在右边的Projects name处输入工程名“Test”,在Location处选择适当的工程位置,如D:\\Test,如下图所示,点击OK按钮。
1
New对话框 在MFC AppWizard - Step1对话框中,选中Single document单选按钮,其余保持默认值,如图所示,单击Finish按钮。 MFC AppWizard - Step1对话框 完成上述操作后,Test工程的MFC框架已被生成,出现MFC框架的程序工作区。如图所示。 MFC框架 单击图所示的工具条上的按钮,就可以直接编译、运行Test工程,结果如下 2
(1)设置菜单的ID 在资源视图面板ResourceView上双击Menu,打开IDR_MAINFRAME,修改菜单项内容,结果如下图 保留子菜单“退出”的ID为ID_APP_EXIT,Prompt为“退出应用程序\\n退出”;设计子菜单“金刚石”的ID为IDM_DIAMOND,Prompt为“绘制图形\\n绘图”;保留子菜单“关于”的ID为ID_APP_ABOUT,Prompt为“开发人员信息\\n关于”。如图。请注意,按照MFC的习惯,菜单的ID号要使用大写字符。 (2)添加“绘图”子菜单消息映射函数 子菜单“退出”和“关于”的命令消息处理函数在Test框架建立时AppWizard已经提供,这里予以保留。下面讲解为子菜单“金刚石”添加命令消息处理函数的方法。选择菜单View|Class Wizard,打开MFC ClassWizard对话框,并自动切换到Message Maps标签页。在Object IDs中选择IDM_DIAMOND,在Class name中选择CTestView类,在Message中选择COMMAND后,单击Add Function按钮,弹出Add Member Function对话框,保持默认菜单成员函数的名字OnDiamond,单击OK按钮,则在Member function中为子菜单“金刚石”添加了操作函数OnDiamond (),如图1-11所示。该函数成为了CTestView类的成员函数,系统已经自动在TestView.h头文件中添加了函数声明,在TestView.cpp源文件中给出了函数框架。单击Edit Code按钮可以对OnMdraw()函数进行编辑。 3
调 试 过 程 及 实 验 结 果 4
总 结 本案例定义新类P2D,同时使用了MFC框架生成的CTestView类。每个类都是由*.h文件和*.cpp文件组成。例如CTestView类是由TestView.h头文件和TestView.cpp文件构成。在TestView.h文件里声明了“保护”数据成员MaxX,MaxY,p[50],n,r和“公有”成员函数GetMaxX(),GetMaxY()、Diamond();在TestView.cpp文件里给出了GetMaxX(),GetMaxY()以及Diamond(double n,double r)函数的具体定义。因为设备坐标系的像素值为整数,所以在TestView.cpp文件里定义了带参数的宏#define ROUND(a) int(a+0.5),用于绘图时对像素点的计算结果进行四舍五入。请读者认真体会类之间的通讯方式,例如P2D类、InputDlg类和CTestView类。本案例采用在TestView.h中包含P2D.h和InputDlg.h头文件的方法实现。本案例完成的程序框架将成为本书的基本程序模板,后续的案例都是在本框架的基础上修改实现的 金刚石函数的代码如下: void CTestView::Diamond()//金刚石函数{ CDC *pDC=GetDC();//获得设备上下文 上 pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);//屏幕中心为坐标系原点 CPen NewPen,*pOldPen;//定义画笔 NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255));//创建蓝色画笔 pOldPen=pDC->SelectObject(&NewPen);//将蓝色画笔选入设备上下文 double thta;//thta为圆的等分角 thta=2*PI/n; for(int i=0;i 因篇幅问题不能全部显示,请点此查看更多更全内容