计算机图形学实验报告实验名称绘制简单的三维图形评分实验日期年月日指导教师姓名专业班级学号一、实验目的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函数在顶点之间两两连线。4、将每一个几何变换编写成一个函数,在主程序中进行坐标变换时,直接调用相应的函数即可;变换后调用绘图函数用不同颜色在屏幕上绘出变换后的图形。四、程序调试中的问题五、程序运行结果或数据#include#include#include#includedoublexmax=639.0,ymax=399.0;doublef[4][4],xx,yy,zz,dd;intscx(doublexj){intx;x=(int)(-xj+xmax/2);return(x);}intscy(doubleyj){inty;y=ymax-(int)(yj+ymax/2);return(y);}voidtv(){f[0][0]=1.0;f[0][1]=0.0;f[0][2]=0.0;f[0][3]=0.0;f[1][0]=0.0;f[1][1]=0.0;f[1][2]=0.0;f[1][3]=0.0;f[2][0]=0.0;f[2][1]=0.0;f[2][2]=1.0;f[2][3]=0.0;f[3][0]=0.0;f[3][1]=0.0;f[3][2]=1.0;f[3][3]=1.0;}voidth(intn){f[0][0]=1.0;f[0][1]=0.0;f[0][2]=0.0;f[0][3]=0.0;f[1][0]=0.0;f[1][1]=0.0;f[1][2]=-1.0;f[1][3]=0.0;f[2][0]=0.0;f[2][1]=0.0;f[2][2]=0.0;f[2][3]=0.0;f[3][0]=0.0;f[3][1]=0.0;f[3][2]=-n;f[3][3]=1.0;}voidtw(intd){f[0][0]=0.0;f[0][1]=0.0;f[0][2]=0.0;f[0][3]=0.0;f[1][0]=-1.0;f[1][1]=0.0;f[1][2]=0.0;f[1][3]=0.0;f[2][0]=0.0;f[2][1]=0.0;f[2][2]=1.0;f[2][3]=0.0;f[3][0]=-d;f[3][1]=0.0;f[3][2]=0.0;f[3][3]=1.0;}voidteq(){f[0][0]=0.707;f[0][1]=0.0;f[0][2]=-0.408;f[0][3]=0.0;f[1][0]=-0.707;f[1][1]=0.0;f[1][2]=-0.408;f[1][3]=0.0;f[2][0]=0.0;f[2][1]=0.0;f[2][2]=0.816;f[2][3]=0.0;f[3][0]=0.0;f[3][1]=0.0;f[3][2]=0.0;f[3][3]=1.0;}voidtt1yq(doublel,doublen,doublem,doubleq){f[0][0]=1.0;f[0][1]=0.0;f[0][2]=0.0;f[0][3]=0.0;f[1][0]=0.0;f[1][1]=0.0;f[1][2]=0.0;f[1][3]=q;f[2][0]=0.0;f[2][1]=0.0;f[2][2]=1.0;f[2][3]=0.0;f[3][0]=l;f[3][1]=0.0;f[3][2]=n;f[3][3]=m*q+1;}voidaxis(){line(scx(0.0),scy(ymax/2),scx(0),scy(0.0));line(scx(0),scy(0),scx(xmax/2),scy(-ymax/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");}doubleaffine3x(doublex,doubley,doublez,doubled){xx=x*f[0][0]+y*f[1][0]+z*f[2][0]+d*f[3][0];return(xx);}doubleaffine3y(doublex,doubley,doublez,doubled){yy=x*f[0][1]+y*f[1][1]+z*f[2][1]+d*f[3][1];return(yy);}doubleaffine3z(doublex,doubley,doublez,doubled){zz=x*f[0][2]+y*f[1][2]+z*f[2][2]+d*f[3][2];return(zz);}doubleaffine3d(doublex,...