计算机图形学上机实验实现二维图形的各种转换_第1页
计算机图形学上机实验实现二维图形的各种转换_第2页
计算机图形学上机实验实现二维图形的各种转换_第3页
计算机图形学上机实验实现二维图形的各种转换_第4页
计算机图形学上机实验实现二维图形的各种转换_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、昆 明 理 工 大 学 理 学 院信息与计算科学专业 操作性实验报告年级: 10级 姓名: 刘陈 学号: 201011101128 指导教师: 胡杰 实验课程名称: 计算机图形学程序设计 开课实验室: 理学院机房216 实验成绩:学风(5)观察能力(15)操作能力(30)调试能力(50)其它总分实验内容:1实验/作业题目:用计算机高级语言VC+6.0实现计算机的基本图元绘制2实验/作业课时:2学时 3实验过程(包括实验环境、实验内容的描述、完成实验要求的知识或技能): 实验环境:(1)硬件:每人一 台PC机 (2)软件:windows OS,VC+6.0或以上版本。 试验内容及步骤: (1)在

2、VC+环境下创建MFC应用程序工程(单文档) (2)编辑菜单资源 (3)添加菜单命令消息处理函数 (4)添加成员函数 (5)编写函数内容试验要求: (1)熟悉掌握平移、比例、旋转、对称、错切变换的矩阵及矩阵的乘法运算。 (2)实现对二维图形平移、比例、旋转、对称、错切变换。 (3)试验中调试、完善所编程序,能正确运行出设计要求结果。 (4)书写试验报告上交。4程序结构(程序中的函数调用关系图)添加二维图形各个变换的矩阵源码添加消息处理函数实现对二维图形的变换实现绘画5算法描述、流程图或操作步骤:在lab3View.h文件中的public内添加变量 : void ClearMatrix(doub

3、le A33); /清除变换矩阵void GetMaxY(); /获得屏幕的最大y值void GetMaxX(); /获得屏幕的最大x值void Draw(double D3,int); /绘制图形void Calculate(double P03,double T3); /矩阵相乘void KeepMatrix(double Orig3,double Dest43); /保留矩阵值void Tmove(double Tx,double Ty); /平移变换计算void Tscale(double Sx,double Sy); /比例变换计算void Trotate(double thta);

4、 /旋转变换计算void Treflect(double Fx,double Fy); /对称变换计算void Treform(double b,double c); /错切变换计算在lab3View.h文件中的protected内添加变量:int MaxX,MaxY; /屏幕x和y的最大坐标double P43; /变换点double TM33; /平移变换矩阵double TS33; /比例变换矩阵double TR33; /旋转变换矩阵double TF33; /对称变换矩阵double TC33; /错切变换矩阵double OSquare43; /矩形坐标double OTriang

5、le43; /正三角形坐标double OLine43; /直线坐标int p3;在lab3View.cpp文件中添加如下头文件:#define ROUND(a) int(a+0.5) /四舍五入#define PI 3.1415926 /圆周率#include "math.h" /数学头文件在lab3View.cpp文件中的函数CLab3View:OnDraw(CDC* pDC)下添加如下代码:GetMaxX();GetMaxY();pDC->MoveTo(MaxX/2,0); /绘制坐标轴pDC->LineTo(MaxX/2,MaxY);pDC->Mo

6、veTo(0,MaxY/2);pDC->LineTo(MaxX,MaxY/2);在lab3View.cpp文件中添加如下的各个消息处理函数及代码:void CLab3View:GetMaxX() /获得屏幕宽度 CRect Rect;GetClientRect(&Rect);MaxX=Rect.right; void CLab3View:GetMaxY() /获得屏幕高度 CRect Rect;GetClientRect(&Rect);MaxY=Rect.bottom;void CLab3View:ClearMatrix(double A33) /清除变换矩阵 for(i

7、nt i=0;i<3;i+) for(int j=0;j<3;j+)Aij=0; void CLab3View:OnTriangle() /菜单函数 P00=-100/2;P01=0;P02=1; /绘制等边三角形P10=100/2;P11=0;P12=1;P20=0;P21=100/2*tan(60*PI/180);P22=1;P30=0;P31=0;P32=1;p3=3;KeepMatrix(P,OTriangle);Draw(P,p3); InvalidateRect(NULL,FALSE); /重画窗口void CLab3View:OnSquare() /菜单函数 P00=

8、-100/2;P01=100/2;P02=1; /绘制矩形P10=100/2;P11=100/2;P12=1;P20=100/2;P21=-100/2;P22=1;P30=-100/2;P31=-100/2;P32=1;p3=4;KeepMatrix(P,OSquare);Draw(P,p3); InvalidateRect(NULL,FALSE); /重画窗口void CLab3View:OnLine() /菜单函数 P00=-150/2;P01=0;P02=1; /绘制直线P10=150/2;P11=0;P12=1;P20=0;P21=0;P22=1;P30=0;P31=0;P32=1;p

