您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 计算机图形学实验报告
教育科学与技术学院2016/2017学年第一学期实验报告实验课程名称计算机图形学专业教育技术学学生学号B14150216学生姓名姚行健指导教师熊健、闫静杰指导单位通信与信息工程学院日期:2016年10月15日实验一:直线的生成一、实验目的:1.理解直线生成的基本原理2.编程实现Bresenham直线扫描生成算法二、实验内容:在理解Bresenham直线扫描生成算法的基本思想之后再具体编写C语言程序三、实验方法及编程:a)实现方法介绍过各行各列像素中心构造一组虚拟网格线,按直线从起点到终点的顺序计算直线与各垂直网格线的交点,然后确定该列像素中与此交点最近的像素b)实现代码及分析#includestdio.h#includegraphics.hintmain(){intgdriver=DETECT,gmode,i,a[4],b[4];floatt,x,y;printf(inputfourpoints\n);for(i=0;i4;i++)scanf(%d%d,&a[i],&b[i]);initgraph(&gdriver,&gmode,C:\\TC20\\BGI);setcolor(12);for(i=0;i3;i++)line(a[i],b[i],a[i+1],b[i+1]);for(t=0.000;t=1.00;t+=0.001){y=(1-t)*(1-t)*(1-t)*b[0]+3*(1-t)*(1-t)*t*b[1]+3*(1-t)*t*t*b[2]+t*t*t*b[3];x=(1-t)*(1-t)*(1-t)*a[0]+3*(1-t)*(1-t)*t*a[1]+3*(1-t)*t*t*a[2]+t*t*t*a[3];putpixel((int)(x+0.5),(int)(y+0.5),50);}getch();closegraph();return1;}四、实验结果及分析:‘实验二:自由曲线的生成一、实验目的:1.掌握曲线的表示形式、曲线的连续性条件、拟合和逼近的基本概念2.掌握Bezier曲线的性质3.编程实现Bezier曲线生成算法二、实验内容:根据所学自由曲线的拟合方法及其相关知识编写一个绘制三次Bezier曲线的程序三、实验方法及编程:a)实现方法介绍运用所学的三次贝塞尔曲线生成的算法,根据对应的数据点计算出结果,并实现三段贝塞尔在屏幕上显示的功能b)实现代码及分析#includegraphics.hvoidbezier_3(intcolor,doublep[4][2]){doublet,t1,t2,xt,yt;intrate=200,x,y;setcolor(color);moveto(p[0][0],p[0][1]);for(t=0;t=1;t+=1.0/rate){yt=1-t;t1=yt*yt;t2=3*yt*t;xt=p[0][0]*t1*yt+p[1][0]*t2*yt+p[2][0]*t2*t+p[3][0]*t*t*t;yt=p[0][1]*yt*t1+p[1][1]*t2*yt+p[2][1]*t2*t+p[3][1]*t*t*t;x=(int)(xt);y=(int)(yt);lineto(x,y);}}voidmain(){staticdoublep[4][2]={50,400,140,20,400,40,635,420};constNO=3;/*特征顶点数*/inti;intdriver=DETECT,mode;initgraph(&driver,&mode,C:\\TC20\\BGI);cleardevice();setcolor(BLUE);moveto(p[0][0],p[0][1]);for(i=1;iNO;i++)lineto(p[i][0],p[i][1]);bezier_3(LIGHTRED,p);getch();/*按ESC键退出*/closegraph();四、实验结果及分析:实验三:二维图形的几何变换一、实验目的:1.掌握二维图形几何变换的基本原理及二维图形的几何算法。2.巩固所学理论知识,加深对二维变换的理解,加深理解利用变换矩阵可用简单图形得到复杂图形的理解。3.通过编程完成二维图形的几何变换动态过程。二、实验内容:根据二维图形几何变换的基本原理及其变换矩阵:(1)编写实现二维图形平移、旋转变换的C语言程序;(2)编写实现二维图形错切、比例变换的C语言程序;三、实验方法及编程:a)实现方法介绍设置变换的参数变量,以便观察不同取值情况下的变换效果;b)实现代码及分析#includegraphics.h#includeconio.h#includedos.h#includemath.hdoublexmax=639.0,ymax=399.0;doublef[3][3],xx,yy;intscx(doublexj){intx;x=(int)(xj+xmax/2);return(x);}intscy(doubleyj){inty;y=ymax-(int)(yj+ymax/2);return(y);}voidparallel(doubledx,doubledy){f[0][0]=1.0;f[0][1]=0.0;f[0][2]=0.0;f[1][0]=0.0;f[1][1]=1.0;f[1][2]=0.0;f[2][0]=dx;f[2][1]=dy;f[2][2]=1.0;}voidscale(doubles){f[0][0]=s;f[0][1]=0.0;f[0][2]=0.0;f[1][0]=0.0;f[1][1]=s;f[1][2]=0.0;f[2][0]=0.0;f[2][1]=0.0;f[2][2]=1.0;}voidtaisho_y(){f[0][0]=-1.0;f[0][1]=0.0;f[0][2]=0.0;f[1][0]=0.0;f[1][1]=1.0;f[1][2]=0.0;f[2][0]=0.0;f[2][1]=0.0;f[2][2]=1.0;}voidaxis(){line(scx(0.0),scy(-ymax/2),scx(0),scy(ymax/2));line(scx(-xmax/2),scy(0.0),scx(xmax/2),scy(0.0));}voidtuoq(doublea,doubleb){f[0][0]=1.0;f[0][1]=b;f[0][2]=1.0;f[1][0]=a;f[1][1]=1.0;f[1][2]=0.0;f[2][0]=0.0;f[2][1]=0.0;f[2][2]=1.0;}doubleaffinex(doublex,doubley,doubled){xx=x*f[0][0]+y*f[1][0]+d*f[2][0];return(xx);}doubleaffiney(doublex,doubley,doubled){yy=x*f[0][1]+y*f[1][1]+d*f[2][1];return(yy);}voiddrawtu(x2,y2)doublex2[5],y2[5];{inti;for(i=0;i=3;i++){line(scx(x2[i]),scy(y2[i]),scx(x2[i+1]),scy(y2[i+1]));}}voidmain(){intdrive=DETECT,mode;staticdoublex1[]={50.0,50.0,150.0,150.0,50.0};staticdoubley1[]={0.0,100.0,100.0,0.0,0.0};staticdoublex2[5],y2[5];inti;doublex,y,xx,yy,yt;initgraph(&drive,&mode,c:\\tc20\\bgi);setcolor(YELLOW);axis();for(i=0;i=3;i++){line(scx(x1[i]),scy(y1[i]),scx(x1[i+1]),scy(y1[i+1]));}/*parallel(100,-100)*///平行变换getch();x=100;y=-100;parallel(x,y);setcolor(GREEN);for(i=0;i=4;i++){x2[i]=affinex(x1[i],y1[i],1.0);y2[i]=affiney(x1[i],y1[i],1.0);}drawtu(x2,y2);yt=scy(y2[0])+10;outtextxy(scx(x2[0]),yt,parallel(100,-100));/*taisho_y()*///关于y轴对称getch();taisho_y();setcolor(RED);for(i=0;i=4;i++){x2[i]=affinex(x1[i],y1[i],1.0);y2[i]=affiney(x1[i],y1[i],1.0);}drawtu(x2,y2);yt=scy(y2[0])+10;outtextxy(scx(x2[0]),yt,taisho_y);/*touq(2,0)*///按比例增大getch();tuoq(2,0);setcolor(LIGHTRED);for(i=0;i=4;i++){x2[i]=affinex(x1[i],y1[i],1.0);y2[i]=affiney(x1[i],y1[i],1.0);}drawtu(x2,y2);yt=scy(y2[0])+10;outtextxy(scx(x2[0]),yt,tuoq(2,0));/*scale(2)*///图像的增大getch();scale(2);setcolor(LIGHTBLUE);for(i=0;i=4;i++){x2[i]=affinex(x1[i],y1[i],1.0);y2[i]=affiney(x1[i],y1[i],1.0);}drawtu(x2,y2);yt=scy(y2[0])+10;outtextxy(scx(x2[0]),yt,scale2);getch();closegraph();}四、实验结果及分析:实验四:计算机动画制作一、实验目的:1.掌握图形基于TurboC环境生成的基本原理2.学习使用cleardevice(),getimage()与putimage(),setactivepage()与setvisualpage()的配合使用。二、实验内容:理解计算机动画的不同生成方法;采用某种动画生成方法设计制作一个动画小片断;三、实验方法及编程:a)实现方法介绍利用TurboC环境下的图形库函数,如cleardevice(),getimage()与putimage(),setactivepage()与setvisualpage()等来设计实现动画;所设计动画应有一定可观性。b)实现代码及分析#includestdlib.h#includestdio.h#includegraphics.hmain(){intgdriver=CGA,gmode=CGAC0,a[8],b[8],x,y,i,j,c;initgraph(&gdriver,&gmode,C:\\TC\\BGI);randomize();for(;!kbhit();){x=rand()%100+100;y=rand()%100+100;a[0]=x;b[0]=y;a[1]=a[0]+5;a[2]=a[1]+5;a[3]=a[1];a[4]=a[0];a[5]=a[0]-5;a[6]=a[5]-5;a[7]=a[6]+5;for(j=1;j5;j++)b[j]=b[j-1]+5;for(j=5;j8;j++)b[j]=b[j-1]-5;for(j=0;j6;j++){for(i=0;i8;i++){c=rand()%9+1;setcolor(c);circle(a[i],b[i],1);circle(a[i],b[i],3);}delay(100);clearde
本文标题:计算机图形学实验报告
链接地址:https://www.777doc.com/doc-1829625 .html