收藏 分享(赏)

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

上传人:tkhy51908 文档编号:4386842 上传时间:2018-12-26 格式:DOC 页数:5 大小:292.50KB
下载 相关 举报
实验四01 二维图形的几何变换.doc_第1页
第1页 / 共5页
实验四01 二维图形的几何变换.doc_第2页
第2页 / 共5页
实验四01 二维图形的几何变换.doc_第3页
第3页 / 共5页
实验四01 二维图形的几何变换.doc_第4页
第4页 / 共5页
实验四01 二维图形的几何变换.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、计算机图形学实验指导书陈华光、陈多、刘长松编湖南工程学院二一二年六月专业班级 计算机 0902 _ 姓 名 田 鹏 _ 学 号 200903010225 _计算机图形学实验报告四实验名称 绘制简单的三维图形 评分 实验日期 2012 年 6 月 12 日 指导教师 李长松 姓名 专业班级 计算机 0902 学号 200903010211 一、实验目的1、复习用二维图来表示三维立体图形,三视图的表示及的三视图的变换矩阵2、掌握用 C 语言编程实现三维简单立体的正等测投影的绘制3、掌握用 C 语言编程实现三维简单立体的三视图的绘制4、掌握用 C 语言编程实现三维简单立体的透视图的绘制5、用 C 语

2、言编写的图形变换函数二、实验要求1、在屏幕上绘制出一个长方体或简单几何体的正等测投影的几何图形,要求在图形下方标出是正等侧、还是正二侧投影图形。2、在屏幕上绘制出一个长方体或简单几何体的三视图投影图形,要求在图形下方标出是什么投影图形。3、在屏幕上绘制出一个长方体或简单几何体的透视投影图形。三、关键算法及实现原理1、 二维屏幕表示三维立体图的关键:屏幕是一个二维的平面空间,要在它上做出三维的图形,就必须把三维的空间图形通过一个投影变换变为二维的图形,即投影变换把三维坐标点(x,y,z)变为(x ,0,z )。2、 投影变换的类型 投 影 平 行 投 影 正 平 行 投 影斜 平 行 投 影透

3、视 投 影 一 点 透 视三 点 透 视正 投 影正 轴 侧 投 影 主 视 图俯 视 图侧 视 图二 点 透 视一 点 透 视三 点 透 视 正 等 侧正 二 侧3、 按下述步骤编写绘制三维图形的函数 在草稿纸上给出草图,并确定各顶点的序号和相应的顶点坐标值,建立顶点表和连边表。 在程序中定义三个数组,用于存放顶点的(x,y,z)的坐标值。 实施对立方体进行相应的投影变换,即对顶点矩阵与变换矩阵相乘,得到一个新的顶点矩阵。 用新顶点表的坐标值,注意些时只有 x 坐标和 z 坐标,y 坐标已在投影中消掉,按边表的连线规则,用 line 函数在顶点之间两两连线。3、将每一个几何变换编写成一个函数

4、,在主程序中进行坐标变换时,直接调用相应的函数即可;变换后调用绘图函数用不同颜色在屏幕上绘出变换后的图形。四、程序调试中的问题用 matlab 绘制二维与三维曲线和三维曲面的过程中,不能灵活使用一些常用的绘图函数如mesh,surf 等。五、程序运行结果或数据x=-5:0.1:5;y=-4:0.1:4;x,y=meshgrid(x,y);z=0.5*x.3+y.2;subplot(2,2,1);mesh(x,y,z);title(三维网格曲面 )subplot(2,2,2);surf(x,y,z);title(三维曲面 )subplot(2,2,3);meshc(x,y,z);title(三维

5、网格曲面 (带有等值线) )subplot(2,2,4);surfc(x,y,z);title(三维曲面 (带有等值线) )六、实验收获及体会通过这次实验使我对二维和三维图形的绘制,使我更加了解了图形的绘制过程,提高了动手能力,使我能够在以后解决其它问题时使用 matlab 作图更加熟练。参考源程序(可附页)#include#include#include#includedouble xmax=639.0, ymax=399.0;double f44,xx,yy,zz,dd;int scx(double xj) int x;x=(int)(-xj+xmax/2);return(x);int s

6、cy(double yj) int y;y=ymax-(int)(yj+ymax/2);return(y);void tv()f00=1.0;f01=0.0;f02=0.0;f03=0.0;f10=0.0;f11=0.0;f12=0.0;f13=0.0;f20=0.0;f21=0.0; f22=1.0;f23=0.0;f30=0.0;f31=0.0; f32=1.0;f33=1.0;void th( int n)f00=1.0;f01=0.0;f02=0.0;f03=0.0;f10=0.0;f11=0.0;f12=-1.0;f13=0.0;f20=0.0;f21=0.0; f22=0.0;f2

