77范文网 - 专业文章范例文档资料分享平台

计算机图形学 图形变换

来源:网络收集 时间:2019-04-22 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

实验五:图形变换

一、实验目的:

1、掌握图形变换的基本方法。

2、初步掌握映射菜单消息和捕获键盘消息的方法。

二、实验内容及要求:

1、 2、 3、

以三角形为例,使用Visual C++实现二维图形的平移、旋转和缩放功能。 每人单独完成实验。

按要求撰写实验报告,写出实验心得,并在实验报告中附上程序的核心算法代码。

三、实验设备:

微机,Visual C++6.0

四、实验内容和步骤:

1、 打开VC,新建一个MFC Appwizard项目,选择创建单文档工程(SDI工程)。假设工程名为

Transform。如图1和图2所示。

图1

图2

2、 在图2的界面上点击Finish,完成工程的创建。 3、 在TransformView.h文件中,加入如下代码: public: CPoint Pt[3]; //存储三角形的三个顶点 float dAngle; //存储三角形旋转的角度

4、 在类CTransformView的构造函数中定义三角形的三个顶点的初始坐标和dAngle的初值,代码如

下;

CTransformView::CTransformView() {

// TODO: add construction code here Pt[0].x = 200; Pt[0].y = 220; Pt[1].x = 260; Pt[1].y = 300; Pt[2].x = 360; Pt[2].y = 180; dAngle = 0.0; }

5、 在类CTransformView中添加成员函数void DrawTriangle(CDC *pDC),并实现该函数。(该部分代

码请同学们自己实现,为了简便编程,可以使用MoveTo和LineTo函数,也可以调用自己在实验2中编写的DDA或者Bresenham画线函数);

6、 在类CTransformView的OnDraw()函数中添加绘制三角形的代码;

void CTransformView::OnDraw(CDC* pDC) {

CTransformDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);

// TODO: add draw code for native data here DrawTriangle(pDC); }

7、 映射菜单消息,方法是打开ResourceView菜单,依次展开MENU \\ IDR_MAINFRAME,添加“图

形变换”主菜单项,在其下添加“平移”,如图3所示。

图3

8、 在TransformView.cpp文件中(类CTransformView中)映射平移的菜单消息,触发平移函数。代

码如下:

void CTransformView::OnMenuTransformTranslate() {

// TODO: Add your command handler code here int nX = 50;

int nY = 80; //平移的X坐标和Y坐标 for(int i=0; i<3; i++) { Pt[i].x += nX; Pt[i].y += nY; }

RedrawWindow(); //该行代码必不可少,用于触发OnDraw()函数 }

9、 与平移类似,请同学们自己依次添加“缩放”和“旋转”菜单,并实现相应的“缩放”菜单和“旋

转”菜单的消息映射函数。 10、 添加捕获键盘的消息,实现用键盘控制三角形的平移、缩放和旋转。在TransformView.cpp

文件中单击鼠标右键,选择ClassWizard,如图4所示,为键盘消息WM_KEYDOWN添加消息映射函数,代码如下:

void CTransformView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {

// TODO: Add your message handler code here and/or call default int i=0;

CPoint TmpPt = Pt[0]; switch (nChar){ case VK_UP: //用上箭头控制三角形向上移动 for(i=0; i<3; i++) { Pt[i].y -= 5; } break; case VK_DOWN: //用下箭头控制三角形向下移动 for(i=0; i<3; i++) { Pt[i].y += 5;

}

} break; 。。。。。。 // }

RedrawWindow();

CView::OnKeyDown(nChar, nRepCnt, nFlags);

图4

11、 请同学们在WM_KEYDOWN的消息映射函数中,再自己实现用左、右箭头控制三角形移动

的代码。左右箭头的虚键分别为VK_LEFT, VK_RIGHT。 12、 请同学们在WM_KEYDOWN的消息映射函数中,再自己实现用Z和X键控制三角形放大1

倍和缩小1倍的代码。在消息映射函数中,按下Z键,说明nChar=Z的ASCII码;其他字母相同。 13、 请同学们在WM_KEYDOWN的消息映射函数中,再自己实现用R键控制三角形旋转的代

码。多按几下R键,看看会发生什么情况?为什么会这样?如何解决?

五、核心代码:

这里将自己编写的上机程序中的主要代码拷贝粘贴过来; Ondraw:

void CShiyqan5View::OnDraw(CDC* pDC) { CShiyqan5Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc);

DrawTriangle(pDC); }

用DDA画出三角形

void CShiyqan5View::DrawTriangle(CDC *pDC) {

DDALine(Pt[0].x,Pt[0].y,Pt[1].x,Pt[1].y,RGB(0,147,145)); DDALine(Pt[1].x,Pt[1].y,Pt[2].x,Pt[2].y,RGB(0,147,145)); DDALine(Pt[2].x,Pt[2].y,Pt[0].x,Pt[0].y,RGB(0,147,145)); }

void CShiyqan5View::DDALine(int x0, int y0, int x1, int y1, COLORREF color) {

CDC *pDC = this->GetDC(); int i;

float dx, dy, length,x,y;

if (fabs(x1-x0)>=fabs(y1-y0)) length=fabs(x1-x0); else

length=fabs(y1-y0); dx= (x1-x0)/length; dy=(y1-y0)/length; i=1;x= x0;y= y0; while(i<=length) {

pDC->SetPixel(int (x + 0.5), int (y + 0.5), color); x=x+dx; y=y+dy; i++; }

实现图形平移

void CShiyqan5View::OnMenuTransformTranslate() { // TODO: Add your command handler code here int nX = 50; int nY = 80; //平移的X坐标和Y坐标 for(int i=0; i<3; i++) { Pt[i].x += nX; Pt[i].y += nY; } RedrawWindow();

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库计算机图形学 图形变换在线全文阅读。

计算机图形学 图形变换.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/614270.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: