计算机图形学课程设计综合实验报告.docx
- 文档编号:25321509
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:91
- 大小:314.96KB
计算机图形学课程设计综合实验报告.docx
《计算机图形学课程设计综合实验报告.docx》由会员分享,可在线阅读,更多相关《计算机图形学课程设计综合实验报告.docx(91页珍藏版)》请在冰豆网上搜索。
计算机图形学课程设计综合实验报告
西南交通大学信息科学与技术学院
计算机图形学实验
(2014~2015学年第II学期)
实
验
报
告
学号:
20122712姓名:
魏仁斌
专业:
软件工程班级:
4
课程名称计算机图形学
班级软件4班学号___20122712姓名___魏仁斌_
试验日期2015.3.16实验成绩_____
实验名称实验1集成开发环境的认识和简单窗口程序移植与创建
1.实验目的
熟悉windows编程和VC++编程环境
2.实验设备与环境
硬件设备:
设备编号
设备名称
数量
1
计算机
1
软件设计工具:
MicrosoftVisualC++6.0
3.实验设计说明
基本工作原理:
windows提供了一系列的API函数
实验内容:
用VC++创建工程,并且创建一个简单的窗口
实验设计步骤、设计过程或执行顺序
①可单击Windows桌面上的“开始”按钮,弹出开始菜单,点击→所有程序→Microsoft
VisualStudio6.0→MicrosoftVisualC++6.0,单击后进入开发环境。
②用鼠标单击File菜单中的New菜单项,在系统弹出的对话框中,有四大工作类型供操作选择:
Files、Projects、Workspaces、OtherDocuments,每种类型又包含许多具体的文件类型。
③选择Projects标签,在Projectname下的编辑框中输入应用工程的名称为实验1。
在Location标签下的编辑框中,输入保存文件的位置,也可以用鼠标点击旁边的“…”按钮来选择保存文件的目录。
④选择Projects标签下的Win32Application,点击OK按钮后,自动创建新的工作空间。
⑤本例选择创建空白应用工程(Anemptyproject),单击Finsh按钮。
⑥点击“OK”按钮,建立空白的Win32应用工程。
⑦用鼠标单击File菜单中New菜单项,在系统弹出的对话框中,在Files标签下,选择C++SourceFile,在右方的File编辑框中输入源程序文件的名称后单击“OK”。
⑧本例中的源程序文件名取为test1,扩展名为cpp,可在编辑窗口中输入具体的源程序内容。
实验代码:
#include
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);
charszTitle[]="ThisisaSimpleProgramformyWindowsXP";//title
intAPIENTRYWinMain(HINSTANCEhInstance,//applicationprograminstancehandle
HINSTANCEhPreInst,//theprograminstanceprevioushandle
LPSTRlpszCmdLine,//Commandlineparameterstring
intnCmdShow)//theprogrambeginninghowtoshowwindow
{
HWNDhWnd;
MSGmsg;
WNDCLASSwcGRF;
if(!
hPreInst)
{
//若hPeInst为零,则说明正运行的这个实例是程序的第一个实例,
//仅当运行第一个实例时,需要注册窗口类(对16位程序而言)
//注册窗口类如下:
wcGRF.lpszClassName=szTitle;//窗口类的类名
wcGRF.hInstance=hInstance;//定义该类的应用程序的句柄
wcGRF.lpfnWndProc=WndProc;//窗口函数
wcGRF.hCursor=LoadCursor(NULL,IDC_CROSS);//游标对象的句柄
wcGRF.hIcon=LoadIcon(NULL,IDI_APPLICATION);//图标对象的句柄
wcGRF.lpszMenuName=NULL;//标识菜单对象的字符串
wcGRF.hbrBackground=(HBRUSH):
:
GetStockObject(WHITE_BRUSH);
//usedtoclearhandle
wcGRF.style=CS_HREDRAW|CS_VREDRAW;//windowsstyle;
wcGRF.cbClsExtra=0;//类变量占据的存储空间
wcGRF.cbWndExtra=0;//实例变量占用的存储空间
if(!
RegisterClass(&wcGRF))//如注册失败则返回
returnFALSE;
}
//对每个实例创建一个窗口对象
hWnd=CreateWindow(szTitle,//类名,指定该窗口所属的类
szTitle,//窗口名,即在标题栏显示的文本
WS_OVERLAPPEDWINDOW,
//窗口风格,以下四个参数确定窗口初始位置及大小
30,//窗口左上角相对屏幕的X坐标
30,//窗口左上角相对屏幕的Y坐标
540,//窗口宽度
360,//窗口高度
NULL,//父窗口句柄
NULL,//菜单句柄
hInstance,//实例句柄
NULL);//额外参数
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
//消息循环
while(GetMessage(&msg,NULL,0,0))//从应用程序队列中取出一条消息
{
TranslateMessage(&msg);//翻译消息
DispatchMessage(&msg);//发送消息
}
return(msg.wParam);
}
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessg,WPARAMwParam,LPARAM
lParam)
{
HDChdc;
PAINTSTRUCTps;
RECTrect;
switch(messg)
{
caseWM_PAINT:
hdc=BeginPaint(hWnd,&ps);
GetClientRect(hWnd,&rect);
DrawText(hdc,"Hello,ThisProgramcomesfromBorlandc++5.02!
",
-1,&rect,DT_CENTER|DT_VCENTER);
EndPaint(hWnd,&ps);
return0;
caseWM_DESTROY:
PostQuitMessage(0);
return(0);
}
returnDefWindowProc(hWnd,messg,wParam,lParam);
}
实验结果记录:
4.实验结果的分析和描述
实验结果的主要组成部分:
出现一个窗口显示一行文字。
实验结果的分类:
无
实验中存在的问题:
无
实验可以改进的方面和建议:
无
课程名称计算机图形学
班级软件4班学号___20122712_姓名____魏仁斌_
试验日期2015.3.23实验成绩_____
实验名称实验1键盘与鼠标的按键消息处理
1.实验目的
熟悉集成开发环境和编辑操作,了解外围设备的工作原理,根据设备特征和产生的消息信号处理消息,管理设备。
2.实验设备与环境
硬件设备:
设备编号
设备名称
数量
1
计算机
1
软件设计工具:
MicrosoftVisualC++6.0
3.实验设计说明
基本工作原理:
运行以上程序,可以随时获得某个字符的码值。
MessageBox函数可以弹出一个显示信息的对话框,如果按下BackSpace键,将弹出"thecharcodeisHEX:
8DEC:
8"显示消息窗口。
表示该按键的16进制和十进制ASCII码值。
当用户在应用程序窗口上按下鼠标左键时,该程序将弹出一条消息,对收到的消息WM_LBUTTONDOWN进行响应,体现了按下鼠标左键动作与WM_LBUTTONDOWN消息的这种对应关系,另外程序还将在窗口内鼠标所按下的位置处写上一串提示文字。
当要在窗口上写字、绘图时,应用程序并不直接在这些设备上操作,而是在一个称为设备描述表(DeviceContexts,简称DC)的资源上操作的。
使用DC,应用程序不用为图形的显示与打印输出分别单独处理了。
无论是打印还是显,都是在DC上操作,然后由DC映射到这些设备上。
使用DC,不用担心程序在不同的硬件上执行的差异性,DC能够装载合
适的设备驱动程序,体现了应用程序的图形操作与底层设备的无关性。
GetDC函数能够返回同窗口相关连的DC的句柄。
TextOut函数在当前DC上指定的位置输出一个字符串,当按下鼠标左键时,消息WM_LBUTTONDOWN的补充参数lParam中含有鼠标位置的x,y坐标,其中的低16位含有x坐标,高16位含有y坐标,可以分别通过LOWORD,HIWORD宏获得。
实验内容:
在窗口内单击,显示一个字符串。
实验设计步骤、设计过程或执行顺序
①在键盘上进行按键操作,如果是可显示字符,在屏幕上输出对应的ASCII码;
②点击鼠标左键,在屏幕上的客户区窗口中鼠标点击的位置,输出一提示字符串。
实验代码:
#include
#include
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);
charszTitle[]="ThisisaSimpleProgramformyWindowsXP";//title
intAPIENTRYWinMain(HINSTANCEhInstance,//applicationprograminstancehandle
HINSTANCEhPreInst,//theprograminstanceprevioushandle
LPSTRlpszCmdLine,//Commandlineparameterstring
intnCmdShow)//theprogrambeginninghowtoshowwindow
{
HWNDhWnd;
MSGmsg;
WNDCLASSwcGRF;
if(!
hPreInst)
{
//若hPeInst为零,则说明正运行的这个实例是程序的第一个实例,
//仅当运行第一个实例时,需要注册窗口类(对16位程序而言)
//注册窗口类如下:
wcGRF.lpszClassName=szTitle;//窗口类的类名
wcGRF.hInstance=hInstance;//定义该类的应用程序的句柄
wcGRF.lpfnWndProc=WndProc;//窗口函数
wcGRF.hCursor=LoadCursor(NULL,IDC_CROSS);//光标对象的句柄
wcGRF.hIcon=LoadIcon(NULL,IDI_APPLICATION);//光标对象的句柄
wcGRF.lpszMenuName=NULL;//标识菜单对象的字符串
wcGRF.hbrBackground=(HBRUSH):
:
GetStockObject(WHITE_BRUSH);
//usedtoclearhandle
wcGRF.style=CS_HREDRAW|CS_VREDRAW;//windowsstyle;
wcGRF.cbClsExtra=0;//类变量占据的存储空间
wcGRF.cbWndExtra=0;//实例变量占用的存储空间
if(!
RegisterClass(&wcGRF))//如注册失败则返回
returnFALSE;
}
//对每个实例创建一个窗口对象
hWnd=CreateWindow(szTitle,//类名,指定该窗口所属的类
szTitle,//窗口名,即在标题栏显示的文本
WS_OVERLAPPEDWINDOW,
//窗口风格,以下四个参数确定窗口初始位置及大小
30,//窗口左上角相对屏幕的X坐标
30,//窗口左上角相对屏幕的Y坐标
540,//窗口宽度
360,//窗口高度
NULL,//父窗口句柄
NULL,//菜单句柄
hInstance,//实例句柄
NULL);//额外参数
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
//消息循环
while(GetMessage(&msg,NULL,0,0))//从应用程序队列中取出一条消息
{
TranslateMessage(&msg);//翻译消息
DispatchMessage(&msg);//发送消息
}
return(msg.wParam);
}
LRESULTCALLBACKWndProc(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAM
lParam)
{
HDChDC;
switch(Msg)
{
caseWM_CHAR:
charstr[40];
sprintf(str,"thecharcodeisHEX:
%xDEC:
%d",wParam,wParam);
MessageBox(hWnd,str,"KeyBoardkeypressTest",MB_OKCANCEL);
break;
caseWM_LBUTTONDOWN:
MessageBox(hWnd,"mouseclick","MousePress",MB_OK);
hDC=GetDC(hWnd);
TextOut(hDC,LOWORD(lParam),HIWORD(lParam),
"clickmouseleft",strlen("clickmouseleft"));
ReleaseDC(hWnd,hDC);
break;
caseWM_CLOSE:
if(IDOK==MessageBox(NULL,"真的要要退出吗?
",
"WindowClose",MB_OKCANCEL|MB_ICONQUESTION))
{
DestroyWindow(hWnd);
}
break;
caseWM_PAINT:
PAINTSTRUCTps;
hDC=BeginPaint(hWnd,&ps);//在WM_PAINT里必须用这个函数
TextOut(hDC,0,0,"MouseLeftButtonandKeyTest",
strlen("MouseLeftButtonandKeyTest"));
EndPaint(hWnd,&ps);
break;
caseWM_DESTROY:
PostQuitMessage(0);
break;
default:
return(DefWindowProc(hWnd,Msg,wParam,lParam));
}
return(0);
}
实验结果记录:
4.实验结果的分析和描述
实验结果的主要组成部分:
响应鼠标左键键盘按键退出窗口
实验结果的分类:
1.当点击鼠标左键的时候,显示“mouseclick”。
2.当在键盘上按下一个按键时,显示“thecharisHEX:
**DEC:
***”。
3.当关闭窗口时,提示“真的要退出吗?
”。
实验中存在的问题:
不能显示组合键
实验可以改进的方面和建议:
读取组合键的高低位。
课程名称计算机图形学
班级软件4班学号___20122712_姓名____魏仁斌_
试验日期2015.3.30实验成绩_____
实验名称实验2设计一个指针式椭圆形实时显示时钟
1.实验目的
掌握定时器的响应处理方式,掌握简单绘图函数的使用和应用程序设计。
2.实验设备与环境
硬件设备:
设备编号
设备名称
数量
1
计算机
1
软件设计工具:
MicrosoftVisualC++6.0
3.实验设计说明
基本工作原理:
设当前需要显示的时间为Hour时Minute分Second秒,则经过简单计
算就可得到各个指针实时显示夹角。
计算依据为:
时钟指针实时显示的夹角:
AHour=(Hour+Minute/60+Second/3600)*2π/12;分钟指针实时显示的夹角:
AMinute=(Minute+Second/60)*2π/60;秒钟指针实时显示的夹角:
ASecond=Second*2π/60;
时钟的钟面用椭圆形显示,椭圆的中心位置可以确定在客户窗口的显示中心;绘制时、分、针时,用不同颜色的直线段显示,长度分别为椭圆半长轴的1/3、2/3、4/5;时钟表面的时间刻度,可用角度划分的方式均匀划分成12份,并用1~12的数字表示。
时间的获取方法:
利用计时器的响应函数处理,每秒钟更新一次时钟画面,重画时钟的各个指针,各指针的位置可以通过显示夹角的计算得到,达到实时显示时钟的目标。
实验内容:
利用消息映射与类中对应的成员函数,设计一个指针式椭圆形实时显示时钟。
实验设计步骤、设计过程或执行顺序
1.添加成员函数
2.修改函数OnTimer的代码
3.生成新的类
4.建立响应函数
实验代码:
voidCMyView:
:
OnDraw(CDC*pDC)
{
CMyDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
//获取客户区
RECTRect;
GetClientRect(&Rect);
//计算椭圆中心位置
intCenterX=Rect.right/2;
intCenterY=Rect.bottom/2;
//取当前时间
CTimeTime=CTime:
:
GetCurrentTime();
CStringstr;
inti,x,y;
CSizesize;
//创建一支黑色的笔,用来画椭圆
CPenPen(PS_SOLID,5,RGB(0,0,0));
//先记下以前的画笔,再设置当前画笔
CPen*OldPen=pDC->SelectObject(&Pen);
//绘制钟面椭圆
pDC->Ellipse(5,5,Rect.right-5,Rect.bottom-5);
doubleRadians;
//设置字体颜色为黑色
pDC->SetTextColor(RGB(255,0,0));
for(i=1;i<=12;i++){
//格式化钟点值
str.Format("%d",i);
size=pDC->GetTextExtent(str,str.GetLength());
Radians=(double)i*6.28/12.0;
//计算钟点放置的位置
x=CenterX-(size.cx/2)+(int)((double)(CenterX-20)*
sin(Radians));
y=CenterY-(size.cy/2)-(int)((double)(CenterY-20)*
cos(Radians));
//绘制钟点
pDC->TextOut(x,y,str);
}
//计算时钟指针的夹角
Radians=(double)Time.GetHour()+(double)Time.GetMinute()/60.0+
(double)Time.GetSecond()/3600.0;
Radians*=6.28/12.0;
//创建时钟指针画笔
CPenHourPen(PS_SOLID,5,RGB(0,255,0));
pDC->SelectObject(&HourPen);
//绘制时钟指针
pDC->MoveTo(CenterX,CenterY);
pDC->LineTo(CenterX+(int)((double)(CenterX/3)*sin(Radians)),
CenterY-(int)((double)(CenterY/3)*cos(Radians)));
//计算分钟指针的夹角
Radians=(double)Time.GetMinute()+(double)Time.GetSecond()/60.0;
Radians*=6.28/60.0;
//创建分钟指针画笔
CPenMinutePen(PS_SOLID,3,RGB(0,0,255));
pDC->SelectObject(&MinutePen);
//绘制分钟指针
pDC->MoveTo(CenterX,CenterY);
pDC->LineTo(CenterX+(int)((double)(CenterX*2)/3)*sin(Radians),
CenterY-(int)((double)(CenterY*2/3)*cos(Radians)));
//计算秒钟指针的夹角
Radians=(double)Time.GetSecond();
Radians
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 课程设计 综合 实验 报告