计算机图形学课程设计实习报告 下载本文

内容发布更新时间 : 2024/5/13 11:03:02星期一 下面是文章的全部内容请认真阅读。

实验零? 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:\\MyProject 2.启动 Visual Studio 2005

3.单击“文件”->“新建”->“项目”,项目类型对话框中选择“其他语言”->“VC++” ->“MFC”,模版选择“MFC应用程序”。在工作目录D:\\MyProject 下创建一个新应用项目: Sample,如下图所示。 4.单击“确定”按钮。 5.单击“下一步”按钮。 6.在“应用程序类型中”,选择“单文档”类型。 7.单击“完成”,创建了一项空的工程-绘图应用程序主框架。 实验内容2:应用程序编译运行

运行版本有两类:Debug、Release, 生成Debug解决方案步骤如下: 1.生成解决方案

点击“生成-〉生成解决方案”, 生成了Debug版的可运行程序。 2.调试运行程序

点击菜单“调试——〉开始执行(不调试)”, 执行Debug版的可运行程序。 结果如下:

生成Release解决方案步骤如下: 1.生成解决方案

点击“生成-〉批生成”。 2.勾选“Release”,单击“生成”,生成可以独立于Visual C++ 2005外运行的.exe程序。 3.查看目录,sample.exe是Release版,单击即可以运行。 运行结果:

实验内容3:设置菜单项并生成消息响应函数

1.弹出菜单设计器

单击“解决方案管理器”窗口中的资源文件Sample.rc,弹出资源视图, 2.插入一项菜单

双击“资源视图”中的“Menu”展开文件夹,双击“IDR_MAINFRAME”,弹出菜单设计器。右健单击菜单设计器的“帮助”,选择“新插入”,插入一项菜单。 在新插入的菜单项的“Caption” 中输入“绘图”。 3.输入ID

输入“打开”菜单项,输入“直线”菜单项,在“直线”菜单项下输入“DDA”菜单,“DDA”菜单的ID为ID_LINE_DDA。

ID ID_LINE_DDA Caption DDA 功能 用DDA发绘制直线 4.调出类视图窗口 单击菜单“视图-〉类视图”,

在“解决方案管理器”窗口中出现“类视图”窗口。 4.生成菜单消息响应函数

在类视图窗口,单击Csample0View类,单击事件按钮,

5.选择ID_LINE_DDA的COMMAND,添加OnLineDDA事件。 6.进入代码编辑器

在void Csample0View::OnLineDda()中的 // TODO: 在此添加命令处理程序代码处输入的自己代码: AfxMessageBox(\7.修改项目字符集属性

选择“项目”菜单->属性->,弹出“属性”对话框,选择“配置属性 ->常规->字符集”,改为“未设置”。 8.运行结果

重新生成解决方案,运行结果如下。 实验内容4:SetPixel绘图

在void Csample0View::OnLineDda()中的 // TODO: 在此添加命令处理程序代码处输入的代码:

// TODO: Add your command handler code here

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; y=100;

for(x=100;x<=300;x+=3){ y++;

pdc->SetPixelV(x,y,RGB(255,0,0));

}

pdc->DeleteDC(); }

运行结果如下。

四、 实验结果:

实验内容1:创建绘图应用程序主框架结果 实验内容2:应用程序编译运行结果

实验内容3:设置菜单项并生成消息响应函数 实验内容4:SetPixel绘图

五、 回答如下问题:

解释以下每条命令的含义

CClientDC *pdc=new CClientDC(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),风格为红色的一点

六、 其它的实验内容:

答:工具条按钮的添加

七、 实验中发现的问题及你解决的方法:

答:发现的问题:调试过程中出现如下错误

解决的方法:重新生成解决方案,如还出现则多生成几次。

实验一 直线的生成算法

地点: 土木楼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::DDALine(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)dx/(float)steps;

第三大节