计算机图形学实验报告Word下载.docx
《计算机图形学实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验报告Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
![计算机图形学实验报告Word下载.docx](https://file1.bdocx.com/fileroot1/2022-12/13/c090596b-89d1-47e2-b94b-271dc4858b4c/c090596b-89d1-47e2-b94b-271dc4858b4c1.gif)
{
intgdriver=DETECT,gmode,i,a[4],b[4];
floatt,x,y;
printf("
inputfourpoints\n"
);
for(i=0;
i<
4;
i++)
scanf("
%d%d"
&
a[i],&
b[i]);
initgraph(&
gdriver,&
gmode,"
C:
\\TC20\\BGI"
);
setcolor(12);
3;
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曲线的程序
运用所学的三次贝塞尔曲线生成的算法,根据对应的数据点计算出结果,并实现三段贝塞尔在屏幕上显示的功能
#include<
voidbezier_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;
=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;
driver,&
mode,"
cleardevice();
setcolor(BLUE);
for(i=1;
NO;
lineto(p[i][0],p[i][1]);
bezier_3(LIGHTRED,p);
/*按ESC键退出*/
实验三:
二维图形的几何变换
1.掌握二维图形几何变换的基本原理及二维图形的几何算法。
2.巩固所学理论知识,加深对二维变换的理解,加深理解利用变换矩阵可用简单图形得到复杂图形的理解。
3.通过编程完成二维图形的几何变换动态过程。
根据二维图形几何变换的基本原理及其变换矩阵:
(1)编写实现二维图形平移、旋转变换的C语言程序;
(2)编写实现二维图形错切、比例变换的C语言程序;
设置变换的参数变量,以便观察不同取值情况下的变换效果;
conio.h>
dos.h>
math.h>
doublexmax=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[1][1]=s;
f[2][0]=0.0;
f[2][1]=0.0;
voidtaisho_y()
f[0][0]=-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][1]=b;
f[0][2]=1.0;
f[1][0]=a;
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;
=3;
{
line(scx(x2[i]),scy(y2[i]),scx(x2[i+1]),scy(y2[i+1]));
}
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];
doublex,y,xx,yy,yt;
initgraph(&
drive,&
c:
\\tc20\\bgi"
setcolor(YELLOW);
axis();
for(i=0;
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);
=4;
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轴对称
taisho_y();
setcolor(RED);
taisho_y"
/*touq(2,0)*///按比例增大
getch();
tuoq(2,0);
setcolor(LIGHTRED);
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)*///图像的增大
scale
(2);
setcolor(LIGHTBLUE);
scale2"
closegraph();
}_
实验四:
计算机动画制作
1.掌握图形基于
TurboC环境生成的基本原理
2.学习使用cleardevice(),getimage()与putimage(),setactivepage()与setvisualpage()的配合使用。
理解计算机动画的不同生成方法;
采用某种动画生成方法设计制作一个动画小片断;
利用TurboC环境下的图形库函数,如cleardevice(),getimage()与putimage(),setactivepage()与setvisualpage()等来设计实现动画;
所设计动画应有一定可观性。
stdlib.h>
main()
intgdriver=CGA,gmode=CGAC0,a[8],b[8],x,y,i,j,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;
j<
5;
j++)
b[j]=b[j-1]+5;
for(j=5;
8;
b[j]=b[j-1]-5;
for(j=0;
6;
j++)
i++)
c=rand()%9+1;
setcolor(c);
circle(a[i],b[i],1);
circle(a[i],b[i],3);
delay(100);
cleardevice();
b[0]-=10;
a[1]+=5;
b[1]-=5;
a[2]+=10;
a[3]+=5;
b[3]+=5;
b[4]+=10;
a[5]-=5;
b[5]+=5;
a[6]-=10;
a[7]-=5;
b[7]-=5;
return(0);
(
。
===========================================================================
2、计算机图形学实验课程小结和思考(包括感想、体会与启示)
通过这几次实验我学会了如何在边框中剪裁出一条直线,掌握了从边框中剪裁一条直线的原理。
不过对于算法和程序还是不是很熟,还需要进一步的加强!
两位老师在课堂上讲授许多关于计算机图形学的知识和原理,听起来有些枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用turbo.c2.0程序这个工具解决实际学习中的问题,通过多次上机练习,在理解的基础上就会自然而然地掌握计算机图形学图形生成的算法和处理方式。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,编写出来的程序无法运行,还需要多加练习。
老师在上机过程中谆谆教诲,细心回答我们的问题,让我们可以顺利完成试验。