7、3=0.0;f30=0.0;f31=0.0; f32=-n;f33=1.0;void tw( int d)f00=0.0;f01=0.0;f02=0.0;f03=0.0;f10=-1.0;f11=0.0;f12=0.0;f13=0.0;f20=0.0;f21=0.0; f22=1.0;f23=0.0;f30=-d;f31=0.0; f32=0.0;f33=1.0;void teq()f00=0.707;f01=0.0;f02=-0.408;f03=0.0;f10=-0.707;f11=0.0;f12=-0.408;f13=0.0;f20=0.0;f21=0.0; f22=0.816;f23=0

8、.0;f30=0.0;f31=0.0; f32=0.0;f33=1.0;void tt1yq(double l,double n,double m,double q)f00=1.0;f01=0.0;f02=0.0;f03=0.0;f10=0.0;f11=0.0;f12=0.0;f13=q;f20=0.0;f21=0.0; f22=1.0;f23=0.0;f30=l;f31=0.0; f32=n;f33=m*q+1;void axis()line(scx(0.0),scy(ymax/2),scx(0),scy(0.0);line(scx(0),scy(0),scx(xmax/2),scy(-ym

9、ax/2)-19);line(scx(0),scy(0),scx(-xmax/2),scy(-ymax/2)-19);outtextxy(scx(0),ymax/2+10,“O“);outtextxy(scx(-xmax/2+10),scy(-ymax/2)-10,“Y“);outtextxy(scx(xmax/2),scy(-ymax/2)-10,“X“);outtextxy(scx(0)+3,scy(ymax/2)+6,“Z“);double affine3x(double x,double y,double z,double d)xx=x*f00+y*f10+z*f20+d*f30;re

10、turn(xx);double affine3y(double x,double y,double z,double d)yy=x*f01+y*f11+z*f21+d*f31;return(yy);double affine3z(double x,double y,double z,double d)zz=x*f02+y*f12+z*f22+d*f32;return(zz);double affine3d(double x,double y,double z,double d)dd=x*f03+y*f13+z*f23+d*f33;return(dd);void draw(x1,z1)doubl

11、e x18,z18;line(scx(x10),scy(z10),scx(x11),scy(z11);line(scx(x10),scy(z10),scx(x13),scy(z13);line(scx(x11),scy(z11),scx(x12),scy(z12);line(scx(x12),scy(z12),scx(x13),scy(z13);line(scx(x12),scy(z12),scx(x11),scy(z11);line(scx(x13),scy(z13),scx(x14),scy(z14);line(scx(x12),scy(z12),scx(x17),scy(z17);lin

12、e(scx(x11),scy(z11),scx(x16),scy(z16);line(scx(x14),scy(z14),scx(x17),scy(z17);line(scx(x14),scy(z14),scx(x15),scy(z15);line(scx(x16),scy(z16),scx(x17),scy(z17);line(scx(x16),scy(z16),scx(x15),scy(z15);line(scx(x15),scy(z15),scx(x10),scy(z10);void main()int drive=DETECT,mode;static double x0=60.0,0.

13、0,0.0,175.0,175.0,60.0,0.0,0.0;static double y0=75.0,75.0,75.0,75.0,0.0,0.0,0.0,0.0;static double z0=125.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;initgraph(axis();teq();for(i=0;i=7;i+)x1i=affine3x

14、(x0i,y0i,z0i,1.0);y1i=affine3y(x0i,y0i,z0i,1.0);z1i=affine3z(x0i,y0i,z0i,1.0);setcolor(RED);draw(x1,z1);zt=scy(z10)+10;outtextxy(scx(x10),zt,“tequ “);getch();tw(20);for(i=0;i=7;i+)x1i=affine3x(x0i,y0i,z0i,1.0);y1i=affine3y(x0i,y0i,z0i,1.0);z1i=affine3z(x0i,y0i,z0i,1.0);setcolor(BLUE);draw(x1,z1);zt=

15、scy(z10)+10;outtextxy(scx(x10),zt,“tw “);getch();th(20);for(i=0;i=7;i+)x1i=affine3x(x0i,y0i,z0i,1.0);y1i=affine3y(x0i,y0i,z0i,1.0);z1i=affine3z(x0i,y0i,z0i,1.0);setcolor(BLUE);draw(x1,z1);zt=scy(z10)+10;outtextxy(scx(x10),zt,“th “);getch();tv();for(i=0;i=7;i+)x1i=affine3x(x0i,y0i,z0i,1.0);y1i=affine

16、3y(x0i,y0i,z0i,1.0);z1i=affine3z(x0i,y0i,z0i,1.0);setcolor(BLUE);draw(x1,z1);zt=scy(z10)+10;outtextxy(scx(x10),zt,“tv “);getch();tt1yq(10.0,-20.0,-30.0,-0.005);for(i=0;i=7;i+)x1i=affine3x(x0i,y0i,z0i,1.0);y1i=affine3y(x0i,y0i,z0i,1.0);z1i=affine3z(x0i,y0i,z0i,1.0);ddi=affine3d(x0i,y0i,z0i,1.0);x1i=x1i/ddi-250;y1i=y1i/ddi;z1i=z1i/ddi;setcolor(GREEN);draw(x1,z1);getch();closegraph();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 职业教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报