二维图形编辑系统c语言实现,实验四01二维图形的几何变换.doc-资源下载在线文库www.lddoc.cn...

实验四01 二维图形的几何变换.doc

计算机图形学实验指导书陈华光、陈多、刘长松编专业班级 计算机0902 _ 姓 名 田鹏 _ 学 号 200903010225 _湖南工程学院二一二年六月计算机图形学实验报告四实验名称 绘制简单的三维图形 评分 实验日期 2012 年 6 月 12 日 指导教师 李长松姓名 专业班级 计算机0902 学号 200903010211 一、实验目的1、复习用二维图来表示三维立体图形,三视图的表示及的三视图的变换矩阵2、掌握用C语言编程实现三维简单立体的正等测投影的绘制3、掌握用C语言编程实现三维简单立体的三视图的绘制4、掌握用C语言编程实现三维简单立体的透视图的绘制5、用C语言编写的图形变换函数二、实验要求1、在屏幕上绘制出一个长方体或简单几何体的正等测投影的几何图形,要求在图形下方标出是正等侧、还是正二侧投影图形。2、在屏幕上绘制出一个长方体或简单几何体的三视图投影图形,要求在图形下方标出是什么投影图形。3、在屏幕上绘制出一个长方体或简单几何体的透视投影图形。三、关键算法及实现原理1、 二维屏幕表示三维立体图的关键屏幕是一个二维的平面空间,要在它上做出三维的图形,就必须把三维的空间图形通过一个投影变换变为二维的图形,即投影变换把三维坐标点(x,y,z)变为x,0,z。2、 投影变换的类型3、 按下述步骤编写绘制三维图形的函数 在草稿纸上给出草图,并确定各顶点的序号和相应的顶点坐标值,建立顶点表和连边表。 在程序中定义三个数组,用于存放顶点的x,y,z的坐标值。 实施对立方体进行相应的投影变换,即对顶点矩阵与变换矩阵相乘,得到一个新的顶点矩阵。 用新顶点表的坐标值,注意些时只有x坐标和z坐标,y坐标已在投影中消掉,按边表的连线规则,用line函数在顶点之间两两连线。3、将每一个几何变换编写成一个函数,在主程序中进行坐标变换时,直接调用相应的函数即可;变换后调用绘图函数用不同颜色在屏幕上绘出变换后的图形。四、程序调试中的问题用matlab绘制二维与三维曲线和三维曲面的过程中,不能灵活使用一些常用的绘图函数如mesh,surf等。五、程序运行结果或数据x-50.15;y-40.14;x,ymeshgridx,y;z0.5*x.3y.2;subplot2,2,1;meshx,y,z;title三维网格曲面subplot2,2,2;surfx,y,z;title三维曲面subplot2,2,3;meshcx,y,z;title三维网格曲面带有等值线subplot2,2,4;surfcx,y,z;title三维曲面带有等值线六、实验收获及体会通过这次实验使我对二维和三维图形的绘制,使我更加了解了图形的绘制过程,提高了动手能力,使我能够在以后解决其它问题时使用matlab作图更加熟练。参考源程序可附页includegraphics.hincludeconio.hincludedos.hincludemath.hdouble xmax639.0, ymax399.0;double f44,xx,yy,zz,dd;int scxdouble xj int x; xint-xjxmax/2; returnx;int scydouble yj int y; yymax-intyjymax/2; returny;void tv f001.0;f010.0;f020.0;f030.0; f100.0;f110.0;f120.0;f130.0; f200.0;f210.0; f221.0;f230.0; f300.0;f310.0; f321.0;f331.0;void th int n f001.0;f010.0;f020.0;f030.0; f100.0;f110.0;f12-1.0;f130.0; f200.0;f210.0; f220.0;f230.0; f300.0;f310.0; f32-n;f331.0;void tw int d f000.0;f010.0;f020.0;f030.0; f10-1.0;f110.0;f120.0;f130.0; f200.0;f210.0; f221.0;f230.0; f30-d;f310.0; f320.0;f331.0;void teq f000.707;f010.0;f02-0.408;f030.0; f10-0.707;f110.0;f12-0.408;f130.0; f200.0;f210.0; f220.816;f230.0; f300.0;f310.0; f320.0;f331.0;void tt1yqdouble l,double n,double m,double q f001.0;f010.0;f020.0;f030.0; f100.0;f110.0;f120.0;f13q; f200.0;f210.0; f221.0;f230.0; f30l;f310.0; f32n;f33m*q1;void axis linescx0.0,scyymax/2,scx0,scy0.0; linescx0,scy0,scxxmax/2,scy-ymax/2-19; linescx0,scy0,scx-xmax/2,scy-ymax/2-19; outtextxyscx0,ymax/210,O; outtextxyscx-xmax/210,scy-ymax/2-10,Y; outtextxyscxxmax/2,scy-ymax/2-10,X; outtextxyscx03,scyymax/26,Z;double affine3xdouble x,double y,double z,double d xxx*f00y*f10z*f20d*f30; returnxx;double affine3ydouble x,double y,double z,double d yyx*f01y*f11z*f21d*f31; returnyy;double affine3zdouble x,double y,double z,double d zzx*f02y*f12z*f22d*f32; returnzz;double affine3ddouble x,double y,double z,double d ddx*f03y*f13z*f23d*f33; returndd;void drawx1,z1double x18,z18; linescxx10,scyz10,scxx11,scyz11; linescxx10,scyz10,scxx13,scyz13; linescxx11,scyz11,scxx12,scyz12; linescxx12,scyz12,scxx13,scyz13; linescxx12,scyz12,scxx11,scyz11; linescxx13,scyz13,scxx14,scyz14; linescxx12,scyz12,scxx17,scyz17; linescxx11,scyz11,scxx16,scyz16; linescxx14,scyz14,scxx17,scyz17; linescxx14,scyz14,scxx15,scyz15; linescxx16,scyz16,scxx17,scyz17; linescxx16,scyz16,scxx15,scyz15; linescxx15,scyz15,scxx10,scyz10;void mainint driveDETECT,mode; static double x060.0,0.0,0.0,175.0,175.0,60.0,0.0,0.0; static double y075.0,75.0,75.0,75.0,0.0,0.0,0.0,0.0; static double z0125.0,125.0,0.0,0.0,0.0,125.0,125.0,0.0; static double x18,y18,z18,dd8; static double x28,y28,z28; static double x38,y38,z38; int i; double x,xx,yy,zz,zt; initgraphdrive,mode,ctc3bgi; axis; teq; fori0;i7;i x1iaffine3xx0i,y0i,z0i,1.0; y1iaffine3yx0i,y0i,z0i,1.0; z1iaffine3zx0i,y0i,z0i,1.0; setcolorRED; drawx1,z1; ztscyz1010; outtextxyscxx10,zt,tequ ; getch; tw20; fori0;i7;i x1iaffine3xx0i,y0i,z0i,1.0; y1iaffine3yx0i,y0i,z0i,1.0; z1iaffine3zx0i,y0i,z0i,1.0; setcolorBLUE; drawx1,z1; ztscyz1010; outtextxyscxx10,zt,tw ; getch; th20; fori0;i7;i x1iaffine3xx0i,y0i,z0i,1.0; y1iaffine3yx0i,y0i,z0i,1.0; z1iaffine3zx0i,y0i,z0i,1.0; setcolorBLUE; drawx1,z1; ztscyz1010; outtextxyscxx10,zt,th ; getch; tv; fori0;i7;i x1iaffine3xx0i,y0i,z0i,1.0; y1iaffine3yx0i,y0i,z0i,1.0; z1iaffine3zx0i,y0i,z0i,1.0; setcolorBLUE; drawx1,z1; ztscyz1010; outtextxyscxx10,zt,tv ; getch;tt1yq10.0,-20.0,-30.0,-0.005; fori0;i7;i x1iaffine3xx0i,y0i,z0i,1.0; y1iaffine3yx0i,y0i,z0i,1.0; z1iaffine3zx0i,y0i,z0i,1.0; ddiaffine3dx0i,y0i,z0i,1.0; x1ix1i/ddi-250; y1iy1i/ddi; z1iz1i/ddi; setcolorGREEN; drawx1,z1; getch; closegraph;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值