计算机图形学实验报告.doc

上传人:doc321 文档编号:13026831 上传时间:2021-12-11 格式:DOC 页数:12 大小:106.50KB
返回 下载 相关 举报
计算机图形学实验报告.doc_第1页
第1页 / 共12页
计算机图形学实验报告.doc_第2页
第2页 / 共12页
计算机图形学实验报告.doc_第3页
第3页 / 共12页
计算机图形学实验报告.doc_第4页
第4页 / 共12页
计算机图形学实验报告.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《计算机图形学实验报告.doc》由会员分享,可在线阅读,更多相关《计算机图形学实验报告.doc(12页珍藏版)》请在三一文库上搜索。

1、优质文本教育科学与技术学院2016/2017学年第一学期实 验 报 告 实验课程名称 计算机图形学 专 业 教育技术学 学 生 学 号 B14150216 学 生 姓 名 姚行健 指 导 教 师 熊健、闫静杰 指 导 单 位 通信与信息工程学院 日 期: 2016 年 10 月 15 日实验一:直线的生成一、 实验目的:1. 理解直线生成的根本原理2. 编程实现Bresenham直线扫描生成算法 二、 实验内容:在理解Bresenham直线扫描生成算法的根本思想之后再具体编写C语言程序三、 实验方法及编程:a) 实现方法介绍 过各行各列像素中心构造一组虚拟网格线,按直线从起点到终点的

2、顺序计算直线与各垂直网格线的交点,然后确定该列像素中与此交点最近的像素b) 实现代码及分析#include<stdio.h>#include<graphics.h>int main()int gdriver=DETECT,gmode,i,a4,b4;float t,x,y;printf("input four pointsn");for(i=0;i<4;i+)scanf("%d%d",&ai,&bi);initgraph(&gdriver,&gmode,"C:TC20BGI"

3、;) ;setcolor(12);for(i=0;i<3;i+)line(ai,bi,ai+1,bi+1);for(t=0.000;t<=1.00;t+=0.001)y=(1-t)*(1-t)*(1-t)*b0+3*(1-t)*(1-t)*t*b1+3*(1-t)*t*t*b2+t*t*t*b3;x=(1-t)*(1-t)*(1-t)*a0+3*(1-t)*(1-t)*t*a1+3*(1-t)*t*t*a2+t*t*t*a3;putpixel(int)(x+0.5),(int)(y+0.5),50);getch();closegraph();return 1;四、 实验结果及分析:

4、 实验二:自由曲线的生成一、 实验目的:1. 掌握曲线的表示形式、曲线的连续性条件、拟合和逼近的根本概念     2. 掌握Bezier曲线的性质 3. 编程实现Bezier曲线生成算法二、 实验内容:根据所学自由曲线的拟合方法及其相关知识编写一个绘制三次Bezier曲线的程序三、 实验方法及编程:a) 实现方法介绍 运用所学的三次贝塞尔曲线生成的算法,根据对应的数据点计算出结果,并实现三段贝塞尔在屏幕上显示的功能b) 实现代码及分析#include <graphics.h>void bezier_3(int color,

5、 double p42)double t,t1,t2,xt,yt;int rate=200,x,y;setcolor(color);moveto(p00,p01);for (t=0;t<=1;t+=1.0/rate)yt=1-t;t1=yt*yt;t2=3*yt*t;xt=p00*t1*yt+p10*t2*yt+p20*t2*t+p30*t*t*t;yt=p01*yt*t1+p11*t2*yt+p21*t2*t+p31*t*t*t;x=(int)(xt);y=(int)(yt);lineto(x,y);void main()static double p42=50,400,140,20,

6、400,40,635,420;const NO=3; /*特征顶点数*/int i;int driver=DETECT,mode;initgraph(&driver,&mode,"C:TC20BGI");cleardevice();setcolor(BLUE);moveto(p00,p01);for (i=1;i<NO;i+)lineto(pi0,pi1);bezier_3(LIGHTRED,p);getch(); /*按ESC键退出*/closegraph();四、 实验结果及分析:实验三:二维图形的几何变换一、 实验目的:1. 掌握二维图形几何变换

7、的根本原理及二维图形的几何算法。 2. 稳固所学理论知识,加深对二维变换的理解,加深理解利用变换矩阵可用简单图形得到复杂图形的理解。 3. 通过编程完成二维图形的几何变换动态过程。 二、 实验内容:根据二维图形几何变换的根本原理及其变换矩阵:1编写实现二维图形平移、旋转变换的C语言程序;2编写实现二维图形错切、比例变换的C语言程序;三、 实验方法及编程:a) 实现方法介绍 设置变换的参数变量,以便观察不同取值情况下的变换效果;b) 实现代码及分析#include<graphics.h>#include<conio.h>#include<

8、;dos.h>#include<math.h>double xmax=639.0, ymax=399.0;double f33,xx,yy;int scx(double xj)int x;x=(int)(xj+xmax/2);return(x);int scy(double yj)int y;y=ymax-(int)(yj+ymax/2);return(y);void parallel(double dx,double dy)f00=1.0;f01=0.0;f02=0.0;f10=0.0;f11=1.0;f12=0.0;f20=dx; f21=dy; f22=1.0;void