9、3=2;KeepMatrix(P,OLine);Draw(P,p3); InvalidateRect(NULL,FALSE); /重画窗口void CLab3View:Draw(double D3,int n) /绘制图形 RedrawWindow();CClientDC dc(this);CPen pen,*pOldpen;pen.CreatePen(PS_SOLID,2,RGB(0,0,0);pOldpen=dc.SelectObject(&pen);for(int i=0;i<n;i+) if(i=0)dc.MoveTo(ROUND(MaxX/2+Di0),ROUND(Ma

10、xY/2-Di1);elsedc.LineTo(ROUND(MaxX/2+Di0),ROUND(MaxY/2-Di1);dc.LineTo(ROUND(MaxX/2+D00),ROUND(MaxY/2-D01);dc.SelectObject(pOldpen);pen.DeleteObject();void CLab3View:Calculate(double P03,double T3) /两个矩阵相乘 double Ptemp43;KeepMatrix(P,Ptemp);for(int i=0;i<4;i+)for(int j=0;j<3;j+)Pij=Ptempi0*T0j+

11、Ptempi1*T1j+Ptempi2*T2j;void CLab3View:OnMENUleft() /向左平移 Tmove(-10,0); void CLab3View:OnMENUright() /向右平移 Tmove(10,0); void CLab3View:OnMENUup() /向上平移 Tmove(0,10); void CLab3View:OnMENUdown() /向下平移 Tmove(0,-10); void CLab3View:OnMENUClockwise( ) /顺时针旋转 Trotate(30); void CLab3View:OnMENUAnticlockwis

12、e() /逆时针旋转 Trotate(-30); void CLab3View:OnMENUIncrease() /放大比例 Tscale(2,2); void CLab3View:OnMENUDecrease() /缩小比例 Tscale(0.5,0.5); void CLab3View:OnMENUXaxis() /X轴对称 Treflect(1,-1); void CLab3View:OnMENUYaxis() /Y轴对称 Treflect(-1,1); void CLab3View:OnMENUorg() /原点对称 Treflect(-1,-1); void CLab3View:On

13、MENUXdirectionplus() /X正向错切 Treform(0,1); void CLab3View:OnMENUXdirectionneg() /X负向错切 Treform(0,-1); void CLab3View:OnMENUITYdirectionplus() /Y正向错切 Treform(1,0); void CLab3View:OnMENUYdirectionneg() /Y负向错切 Treform(-1,0); void CLab3View:OnMENUReset() /复位if(p3=4) KeepMatrix(OSquare,P);if(p3=3) KeepMat

14、rix(OTriangle,P);if(p3=2) KeepMatrix(OLine,P); Draw(P,p3);void CLab3View:Tmove(double Tx,double Ty) /平移变换矩阵 ClearMatrix(TM); RedrawWindow();TM00=1; TM11=1; TM20=Tx; TM21=Ty; TM22=1;Calculate(P,TM);AfxGetMainWnd()->SetWindowText("二维几何变换平移变换");Draw(P,p3);void CLab3View:Tscale(double Sx,do

15、uble Sy) /比例变换矩阵 ClearMatrix(TS);RedrawWindow();TS00=Sx; TS11=Sy; TS22=1;Calculate(P,TS);AfxGetMainWnd()->SetWindowText("二维几何变换比例变换");Draw(P,p3);void CLab3View:Trotate(double thta)/旋转变换矩阵 ClearMatrix(TR);RedrawWindow();TR00=cos(thta*PI/180); TR01=sin(thta*PI/180);TR10=-sin(thta*PI/180);

16、 TR11=cos(thta*PI/180); TR22=1;Calculate(P,TR);AfxGetMainWnd()->SetWindowText("二维几何变换旋转变换");Draw(P,p3);void CLab3View:Treflect(double Fx,double Fy) /反射变换矩阵 ClearMatrix(TF);RedrawWindow();TF00=Fx; TF11=Fy; TF22=1;Calculate(P,TF);AfxGetMainWnd()->SetWindowText("二维几何变换反射变换");D

17、raw(P,p3);void CLab3View:Treform(double b,double c) /错切变换矩阵 ClearMatrix(TC);RedrawWindow();TC00=1; TC01=b; TC10=c; TC11=1; TC22=1;Calculate(P,TC);AfxGetMainWnd()->SetWindowText("二维几何变换错切变换");Draw(P,p3);void CLab3View:KeepMatrix(double Orig3,double Dest3) int i,j;for(i=0;i<4;i+)for(j=0;j<3;j+)Destij=Origij;6实验数据和实验结果(用屏幕图形表示,可另加附页):打开Dubug内lab3.exe点击菜单栏“绘画”,在工

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论