欢迎来到天天文库
浏览记录
ID:13460112
大小:416.00 KB
页数:11页
时间:2018-07-22
《计算机图形 二维变换》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、几何图形变换和函数曲线的画法一、实验目的和要求1、巩固所学理论知识,加深对二维变换的理解,加深理解利用变换矩阵可由简单图形得到复杂图形,加深对变换矩阵算法的理解。2、熟悉vc++6.0下实践图形算法(要求编制绘制“M”以及正叶线和蝴蝶结的程序。编程实现变换矩阵算法,绘制给出变换后的视图,调试程序及分析运行结果。)二、实验步骤1、实验内容(含实验原理介绍):(1)二维几何变换:原理:图形变换的主要功能是把用户坐标系和图形输出设备的坐标系联系起来;图形基本变换是指图形的比例变换、对称变换、错切变换、平移变换等。通过对原图上二维向量引进第三个坐标,即三维点向
2、量(又称其次坐标点),简称其次坐标,这样在三维坐标下,二维几何变换都可统一用一个矩阵表示。所谓其次坐标就是将一个原本是n维的向量用一个n+1维向量来表示。引进其次坐标的的优点:①、提供了矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法;②、可以表示无穷远点。步骤:①创建工程名为“二维图形变换”的单文档应用程序的框架。并编辑菜单资源(如下图)相对于原点的变比平移旋转复合变换变比基本图形变换基本图形变换基本图形变换基本图形变换绕非原点旋转关于X轴对称基本图形变换关于Y轴对称对称基本图形变换基本图形变换基本图形变换基本图形
3、变换基本图形变换基本图形变换基本图形变换关于原点轴对称基本图形变换基本图形变换②添加消息处理函数。利用ClassWizard(建立类向导)为应用程序添加与菜单项的消息处理函数,ClassName栏中选择CMyView,建立消息映射函数,完成函数声明。③手工添加几何变换绘图基类。为程序模块化,对绘制几何图形变换编制了基类MyClass类。在工程中选择“文件”“新建”命令,在弹出的新建对话框中,选择C/C++HeaderFile,在“文件”名称输入栏中输入MyClass;同样,在工程中选择“文件”“新建”命令,在弹出的新建对话框中,选择C/C++Sourc
4、eFile,在“文件”名称输入栏中输入MyClass。在工作区中系统自动创建的相应的空文件中,分别添加此基类的头文件(.h文件)和应用文件(.cpp文件)。(2)正叶线和蝴蝶结:正叶线是一种类似植物叶子形状的曲线,数学表达式:r=a*sin(n*θ)x=r*cosθy=r*sinθ其中(a>0,n=2,3,4,5……)蝴蝶结,顾名思义即类似于蝴蝶结的图案。是经过设置二维坐标x,y函数以及利用旋转变换绘制的图案。画线点的x坐标、y坐标以下列函数规律变化d=80;for(a=0;a<=2*pi;a+=pi/360){e=d*(1+0.25*sin(4*a)
5、);e=e*(1+sin(8*a));x2=int(320+e*cos(a+pi/8));x1=int(320+e*cos(a));y1=int(200+e*sin(a));y2=int(200+e*sin(a+pi/8));}正叶线步骤:①、创建工程名为“函数曲线”的单文档应用程序的框架。并定义编辑菜单资源(如下图)函数曲线蝴蝶结②添加消息处理函数。利用ClassWizard(建立类向导)为应用程序添加与菜单项的消息处理函数,ClassName栏中选择CMyView,建立消息映射函数,完成函数声明。③在**View.h、**View.cpp添加完成各
6、个菜单消息处理函数,实现既定功能。基本图形变换2、核心程序(源代码)(1)平移voidCMyView::OnTranslation(){inti,j;CMyClassmy1;for(i=1;i<=3;++i){for(j=1;j<=3;++j)my1.A[i][j]=0;}my1.A[1][1]=1;my1.A[2][2]=1;my1.A[3][1]=15;my1.A[3][2]=45;my1.A[3][3]=1;RedrawWindow();my1.Display();}(2)旋转voidCMyView::OnRotation(){inti,j;CM
7、yClassmy1;for(i=1;i<=3;++i){for(j=1;j<=3;++j)my1.A[i][j]=0;}my1.A[1][1]=cos(PI/6);my1.A[1][2]=sin(PI/6);my1.A[2][1]=-cos(PI/6);my1.A[2][2]=sin(PI/6);my1.A[3][3]=1;RedrawWindow();my1.Display();}(3)对比voidCMyView::OnScaling(){inti,j;CMyClassmy1;for(i=1;i<=3;++i){for(j=1;j<=3;++j)my
8、1.A[i][j]=0;}my1.A[1][1]=5;my1.A[2][2]=2;my1.A[
此文档下载收益归作者所有