




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)1 直線的繪制實(shí)驗(yàn)?zāi)康?、 通過(guò)實(shí)驗(yàn),進(jìn)一步理解和掌握DDA和Bresenham算法;2、 掌握以上算法生成直線段的基本過(guò)程;3、 通過(guò)編程,會(huì)在TC環(huán)境下完成用DDA或中點(diǎn)算法實(shí)現(xiàn)直線段的繪制。實(shí)驗(yàn)環(huán)境計(jì)算機(jī)、Turbo C或其他C語(yǔ)言程序設(shè)計(jì)環(huán)境實(shí)驗(yàn)學(xué)時(shí) 2學(xué)時(shí),必做實(shí)驗(yàn)。實(shí)驗(yàn)內(nèi)容用DDA算法或Besenham算法實(shí)現(xiàn)斜率k在0和1之間的直線段的繪制。實(shí)驗(yàn)步驟1、 算法、原理清晰,有詳細(xì)的設(shè)計(jì)步驟; 2、 依據(jù)算法、步驟或程序流程圖,用C語(yǔ)言編寫源程序;3、 編輯源程序并進(jìn)行調(diào)試;4、 進(jìn)行運(yùn)行測(cè)試,并結(jié)合情況進(jìn)行調(diào)整;5、 對(duì)運(yùn)行結(jié)果進(jìn)行保存與分析;6、 把源程序以文件的形式提交;7
2、、 按格式書寫實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)代碼:DDA:# include <graphics.h># include <math.h>void DDALine(int x0,int y0,int x1,int y1,int color)int dx,dy,epsl,k;float x,y,xIncre,yIncre;dx=x1-x0;dy=y1-y0;x=x0;y=y0;if(abs(dx)>abs(dy) epsl=abs(dx);else epsl=abs(dy);xIncre=(float)dx/(float)epsl;yIncre=(float)dy/(float)e
3、psl;for(k=0;k<=epsl;k+)putpixel(int)(x+0.5),(int)(y+0.5),4);x+=xIncre;y+=yIncre;main() int gdriver ,gmode ; gdriver = DETECT;initgraph(&gdriver , &gmode ,"C:TC20BGI");DDALine(0,0,35,26,4);getch ( );closegraph ( );Bresenham:#include<graphics.h>#include<math.h>void Bre
4、senhamLine(int x0,int y0,int x1,int y1,int color) int x,y,dx,dy,e; dx=x1-x0; dy=y1-y0; e=-dx;x=x0;y=y0; while(x<=x1) putpixel(x,y,color); x+; e=e+2*dy; if(e>0) y+; e=e-2*dx; main() int gdriver ,gmode ; gdriver = DETECT; initgraph(&gdriver , &gmode ,"c:TC20BGI"); BresenhamLine
5、(0, 0 , 120, 200,5 ); getch ( ); closegraph ( ); 實(shí)驗(yàn)2 圓和橢圓的繪制實(shí)驗(yàn)?zāi)康?、 通過(guò)實(shí)驗(yàn),進(jìn)一步理解和掌握中點(diǎn)算法;2、 掌握以上算法生成橢圓或圓的基本過(guò)程;3、 通過(guò)編程,會(huì)在TC環(huán)境下完成用中點(diǎn)算法實(shí)現(xiàn)橢圓或圓的繪制。實(shí)驗(yàn)環(huán)境計(jì)算機(jī)、Turbo C或其他C語(yǔ)言程序設(shè)計(jì)環(huán)境實(shí)驗(yàn)學(xué)時(shí) 2學(xué)時(shí),必做實(shí)驗(yàn)。實(shí)驗(yàn)內(nèi)容用中點(diǎn)(Besenham)算法實(shí)現(xiàn)橢圓或圓的繪制。實(shí)驗(yàn)步驟1. 算法、原理清晰,有詳細(xì)的設(shè)計(jì)步驟; 2. 依據(jù)算法、步驟或程序流程圖,用C語(yǔ)言編寫源程序;3. 編輯源程序并進(jìn)行調(diào)試;4. 進(jìn)行運(yùn)行測(cè)試,并結(jié)合情況進(jìn)行調(diào)整;5. 對(duì)運(yùn)行
6、結(jié)果進(jìn)行保存與分析;6. 打印源程序或把源程序以文件的形式提交;7. 按格式書寫實(shí)驗(yàn)報(bào)告。分析與思考1 為何在程序運(yùn)行時(shí),有的橢圓或圓僅在屏幕左上角顯示了一部分?2 用中點(diǎn)算法生成的橢圓,為何在半徑較大時(shí),圖形的失真嚴(yán)重?實(shí)驗(yàn)代碼:圓:#include<graphics.h>#include<math.h>void CirclePoint(int x,int y,int color)putpixel(x+100,y+100,color); putpixel(-x+100,y+100,color); putpixel(x+100,-y+100,color); putpix
7、el(-x+100,-y+100,color); putpixel(y+100,x+100,color); putpixel(y+100,-x+100,color); putpixel(-y+100,x+100,color);putpixel(-y+100,-x+100,color);void MidBresenhamCircle(int r,int color)int x,y,d;x=0;y=r;d=1-r;while(x<=y)CirclePoint(x,y,color);if(d<0) d+=2*x+3;elsed+=2*(x-y)+5;y-;x+; main( ) int
8、gdriver ,gmode ; gdriver = DETECT; initgraph(&gdriver , &gmode ,"c:tc20bgi" ); MidBresenhamCircle(50,6); getch ( ); closegraph ( );實(shí)驗(yàn)截圖:橢圓:#include "graphics.h"void MidBresenhamEllipse(int a,int b,int color)int x,y;float d1,d2; x=0;y=b; d1=b*b+a*a*(-b+0.5); putpixel(x+100
9、,y+100,color); putpixel(-x+100,-y+100,color); putpixel(-x+100,y+100,color);putpixel(x+100,-y+100,color); while(b*b*(x+1)<a*a*(y-0.5)if(d1<=0) d1+=b*b*(2*x+3); x+; else d1+=b*b*(2*x+3)+a*a*(-2*y+2); x+;y-; putpixel(x+100,y+100,color); putpixel(-x+100,-y+100,color); putpixel(-x+100,y+100,color);
10、putpixel(x+100,-y+100,color); d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;while(y>0) if(d2<=0)d2+=b*b*(2*x+2)+a*a*(-2*y+3);x+; y-;elsed2+=a*a*(-2*y+3);y-; putpixel(x+100,y+100,color); putpixel(-x+100,-y+100,color); putpixel(-x+100,y+100,color);putpixel(x+100,-y+100,color); main( ) int gdriv
11、er ,gmode ; gdriver = DETECT; initgraph(&gdriver , &gmode ,"c:tc20bgi" ); MidBresenhamEllipse(8,6,2); getch ( ); closegraph ( );實(shí)驗(yàn)截圖:實(shí)驗(yàn)3 圖形填充實(shí)驗(yàn)?zāi)康?、 通過(guò)實(shí)驗(yàn),進(jìn)一步理解和掌握?qǐng)D形填充常用算法;5、 掌握以上算法進(jìn)行填充圖形的基本過(guò)程;6、 通過(guò)編程,會(huì)在TC環(huán)境下完成圖形填充。實(shí)驗(yàn)環(huán)境計(jì)算機(jī)、Turbo C或其他C語(yǔ)言程序設(shè)計(jì)環(huán)境實(shí)驗(yàn)學(xué)時(shí) 2學(xué)時(shí),必做實(shí)驗(yàn)。 實(shí)驗(yàn)內(nèi)容任意畫一個(gè)多邊形,并用邊填充算法進(jìn)行填充。(多
12、邊形的頂點(diǎn)坐標(biāo)存放在數(shù)組中,坐標(biāo)值由鍵盤輸入)實(shí)驗(yàn)步驟1、 算法、原理清晰,有詳細(xì)的設(shè)計(jì)步驟; 2、 依據(jù)算法、步驟或程序流程圖,用C語(yǔ)言編寫源程序;3、 編輯源程序并進(jìn)行調(diào)試;4、 進(jìn)行運(yùn)行測(cè)試,并結(jié)合情況進(jìn)行調(diào)整;5、 對(duì)運(yùn)行結(jié)果進(jìn)行保存與分析;6、 打印源程序或把源程序以文件的形式提交;7、 按格式書寫實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)代碼:#include<graphics.h>#include<stdio.h>#include<math.h>#include<conio.h>#define MP 100#include<stdlib.h>#de
13、fine false 0void edge_mark(int arr2,int value,int polydeflen)int by,x,y,ax,ay;int i,j;float k;by=arrpolydeflen-11;for (i=0;i<polydeflen;i+)if (i = polydeflen-1)ax=arr00;ay=arr01;else ax=arri+10;ay=arri+11;x=arri0;y=arri1;if(y-ay)!=0) k=(ax-x)/(float)(y-ay);if(y-by)*(ay-y)>=0) putpixel(x,y,valu
14、e);getch();if(ay<y) for(j=y-1;j>ay;j-) putpixel(x+(int)(y-j)*k),j,value);else for(j=y+1;j<ay;j+) putpixel(x-(int)(j-y)*k),j,value);by=y;void edge_mark_fill(int ar2,int value,int polydeflen)int i,x,y,inside;int min,max;inside=false;min=ar01;max=ar01;edge_mark(ar,value,polydeflen);for (i=1;i&
15、lt;polydeflen;i+)if (ari1>max)max=ari1;if (ari1<min) min=ari1;for (y=min;y<=max;y+)for(x=0;x<=640;x+)if (getpixel(x,y) = value)inside=!(inside);if (inside!=false) putpixel(x,y,value);else putpixel(x,y,0);if(getch()=17) exit(1);void main() char t100;int polydefMP2;int i,j,gdriver,gmode,po
16、lydeflen,value;gdriver=DETECT;initgraph(&gdriver,&gmode,"c:tc20bgi" );printf("please input the number of edges:n");scanf("%d",&polydeflen);printf("please input the color:n");scanf("%d",&value);printf("please input the (x,y):n&quo
17、t;);for (i=0;i<polydeflen;i+)for (j=0;j<2;j+)scanf("%d",&polydefij); printf("please press the space key!");edge_mark_fill(polydef,value,polydeflen);for(i=0;i<polydeflen;i+)sprintf(t,"(%d,%d)",polydefi0,polydefi1);outtextxy(polydefi0,polydefi1,t);getch();clo
18、segraph();實(shí)驗(yàn)截圖:實(shí)驗(yàn)4 二維圖形幾何變換實(shí)驗(yàn)?zāi)康?、 通過(guò)實(shí)驗(yàn),進(jìn)一步理解和掌握二維圖形幾何變換算法;2、 掌握以上算法進(jìn)行二維圖形幾何變換基本過(guò)程;3、 通過(guò)編程,會(huì)在TC環(huán)境下完成二維圖形幾何變換過(guò)程。實(shí)驗(yàn)環(huán)境計(jì)算機(jī)、Turbo C或其他C語(yǔ)言程序設(shè)計(jì)環(huán)境實(shí)驗(yàn)學(xué)時(shí) 2學(xué)時(shí),必做實(shí)驗(yàn)。 實(shí)驗(yàn)內(nèi)容任意畫一個(gè)平面圖形,(1)按比例縮小或放大.縮放比例由用戶定義,縮放的參考點(diǎn)由用戶確定;(2)旋轉(zhuǎn).由鍵盤輸入旋轉(zhuǎn)角度和旋轉(zhuǎn)中心。實(shí)驗(yàn)步驟1、 算法、原理清晰,有詳細(xì)的設(shè)計(jì)步驟; 2、 依據(jù)算法、步驟或程序流程圖,用C語(yǔ)言編寫源程序;3、 編輯源程序并進(jìn)行調(diào)試;4、 進(jìn)行運(yùn)行測(cè)試,并結(jié)合
19、情況進(jìn)行調(diào)整;5、 對(duì)運(yùn)行結(jié)果進(jìn)行保存與分析;6、 打印源程序或把源程序以文件的形式提交;7、 按格式書寫實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)代碼:#include "stdio.h"#include "conio.h"#include"graphics.h"#include "math.h"struct point int x; int y;triangle3;void ini() triangle0.x=30; triangle0.y=30; triangle1.x=30; triangle1.y=120; triangle2.x=
20、120; triangle2.y=70; setcolor(RED); line(triangle0.x,triangle0.y,triangle1.x,triangle1.y); line(triangle0.x,triangle0.y,triangle2.x,triangle2.y); line(triangle1.x,triangle1.y,triangle2.x,triangle2.y);void zoom(float sx,float sy) int xx3; int yy3; int i; for(i=0;i<3;i+) xxi=(trianglei.x-triangle0.
21、x)*sx+triangle0.x; yyi=(trianglei.y-triangle0.y)*sy+triangle0.y; for(i=0;i<3;i+) line(xxi+120,yyi,xx(i+1)%3+120,yy(i+1)%3); getch(); setcolor(5); for(i=0;i<3;i+) line(xxi+120,yyi,xx(i+1)%3+120,yy(i+1)%3); void turn(int x,int y,int a) int i; int xx3; int yy3; for(i=0;i<3;i+) xxi=(trianglei.x
22、-x)*cos(a)-(trianglei.y-y)*sin(a)+x; yyi=(trianglei.x-x)*sin(a)+(trianglei.y-y)*cos(a)+y; for(i=0;i<3;i+) line(xxi,yyi,xx(i+1)%3,yy(i+1)%3); getch(); setcolor(5); for(i=0;i<3;i+) line(xxi,yyi,xx(i+1)%3,yy(i+1)%3); void main() int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode,"c:
23、tc20bgi"); ini(); getch();setcolor(0); turn(120,70,-1); ini();getch(); setcolor(0); zoom(0.5,0.5);ini();getch();setcolor(0); zoom(3,3);ini();getch(); closegraph();實(shí)驗(yàn)截圖:實(shí)驗(yàn)5 二維圖形裁剪實(shí)驗(yàn)?zāi)康?、 通過(guò)實(shí)驗(yàn),進(jìn)一步理解和掌握二維圖形裁剪常用算法;2、 掌握以上算法進(jìn)行二維圖形裁剪的基本過(guò)程;3、 通過(guò)編程,會(huì)在TC環(huán)境下完成二維圖形裁剪過(guò)程。實(shí)驗(yàn)環(huán)境計(jì)算機(jī)、Turbo C或其他C語(yǔ)言程序設(shè)計(jì)環(huán)境實(shí)驗(yàn)學(xué)時(shí) 2學(xué)時(shí),必
24、做實(shí)驗(yàn)。 實(shí)驗(yàn)內(nèi)容生成若干條直線段,由用戶確定一個(gè)矩形裁剪窗口的位置和大小,保留窗口里的圖形,抹去其余部分(使用Cohen-Sutherland算法)。(完成作業(yè)的同學(xué)可以用line、setviewport函數(shù)再做該題)。實(shí)驗(yàn)步驟1、 算法、原理清晰,有詳細(xì)的設(shè)計(jì)步驟; 2、 依據(jù)算法、步驟或程序流程圖,用C語(yǔ)言編寫源程序;3、 編輯源程序并進(jìn)行調(diào)試;4、 進(jìn)行運(yùn)行測(cè)試,并結(jié)合情況進(jìn)行調(diào)整;5、 對(duì)運(yùn)行結(jié)果進(jìn)行保存與分析;6、 打印源程序或把源程序以文件的形式提交;7、 按格式書寫實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)代碼:#include"graphics.h"#include"std
25、io.h"#include"math.h"#define LEFT 1#define RIGHT 2#define BOTTOM 4#define TOP 8int x1=60,y1=60,x2=200,y2=200,x3=200,y3=300,xl=30,xr=100,yb=100,yt=20;int encode(int x,int y,int*code)int c;c=0;if(x<xl) c=LEFT;else if(x>xr) c=RIGHT;if(y>yb) c=BOTTOM;else if(y<yt) c=TOP;if(x=x
26、l|x=xr|y=yt|y=yb) c=0;*code=c;C_S_LINECLIP(x1,y1,x2,y2,x3,y3,xl,xr,yb,yt) int x,y,code1,code2,code3,code; encode(x1,y1,&code1); encode(x2,y2,&code2); encode(x3,y3,&code3); while(code1!=0|code2!=0) if(code1&code2!=0) return; code=code1; if(code1=0) code=code2; if(LEFT&code)!=0) x=
27、x1; y=y1+(long)(y2-y1)*(xl-x1)/(x2-x1); else if(RIGHT&code)!=0) x=xr; y=y1+(long)(y2-y1)*(xr-x1/x2-x1); else if(BOTTOM&code)!=0) y=yb; x=x1+(long)(x2-x1)*(yb-y1)/(y2-y1); else if(TOP&code)!=0) y=yt; x=x1+(long)(x2-x1)*(yt-y1)/(y2-y1); if(code=code1) x1=x; y1=y; encode(x,y,&code1); el
28、se x2=x; y2=y; encode(x,y,&code2); while(code1!=0|code3!=0) if(code1&code3!=0) return; code=code1; if(code1=0) code=code3; if(LEFT&code)!=0) x=x1; y=y1+(long)(y3-y1)*(xl-x1)/(x3-x1); else if(RIGHT&code)!=0) x=xr; y=y1+(long)(y3-y1)*(xr-x1/x3-x1); else if(BOTTOM&code)!=0) y=yb; x=
29、x1+(long)(x3-x1)*(yb-y1)/(y3-y1); else if(TOP&code)!=0) y=yt; x=x1+(long)(x3-x1)*(yt-y1)/(y3-y1); if(code=code1) x1=x; y1=y; encode(x,y,&code1); else x3=x; y3=y; encode(x,y,&code3); while(code3!=0|code2!=0) if(code3&code2!=0) return; code=code3; if(code3=0) code=code2; if(LEFT&co
30、de)!=0) x=x3; y=y3+(long)(y2-y3)*(xl-x3)/(x2-x3); else if(RIGHT&code)!=0) x=xr; y=y1+(long)(y2-y3)*(xr-x3/x2-x3); else if(BOTTOM&code)!=0) y=yb; x=x1+(long)(x2-x1)*(yb-y3)/(y2-y3); else if(TOP&code)!=0) y=yt; x=x1+(long)(x2-x1)*(yt-y3)/(y2-y3); if(code=code3) x1=x; y1=y; encode(x,y,&
31、code3); else x2=x; y2=y; encode(x,y,&code2); setcolor(RED); line(x1,y1,x2,y2); line(x1,y1,x3,y3); line(x2,y2,x3,y3); return;void main() int graphdriver=DETECT,graphmode; initgraph(&graphdriver,&graphmode,"C:TC20BGI"); rectangle(xl,yt,xr,yb); line(x1,y1,x2,y2); line(x1,y1,x3,y3)
32、; line(x2,y2,x3,y3); C_S_LINECLIP(x1,y1,x2,y2,x3,y3,xl,xr,yb,yt); getch(); closegraph();實(shí)驗(yàn)截圖:實(shí)驗(yàn)6 曲線生成算法的實(shí)現(xiàn)實(shí)驗(yàn)?zāi)康牧私馇€生成的原理,掌握幾種常見的曲線生成算法,利用TurboC實(shí)現(xiàn)Bezier曲線的生成算法。實(shí)驗(yàn)環(huán)境計(jì)算機(jī)、Turbo C或其他C語(yǔ)言程序設(shè)計(jì)環(huán)境實(shí)驗(yàn)學(xué)時(shí) 2學(xué)時(shí),必做實(shí)驗(yàn)。 實(shí)驗(yàn)內(nèi)容(1) 了解曲線生成的原理;(2) 掌握曲線生成算法(Bezier曲線、B樣條曲線);(3) 利用TurboC實(shí)現(xiàn)Bezier曲線的生成算法,在屏幕上任意繪制一條三次Bezier曲線。實(shí)驗(yàn)步驟1、 算法、原理清晰,有詳細(xì)的設(shè)計(jì)步驟; 2、 依據(jù)算法、步驟或程序流程圖,用C語(yǔ)言編寫源程序;3、 編輯源程序并進(jìn)行調(diào)試;4、 進(jìn)行運(yùn)行測(cè)試,并結(jié)合情況進(jìn)行調(diào)整;5、 對(duì)運(yùn)行結(jié)果進(jìn)行保存與分析;6、 打印源程序或把源程序以文件的形式提交;7、 按格式書寫實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)代碼:#include "graphics.h&qu
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)書審查意見
- 研究課題申報(bào)書要素
- 氣象軟課題項(xiàng)目申報(bào)書
- 綜合實(shí)踐課題申報(bào)書
- 原礦石采購(gòu)合同范本
- 保潔公司跨省經(jīng)營(yíng)合同范本
- 分店入股門店合同范例
- 教學(xué)成果培育課題申報(bào)書
- 醫(yī)院承包協(xié)議合同范本
- 借哪吒精神燃開學(xué)斗志 開學(xué)主題班會(huì)課件
- 2025年初中主題班會(huì)課件:好習(xí)慣成就好人生
- 學(xué)校教職工代表大會(huì)全套會(huì)議會(huì)務(wù)資料匯編
- 中華人民共和國(guó)監(jiān)察法宣貫培訓(xùn)
- 2025年山東傳媒職業(yè)學(xué)院高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
- 2025年春新教科版物理八年級(jí)下冊(cè)課件 第10章 流體的力現(xiàn)象 1 在流體中運(yùn)動(dòng)
- 屋面種植土垂直施工方案
- 2025年新人教PEP版英語(yǔ)三年級(jí)下冊(cè)全冊(cè)課時(shí)練習(xí)
- 《愛(ài)耳日課件》課件
- 《中醫(yī)基礎(chǔ)理論》課件-中醫(yī)學(xué)理論體系的基本特點(diǎn)-整體觀念
- 全國(guó)職業(yè)院校技能大賽高職組(商務(wù)數(shù)據(jù)分析賽項(xiàng))備賽試題及答案
評(píng)論
0/150
提交評(píng)論