图形学实验报告六 二维图形的几何变换
- 格式:doc
- 大小:453.00 KB
- 文档页数:11
实验报告几何变换实验实验报告:几何变换实验引言:几何变换是计算机图形学中的重要概念,它可以改变图像的形状、位置和大小。
在本次实验中,我们将通过对几何变换的实际操作,深入了解几何变换的原理和应用。
一、实验目的本次实验的主要目的是探究几何变换在图像处理中的应用,具体包括平移、旋转、缩放和翻转等几何变换操作。
通过实际操作和观察,我们将了解几何变换对图像的影响,并学习如何使用计算机编程实现这些变换。
二、实验材料和方法1. 实验材料:- 一台计算机- 图像处理软件(如Photoshop、GIMP等)- 编程软件(如Python、MATLAB等)2. 实验方法:- 步骤一:选择一张图片作为实验对象,并导入到图像处理软件中。
- 步骤二:使用图像处理软件进行平移操作,观察图像的位置变化。
- 步骤三:使用图像处理软件进行旋转操作,观察图像的旋转效果。
- 步骤四:使用图像处理软件进行缩放操作,观察图像的大小变化。
- 步骤五:使用图像处理软件进行翻转操作,观察图像的翻转效果。
- 步骤六:使用编程软件编写程序,实现上述几何变换操作,并观察结果。
三、实验结果与分析1. 平移操作:在实验中,我们发现通过平移操作,可以将图像在水平和垂直方向上进行移动。
通过调整平移的距离和方向,我们可以改变图像在画布上的位置。
这种操作常用于图像的对齐和拼接等应用中。
2. 旋转操作:旋转操作可以改变图像的角度和方向。
通过调整旋转的角度和中心点,我们可以使图像以不同的角度进行旋转。
这种操作常用于图像的矫正、仿射变换等应用中。
3. 缩放操作:缩放操作可以改变图像的大小。
通过调整缩放的比例,我们可以使图像变得更大或更小。
这种操作常用于图像的放大、缩小、裁剪等应用中。
4. 翻转操作:翻转操作可以改变图像的方向。
通过水平或垂直翻转,我们可以使图像在左右或上下方向发生镜像反转。
这种操作常用于图像的镜像处理、对称效果等应用中。
四、实验总结通过本次实验,我们深入了解了几何变换在图像处理中的应用。
宁夏师范学院数学与计算机科学学院《计算机图形学》实验报告实验序号:7 实验项目名称:二维图形变换菜单菜单项ID值图形变换(&T)缩放(&Z)ID_TRANSFORM_SCALE图形变换(&T)旋转(&R)ID_TRANSFORM_ROTATE图形变换(&T)对称(&S)ID_TRANSFORM_SYMMETRY 4、在CTransView视图类中添加消息映射函数;对象消息函数ID_TRANSFORM_SCALE COMMAND OnFigureCirleID_TRANSFORM_ROTATE COMMAND OnFigureEllipseID_TRANSFORM_SYMMETRY COMMAND OnTransformSymmetry5、添加自定义的成员变量: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;6、在视图类的OnDraw()函数中加入下列代码,实现视图绘图。
void CTransView::OnDraw(CDC* pDC){CTransDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data here//绘出以以(540,220)、(670,130)、(560,120)为顶点的三角形。
pDC->MoveTo(Pt[0]);pDC->LineTo(Pt[1]);三、运行结果变换前:对称变换:缩放变换:旋转变换:五、教师评语成绩签名:日期:年月日。
⼆维图形⼏何变换⼀、基本变换1. 平移定义:将物体沿直线路径从⼀个坐标位置移到另⼀个坐标位置的重定位。
不产⽣变形⽽移动物体的刚体变换。
原始坐标位置:(x ,y ),平移距离t x 、t y ,新位置(x ′,y ′),则x ′=x +t x ,y ′=y +t y 表⽰为矩阵形式,令:→P =x y→P ′=x ′y ′→T =t x t y⼆位平移⽅程:→P ′=→P +→T2. 旋转当参考点为(0,0)定义:以某个参考点为圆⼼,将对象上的各点(x ,y )围绕圆⼼转动⼀个逆时针⾓度θ,变成新的坐标(x ′,y ′)的变换。
x ′=rcos (φ+θ)=rcos φcos θ−rsin φsin θy ′=rsin (φ+θ)=rsin φcos θ+rcos φsin θ∵x =rcos φ,y =rsin φ∴x ′=xcos θ−ysin θy ′=xsin θ+ycos θ令:→R =cos θ−sin θ−sin θcos θ写成矩阵形式:→P ′=→R ⋅→P绕任意指定的旋转位置(x r ,y r )旋转的变换⽅程1. 将坐标系原点平移到(x r ,y r )2. 在新的坐标系下做旋转变换3. 将坐标原点平移回原坐标系x ′=x r +(x −x r )cos θ−(y −y r )sin θy ′=y r +(x −x r )sin θ+(y −y r )cos θ3. 变化(缩放)Scaling定义:使对象按⽐例因⼦Sx 和Sy 放⼤或缩⼩的变换。
x ′=x ⋅S xy ′=y ⋅S y令→S =S x 00S y矩阵形式:→P ′=→S ⋅→PS x 、S y 均⼩于1,缩⼩物体尺⼨,S x 、S y 均⼤于1,放⼤物体。
S x =S y ,则保持物体相对⽐例缩放⼀致。
特殊情况当Sy =−1、Sx =1,按x 轴反射当Sy =1、Sx =−1,按y 轴反射()()()()()当Sy =−1、Sx =−1,按原点(0,0)反射⼆、变换矩阵每个基本变换均可表⽰为普通矩阵形式:→P ′=→M 1→P +→M 2平移将2×2矩阵扩充为3×3矩阵,将⼆维⼏何变换的乘法和平移项组合成单⼀矩阵表⽰平移。
实验一二维图形的基本变换一.实验目的1、掌握CAD图形处理的原理和方法;2、通过上机操作,熟悉多边形的平移、比例和旋转变换,掌握二维图形的基本变换。
3、理解CAD对图形进行复合变换(平移、比例和旋转变换)的过程。
二.实验要求1、上机调试所编程序,实现图形的绘制、平移变换、比例变换和旋转变换。
2、二维图形各点的坐标、平移、比例、旋转角度可由用户任意输入,原图形和变换后的图形必须同时显示在显示器上。
三.实验设备1、计算机系统;2、安装Turbo C或其他C语言集成开发工具四.实验原理在计算机图形处理中,经常需要对已经生成的图形进行几何变换处理。
例如,改变原始图形的大小、移动图形到某一指定位置或根据需要将图形旋转某一个角度,这就要求图形的处理软件能够实现缩放、平移、旋转等几何变换。
由于点是构成一个几何形体的最基本的元素,而一幅二维图形可以看成是一个点集,如三角形有三个特征点……,因此,我们就可以把对图形的几何变换归结对点的变换。
通过对构成几何图形的特征点集的几何变换即可实现整个图形的几何变换。
即如何实现一个旧点到变化后新点的计算求解是本次实验的重点。
我们给出平移、比例、旋转变换的矩阵分别为:平 移: T t =⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1010001n m (m,n 分别为x,y 方向上的平移量) 全比例: T s =⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1000000b a (a,b 分别为x,y 方向上的比例因子)旋 转: T r =⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-1000cos sin 0sin cos θθθθ (θ为旋转角,逆时针为正)假设一几何图形由A(x A,y A ) B(x B ,y B ) C(x C ,y C ) D(x D ,y D )四点组成,那么变换后四点坐标为A ’(x ’A,y ’A ) B ’(x ’B ,y ’B ) C ’(x ’C ,y ’C ) D ’(x ’D ,y ’D )平移:⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡1111''''''''D D C C B B A A Y X Y X Y X Y X =⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡1111D D C C B B A A Y X Y X Y X Y X T t =⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡1111D D C C B B A A Y X Y X Y X Y X ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1010001n m =⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡++++++++1111n Y m X n Y m X n Y m X n Y m X D D C C B B A A 比例:⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡1111''''''''D D C C B B A A Y X Y X Y X Y X =⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡1111D D C C B B A A Y X Y X Y X Y X T s =⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡1111D D C C B B A A Y X Y X Y X Y X ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1000000b a =⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡1111D D C C B B B A bY aX bY aX bY aX bY aX旋转:⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡1111''''''''D D C C B B A A Y X Y X Y X Y X =⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡1111D D C C B B A A Y X Y X Y X Y X T r =⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡1111D D C C B B A A Y X Y X Y X Y X ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-1000cos sin 0sin cos θθθθ =⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡+-+-+-+-1cos sin sin cos 1cos sin sin cos 1cos sin sin cos 1cos sin sin cos θθθθθθθθθθθθθθθθC D D D C C C C B B B BA A A A Y X Y X Y X Y X Y X Y X Y X Y X 由以上的推导过程,我们得到变换前点与变化后点的关系,进而可以用图形处理软件实现相应的变换。
实验报告模板《计算机图形学》实验报告一、实验目的及要求1.实习三维图形的坐标系之间的变换;2.三维图形几何变换;3.掌握三维图形的坐标系之间的变换算法及三维图形几何变换的原理和实现;4.实现二维图形的基本变换(平移、旋转、缩放、错切、对称、复合等);5.实现三维图形的基本变换(平移、旋转、缩放、复合等);二、理论基础在齐次坐标理论下,二维图形几何变换矩阵可用下式表示:⎪⎪⎪⎭⎫⎝⎛===ifchebgdaTnkxx kk2,1,0,)(ϕ平移变换:[x* y* 1] =[x y 1] *0000001ts⎛⎫⎪⎪⎪⎝⎭=[t*x s*y 1]比例变换:[x* y* 1]=[x y 1] *1000101m n⎛⎫⎪⎪⎪⎝⎭=[m+x n+y 1]旋转变换:在平面上的二维图形饶原点逆时针旋转Ө角,变换矩阵为[x* y* 1]=[x y 1] *cos sin0sin cos0001θθθθ⎛⎫⎪- ⎪⎪⎝⎭= [x*cosө-y*sinө]复合变换:以上各种变换矩阵都是以原点为参照点,当以任意参照点进行变换的时候,我们就要用到复合变换矩阵。
三维变换类似于二维,在画图时,把三维坐标转换为二维即可。
三、算法设计与分析二维变换:#define dx 50#define dy 100void CCGWithVCView::OnTransScale() //平移(50,100){// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Move Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]+dx;a[1]=m[i][1]+dy;b[0]=m[i+1][0]+dx;b[1]=m[i+1][1]+dy;DDALine(a,b, RGB(0, 200, 255), pDC);}}#define h 0.1745#include<math.h>void CCGWithVCView::OnTransRotate() //旋转{// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Rotate Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]*cos(h)-m[i][1]*sin(h);a[1]=m[i][1]*cos(h)+m[i][0]*sin(h);b[0]=m[i+1][0]*cos(h)-m[i+1][1]*sin(h);b[1]=m[i+1][1]*cos(h)+m[i+1][0]*sin(h);DDALine(a,b, RGB(0, 200, 255), pDC);}}#define k 2;#define f 2.5void CCGWithVCView::OnTransMove() //缩放{// TODO: Add your command handler code here//AfxMessageBox(_T("Please Insert The Scale Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]*k;a[1]=m[i][1]*f;b[0]=m[i+1][0]*k;b[1]=m[i+1][1]*f;DDALine(a,b, RGB(0, 200, 255), pDC);}}#define n 2#define d 0void CCGWithVCView::OnTransOther(){// TODO: Add your command handler code here//AfxMessageBox(_T("Please Insert The Other Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]+n*m[i][1];a[1]=m[i][1]+d*m[i][0];b[0]=m[i+1][0]+n*m[i+1][1];b[1]=m[i+1][1]+d*m[i+1][0];DDALine(a,b, RGB(0, 200, 255), pDC);}}三维变换:#include<math.h>#define dx 100#define dy 100#define dz 0void CCGWithVCView::OnTransScale() //平移(50,100){// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Move Change Code!")) ;int i;int p2d[6][2];int p3d[6][3]={{400,300,0},{300,400,0},{300,300,10},{275,300,0},{400,300,0},{300,300,10}};for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]-p3d[i][0]/sqrt(2);p2d[i][1]=p3d[i][2]+p3d[i][0]/sqrt(2);}int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]+dy-p3d[i][0]+dx/sqrt(2);p2d[i][1]=p3d[i][2]+dz+p3d[i][0]+dx/sqrt(2);}for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 0, 255), pDC);}}#define k 0.1745void CCGWithVCView::OnTransRotate() //旋转{// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Rotate Change Code!")) ;int i;int p2d[6][2];int p3d[6][3]={{400,300,0},{300,400,0},{300,300,10},{275,300,0},{400,300,0},{300,300,10}};for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]-p3d[i][0]/sqrt(2);p2d[i][1]=p3d[i][2]+p3d[i][0]/sqrt(2);}int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]*cos(k)-p3d[i][2]*sin(k)-p3d[i][0]/sqrt(2);p2d[i][1]=p3d[i][2]*cos(k)+p3d[i][1]*sin(k)+p3d[i][0]/sqrt(2);}for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 0, 255), pDC);}}四、程序调试及结果的分析二维:三维:五、实验心得及建议在实验过程中,尽管过程中任由许多不会的地方,而且有待于今后的提高和改进,但我加深了对书本上知识的理解与掌握,同时也学到了很多书本上没有东西,并积累了一些宝贵的经验,这对我以后的学习与工作是不无裨益的。
《计算机图形学》实验报告题目:二维图形几何变换院、系(院):计算机科学与技术学院专业及班级:姓名:学号:日期:1.实验目的1)掌握3*3矩阵乘法运算的编程实现;2)掌握平移,比例,旋转三种基本二维几何变换矩阵生成; 3)掌握相对于任意参考点的二维复合变换矩阵生成。
2.实验要求1)设计实现二维图形变换类,具有平移,比例,旋转二维几何变换功能,以及相对于任意参考点的二维复合变换功能;2)将2.2节直线类所绘制的菱形线框,绕最上端A 点匀速旋转,并要求相对于A 点来回缩放;3)使用双缓冲机制进行图形绘制,避免运动闪烁,所有图形先绘制到用户自定义的DC ,绘制完成后再统一拷贝到屏幕DC 。
3.详细设计3.1核心算法及类型设计平移变换矩阵:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=1010001Tt ty tx 旋转变换矩阵:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=100cos sin 0sin cos Tr αααα比例变换矩阵:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=1000000sy sx Ts相对于任意参考点的旋转变换矩阵:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡∙⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-∙⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=1010001100cos sin 0sin cos 1010001T ty tx ty tx fr αααα 相对于任意参考点的比例变换矩阵:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡∙⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡∙⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=101000110000001010001T ty tx sy sx ty tx fs3.2程序设计实现及流程开始定义变量a,A,points[4], s,step,tans,theta,*line 设置坐标系, 绘制双缓冲机制, 绘制坐标轴。
200→a, (0,a)→A,points[0].x ←0, points[0].y ←a; points[1].x ←a, points[1].y ←0; points[2].x ←0, points[2].y ←-a; points[3].x ←-a,points[3].y ←0;s+step →s;tans.ScalePoint(s,s,A); theta=0.0;tans.RotatePoint(theta,A);-step →step;结束(s>=2.0||s<=0.5)theta>=360.0theta=0.0绘制菱形的AB,BC,CD,DA 四条边拷贝内存图到屏幕Invalidate(FALSE)4.典型测试结果5.实验问题总结通过本次试验让我有一次对MFC有了进一步的了解,在本次实验中我也遇到了一些错误,但是经过后来我和同学的讨论也得到了改正,本次试验让我进一步熟悉了二维图形几何变换的过程及变换矩阵。
一、 实验目的和要求利用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].;国家自然科学基金资助项目.。
贵州大学实验报告学院:计算机科学与信息学院专业:计算机科学与技术班级:101姓名学号实验组 6 实验时间2013.5.9 指导教师吴云成绩实验项目名称二维图形的几何变换实验目的掌握二维图形的基本几何变换:位置改变(平移、旋转)和变形(缩放、错切,反射、投影等)以及复合变换。
实验要求1、在VS2010环境下利用C#编程实现画二维图形的几何变换。
2、给出代码。
3、附上结果截图。
实验原理标准齐次坐标(x,y,1) 二维变换的矩阵表示平移变换旋转变换放缩变换平移变换只改变图形的位置,不改变图形的大小。
旋转变换不改变图形的形状放缩变换引起图形形状的变化。
复合变换结果与变换的顺序有关(矩阵乘法不可交换)例:对一矩形先缩放S(2,0.5),再旋转R(p/6)。
对称变换关于x轴的对称变换:关于y轴的对称变换:实验环境VS2010(C#)实验步骤1. 掌握算法原理;2. 依据算法,编写源程序并进行调试;下面缩放变化的算法实现:private void TriangleChange()//缩?小?{Pen pen = new Pen(Color.Gray, 2);int x, y;x = point.X + 50;y = point.Y - 100;Point[] points ={new Point(x,y),new Point((x+point.X+10)/2,(y+point.Y-20)/2),new Point((x+point.X+80)/2,(y+point.Y-50)/2) };graphics.DrawPolygon(pen, points);}下面是旋转变化的算法实现:实验内容1.设有一三角形ABC,其中三个顶点为A(5,10),B(1,2),C(8,5),如三角形的顶点A不变,将AB和AC边缩小一倍后,求缩小后的三角形对于直线-2x+4y+3=0的对称变换后的结果图。
2.将一四边形以原点为中心,以15°为间隔旋转。
贵州大学实验报告
学院:计算机科学与信息学院专业:计算机科学与技术班级:101姓名学号实验组 6 实验时间2013.5.9 指导教师吴云成绩
实验项目名称二维图形的几何变换
实
验目的掌握二维图形的基本几何变换:位置改变(平移、旋转)和变形(缩放、错切,反射、投影等)以及复合变换。
实
验要求1、在VS2010环境下利用C#编程实现画二维图形的几何变换。
2、给出代码。
3、附上结果截图。
实验原理
标准齐次坐标(x,y,1) 二维变换的矩阵表示平移变换
旋转变换
放缩变换
平移变换只改变图形的位置,不改变图形的大小。
旋转变换不改变图形的形状
放缩变换引起图形形状的变化。
复合变换结果与变换的顺序有关(矩阵乘法不可交换)例:对一矩形先缩放S(2,0.5),再旋转R(p/6)。
对称变换
关于x轴的对称变换: 关于y轴的对称变换:
1三角形缩放及对称
实
验
结
果
2.四边形旋转。