计算机图形学实验报告.docx_第1页
计算机图形学实验报告.docx_第2页
计算机图形学实验报告.docx_第3页
计算机图形学实验报告.docx_第4页
计算机图形学实验报告.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

教育科学与技术学院2016/2017学年第一学期实 验 报 告 实验课程名称 计算机图形学 实验一:直线的生成一、 实验目的:1. 理解直线生成的基本原理2. 编程实现Bresenham直线扫描生成算法二、 实验内容:在理解Bresenham直线扫描生成算法的基本思想之后再具体编写C语言程序三、 实验方法及编程:a) 实现方法介绍 过各行各列像素中心构造一组虚拟网格线,按直线从起点到终点的顺序计算直线与各垂直网格线的交点,然后确定该列像素中与此交点最近的像素b) 实现代码及分析#include#includeint main()int gdriver=DETECT,gmode,i,a4,b4;float t,x,y;printf(input four pointsn);for(i=0;i4;i+)scanf(%d%d,&ai,&bi);initgraph(&gdriver,&gmode,C:TC20BGI) ;setcolor(12);for(i=0;i3;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;四、 实验结果及分析: 实验二:自由曲线的生成一、 实验目的:1. 掌握曲线的表示形式、曲线的连续性条件、拟合和逼近的基本概念2. 掌握Bezier曲线的性质3. 编程实现Bezier曲线生成算法二、 实验内容:根据所学自由曲线的拟合方法及其相关知识编写一个绘制三次Bezier曲线的程序三、 实验方法及编程:a) 实现方法介绍 运用所学的三次贝塞尔曲线生成的算法,根据对应的数据点计算出结果,并实现三段贝塞尔在屏幕上显示的功能b) 实现代码及分析#include void bezier_3(int color, 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,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;iNO;i+)lineto(pi0,pi1);bezier_3(LIGHTRED,p);getch(); /*按ESC键退出*/closegraph();四、 实验结果及分析:实验三:二维图形的几何变换一、 实验目的:1. 掌握二维图形几何变换的基本原理及二维图形的几何算法。2. 巩固所学理论知识,加深对二维变换的理解,加深理解利用变换矩阵可用简单图形得到复杂图形的理解。3. 通过编程完成二维图形的几何变换动态过程。二、 实验内容:根据二维图形几何变换的基本原理及其变换矩阵:(1)编写实现二维图形平移、旋转变换的C语言程序;(2)编写实现二维图形错切、比例变换的C语言程序;三、 实验方法及编程:a) 实现方法介绍 设置变换的参数变量,以便观察不同取值情况下的变换效果;b) 实现代码及分析#include#include#include#includedouble 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 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 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(x2i),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+) 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() */ /关于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);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);getch();closegraph();四、 实验结果及分析:实验四:计算机动画制作一、 实验目的:1. 掌握图形基于TurboC环境生成的基本原理2. 学习使用cleardevice(),getimage()与putimage(),setactivepage()与setvisualpage()的配合使用。二、 实验内容:理解计算机动画的不同生成方法;采用某种动画生成方法设计制作一个动画小片断;三、 实验方法及编程:a) 实现方法介绍 利用Turbo C环境下的图形库函数,如cleardevice(),getimage()与putimage(),setactivepage()与setvisualpage()等来设计实现动画;所设计动画应有一定可观性。b) 实现代码及分析#include #include #include 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()%100+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;j5;j+ ) bj=bj-1+5; for(j=5;j8;j+ ) bj=bj-1-5; for(j=0;j6;j+ ) for(i=0;i8;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; a3+=5; b3+=5; b4+=10; a5-=5; b5+=5; a6-=10; a7-=5; b7-=5; getch(); closegraph(); return (0);四、 实验结果及分析:(。=2、计算机图形学实验课程小结和思考(包括感想、体会与启示) 通过这几次实验我学会了如何在边框中剪裁出一条直线,掌握了从边框中剪裁一条直线的原理。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论