图形学-实验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编程语言。

第4章二维变换

第4章二维变换

• 性质
U •V = V •U U •V = 0 ⇔ U ⊥ V U •U = 0 ⇔ U = 0
变换的数学基础(3/4) 变换的数学基础
– 矢量的长度
• 单位矢量 • 矢量的夹角
2 U = U • U = u x + u y + u z2 2
U •V cos θ = U •V
– 矢量的叉积
i U ×V = ux vx
– 在世界坐标系( 在世界坐标系(WCS)中指定的矩形区域 , ) 用来指定要显示的图形 。
2. 视区
– 在设备坐标系(屏幕或绘图纸) 在设备坐标系(屏幕或绘图纸)上指定的矩形区域 , 用来指定窗口内的图形在屏幕上显示的大小及位置。 用来指定窗口内的图形在屏幕上显示的大小及位置。
3. 窗口到视区的变换
P′=P+Tm 等价于
[x’ y’]=[x y] +[Mx My]
图形变换的特点( 4.3.1 图形变换的特点(续)
比例变换 P′=P×Ts
Sx 0 Ts= 0 Sy Sx、Sy分别表示比例因子。 cosθ sinθ Tr= -sinθ cosθ θ>0时为逆时针旋转 θ<0时为顺时针旋转
旋转变换 P'=P×Tr
变换后的 顶点坐标
P
变换前的 顶点坐标

T2D
二维变换矩阵
二维变换矩阵中: a b 是对图形进行缩放、旋转、对称、错切等变换。 c d [ l m] 是对图形进行平移变换
• 计算机图形场景中所有图形对象的空间定位和定义,包括观 计算机图形场景中所有图形对象的空间定位和定义, 察者的位置视线等,是其它坐标系的参照。 察者的位置视线等,是其它坐标系的参照。
2.模型坐标系(Modeling Coordinate System,也称局部坐标系) 模型坐标系

第4章 二维图形变换

第4章 二维图形变换

• (0 0 1 0) 表示z轴方向无穷远点
• (0 0 0 1) 表示坐标原点 • 这4个向量将构成四维齐次空间的单位矩阵
2 齐次坐标变换矩阵
• 齐次变换矩阵提供一个三维空间中包括平移、旋转、透 视、投影、反射、错切和比例等变换在内的统一表达式, 使得物体的变换可在统一的矩阵形式下进行。 旋转、错切等 透视变换
0 1 y0
0 Sy 0 0 0 1
y1
1
0 0 1
平移
x2
y2
1 x1
y1
1 1 0 x0
0 1 y0
0 0 1
比例
S x 1 0 0 0 Sy 0 0 0 1
1 T2 0 x0
课 题:二维几何变换 目的要求:掌握平移、旋转、缩放、错切、反射等二 维坐标变换及其矩阵表示以及仿射变换、齐次 坐标等的概念。 教学重点:二维几何变换 教学难点:齐次坐标矩阵表示 教学课时:2课时 教学方法:讲授法、演示法
4.1 窗口视图变换
1.窗口和视图区 • • • 用户坐标系(world coordinate system,简称WC): 用户用来定义设计对象的坐标系,是实数型的二维空间。 设备坐标系(device coordinate system,简称DC): 计算机图形系统的工作空间,是自然数型的二维空间。 窗口区(window) : 在用户坐标系中任意的一个子区域。一般为矩形区域, 可以用其左下角点和右上角点的坐标来表示。 • 视图区(viewport): 设备坐标系的一个子空间。对于显示器而言,显示屏幕 是设备输出图形的最大区域,任何小于或等于屏幕域的区域 都可定义为视图区。一般也为矩形区域。
(2)对称于Y轴 当变换对称于Y轴时,则坐标点P(x,y)经对称变换 后,新坐标点P’(x’,y’)的表达式为:

-图形学实验报告-二维基本变换

-图形学实验报告-二维基本变换

一、 实验目的和要求利用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);}//鼠标响应函数,控制当鼠标接收到不同的用户操作时将要执行的后续命令。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

复制到pDC,同时禁止背景刷新。
生成正多边形顶点。 绘制几何变换图形。 使用定时器动态更2 实验要求
图形动态几何变换: 1、(x,y)在-50~50的范围内往复平移运动,速度 0.1/帧; 2、正多边形绕中心以1度/帧速度逆时针旋转; 3、正多边形相对于中心点进行0.5~2的比例变换, 变换速度为0.01/帧。
实验4 二维几何变换
4.1 实验目的
掌握二维平移、比例、旋转几何变换矩阵。 掌握矩阵乘法的编程实现。
掌握相对于任一参考点的比例变换和旋转变换。
实验4 二维几何变换 4.2 实验要求
设计包含齐次坐标的二维点类CP2。 设计二维几何变换类。 设计双缓冲技术,先在MemDC中绘制,然后用BitBlt将图形
实验4 二维几何变换
4.3 效果图
二维几何变换效果如图4-1所示。
图4-1 二维几何变换效果图
相关文档
最新文档