9、 scale(double s)f00=s;f01=0.0;f02=0.0;f10=0.0;f11=s;f12=0.0;f20=0.0; f21=0.0; f22=1.0;void taisho_y() f00=-1.0;f01=0.0;f02=0.0;f10=0.0;f11=1.0;f12=0.0;f20=0.0; f21=0.0; f22=1.0;void axis() 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);void tuoq(double

10、a,double b) f00=1.0;f01=b;f02=1.0;f10=a;f11=1.0;f12=0.0;f20=0.0; f21=0.0; f22=1.0;double affinex(double x,double y,double d)xx=x*f00+y*f10+d*f20;return(xx);double affiney(double x,double y,double d)yy=x*f01+y*f11+d*f21;return(yy);void drawtu(x2,y2)double x25,y25;int i;for(i=0;i<=3;i+) line(scx(x2

11、i),scy(y2i),scx(x2i+1),scy(y2i+1); void main()int drive=DETECT,mode;static double x1=50.0,50.0,150.0,150.0,50.0;static double y1=0.0,100.0,100.0,0.0,0.0;static double x25,y25;int i;double x,y,xx,yy,yt;initgraph(&drive,&mode,"c:tc20bgi");setcolor(YELLOW); axis(); for(i=0;i<=3;i+)

12、 line(scx(x1i),scy(y1i),scx(x1i+1),scy(y1i+1); /*parallel(100,-100) */ /平行变换 getch(); x=100;y=-100; parallel(x,y); setcolor(GREEN); for(i=0;i<=4;i+) x2i=affinex(x1i,y1i,1.0); y2i=affiney(x1i,y1i,1.0); drawtu(x2,y2); yt=scy(y20)+10; outtextxy(scx(x20),yt,"parallel(100,-100)");/*taisho_y(

13、) */ /关于y轴对称 getch(); taisho_y(); setcolor(RED); for(i=0;i<=4;i+) x2i=affinex(x1i,y1i,1.0); y2i=affiney(x1i,y1i,1.0); drawtu(x2,y2); yt=scy(y20)+10; outtextxy(scx(x20),yt,"taisho_y");/*touq(2,0) */ /按比例增大getch(); tuoq(2,0); setcolor(LIGHTRED); for(i=0;i<=4;i+) x2i=affinex(x1i,y1i,1.0

14、);y2i=affiney(x1i,y1i,1.0);drawtu(x2,y2);yt=scy(y20)+10;outtextxy(scx(x20),yt,"tuoq(2,0)");/*scale(2) */ /图像的增大 getch(); scale(2); setcolor(LIGHTBLUE); for(i=0;i<=4;i+) x2i=affinex(x1i,y1i,1.0); y2i=affiney(x1i,y1i,1.0); drawtu(x2,y2); yt=scy(y20)+10; outtextxy(scx(x20),yt,"scale 2

15、");getch();closegraph();四、 实验结果及分析:实验四:计算机动画制作一、 实验目的:1. 掌握图形基于 TurboC环境生成的根本原理 2. 学习使用cleardevice(),getimage()与putimage(),setactivepage()与setvisualpage()的配合使用。二、 实验内容:理解计算机动画的不同生成方法;采用某种动画生成方法设计制作一个动画小片断;三、 实验方法及编程:a) 实现方法介绍 利用Turbo C环境下的图形库函数,如cleardevice(),getimage()与putimage(),set

16、activepage()与setvisualpage()等来设计实现动画;所设计动画应有一定可观性。b) 实现代码及分析#include <stdlib.h>#include <stdio.h>#include <graphics.h>main() int gdriver=CGA,gmode=CGAC0,a8,b8,x,y,i,j,c;initgraph(&gdriver,&gmode,"C:TCBGI"); randomize();for(;!kbhit();) x=rand()%100+100; y=rand()%10

17、0+100; a0=x; b0=y; a1=a0+5; a2=a1+5; a3=a1; a4=a0; a5=a0-5; a6=a5-5; a7=a6+5; for(j=1;j<5;j+ ) bj=bj-1+5; for(j=5;j<8;j+ ) bj=bj-1-5; for(j=0;j<6;j+ ) for(i=0;i<8;i+ ) c=rand()%9+ 1; setcolor(c); circle(ai,bi,1); circle(ai,bi,3); delay(100); cleardevice(); b0-=10; a1+=5; b1-=5; a2+=10; a

18、3+=5; b3+=5; b4+=10; a5-=5; b5+=5; a6-=10; a7-=5; b7-=5; getch(); closegraph(); return (0);四、 实验结果及分析:。=2、计算机图形学实验课程小结和思考包括感想、体会与启示 通过这几次实验我学会了如何在边框中剪裁出一条直线,掌握了从边框中剪裁一条直线的原理。不过对于算法和程序还是不是很熟,还需要进一步的加强!两位老师在课堂上 讲授许多关于计算机图形学的知识和原理,听起来有些枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用 turbo.c2.0程序这个工具解决实际学习中的问题,通过屡次上机练习,在理解的根底上就会自然而然地掌握计算机图形学图形生成的算法和处理方式。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,编写出来的程序无法运行,还需要多加练习。老师在上机过程中谆谆教诲,细心答复我们的问题,让我们可以顺利完成试验。

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1