欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    图形变换C语言课程设计.docx

    • 资源ID:6662641       资源大小:166.50KB        全文页数:19页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    图形变换C语言课程设计.docx

    课程设计报告课程名称:学院:-专业班级:学生姓名:学号:指导教师:完成时间:报告成绩:日期评阅意见:评阅教师个图形变换函数的设计一、设计目的1、巩固面向对象编程的基本理论知识:2、进一步熟悉ViSUaIC+6.0的编程环境,掌握相关控件的使用方法;3、更深层次的理解自定义函数、数组和类;4、更深层次的理解自定义函数和for语句;5、增强实践操作能力:6、提高综合运用所学理论知识独立分析和解决问题的能力。二、设计要求用任一种高级语言编写出34种常用的二维、三维图形基本变换程序要求在报告中写出具体的调试过程,并附上源程序。三、设计内容本程序为一个综合型程序:能实现二维和三维的图形的各种变换。例如,可以进行二维(或三维)图形的比例,复制,平移,对称,旋转,五种变换。程序预设图形顶点个数最多不超过50个,如果需要扩大顶点数目,直接在程序开头的N值进行赋值。在进行旋转变换时,预设圆周率为M值,如果需修改时,直接对程序开头的M值进行修改。程序功能的原理是通过变换基本矩阵,实现对顶点不同的变换,从而实现对图形的变换。四、具体步骤1:输入图形是几维图形.(二维或三维);2:输入顶点个数(小于50),然后输入各点坐标,注意输完一个坐标后回车后输入下一个坐标;3:输入变换类型,根据提示输入代表类型的数字,接下来输入相关变换所需要的参数;4:待各个参数输入完毕后,回车后得到结果。五、设计要求1、对系统进行功能模块设计、算法和控制模块设计;2、系统设计要有实用性;3、编程简单易懂,可用,功能较全面;4、课题说明书、流程图条理要清楚;5、设计完成后,每人上交一份设计报告说明书,必须用专用的课程设计报告纸,要求包含以下内容:题目,基本原理叙述,流程图,源程序清单,运行结果,调试情况分析,设计总结体会,致谢;6、进度安排(1周)题目提前1周布置,使学生作好充分的准备。分析设计准备阶段建议1天,编程调试阶段建议2天,总结报告和书写说明书和考核阶段建议2天。六、图形变换函数的设计方法与过程1、点的矩阵表示在二维空间中,用坐标(X,y)表示平面上的一点。为了便于进行各种变换运算,通常把二维空间中的点表示成2x1行矩阵或者表示成1x2列矩阵。即2,二维图形的矩阵表示点是构成图形的最基本要素,可用点的集合(简称点集)来表示一个二维图形,其矩阵的形式为:3、二维图形的基本变换在计算机绘图中,常常要对图形进行比例、对称、旋转、平移、错切、投影等各种变换,既然图形可以用点集来表示,那么,二维图形的基本变换就可以通过点集的变换来实现。点的位置改变了,图形就会随之改变。矩阵运算、旧点(集)X变换矩阵新点(集)(1)、平移变换平移是指点从一个位置移动到另一个位置的直线移动,即pay)-*p*,.v*)(J令X、Y轴方向的偏移量分别为1和m,则rli=x+/y=y+m图5/平移变换(2),比例变换设a和d分别为x、Y轴方向的缩放比例系数,则点p(X,y)-p*(N,y*),变换为fx*=ora0y*=dyL()d式中,称为比例变换矩阵,比例变换如图5-2。图52比例变换(等比例变换)比例因子a和d分别取不同的值(a,d>0)将获得不同的变换结果:(a)、恒等变换"=d=l,变换后点的坐标不变。(b),等比变换"=d:l,当a=">l时,变换后图形等比例放大如图5-2所示。当a="<l时,变换后图形等比例缩小。(C)、非等比变换2OT=若a",变换后图形产生畸变。如取变换矩阵为L005J,a=2,d=05,则对图形框的变换为:102020102020101020 1040 1()40 520 5变换后的图形如图5-3所示,图中虚线框为变换后的图形。图5-3不等比例变换(3)、旋转变换设点(X,y)绕坐标原点逆时针旋转°角,则点P(%y)-p*(x*,产)的变换为CoSe Sine-Sine COSe*=xcos+ysin9y*=-xsin6+ycosO式中,为旋转变换矩阵。(4),对称变换对称变换即产生图形的镜像,用来计算对称图形,也称为镜射变换。包括对于坐标轴、坐标原点、±45°直线和任意直线的对称变换。(a)、对X轴的对称变换对X轴的对称变换应有*=%)*=-y,变换矩阵为:T。-1L变换果如图5-4所示。对Y轴的对称变换=_x,y*=y,变换矩阵为:0U,变换结果如图5-4所示。对Y轴对称原始位置O对原点对称对X轴对称图5-4对称变换(b),对原点的对称变换-10变换矩阵为:°-1J,对称变换结果如图5-4所示。(c)、对±45"线的对称变换对+45。线的对称变换T对+45。线的对称应有:X*=FV=L则变换矩阵为:L1°.对称变换结果如图5-5所示。对-45°线的对称变换对-45。线对称应有:x*=-)',y*=-*,则变换矩阵为:.对称变换结果如图5-5所示。(5)、错切变换错切用于描述受到扭曲、剪切后的几何体形状。x*y*-x+cyy+v=xyci_xyTIb式中丁=cH,为错切变换矩阵,其中C和b不同时为0。(a)、沿X轴向错切令-cU错切变换矩阵中的b=0,且c0,其变换就是沿X轴方向错切。即l0一x*y*=x+cyy=ycU=x力当c>0时,错切沿着X轴的正向;当CVO时,错切沿X轴负向。错切直线与Xy1fg=轴的夹角为Cy%如果设c=2,对图5-6a中的方形图框进行错切变换,有:010''20KrM)10O-3010Ml021-100J)0_00沿X轴方向错切变换的结果如图5-6b所示。(b)、沿Y轴向错切令1错切变换矩阵中的C=O,且b0,其变换就是沿Y轴方向的错切。即ri H卜* y* = y + bx_x y o 1 _x yT当b0时,错切沿着Y轴的正向:当bVO时,错切沿Y轴负向。错切直线与YX 1 tga = 轴的夹角为hx b如果设b=2,对方形图框进行错切变换,有:0101001010 l 20 o 1O沿Y轴方向错切变换的结果如图5-6c所示。y(0,10)(10,10)0(10,0) Xa)原始图形0 IO10 3010 20 0 0(30,10)(20,10)(10,0)(OJO)¢0,0)(30,10)/ / (20,10)b)沿X轴方向错切图5-6错切变换c)沿Y轴方向错切注意:上面介绍的错切变换的错切方向是指第I象限而言,其余象限的点的错切方向应作相应的改变。4、二维齐次坐标和齐次变换矩阵(1)、二维齐次坐标前面我们己经介绍了五种基本变换,除了平移变换以外,其余四种变换的系数都a可以用一个2x2矩阵来表示,即LC"。变换矩阵中a、b、c、d为变换比例因子,它们取值不同,可以实现各种不同变换。为了统一,可以将二维基本变换矩阵的形式由2X2阶矩阵扩充成一个3X2阶矩阵,即a匕T=cd这样以来又出现了一个新的问题,即二维图形的点集矩阵是n×2阶,而变换矩阵是3X2阶,二者无法相乘,不能进行图形变换运算。为此,引入齐次坐标的概念。在齐次坐标系中,n维空间的位置矢量,用n+1维矢量表示,即二维空间的位置矢量用三维矢量表示。一个二维位置矢量*刊用齐次坐标表示即为*Vm,其中的h为附加坐标,是一个不为零的参数。一个二维点的齐次坐标表示不是唯一的,如二维点20叨可以有I2010U,W202,依)403,等无穷组齐次坐标。通过对齐次坐标的规范化,即用各坐标分别除以附加坐标,得到一个规范化坐标"yU,也就是将h转化为1。通过二维点的齐次坐标表示,把二维图形的点集矩阵扩充为nX3阶矩阵。这样,点集矩阵就可以同变换矩阵进行乘法运算了:bCdxy1/叫=x+y+/bx-dy+n(2)、二维齐次变换矩阵为了使二维变换矩阵具有更多的功能,可将3X2阶变换矩阵进一步扩充为3X3abpT=Cd4阶矩阵,其各元素的功能和几何意义各不相同,可以分割成四块:Um'IabI其中2X2阶矩阵LC可以实现图形的比例、对称、错切、旋转等变换;1X2阶丽h中可以实现图形的平移变换;2X1阶矩阵p"F可以实现图形的透视变换:而同可以实现图形的全比例变换。5、二维图形的组合变换有些变换仅用种基本变换是不能实现的,必须有两种或多种基本变换组合才能实现。这种由多种基本变换组合而成的变换称之为组合变换,相应的变换矩阵叫做组合变换矩阵。组合变换的目的是对一个点进行一次性变换,使得变换的效率更高。(1)、绕任意点旋转变换平面图形绕任意点P(x*,y*)旋转a角,需要通过以下几个步骤来实现:(a)、将旋转中心平移到原点,变换矩阵为:"1O"J=O1OTp-%L(b),将图形绕坐标系原点旋转角,变换矩阵为:COSaSinaOTRia)=-sincrCOSaOOO1(c)、将旋转中心平移回到原来位置,变换矩阵为:一100一“01O因此,绕任意点的旋转变换矩阵为:XP(I-CoSa)+尸sin-xpsin+yp(l-cos)1(2)、对任意直线的对称变换基本变换中的对称变换适用于通过坐标原点的任意直线。如果直线不通过原点,则首先将该直线平移,使其过原点,然后再沿用基本的对称变换,即可求得相对于任意直线的对称变换矩阵。设任意直线的方程为:Ax+By+C=O,直线在X轴和y轴上的截距分别为-C/A和-C/B,直线与X轴的夹角为,a=arctg(-A/B)。如图5-7所示,对任意直线的对称变换可由以下几个步骤来完成:图5-7对任意直线的对称变换(a)、平移直线,沿X向将直线平移,使其通过原点(也可以沿y向平移),其变换矩阵为:1O0'=010C/A0I(b),绕原点旋转,使直线与X坐标轴重合(也可以与y轴重合),变换矩阵如下COS(-)sin()0COSa-Sina0Trlg=-sin()CoS(-)0SinaCoSa000001(C)、对于X轴进行对称变换,其变换矩阵为:I0CrElKJC=°T000IJ(d)、绕原点旋转,使直线回到原来与X轴成角的位置,变换矩阵为:CoSaSinaO-G=-Sinacos00O1(e),平移直线,使其回到原来位置,变换矩阵为:I00Tc/=()1O-C/A01通过以上五个步骤,即可实现图形对任意直线的对称变换,其组合变换如下:cos2sin20T=专TRg)*"(X)4-)工=sin2-CoS2O(cos2-1)CAsin2CA1(3)、组合变换顺序对图形的影响LT图5-8先平移后旋转通过上面的变换可以看出,组合变换是通过基本变换的组合而成的,点或点集的多次变换可以一次完成,这要比逐次进行变换效率高。由于矩阵的乘法不符合交换律,BP:IAB1BA.因此,组合的顺序一般是不能颠倒的,顺序不同,则变换的结果亦不同。图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>#defineN50SdefineM3.14159265voiderwei();voidsanwei();voidmain()intw;Printf("请输入是几维图形变换:二维(2)或三维(3):");scanf("%d",&w);if(w=2)erwei();elseif(w=3)sanwei();voiderwei()floata33=l,0,0,0,l,0,0,0,l;intii,k,h;floatbN2;Printf("请输入图形定点个数:9:scanf("%d",&k);PrirItf("请输入顶点坐标:rr);for(ii=0;iik;ii+)SCanf("%f,%fz*,Abii0f&bii1);Printf("请输入变换模式:比例(1),对称(2),错切(3),平移(4),旋转(5):scanf("%d",&h);if(h=l)intm,口;PHintf("请输入比例因子(/y):");scanf("%d,%d",&m,&n);a00=m;all=n;elseif(h=2)intch;Printf("请输入对称轴:x(l)或y(2):");scanf(%dzx,&ch);if(ch=l)al1=-1;if(ch=2)a0O=-l:elseif(h=3)itr;floatf;Printf("请输入错切轴x(l)或y(2)和错切因子a(b):");scanf(%d,%f",&r,&f);if(r=l)al0=f;if(r=2)a0l=f;elseif(h=4)floati,j;Printf("请输入平移坐标(x,y):");scanf(%f,%f",&i,&j);a20=ia2l=j:elseif(h=5)floatg;Printf("请输入旋转角度(度):");SCanf("%f",&g);g=M*g180;a00=cos(g):a0l=sin(g);al0=-sin(g);all=cos(g);Printf("经过变换后的坐标为:n");for(ii=Oii<kjii+÷)printf(%.2f,%.2fn,bii0*a0O+biil*al0+a2O,biiO*a0l+biil*all÷a21);voidsanwei()floata44>l,0,0,0,0,l,0,0,0,O11,0,0,0,0,1;floatcN3,xl,yl,zl;inth,q,jj;Printf("请输入三维图形的顶点个数:");SCanf("%d",&q);Printf("请输入顶点坐标:n");for(jj=0;jj<q;jj+)SCanf("%f,%f,%f",&cjjO,Acjj1,&cjj2):Printf("请输入变换模式:比例(1),对称(2),错切(3),平移(4),旋转(5):);scaf(",&h);if(h1)int1,m,n;Printf("请输入比例因子(x,y.z):");scanf("%d,%d,%d",&1,&m,&n);a00=l;all=m;a22=;elseif(h=2)intch;Printf("请输入对称面:xy(1),yz(2),zx(3):");SCanf("%d",&ch);if(ch=l)a=T;if(ch=2)a00=-l;if(ch=3)al1=-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=l)al0=o:a20=p:a0l=o:a2l=p:if(str=2)a0l=oja2l=p;a02=o:al2=p;if(str=3)al0=oja20=pja02=ojal2=pjelseif(h=4)floatr,s,t;Printf("请输入平移坐标(x,y,z):");scanf("%f,%f,%f",&r,&s,&t);a30=r;a3l=s;a32=t;elseif(h=5)inte;floatdu;Printf("请输入旋转轴,X轴(1),y轴(2),Z轴(3):");scanf("%d",&e);Printf("请输入旋转角度(度):");scanf("%f",&du);du=M*du180;if(e=l)all=cos(du);a2l=-sin(du);al2=sin(du);a22=cos(du);if(e=2)a00=cos(du);a20=-sin(du);a02=sin(du);a22=cos(du);if(e=3)a0O=cos(du);al0=-sin(du);aOl=sin(du);all=cos(du)Printf("经变换后坐标为:n");for(jj=O;jj<q;jj+)xl=cjj0*a0O+cjjl*alO+cjj2*a20+a30;yl=cjj0*a0l+cjjl*all+cEjjE2*aL2El+aE3El;Zl=Cuj0*a02+cjj*al2+cjj*a+a;Printf("%.2f,%.2f,%.2fn,xl,yl,zl);九、运算结果如下图凉b"E本专业CADCAMD.bu讣稼合变换fc、/'入入 0。0Ili入入>,0,1 ,0,0,1 ,1 F抽lj÷li*00请请请九SiL 口 L请请请经b维星几着是三顶黑标式,度为e- 重角标, i坐00 旋后B.00 7100 .7141二维(2)或三维(3):4531平移YJ ,旋转(5): 5*essanykeytocontinue十、设计心得体会课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程"千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础说实话,课程设计真的有点累然而,当我一着手清理自己的设计成果,漫漫回味这1周的心路历程,一种少有的成功喜悦即刻使倦意顿消.虽然这是我刚学会走完的第一步,也是人生的一点小小的胜利,然而它令我感到自己成熟的许多,另我有了一中”春眠不知晓"的感悟.通过课程设计,使我深深体会到,干任何事都必须耐心,细致.课程设计过程令世人无比震惊的事故,我不禁时刻提示己,一定呀养成一种高度负责,认真对待的良好习惯.这次课程设计使我在工作作风上得到了一次难得的磨练.短短一周是课程设计,使我发现了自己所掌握的知识是真正如此的映乏,自己综合应用所学的专业知识能力是如此的不足,几年来的学习了那么多的课程,今天才知道自己并不会用.想到这里,我真的心急了,老师却对我说,这说明课程设计确实使我你有收获了.老师的亲切鼓励了我的信心,使我更加自信最后,我要感谢我的老师们,是您严厉批评唤醒了我,是您的敬业精神感动了我,是您的教诲启发了我,是您的期望鼓励了我,我感谢老师您今天又为我增添了一幅坚硬的翅膀.今天我为你们而骄傲,明天你们为我而自豪。十一、参考文献(1)、申在明.C语言程序设计600例,人民邮电出版社(2)、沈大林.C语言程序设计案例教程,中国铁道出版社(3)、张基温.C语言程序设计案例教程,清华大学出版社(4)、C语言程序设计(第二版),清华大学出版社

    注意事项

    本文(图形变换C语言课程设计.docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开