版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
……课程设计报告课程名称:学院:专业班级:学生姓名:学号:指导教师:完成时间:报告成绩:评阅意见:一个图形变换函数的设计一、设计目的巩固面向对象编程的基本理论知识;进一步熟悉VisualC++6.0的编程环境,掌握相关控件的使用方法;更深层次的理解自定义函数、数组和类;更深层次的理解自定义函数和for语句;增强实践操作能力;提高综合运用所学理论知识独立分析和解决问题的能力。二、设计要求用任一种高级语言编写出3~4种常用的二维、三维图形基本变换程序要求在报告中写出具体的调试过程,并附上源程序。三、设计内容本程序为一个综合型程序:能实现二维和三维的图形的各种变换。例如,可以进行二维(或三维)图形的比例,复制,平移,对称,旋转,五种变换。程序预设图形顶点个数最多不超过50个,如果需要扩大顶点数目,直接在程序开头的N值进行赋值。在进行旋转变换时,预设圆周率为M值,如果需修改时,直接对程序开头的M值进行修改。程序功能的原理是通过变换基本矩阵,实现对顶点不同的变换,从而实现对图形的变换。四、具体步骤1:输入图形是几维图形。(二维或三维);2:输入顶点个数(小于50),然后输入各点坐标,注意输完一个坐标后回车后输入下一个坐标;3:输入变换类型,根据提示输入代表类型的数字,接下来输入相关变换所需要的参数;4:待各个参数输入完毕后,回车后得到结果。五、设计要求对系统进行功能模块设计、算法和控制模块设计;系统设计要有实用性;编程简单易懂,可用,功能较全面;课题说明书、流程图条理要清楚;设计完成后,每人上交一份设计报告说明书,必须用专用的课程设计报告纸,要求包含以下内容:题目,基本原理叙述,流程图,源程序清单,运行结果,调试情况分析,设计总结体会,致谢;进度安排(1周)题目提前1周布置,使学生作好充分的准备。分析设计准备阶段建议1天,编程调试阶段建议2天,总结报告和书写说明书和考核阶段建议2天。六、图形变换函数的设计方法与过程点的矩阵表示在二维空间中,用坐标(x,y)表示平面上的一点。为了便于进行各种变换运算,通常把二维空间中的点表示成21行矩阵或者表示成12列矩阵。即xy21,xy12二维图形的矩阵表示点是构成图形的最基本要素,可用点的集合(简称点集)来表示一个二维图形,其矩阵的形式为:xyx12y12xnynn2二维图形的基本变换在计算机绘图中,常常要对图形进行比例、对称、旋转、平移、错切、投影等各种变换,既然图形可以用点集来表示,那么,二维图形的基本变换就可以通过点集的变换来实现。点的位置改变了,图形就会随之改变。矩阵运算) 旧点(集)×变换矩阵 新点(集(1)、平移变换平移是指点从一个位置移动到另一个位置的直线移动,即p(x,y)p*(x*,y*)。令X、Y轴方向的偏移量分别为l和m,则x*xly*ym(2)、比例变换设a和d分别为X、Y轴方向的缩放比例系数,则点p(x,y)p*(x*,y*),变换为x*axy*dy a0T0d式中,称为比例变换矩阵,比例变换如图5-2。比例因子a和d分别取不同的值(a,d>0)将获得不同的变换结果:(a)、恒等变换ad1,变换后点的坐标不变。(b)、等比变换ad1,当ad1时,变换后图形等比例放大如图5-2所示。当ad1时,变换后图形等比例缩小。(c)、非等比变换20 T 若ad,变换后图形产生畸变。如取变换矩阵为d0.5,则对图形框的变换为: 1020 201020200200.540401052010 1010 20500.5,a2,变换后的图形如图5-3所示,图中虚线框为变换后的图形。OOXY图5-3不等比例变换(3)、旋转变换设点(x,y)绕坐标原点逆时针旋转角,则点p(x,y)p*(x*,y*)的变换为x*xcosysiny*xsinycoscossinTsincos式中,为旋转变换矩阵。(4)、对称变换对称变换即产生图形的镜像,用来计算对称图形,也称为镜射变换。包括对于坐标轴、坐标原点、±45°直线和任意直线的对称变换。(a)、对X轴的对称变换对X轴的对称变换应有x*x,y*y,变换矩阵为:T=1001,变换果如图5-4所示。对Y轴的对称变换 10 OXY对OXY对Y轴对称原始位置对原点对称对X轴对称 图5-4对称变换(b)、对原点的对称变换x*x,y*y,变换矩阵为:T,对称变换结果如图5-4所示。(c)、对±45°线的对称变换对+45°线的对称变换01x*y,y*x T10对+45°线的对称应有: ,则变换矩阵为:对称变换结果如图5-5所示。对-45°线的对称变换01 对-45°线对称应有: ,则变换矩阵为:对称变换结果如图5-5所示。10 x*y,y*x T OOXY对+45°线原始位置对-45°线镜射对+45°线对称 图5-545°对称变换(5)、错切变换错切用于描述受到扭曲、剪切后的几何体形状。x*y*=xcyybx=xy1c1b=xyT1b式中Tc1,为错切变换矩阵,其中c和b不同时为0。(a)、沿X轴向错切1b令Tc1错切变换矩阵中的b=0,且c≠0,其变换就是沿X轴方向错切。即10x*y*=xcyy=xyc1=xyT当c>0时,错切沿着X轴的正向;当c<0时,错切沿X轴负向。错切直y1tg线与X轴的夹角为 cyc。如果设c=2,对图5-6a中的方形图框进行错切变换,有: 010 2010101010103010010021 00 00沿X轴方向错切变换的结果如图5-6b所示。(b)、沿Y轴向错切1b令Tc1错切变换矩阵中的c=0,且b≠0,其变换就是沿Y轴方向的错切。即x*y*=xybx=xy10b1=xyT当b>0时,错切沿着Y轴的正向;当b<0时,错切沿Y轴负向。错切直x1tg线与Y轴的夹角为 bxb。如果设b=2,对方形图框进行错切变换,有: 010 0101010121010302010001 00 00沿Y轴方向错切变换的结果如图5-6c所示。(30,10)YY(10,20)(10,30)OXYOXYOX(20,10)(0,10)(0,0)(10,0)(10,10)(,010)(,010)a)原始图形b)沿X轴方向错切c)沿Y轴方向错切图5-6错切变换注意:上面介绍的错切变换的错切方向是指第Ⅰ象限而言,其余象限的点的错切方向应作相应的改变。4、二维齐次坐标和齐次变换矩阵(1)、二维齐次坐标前面我们已经介绍了五种基本变换,除了平移变换以外,其余四种变换的系abT数都可以用一个22矩阵来表示,即cd。变换矩阵中a、b、c、d为变换比例因子,它们取值不同,可以实现各种不同变换。为了统一,可以将二维基本变换矩阵的形式由2×2阶矩阵扩充成一个3×2阶矩阵,即abTcdlm32这样以来又出现了一个新的问题,即二维图形的点集矩阵是n×2阶,而变换矩阵是3×2阶,二者无法相乘,不能进行图形变换运算。为此,引入齐次坐标的概念。在齐次坐标系中,n维空间的位置矢量,用n+1维矢量表示,即二维空间的xy位置矢量用三维矢量表示。一个二维位置矢量 用齐次坐标表示即为xyh,其中的h为附加坐标,是一个不为零的参数。一个二维点的齐次坐标表示不是唯一的,如二维点2010可以有20101,40202,60403,…等无穷组齐次坐标。通过对齐次坐标的规范化,即用各坐标分别除以附加坐标,得到一个规范化坐标xy1,也就是将h转化为1。通过二维点的齐次坐标表示,把二维图形的点集矩阵扩充为n×3阶矩阵。这样,点集矩阵就可以同变换矩阵进行乘法运算了:abcmd=axcylbxdymxy1l(2)、二维齐次变换矩阵为了使二维变换矩阵具有更多的功能,可将3×2阶变换矩阵进一步扩充为3×3阶矩阵,其各元素的功能和几何意义各不相同,可以分割成四块:abpTcdqlmsab其中2×2阶矩阵cd可以实现图形的比例、对称、错切、旋转等变换;1×2阶矩lmpqTs阵可以实现图形的平移变换;2×1阶矩阵可以实现图形的透视变换;而可以实现图形的全比例变换。5、二维图形的组合变换有些变换仅用一种基本变换是不能实现的,必须有两种或多种基本变换组合才能实现。这种由多种基本变换组合而成的变换称之为组合变换,相应的变换矩阵叫做组合变换矩阵。组合变换的目的是对一个点进行一次性变换,使得变换的效率更高。(1)、绕任意点旋转变换平面图形绕任意点p(x*,y*)旋转角,需要通过以下几个步骤来实现:(a)、将旋转中心平移到原点,变换矩阵为: 1 00 T 0 10x,yxpyp1(b)、将图形绕坐标系原点旋转角,变换矩阵为:cossin0 T sincos0R() 0 0 1(c)、将旋转中心平移回到原来位置,变换矩阵为: 1 00 Tx,y0 10xpyp1因此,绕任意点的旋转变换矩阵为:TTTT x,y R() x,y 1 0 0cossin01 00 sincos00 10 0 1 0 xpyp10 0 1xpyp1cossin0 sin cos 0xp(1cos)ypsinxpsinyp(1cos)1(2)、对任意直线的对称变换基本变换中的对称变换适用于通过坐标原点的任意直线。如果直线不通过原点,则首先将该直线平移,使其过原点,然后再沿用基本的对称变换,即可求得相对于任意直线的对称变换矩阵。设任意直线的方程为:Ax+By+C=0,直线在x轴和y轴上的截距分别为-C/A和-C/B,直线与x轴的夹角为,=arctg(-A/B)。如图5-7所示,对任意直线的对称变换可由以下几个步骤来完成:-C/A-C/A-C/BOYX图5-7对任意直线的对称变换(a)、平移直线,沿x向将直线平移,使其通过原点(也可以沿y向平移),其变换矩阵为:1T000 C CAC/A01(b)、绕原点旋转,使直线与x坐标轴重合(也可以与y轴重合),变换矩阵如下:cos()sin()0cossin0 T sin()cos()0sincos0R() 0 0 1=0 0 1(c)、对于x轴进行对称变换,其变换矩阵为:100TM(X)010001(d)、绕原点旋转,使直线回到原来与x轴成角的位置,变换矩阵为:cossin0 T sincos0R() 0 0 1(e)、平移直线,使其回到原来位置,变换矩阵为: 1 00 T0 10CAC/A01通过以上五个步骤,即可实现图形对任意直线的对称变换,其组合变换如下: cos2 sin20CTTTR()TM(X)TR()TC sin2 cos20AA(cos21)C/Asin2C/A1C(3)、组合变换顺序对图形的影响 XYXYOXOY 图5-8先平移后旋转 图5-9旋转后平移通过上面的变换可以看出,组合变换是通过基本变换的组合而成的,点或点集的多次变换可以一次完成,这要比逐次进行变换效率高。由于矩阵的乘法不符合交换律,即:[A][B]≠[B][A],因此,组合的顺序一般是不能颠倒的,顺序不同,则变换的结果亦不同。图5-8、图5-9显示了对T字图形进行不同顺序的基本变换的组合变换结果。七、程序实例对一个三维的六方体图形进行绕x轴旋转45度变换。具体操作:(1)、输入维数为3;(2)、输入顶点数为6;(3)、输入各个坐标:(0,0,0),(0,1,0),(1,0,0),(0,0,1)(0,1,1)(1,1,1);(4)、输入变换模式:此例是旋转,输入5;(5)、输入旋转轴,此处输入1;(6)、输入旋转度数:45。最后回车得到结果。八、源程序如下#include<stdio.h>#include<math.h>#defineN50#defineM3.14159265voiderwei();voidsanwei();voidmain(){intw;printf("请输入是几维图形变换:二维(2)或三维(3):");scanf("%d",&w);if(w==2)erwei();elseif(w==3)sanwei();}voiderwei(){floata[3][3]={{1,0,0},{0,1,0},{0,0,1}};intii,k,h;floatb[N][2];printf("请输入图形定点个数:");scanf("%d",&k);printf("请输入顶点坐标:\n");for(ii=0;ii<k;ii++)scanf("%f,%f",&b[ii][0],&b[ii][1]);printf("请输入变换模式:比例(1),对称(2),错切(3),平移(4),旋转(5):");scanf("%d",&h);if(h==1){intm,n;printf("请输入比例因子(x,y):");scanf("%d,%d",&m,&n);a[0][0]=m;a[1][1]=n;}elseif(h==2){intch;printf("请输入对称轴:x(1)或y(2):");scanf("%d",&ch);if(ch==1)a[1][1]=-1;if(ch==2)a[0][0]=-1;}elseif(h==3){intr;floatf;printf("请输入错切轴x(1)或y(2)和错切因子a(b):");scanf("%d,%f",&r,&f);if(r==1)a[1][0]=f;if(r==2)a[0][1]=f;}elseif(h==4){floati,j;printf("请输入平移坐标(x,y):");scanf("%f,%f",&i,&j);a[2][0]=i;a[2][1]=j;}elseif(h==5){floatg;printf("请输入旋转角度(度):");scanf("%f",&g);g=M*g/180;a[0][0]=cos(g);a[0][1]=sin(g);a[1][0]=-sin(g);a[1][1]=cos(g);}printf("经过变换后的坐标为:\n");for(ii=0;ii<k;ii++)printf("%.2f,%.2f\n",b[ii][0]*a[0][0]+b[ii][1]*a[1][0]+a[2][0],b[ii][0]*a[0][1]+b[ii][1]*a[1][1]+a[2][1]);}voidsanwei(){floata[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};floatc[N][3],x1,y1,z1;inth,q,jj;printf("请输入三维图形的顶点个数:");scanf("%d",&q);printf("请输入顶点坐标:\n");for(jj=0;jj<q;jj++)scanf("%f,%f,%f",&c[jj][0],&c[jj][1],&c[jj][2]);printf("请输入变换模式:比例(1),对称(2),错切(3),平移(4),旋转(5):");scanf("%d",&h);if(h==1){intl,m,n;printf("请输入比例因子(x,y,z):");scanf("%d,%d,%d",&l,&m,&n);a[0][0]=l;a[1][1]=m;a[2][2]=n;}elseif(h==2){intch;printf("请输入对称面:xy(1),yz(2),zx(3):");scanf("%d",&ch);if(ch==1)a[2][2]=-1;if(ch==2)a[0][0]=-1;if(ch==3)a[1][1]=-1;}elseif(h==3){intstr;floato,p;printf("请输入错切面:xy(1),yz(2),zx(3):");scanf("%d",&str);printf("请输入错切因子(a,b):");scanf("%f,%f",&o,&p);if(str==1){a[1][0]=o;a[2][0]=p;a[0][1]=o;a[2][1]=p;}if(str==2){a[0][1]=o;a[2][1]=p;a[0][2]=o;a[1][2]=p;}if(str==3){a[1][0]=o;a[2][0]=p;a[0][2]=o;a[1][2]=p;}}elseif(h==4){floatr,s,t;printf("请输入平移坐标(x,y,z):");scanf("%f,%f,%f",&r,&s,&t);a[3][0]=r;a[3][1]=s;a[3][2]=t;}elseif(h==5){inte;floatdu;printf("请输入旋转轴,x轴(1),y轴(2),z轴(3):");scanf("%d",&e);printf("请输入旋转角度(度):");scanf("%f",&du);du=M*du/180;if(e==1){a[1][1]=cos(du);a[2][1]=-sin(du);a[1][2]=sin(du);a[2][2]=cos(du);}if(e==2){a[0][0]=cos(du);a[2][0]=-sin(du);a[0][2]=sin(du);a[2][2]=cos(du);}if(e==3){a[0][0]=cos(du);a[1][0]=-sin(du);a[0][1]=sin(du);a[1][1]=cos(du);}}printf("经变换后坐标为:\n");for(jj=0;jj<q;jj++){x1=c[jj][0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年哈尔滨银行七台河分行招聘外包员工5人备考题库完整答案详解
- 2025年中国航空工业集团凯天岗位招聘备考题库及答案详解参考
- 2025年龙岩市上杭县人民法院招聘编外人员的备考题库及1套完整答案详解
- 2026年深空探测数据使用合同
- 2025年北京西城区高二(上)期末历史试题和答案
- 监管协管员面试题及答案解析(2025版)
- 有色金属行业2025Q3总结:Q3盈利同比继续上行拥抱资源新周期
- 中国社会科学院世界经济与政治研究所2026年度公开招聘第一批专业技术人员6人备考题库及答案详解一套
- 来宾市公安局2025年第三次招聘辅警备考题库及参考答案详解一套
- 崇左凭祥市应急管理局招聘考试真题2024
- 2025年淮北市相山区公开招考村(社区)后备干部66名考试笔试模拟试题及答案解析
- 柔性引才合同协议
- 2025中原农业保险股份有限公司招聘67人笔试考试参考试题及答案解析
- 2025年战略投资专员岗位招聘面试参考试题及参考答案
- 2025年小学教师素养大赛试题(含答案)
- 2025年国家开放大学《中国现代文学专题》形考任务试题与答案
- 军事理论课指挥控制技术
- 2024年河北秦皇岛市公安医院招聘考试真题
- 事业单位会计面试热点问题汇编
- 工程工程培训课件
- 学堂在线 雨课堂 学堂云 经济学原理(微观部分) 章节测试答案
评论
0/150
提交评论