图形学-实验4 二维几何变换
- 格式:ppt
- 大小:811.00 KB
- 文档页数:4
二维几何变换学习镜像平移和旋转等变换在几何学中,二维几何变换是一种将平面上的点或形状进行改变的操作。
镜像、平移和旋转是常见的二维几何变换,它们不仅有着广泛的应用,而且在计算机图形学和图像处理等领域中扮演着重要的角色。
本文将分别介绍镜像、平移和旋转等变换的基本概念、性质与应用。
一、镜像变换镜像变换,又称翻转变换,是将平面上的点或形状沿着一条直线进行对称的变换。
在镜像变换中,我们可以定义一条直线作为镜像轴,对于沿轴线的点,它们在镜像后仍保持在轴上,而对于不在轴上的点,则沿垂直于轴线的方向移动相同的距离。
镜像变换可以分为对称镜像和中心镜像两种类型。
对称镜像是将平面上的点或形状沿着一条直线进行对称的变换。
对于对称镜像,镜像轴上的点保持不变,其他点关于轴线对称。
例如,在一个直角三角形中,如果将三角形沿着斜边的中垂线进行对称,那么三角形的形状将完全相同,但位置改变了。
中心镜像是将平面上的点或形状沿着一个点进行对称的变换。
对于中心镜像,镜像中心点保持不变,其他点关于镜像中心对称。
例如,在一个正方形中,如果将正方形沿着中心进行中心镜像,那么正方形的形状将保持不变。
镜像变换在现实生活和工程应用中有着广泛的应用。
例如,在建筑设计中,通过对称镜像可以快速获得相对称的结构,从而减少设计和施工的难度。
在计算机图形学中,镜像变换被广泛应用于图像处理和计算机游戏中,能够快速生成镜像效果。
二、平移变换平移变换是将平面上的点或形状沿着一个方向进行移动的变换。
在平移变换中,每个点的平移距离和方向相同,所有的点都保持相对位置不变。
平移变换可以用坐标表示为(x, y) → (x+dx, y+dy),其中(dx, dy)表示平移的距离和方向。
平移变换的一个重要性质是保持平行性,即平移后的平行线与原先的平行线依然平行。
这个性质在工程设计和计算机图形学中有着重要的应用。
例如,在工程设计中,通过平移变换可以方便地复制和粘贴结构,缩短设计和施工的时间。
实验报告学院:计算机学号:姓名:实验四 二维图形的基本几何变换一、实验目的1.掌握二维图形基本的几何变换原理及变换矩阵; 2.掌握矩阵运算的程序设计。
二、实验内容实现二维图形的基本变换,包括平移、旋转、比例、对称变换。
三、实验环境硬件平台:PC运行环境: Windows 平台,Visual C++四、算法描述二维图形齐次坐标变换矩阵一般表达式 T = 这 3×3 矩阵中各元素功能一共可分成四块,即a 、b 、c 、d 四项用于图形的比例、对称、错切、旋转等基本变换; k 、m 用于图形的平移变换;p 、q 用于图形的透视变换; s 用于图形的全比例变换。
平移变换 旋转变化放缩变换五、实验过程5.1打开Visualc++6.0程序5.2新建一个C++项目⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡s m kq dc p b a ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡''1),(110010011y x t t T y x t t y x y x y x 记为⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡''1)(11000cos sin 0sin cos 1y x R y x y x θθθθθ记为⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡''1),(11000001y x s s S y x s s y x y x y x记为5.3单击完成,双击源文件里的二维图形几何变换View.cpp,出现下图5.5找到其中的OnDraw函数,并将其改成如下,使其实现了一条直线的平移。
void C二维图形几何变换View::OnDraw(CDC* pDC){C二维图形几何变换Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此处为本机数据添加绘制代码int a[3][3];int i,j;for(i=0;i<3;i++)for(j=0;j<3;j++)a[i][j]=0;for(i=0;i<3;i++)a[i][i]=1;int x0=80,x1=350,y0=120,y1=120;pDC->MoveTo(x1,y1);E:\c++6.0安装\MSDev98\MyProjects\pDC->LineTo(x0,y0);a[2][0]=80;//使直线在行方向上平移了80个单位a[2][1]=50;//使直线在列方向上平移了50个单位x0=x0*a[0][0]+y0*a[1][0]+a[2][0];y0=x0*a[0][1]+y0*a[1][1]+a[2][1];x1=x1*a[0][0]+y1*a[1][0]+a[2][0];y1=x1*a[0][1]+y1*a[1][1]+a[2][1];pDC->MoveTo(x1,y1);pDC->LineTo(x0,y0);}5.6单击运行程序并有如下结果5.7找到其中的OnDraw函数,并将其改成如下,使其实现了一条直线的平移和缩放。
实验三 二维图形变换一、实验任务1. 通过二维几何变换的数学模型,编写缩放、旋转、对称变换; 2. 实现图形变换的交互式操作:缩放、旋转、对称变换等;二、实验内容1. 放大缩小变换放大缩小变换公式为:x’=x..S x , y’=y.S y ; 其中S x , S y 分别为x,y 方向的放缩比例系数。
变换矩阵表达式为: [x’ y’(1)S x =S y = 1.5;等比例放大 (2)S x =S y = 0.5;等比例缩小 2. 对称变换包括以x 轴对称、y 轴对称和原点O 对称三种。
由于屏幕坐标只有第一象限,我们可以将原点平移到(500,240)处。
在第一象限画出一个三角形,然后分别求出三个对称图形。
3. 旋转变换将图形上的点(x ,y )旋转θ角度,得到新的坐标(x’,y’)为:x’=xcos θ-ysin θ, y’=xsin θ+ycos θ;[x’ y’ 4.三、设计思路1. 通过二维几何变换的数学模型,编写缩放、旋转、对称变换;2. 以(500,240)为原点建立图形变换的参考坐标系; 3. 通过键盘按键控制图形的缩放、旋转、对称变换;4. 变换图形设定为以Pt[0](540,220)、Pt[1](670,130)、Pt[2](560,120)为顶点的三角形。
步骤:1.建立Trans工程文件;2.利用Resource View设计菜单,如图所示;3.在CTransView视图类中添加消息映射函数;4.添加自定义的成员变量:CPoint Pt[3]; //三角形定点数组float dAngle; //每一次旋转的角度在视图类CPP文件的构造函数中初始化成员变量Pt[0].x = 540; Pt[0].y = 220;Pt[1].x = 670; Pt[1].y = 130;Pt[2].x = 560; Pt[2].y = 120;dAngle = 0;5.在视图类的OnDraw()函数中加入下列代码,实现视图绘图。
贵州大学实验报告学院:计算机科学与信息学院专业:软件工程班级: 102班姓名学号实验组实验时间指导教师成绩实验项目名称实验四几何变换实验目的掌握二维图形的几何变换的基本原理。
二维图形的基本几何变换:位置改变(平移、旋转)和变形(缩放、错切,反射、投影等)以及复合变换。
了解三维图形的错切变换实验要求根据本实验的特点、要求和具体条件,掌握二维图形的几何变换的基本原理,了解三维图形的错切变换,并成功编写测试代码进行实验。
1.设有一三角形ABC,其中三个顶点为A(5,10),B(1,2),C(8,5),如三角形的顶点A不变,将AB和AC边缩小一倍后,求缩小后的三角形对于直线-2x+4y+3=0的对称变换后的结果图。
2.将一四边形以原点为中心,以15°为间隔旋转。
3.在三维坐标中,对长度为1的标准立方体做错切变换,错切单位为2;实验原理一、实验原理:标准齐次坐标(x,y,1) 二维变换的矩阵表示平移变换旋转变换[][][]),(111111yxyxttTyxttyxyx⋅=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=''记为[][][]cos sin01x y1sin cos01()001x y x y Rθθθθθ⎡⎤⎢⎥''=-=⎢⎥⎢⎥⎣⎦记为[][][]0011001(,)1xy x y s x y xy s x y S s s ∆⎡⎤⎢⎥''==⎢⎥⎢⎥⎣⎦放缩变换平移变换只改变图形的位置,不改变图形的大小。
旋转变换不改变图形的形状放缩变换引起图形形状的变化。
复合变换结果与变换的顺序有关(矩阵乘法不可交换)二、Java3D在java3D 中坐标轴的显示如下所示:Java3D 的编程思想显示如下:()⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=1000cos sin 0sin cos θθθθθR ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=100000),(y xy x s s s s S在实验时,要引入相关的jar包,显示如下所示:实验环境硬件平台:PC机软件:Windows7平台,eclipse集成开发环境,java编程语言。
一、 实验目的和要求利用VC6.0编写二维基本几何变换算法的实现。
实现平移,比例,旋转等变换。
二、 算法原理介绍齐次坐标表示法就是用N+1维向量来表示一个N 维向量。
在齐次坐标系统中,点(X,Y)用(X,Y ,H)来表达,其中H 为非零的一个任意数。
点(X,Y)的标准齐次坐标表达为(X/H,Y/H,1),由于H 是一个任意非零常量,为了简便起见,我们通常取H=1。
齐次坐标系统中的点(X,Y ,1)包含有笛卡尔坐标上的点(X,Y)。
平移变换:比例变换:旋转变换:对称变换:关于x 轴对称:关于y 轴对称:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1000000y x SS ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-100010001关于原点对称:关于y=x 对称:关于y=-x 对称:错切变换:当b=0时: (x` y` 1)=(x+cy y 1)。
图形的y 坐标不变。
当c>0:图形沿+x 方向作错切位移。
ABCD →A1B1C1D1当c<0:图形沿-x 方向作错切位移。
ABCD → A2B2C2D2当c=0时, (x` y` 1)=(x bx+y 1):图形的x 坐标不变。
当b>0:图形沿+y 方向作错切位移。
ABCD → A1B1C1D1当b<0:图形沿-y 方向作错切位移。
ABCD → A2B2C2D2当b 不等于0且c 不等于0时,(x` y` 1)=(x+cy bx+y 1) :图形沿x,y 两个方向作错切位移。
∴错切变换引起图形角度关系的改变,甚至导致图形发生变形。
三、 程序核心源代码void CChangeView::Tmove(double Tx,double Ty) //平移变换矩阵{ ClearMatrix(TM);RedrawWindow();TM[0][0]=1;TM[1][1]=1;TM[2][0]=Tx;TM[2][1]=Ty;TM[2][2]=1;⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-100010001⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--100010001⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡100001010⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--100001010⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1000101c bCalculate(P,TM);AfxGetMainWnd()->SetWindowText("二维几何变换-平移变换");Draw(P,p3);}void CChangeView::Tscale(double Sx,double Sy) //比例变换矩阵{ ClearMatrix(TS);RedrawWindow();TS[0][0]=Sx;TS[1][1]=Sy;TS[2][2]=1;Calculate(P,TS);AfxGetMainWnd()->SetWindowText("二维几何变换-比例变换");Draw(P,p3);}void CChangeView::Trotate(double thta)//旋转变换矩阵{ ClearMatrix(TR);RedrawWindow();TR[0][0]=cos(thta*PI/180);TR[0][1]=sin(thta*PI/180);TR[1][0]=-sin(thta*PI/180);TR[1][1]=cos(thta*PI/180);TR[2][2]=1;Calculate(P,TR);AfxGetMainWnd()->SetWindowText("二维几何变换-旋转变换");Draw(P,p3);}void CChangeView::Treflect(double Fx,double Fy) //反射变换矩阵{ ClearMatrix(TF);RedrawWindow();TF[0][0]=Fx;TF[1][1]=Fy;TF[2][2]=1;Calculate(P,TF);AfxGetMainWnd()->SetWindowText("二维几何变换-反射变换");Draw(P,p3);}void CChangeView::Treform(double b,double c) //错切变换矩阵{ ClearMatrix(TC);RedrawWindow();TC[0][0]=1; TC[0][1]=b; TC[1][0]=c; TC[1][1]=1; TC[2][2]=1;Calculate(P,TC);AfxGetMainWnd()->SetWindowText("二维几何变换-错切变换");Draw(P,p3);}void CChangeView::OnMENUup(){// TODO: Add your command handler code hereTmove(0,10);}void CChangeView::OnMENUdown(){// TODO: Add your command handler code hereTmove(0,-10);}void CChangeView::OnMENUleft(){// TODO: Add your command handler code hereTmove(-10,0);}void CChangeView::OnMENUright(){// TODO: Add your command handler code hereTmove(10,0);}void CChangeView::OnMENUClockwise() //顺时针旋转{// TODO: Add your command handler code hereTrotate(-30);}void CChangeView::OnMENUAnticlockwise() //逆时针旋转{// TODO: Add your command handler code hereTrotate(30);}void CChangeView::OnMENUIncrease(){// TODO: Add your command handler code hereTscale(2,2);}void CChangeView::OnMENUDecrease(){// TODO: Add your command handler code here Tscale(0.5,0.5);}void CChangeView::OnMENUY(){// TODO: Add your command handler code here Treflect(-1,1);}void CChangeView::OnMENUO(){// TODO: Add your command handler code here Treflect(-1,-1);}void CChangeView::OnMENUX(){// TODO: Add your command handler code hereTreflect(1,-1);}void CChangeView::OnMENUXdirectionplus(){// TODO: Add your command handler code here Treform(0,1);}void CChangeView::OnOnMENUXdirectionneg() {// TODO: Add your command handler code here Treform(0,-1);}void CChangeView::OnMENUITYdirectionplus(){// TODO: Add your command handler code here Treform(1,0);}void CChangeView::OnMENUYdirectionneg(){// TODO: Add your command handler code here Treform(-1,0);}void CChangeView::OnMENUReset(){// TODO: Add your command handler code here if(p3==4){ KeepMatrix(OSquare,P); }if(p3==3){ KeepMatrix(OTriangle,P); }if(p3==2){ KeepMatrix(OLine,P); }Draw(P,p3);}void CChangeView::Onre(){// TODO: Add your command handler code here Treflect(-1,-1);}四、实验结果抓图原图:平移变换后:对称变换后:(关于X轴对称)旋转变换后:(顺时针旋转)比例变换后:缩小放大错切变换后:Y正向五、参考文献[1]赵建忠,段康廉.三维建模在虚拟矿山系统中的应用[J].中国科技论文.[2]许惠平,陈越,陈华根,廖晓留,王智博.青藏高原亚东-格尔木地学断面域岩石圈结构演化虚拟现实表达[J].中国科技论文.[3]罗斌,魏世民,黄昔光,张艳.基于OpenGL的3P-6SS并联机构的仿真与轨迹规划研究[J].;国家自然科学基金资助项目.。
实验四二维几何变换一、实验学时:1学时二、实验类型:验证型实验三、实验目的和要求:1、掌握二维图形的基本几何变换,如平移、旋转、缩放、对称变换等;2、掌握OpenGL中模型变换函数,实现简单的动画技术。
四、实验内容:1、下面的代码采用GLUT库,实现了一个矩形在窗口中转动,请修改代码,实现矩形在窗口内的其它变换,如沿水平线平移。
#include <windows.h>#include <GL/glut.h>static GLfloat spin = 0.0; //旋转角度static GLfloat offsetX = 0.0; //平移量static GLfloat offsetY = 0.0;void display(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f (0.0, 0.0, 1.0); //使用蓝色绘制图元glMatrixMode (GL_MODELVIEW); //使用模型视图变换矩阵实现几何变换,矩阵大小为4x4 glLoadIdentity ( ); //使当前变换矩阵为单位矩阵glRotatef(spin, 0.0, 0.0, 1.0); //设置旋转参数.绕z轴旋转glRectf(-10.0, -10.0, 10.0, 10.0); //绘制矩形glutSwapBuffers(); //交换显示缓冲区,因为使用了双缓存}void spinDisplay(void) //计算旋转角度,每次增加10度{spin = spin + 10.0;if (spin > 360.0)spin = spin - 360.0;//发出重绘请求。
该请求发出后,系统调用glutDisplayFunc中//注册的回调函数,在该例中,相当于重新调用display函数glutPostRedisplay();}void init(void){glClearColor (0.0, 0.0, 0.0, 0.0);glShadeModel (GL_FLAT);//OpenGL中存在多种矩阵变换,这里设定当前使用的矩阵为投影矩阵glMatrixMode(GL_PROJECTION);//投影矩阵为2D正交投影,在2D观察变换中相//当于给出了投影参数//该函数常用于在2D变换中指定裁剪窗口的位置(在世界坐标系下)gluOrtho2D(-50.0, 50.0, -50.0, 50.0);}//鼠标响应函数,控制当鼠标接收到不同的用户操作时将要执行的后续命令。
计算机图形学实验报告计算机图形学实验报告姓名徐沛华班级1011 学号20101851 成绩实验名称二维图形的几何变换1.对平面图形进行平移、缩放、旋转、对称实验目的实验步骤算法分析:图形变换是指对图形的几何信息经过几何变换后产生新的图形。
图形变换既可以看作坐标系不动而图形变动,变动后的图形在坐标系中的坐标值发生变化;也可以看作图形不动而坐标系变动,变动后,该图形在新的坐标系下具有新的坐标值。
设(x,y)为图形原坐标值,经几何变换后坐标值变为(**,x y)。
以下为四种常用的几何变换公式。
(a) 平移变换:平移变换在前面的任务中已经用到过,它的变换公式为:[]**100,,1,,1010,,11x yx yx y x y x T y TT T⎡⎤⎢⎥⎡⎤⎡⎤==++⎢⎥⎣⎦⎣⎦⎢⎥⎣⎦(b) 旋转变换:绕原点旋转的变换公式为:[][] **cos sin0,,1,,1sin cos0cos sin,sin cos,1001x y x y x y x yθθθθθθθθ⎡⎤⎢⎥⎡⎤=-=⋅-⋅⋅+⋅⎣⎦⎢⎥⎢⎥⎣⎦(c) 放缩变换:[]**00,,1,,100,,1001xy x ySx y x y S S x S y⎡⎤⎢⎥⎡⎤⎡⎤==⋅⋅⎣⎦⎣⎦⎢⎥⎢⎥⎣⎦几种变换可以组合在一起形成复合变换。
例如平移变换与旋转变换组合得到:(d) 相对点00(,)x y的旋转变换:[]**0000cos sin0 ,,1,,1sin cos0(1cos)sin(1cos)sin1 x y x yx y y xθθθθθθθθ⎡⎤⎢⎥⎡⎤=-⎣⎦⎢⎥⎢⎥-⋅+⋅-⋅-⋅⎣⎦ii、算法程序:void CZhouView::pingyi(){CClientDC dc(this);dc.MoveTo(m_nPoint1.x,m_nPoint1.y);dc.LineTo(m_nPoint2.x,m_nPoint2.y);dc.MoveTo(m_nPoint1.x+100,m_nPoint1.y+100);dc.LineTo(m_nPoint2.x+100,m_nPoint2.y+100);}void CZhouView::xuanzhuan(){CClientDC dc(this);dc.MoveTo(m_nPoint1.x,m_nPoint1.y);dc.LineTo(m_nPoint2.x,m_nPoint2.y);dc.MoveTo((m_nPoint1.x*cos(0.5))-(m_nPoint1.y*sin(0.5)),(m_nPoint 1.x*sin(0.5))+(m_nPoint1.y*cos(0.5)));dc.LineTo((m_nPoint2.x*cos(0.5))-(m_nPoint2.y*sin(0.5)),(m_nPoint2 .x*sin(0.5))+(m_nPoint2.y*cos(0.5)));}void CZhouView::bili(){CClientDC dc(this);dc.MoveTo(m_nPoint1.x,m_nPoint1.y);dc.LineTo(m_nPoint2.x,m_nPoint2.y);dc.MoveTo(m_nPoint1.x*2,m_nPoint1.y*2);dc.LineTo(m_nPoint2.x*2,m_nPoint2.y*2);}void CZhouView::XCQ(){CClientDC dc(this);dc.MoveTo(m_nPoint1.x,m_nPoint1.y);dc.LineTo(m_nPoint2.x,m_nPoint2.y);dc.MoveTo(m_nPoint1.x,m_nPoint1.y);dc.LineTo(m_nPoint2.x+100,m_nPoint2.y);}void CZhouView::DC(){CClientDC dc(this);dc.MoveTo(m_nPoint1.x,m_nPoint1.y);dc.LineTo(m_nPoint2.x,m_nPoint2.y);dc.MoveTo(m_nPoint1.y,m_nPoint1.x);dc.LineTo(m_nPoint2.y,m_nPoint2.x);}dc.MoveTo(m_nPoint1.y,m_nPoint1.x);dc.LineTo(m_nPoint2.y,m_nPoint2.x);}void CZhouView::YCQ(){CClientDC dc(this);dc.MoveTo(m_nPoint1.x,m_nPoint1.y);dc.LineTo(m_nPoint2.x,m_nPoint2.y);dc.MoveTo(m_nPoint1.x,m_nPoint1.y);dc.LineTo(m_nPoint2.x,m_nPoint2.y+100); }//OnLButtonUp(UINT nFlags, CPoint point) case 8:pingyi();break;case 9:xuanzhuan();break;case 10:bili();break;case 11:XCQ();break;case 12:YCQ();break;case 13:DC();break;编译,运行:平移:。
实验报告学院:计信学院专业:计算机科学与技术(软件工程方向)班级:07软件2班姓名学号实验组实验时间2010.5.24 指导教师成绩实验项目名称二维图形的几何变换实验目的掌握二维图形的基本几何变换:位置改变(平移、旋转)和变形(缩放、错切,反射、投影等)以及复合变换。
实验要求实现二维图形的集合变换实验原理1.平移变换平移变换将一点P沿直线路径从一个坐标集团移动到另一个坐标位置的一个重定位过程。
如果点p1(x1,y1.z1)是由点p(x,y,z)在x轴,y轴和z轴分别移动tx,ty,tz距离得到的,则这两点坐标间的关系为X1=x+tx, y1=y+ty,z1=z+tz该式的矢量形式为:p1=p+T其中,p1,p,T分别定义为发下向量:P1=[x1,y1,z1 ] p=[x,y,z] T=[tx,ty,tz]2.二维图形变换主要是基于齐次坐标方程,通过一些简单的矩阵运算来实现:二维齐次坐标变换的矩阵形式是:ihgfedcba矩阵的每个元素都有特殊含义.基中edba可以对图形进行缩放,旋转,对称,错切等变换;fc是对图形进行平移变换;hg的对图形作投影变换;i则是对图形整体进行缩放变换.例如:将一个图形在X 方向中平移tx 个单位,在Y 方向平移ty 个单位.其实现过程如下:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡++=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1),(11101001111y x ty tx T ty y tx x y x ty tx y x其中:x1,y1是变换后的坐标,x,y 是变换前的坐标,通过上述变换,(x,y)被平移了P(tx,ty).在二维平面上任何复杂的变换都可以通过上述基本变换的组合来实现.级合方式在计算机上主要体现在矩阵的乘法运算,即将各个简单变换的矩阵逆序相乘,就可以得到一个总的变换矩阵.利用这个总的变换矩阵就可以对图形进行复合变换.实验环境 硬件平台:PC运行环境:Windows 平台,Visual C++实验步骤1.编写程序完成实验内容的要求 2.实验总结。
3、对1的图形进行旋转变换, 转坐标变换。
4、对1的图形进行对称变换, 进行的对称变换。
5、对1的图形进行错切变换, 进行的错切变换。
6、对1的图形进行比例变换, 绘制出变换后的几何图形,绘制出变换后的几何图形,绘制出变换后的儿何图形,绘制出变换后的儿何图形,并在下边标注出实施多少度的旋并在下边标注出实施对什么坐标并在下边标注出实施对何种坐标并在下边标注出实施的多少比例计算机图形学实验报告实验名称二维图形的儿何变换评分实验日期_年_月_日指导教师姓名专业班级学号一、实验目的1、复习不同的二维坐标变换公式。
2、掌握二维坐标变换公式的使用方法。
3、对二维坐标组合变换的灵活运用。
二、实验要求1、在屏幕上绘制出较简单的儿何图形。
2、对1的图形进行平移变换,绘制出变换后的儿何图形,并在下边标注出实施x, y各多少的平称坐标变换。
坐标变换。
7、为了进行比较,适当选择坐标,可将原图(变换前)及经过不同变换后的图形绘制在同一个屏幕上,设省不同的线形或颜色加以区分各种变换。
三、关键算法及实现原理1、二维图形的变换实际上是一个变换矩阵,平面图形是由若干个二维点(阳,*)组成, 经过变换后的二维点(x'i,yi),其变换公式为:对应于不同的变换,都是用矩阵乘法来计算坐标,只需改变变换矩阵即可。
因此对每一种坐标变换编成一个了程序。
2、编程时的技巧用数组将二维图形的特征坐标点(顶点)保存,将由特征坐标点(顶点)绘制出二维图形的命令编一个绘图子程序,调用绘图子程序绘制出变换以前的图形,根据不同的两维儿何变换,选用相应二维坐标变换公式(调用相应的子程序)将二维坐标进行坐标变换;再调用绘图了程序将变换后的坐标值在屏幕上绘制变换后的几何将图形,可选用不同的颜来区分各种不同儿何变换的图形。
四、程序调试中的问题五、程序运行结果或数据对四边形能完成单项二维变换(平移、比例、错切)的源程序#include<graphics.h>#include<conio.h> #include<dos.h>#include<math.h>double xmax=639.0, ymax=399.0;double f[3][3],xx,yy;int scx(double xj)(int x;x=(int)(xj+xmax/2);return(x);}int scy(double yj){int y;y=ymax-(int)(yj+ymax/2);return(y);)void parallel(double dx,double dy) f[0][0]= 1.0;f[0][ 1 ]=0.0;f[0][2]=0.0;f[l][0]=0.0;f[l][l]=1.0;f[l]⑵=0.0;f[2][0]=dx; f[2][l]=dy; f[2]⑵=1.0;}void scale(double s)(f[O][O]=s;f[O][l]=O.O;f[O]⑵=0.0;f[l][O]=O.O;f[l][l]=s;f[l]⑵=0.0;f[2][0]=0.0; f[2][l]=0.0; f[2]⑵=1.0;}void taisho_y(){f[0][0]=-1.0;f[0][l]=0.0;f[0] [2]=0.0;f[l][0]=0.0;f[l][l]=1.0;f[l][2]=0.0;f[2][0]=0.0; f[2][l ]=().(); f[2][2]=1.0;)void axis()(line(scx(0.0),scy(-ymax/2),scx(0),scy(ymax/2)); line(scx(-xmax/2),scy(().0),scx(xmax/2),scy(0.0)); )void tuoq(double a,double b)(f[0][0]=1.0;f[0][l]=b;f[0]⑵=1.0;f[l][0]=a;f[l][l]=1.0;f[l][2]=0.0;f[2][0]=0.0; f[2][l]=0.0; f[2]⑵=1.0;)double affinex(double x,double y,double d){xx=x*f[0][0]+y*f[l ][0]+d*f[2][0];return(xx);}double affiney(double x,double y,double d) yy=x*f[0] [ 1 ]+y *f[ 1 ] [ 1 ]+d*f[2] [ 1 ]; retum(yy);}void drawtu(x2,y2)double x2[5],y2[5];{int i;for(i=0;i<=3;i++){Iine(scx(x2[i]),scy(y2[i]),scx(x2[i+ l]),scy(y2[i+1]));))void main()(int drive=DETECT,mode;static double x 1 []=( 50.0,60.0,150.0,160.0,50.0);static double yl[]={ 0.0,50.0,50.0,-10.0,0.0);static double x2[5],y2[5];int i;double x,y,xx,yy,yt;initgraph(&drive,&mode,"c:\\tc3\\bgi M);setcolor(RED);axis();for(i=0;i<=3;i++){line(scx(x 1 [i]),scy(y 1 [i]),scx(x 1 [i+1 ]),scy(y 1 [i+1]));/*parallel( 100,-100) */getch();x=100;y=-100;parallel(x,y);setcolor(BLUE);for(i=0;i<=4;i++)(x2[ij=affinex(x 1 [i],y 1 [i], 1.0);y2[i]=affiney(x 1 [i],y 1 [i], 1.0);)drawtu(x2,y2);yt=scy(y2[0])+10;outtextxy(scx(x2[0]),yt,"parallel(l 00,-100)”); /*taisho_y() */getch();taisho_y();setcolor( Y ELLOW);for(i=0;i<=4;i++)(x2[i]=affinex(x 1 [i],y 1 [i], 1.0);y2[i]=affiney(x l[i],yl[i],1.0);}drawtu(x2,y2);yt=scy(y2[0])+10;outtextxy(scx(x2[0]),yt,n taisho_y");/*touq(2,0) */getch();tuoq(2,0);setcolor(LIGHTBLUE);for(i=0;i<=4;i++)x2[i]=affinex(x 1 [i],y 1 [i], 1.0);y2[i]=affiney(xl [i],yl[i],1.0);)drawtu(x2,y2);yt=scy(y2[0])+10;outtextxy(scx(x2[0]),yt,"tuoq(2,0)n);/*scale(2) */gctch();scale(2);setcolor(LIGHTRED);for(i=0;iv=4;i++){x2[i]=affinex(x 1 [i],y 1 [i], 1.0);y2[i]=affiney(xl[i],yl[i],1.0);}drawtu(x2,y2);yt=scy(y2[0])+10;outtextxy(scx(x2[0]),yt,"scale 2");getch();closegraph();Alt: Fl-Last help F3-Pick F6-Swap F7/F8-Preu/Next error F9-Conp六、实验收获及体会1、了解二维坐标变换公式的使用方法。
二维几何形的变换学会进行平移翻转与旋转等操作二维几何形的变换学会进行平移、翻转与旋转等操作在数学中,二维几何形的变换是一种常见的操作。
通过平移、翻转和旋转等变换操作,我们可以改变形状的位置、方向和对称性。
本文将介绍如何进行这些二维几何形的变换操作,帮助读者更好地理解和应用。
1. 平移操作平移是指沿给定方向将一个图形移动到另一个位置,移动的距离与方向都相同。
要进行平移操作,可以按照以下步骤进行:(1)选择一个参考点,这个点将保持不变,称为固定点。
(2)确定平移的方向和距离。
(3)从起始点出发,沿指定方向移动指定距离,得到终点。
(4)以固定点为圆心,终点为半径画一个圆,即可得到平移后的图形。
2. 翻转操作翻转是将一个图形按照某条线进行对称,使得图形在对称线两侧呈镜像关系。
翻转操作可以分为水平翻转和垂直翻转两种情况:(1)水平翻转:将图形沿水平方向翻转,即上下颠倒。
(2)垂直翻转:将图形沿垂直方向翻转,即左右镜像。
进行翻转操作时,可以按照以下步骤进行:(1)选择一个参考线,图形将以该线为对称轴进行翻转。
(2)对于水平翻转,将图形上下颠倒;对于垂直翻转,将图形左右镜像。
3. 旋转操作旋转是指将一个图形围绕一个点旋转一定角度,得到一个新的图形。
旋转操作可以按照以下步骤进行:(1)选择一个参考点,该点为旋转中心。
(2)确定旋转方向和旋转角度。
(3)将旋转中心和所有的图形顶点依次连线。
(4)按照旋转角度和方向,将原图形中的每个点沿着连接线旋转到新位置,得到旋转后的图形。
需要注意的是,旋转角度可以为正数或负数,正数表示逆时针旋转,负数表示顺时针旋转。
综上所述,通过学会进行二维几何形的平移、翻转和旋转等操作,我们能够更好地理解和应用几何学中的变换。
这些操作不仅可以帮助我们对图形进行位置调整,还可以通过变换增加对称性或改变方向,从而得到更多有趣的结果。
通过实践和练习,我们可以掌握这些变换操作,并将它们应用到解决实际问题的过程中。
相对任意方向的二维几何变换平面上的二维几何变换是指将平面上的一个点或一组点通过某种规则进行变换,得到新的点或点集的过程。
这些变换可以是平移、旋转、缩放、对称等。
在本文中,将分别介绍这些二维几何变换的定义、特点和应用。
一、平移变换平移变换是指将平面上的点沿着指定的方向进行移动,距离为指定的平移向量。
平移变换的特点是保持形状和大小不变,只改变位置。
平移变换可以用向量表示,即用平移向量将原始点的坐标进行平移,得到新点的坐标。
平移变换的应用非常广泛,比如在计算机图形学中,平移变换常用于图像的移动、平面的平移等。
此外,在几何学中,平移变换也可以用于解决平面图形的位置关系、求解线段的平移等问题。
二、旋转变换旋转变换是指将平面上的点绕着指定的旋转中心按照指定的角度进行旋转。
旋转变换的特点是保持形状和大小不变,只改变方向和位置。
旋转变换可以用旋转角度和旋转中心表示,即通过旋转矩阵将原始点的坐标进行旋转,得到新点的坐标。
旋转变换的应用也非常广泛,比如在航空航天中,旋转变换常用于描述飞机的姿态变化;在计算机图形学中,旋转变换常用于图像的旋转、三维模型的旋转等。
此外,在几何学中,旋转变换也可以用于解决线段的旋转、图形的对称等问题。
三、缩放变换缩放变换是指将平面上的点按照指定的比例进行放大或缩小。
缩放变换的特点是保持形状不变,只改变大小。
缩放变换可以用缩放因子表示,即通过缩放矩阵将原始点的坐标进行缩放,得到新点的坐标。
缩放变换的应用也非常广泛,比如在计算机图形学中,缩放变换常用于图像的放大、缩小、三维模型的缩放等。
此外,在几何学中,缩放变换也可以用于解决图形的相似性判断、线段的伸缩等问题。
四、对称变换对称变换是指将平面上的点按照指定的对称中心或对称轴进行镜像。
对称变换的特点是保持形状不变,只改变方向。
对称变换可以用对称中心或对称轴表示,即通过对称变换的公式将原始点的坐标进行镜像,得到新点的坐标。
对称变换的应用也非常广泛,比如在几何学中,对称变换常用于解决图形的对称性判断、线段的对称等问题。