计算机图形学实验体会,计算机图形学实验报告.doc
《計算機圖形學實驗報告.doc》由會員分享,提供在線免費全文閱讀可下載,此文檔格式為doc,更多相關《計算機圖形學實驗報告.doc》文檔請在天天文庫搜索。
1、教育科學與技術學院2016/2017學年第一學期實 驗 報 告 實驗課程名稱 計算機圖形學 專 業 教育技術學 學 生 學 號 B14150216 學 生 姓 名 姚行健 指 導 教 師 熊健、閆靜杰 指 導 單 位 通信與信息工程學院 日 期: 2016 年 10 月 15 日實驗一:直線的生成一、 實驗目的:1. 理解直線生成的基本原理2. 編程實現Bresenham直線掃描生成算法?二、 實驗內容:在理解Bresenham直線掃描生成算法的基本思想之后再具體編寫C語言程序三、 實驗方法及編程:a) 實現方法介紹 過各行各列像素中心構造一組虛擬網格線,按直線從起點到終點的順序計算直線與各垂直網格線的交點,然后確定該列像素中與此交點最近的像素b) 實現代碼及分析#include#includeint main(){int gdriver=DETECT,gmode,i,a[4],b[4]。
2、;float t,x,y;printf("input four points\n");for(i=0;i<4;i++)scanf("%d%d",&a[i],&b[i]);initgraph(&gdriver,&gmode,"C:\\TC20\\BGI") ;setcolor(12);for(i=0;i<3;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),(in。
3、t)(y+0.5),50);}getch();closegraph();return 1;}四、 實驗結果及分析: ‘實驗二:自由曲線的生成一、 實驗目的:1. 掌握曲線的表示形式、曲線的連續性條件、擬合和逼近的基本概念?????2. 掌握Bezier曲線的性質?3. 編程實現Bezier曲線生成算法二、 實驗內容:根據所學自由曲線的擬合方法及其相關知識編寫一個繪制三次Bezier曲線的程序三、 實驗方法及編程:a) 實現方法介紹 運用所學的三次貝塞爾曲線生成的算法,根據對應的數據點計算出結果,并實現三段貝塞爾在屏幕上顯示的功能b) 實現代碼及分析#include void bezier_3(int color, double p[4][2]){double t,t1,t2,xt,yt;int rate=200,x,y;setcolor(color);moveto(p[0][0],p[0]。
4、[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);}}void main(){static double p[4][2]={50,400,140,20,400,40,635,420};const NO=3; /*特征頂點數*/int i;int driver=DETECT,mode;initgraph(&driver,&mode,"C:\\TC20\\BGI");cleardevice();setcolor(BLUE);。
5、moveto(p[0][0],p[0][1]);for (i=1;i
6、clude#include#include#includedouble xmax=639.0, ymax=399.0;double f[3][3],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){ 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;}void scale(double s){ f[0][0]=s;f[0][1]=0.0;f[0][2]=。
7、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;}void taisho_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;}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) { f[0][0]=1.0;f[0][1]=b;f[0][2]=1.0; f[1][0]=a;f。
8、[1][1]=1.0;f[1][2]=0.0; f[2][0]=0.0; f[2][1]=0.0; f[2][2]=1.0;}double affinex(double x,double y,double d){ xx=x*f[0][0]+y*f[1][0]+d*f[2][0]; return(xx);}double affiney(double x,double y,double d){ yy=x*f[0][1]+y*f[1][1]+d*f[2][1]; return(yy);}void drawtu(x2,y2)double x2[5],y2[5];{ int i; for(i=0;i<=3;i++) { line(scx(x2[i]),scy(y2[i]),scx(x2[i+1]),scy(y2[i+1])); }}void main(){ int drive=DETECT,m。
9、ode; 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 x2[5],y2[5]; int i; double x,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
10、;=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) */ //按比例增大 ge。
11、tch(); 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]。
12、),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。
13、 gdriver=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;j<5;j++ ) b[j]=b[j-1]+5; for(j=5;j<8;j++ ) b[j]=b[j-1]-5; for(j=0;j<6;j++ ) { for(i=0;i<8;i++ ) { c=rand()%9+ 1; setcolor(c)。
14、; 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; } } getch(); closegraph(); return (0);}四、 實驗結果及分析:(。===========================================================================2、計算機圖形學實驗課程小結和思考(包括感想、體會與啟示) 通過這幾次實驗我學會了如何在邊框中剪裁出一條直線,掌握了從邊框中剪裁一條直線的原理。不過對于算法和程序還是不是很熟,還需要進一步的加強!兩位老師在課堂上 講授許多關于計算機圖形學的知識和原理,聽起來有些枯燥無味,也不容易記住,死記硬背是不可取的。然而要使用 turbo.c2.0程序這個工具解決實際學習中的問題,通過多次上機練習,在理解的基礎上就會自然而然地掌握計算機圖形學圖形生成的算法和處理方式。對于一些內容自己認為在課堂上聽懂了,但上機實踐中會發現原來理解的偏差,編寫出來的程序無法運行,還需要多加練習。老師在上機過程中諄諄教誨,細心回答我們的問題,讓我們可以順利完成試驗。。
總結
以上是生活随笔為你收集整理的计算机图形学实验体会,计算机图形学实验报告.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 非科学计数法_Java设置大数
- 下一篇: 修复dhcp client服务器,无法开