利用C語言圖形函數(shù)繪圖_第1頁
利用C語言圖形函數(shù)繪圖_第2頁
利用C語言圖形函數(shù)繪圖_第3頁
利用C語言圖形函數(shù)繪圖_第4頁
利用C語言圖形函數(shù)繪圖_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Computer Graphics Report Of course experiment 信息與計算科學(xué)專業(yè)基礎(chǔ)課計算機(jī)圖形學(xué)課程實驗報告實驗題目班 級姓 名學(xué) 號指導(dǎo)教師日 期西安理工大學(xué)理學(xué)院應(yīng)用數(shù)學(xué)系二零一二年春季學(xué)期利用C語言圖形函數(shù)繪圖實驗1實驗說明試驗?zāi)康模赫莆誘urboC語言圖形函數(shù)的使用和學(xué)會繪制一般圖形。試驗地點(diǎn):教九樓401 數(shù)學(xué)系機(jī)房實驗要求(Direction):1. 每個學(xué)生單獨(dú)完成;2.開發(fā)語言為TurboC或C+,也可使用其它語言;3.請在自己的實驗報告上寫明姓名、學(xué)號、班級;4.每次交的實驗報告內(nèi)容包括:題目、試驗?zāi)康暮鸵饬x、程序制作步驟、主程序、運(yùn)行結(jié)果圖以

2、及參考文件;5.自己保留一份可執(zhí)行程序,考試前統(tǒng)一檢查和上交。實驗內(nèi)容:實驗題一1.1實驗題目用如下圖1所示,圖中最大正n邊形的外接圓半徑為R,旋轉(zhuǎn)該正n邊形,每次旋轉(zhuǎn)角度,旋轉(zhuǎn)后的的n邊形頂點(diǎn)落在前一個正六邊形的邊上,共旋轉(zhuǎn)N次,請上機(jī)編程繪制N+1個外接圓半徑逐漸縮小且旋轉(zhuǎn)的正n邊形。要求:(1) n、R、N、要求可以人為自由控制輸入;(2)N+1個正六邊形的中心(即外接圓的圓心)在顯示屏幕中心。如左圖(一)所示:n=6=100、N =1、R=R1、旋轉(zhuǎn)一次。依次類推,共旋轉(zhuǎn)N次。CBAR1R2圖11.2實驗?zāi)康暮鸵饬x1. 了解如何利用C語言和圖形函數(shù)進(jìn)行繪圖;2. 熟悉并掌握C語言的圖形

3、模式控制函數(shù),圖形屏幕操作函數(shù),以及基本圖形函數(shù);3. 通過對Turbo C進(jìn)行圖形程序設(shè)計的基本方法的學(xué)習(xí),能繪制出簡單的圖形;4. 通過繪制N+1個正n邊形,了解圖形系統(tǒng)初始化、圖形系統(tǒng)關(guān)閉和圖形模式的控制,并熟練運(yùn)用圖形坐標(biāo)的設(shè)置,包括定點(diǎn)、讀取光標(biāo)、讀取x和y軸的最大值以及圖形顏色的設(shè)置。1.3程序制作步驟(包括算法思想、算法流程圖等)算法思想:1.自動搜索顯示器類型和顯示模式,初始化圖形系統(tǒng),通過printf、scanf語句控制半徑r、邊數(shù)n、多邊形的個數(shù)k、邊的每次旋轉(zhuǎn)角度d,的自由輸入;2.給定一內(nèi)接圓半徑r,由圓內(nèi)接多邊形的算法公式:xi=r*cos(i+1) *2.0*pi/

4、n)+320.0 yi=240.0-r*sin(2.0*pi/n *(i+1) 確定出多邊形N的各個頂點(diǎn)坐標(biāo),然后利用劃線函數(shù)line(),連接相鄰兩點(diǎn),即形成一個正多邊形。 3.根據(jù)邊與角的關(guān)系,以及線段定比分點(diǎn)公式,可知旋轉(zhuǎn)后的多邊形的各個頂點(diǎn)的坐標(biāo) 。公式如下: xi=(xi+xi+1/(k+1) y i=(yi+yi+1/(k+1) k=360/(n*d) (n為多邊形的邊數(shù),d為多邊形旋轉(zhuǎn)的度數(shù)) 然后與第二步相同,利用劃線函數(shù)line(),連接形成又一個旋轉(zhuǎn)過的正多邊形,這樣就形成了所要繪制的圖形;4.關(guān)閉圖形系統(tǒng)。1.4主程序程序代碼:/*- 多邊形的逐次旋轉(zhuǎn)-*/#includ

5、e "stdio.h"#include "conio.h"#include "math.h"#include "graphics.h"#include "stdlib.h"#include "time.h"void main() int graphdriver=DETECT,graphmode; /*自動搜索顯示器類型和顯示模式*/ int r; int i,j,n,k,d; float x,y,q; int a100,b100; char str180,str280; pr

6、intf("請輸入正接圓的半徑r:n"); scanf("%d",&r); printf("請輸入多邊形的邊數(shù)n:n"); scanf("%d",&n); printf("請輸入多邊形的個數(shù)k:n"); scanf("%d",&k); printf("請輸入每次的旋轉(zhuǎn)角度d:n"); scanf("%d",&d); initgraph(&graphdriver,&graphmode,&qu

7、ot;D:TC"); /*初始化圖形系統(tǒng)*/ printf("nt注意:maxx=%d,maxy=%dn",getmaxx(),getmaxy(); printf("ntr=%d, n=%d, k=%d, d=%d",r,n,k,d); x=(getmaxx()+1)/2.0; y=(getmaxy()+1)/2.0; q=360/n; /*角增量*/ q=q*3.1415926/180; /*將角增量化為弧度*/ for(i=1;i<=n;i+) /*計算初始正n角形頂點(diǎn)坐標(biāo)*/ ai=(int)(int)x+r*cos(i-1)*q)

8、; bi=(int)(int)y-r*sin(i-1)*q); an+1=a1; bn+1=b1; /*閉合正n角形,以便連續(xù)畫線*/ /*-畫k個正多角形-*/ for(i=1;i<=k;i+) for(j=1;j<=n;j+) /*畫一個正多角形*/ line(aj,bj,aj+1,bj+1); for(j=1;j<=n;j+) /*計算下一個正多邊形頂點(diǎn)坐標(biāo)*/ aj=(int)(aj+(aj+1-aj)/d); bj=(int)(bj+(bj+1-bj)/d); an+1=a1; bn+1=b1; getch(); closegraph();1.5運(yùn)行結(jié)果圖:實驗題二

9、2.1實驗題目請繪制一個圖:屏幕中央有一個半徑為R1=160的大圓和一個同心的且半徑為R2=120的小圓,同時在大圓和小圓中間均勻分布著12個與大圓和小圓相切的圓。如下圖2所示:要求:(1)分別用12種不同的顏色和填充模式填充12個小圓;(2)用自定義模式填充中間小圓,且用漫延填充方法填充;(3)用自定義模式填充中間小圓時,填充模式圖案自己設(shè)計。例如,用字母A 、字母B、字母C填充圖案可設(shè)計為:2.2實驗?zāi)康暮鸵饬x1.學(xué)會運(yùn)用畫圓函數(shù)circle(),圖形填充函數(shù)包括:setfillstyle()、setfillpattern()以及floodfill()來填充圓;2.學(xué)會用自定義模式填充指定

10、圓,并且用漫延填充方法填充;3.學(xué)會用自定義圖案來填充指定圓。2.3程序制作步驟(包括算法思想、算法流程圖等)算法思想:1.輸入所要求環(huán)繞的小圓的個數(shù)n,設(shè)置畫筆顏色,利用circle()畫半徑為160的大圓,然后畫半徑為120的小圓并按照輸入的模式m選擇相應(yīng)的填充模式。 2.利用圓內(nèi)接多邊形的算法,算出環(huán)繞小圓的各個圓心坐標(biāo),公式如下: xi=r*cos( (i+1) * 2.0*pi/n)+200.0 yi=200.0-r*sin( (i+1) * 2.0*pi/n) 以20為半徑畫環(huán)繞的n個小圓,并用不同的顏色填充。2.4主程序#include "stdio.h"#i

11、nclude "conio.h"#include "math.h"#include "graphics.h"#define pi 3.14159265#define MAX 50void main() int graphdriver=DETECT,graphmode; /*自動搜索顯示器類型和顯示模式*/ double xMAX,yMAX; int i,j,n,m; double r,theta; double sin(double),cos(double); char p18=(char)0x00,(char)0x3c,(char)

12、0x20,(char)0x20, (char)0x38,(char)0x20,(char)0x20,(char)0x20; r=160.0; printf("please input the numble of N="); scanf("%d",&n); initgraph(&graphdriver,&graphmode,"D:TC"); /*初始化圖形系統(tǒng)*/ theta=2.0*pi/n; setcolor(3); circle(200,200,200); setcolor(6); setfillstyle

13、(12,0); setfillpattern(p1,9); circle(200,200,120); floodfill(200,200,6); while(!kbhit() for(j=2;j<=n;j+) for(i=0;i<=n;i+) xi=r*cos(theta*(i+j)+200.0; yi=200.0-r*sin(theta*(i+j); setcolor(i); circle(int)xi,(int)yi,(int)40); setfillstyle(SOLID_FILL,i); floodfill(int)xi,(int)yi,i); delay(10000);

14、cleardevice(); setcolor(3); circle(200,200,200); setcolor(6); setfillstyle(12,0); setfillpattern(p1,9); circle(200,200,120); floodfill(200,200,6); getch(); closegraph();2.5運(yùn)行結(jié)果圖:實驗題三3.1實驗題目自選題目:(1)請編寫一動畫:繪制上述實驗2中的圖形,并要求:ü 1.讓圖案中的12個小圓按順時針或逆時針方向不停地旋轉(zhuǎn);ü 2.半徑為R2=120的小圓用黑色和實填充模式填充,并在小圓內(nèi)繪制一些閃爍的

15、星星(可參考課本P81 例3.27)。或者用不同的顏色和填充模式不停地填充小圓,產(chǎn)生動畫效果。(2)請編寫一動畫:實現(xiàn)實驗1中的圖形由大到?。ㄓ尚〉酱螅┬D(zhuǎn)的動態(tài)過程。(3)編寫一個描述一倆自行車在一公路上由左向右行駛的程序,運(yùn)行效果圖大致如圖三所示。(可參考課本P74 例3.21)(4)試著自行設(shè)計一個動畫或美術(shù)圖案,并且上機(jī)編程實現(xiàn)。(5)構(gòu)造一種類似廣告片效果,一幅或者多幅圖形圖像逐個顯示出來,并配以文字說明,顏色變化等。要求:對于實驗3中的5個小題,選擇其中一個上機(jī)編程實現(xiàn)即可。3.2實驗?zāi)康暮鸵饬x1. 描述一輛自行車在一公路上由右向左行駛;2. 熟練掌握畫圓函數(shù)circle(),以及

16、畫線函數(shù)line(),自定義填充函數(shù)setfillstyle()等一些簡單的繪圖函數(shù)。3.3程序制作步驟(包括算法思想、算法流程圖等)算法思想:1.自動搜索顯示器類型和顯示模式,初始化圖形系統(tǒng)并設(shè)置背景顏色以及畫筆顏色;2.用畫圓函數(shù)circle()以及畫線函數(shù)line()繪制自行車的基本輪廓;3.繪制處于運(yùn)動狀態(tài)的自行車車輪的軸線以及動態(tài)畫面;4.繪制最后處于靜止?fàn)顟B(tài)的自行車車輪的軸線;5.關(guān)閉圖形系統(tǒng)。3.4主程序#include"stdlib.h"#include"graphics.h"#include"conio.h"#inc

17、lude"stdio.h"void main()void *w;int driver=DETECT,mode=0,i,start,end,j;initgraph(&driver,&mode," ");cleardevice();setbkcolor(9);setcolor(13);start=0;end=180;circle(387,290,37);circle(525,290,37);line(404,217,398,230);line(436,217,429,230);line(398,230,429,230);line(413,23

18、0,387,290);line(387,290,525,290);line(408,243,484,243);line(387,290,484,243);line(484,243,525,290);line(444,290,484,243);line(444,290,446,279);line(444,290,443,300);line(438,277,444,278);line(435,300,451,301);line(484,243,487,233);line(472,233,502,233); /自行車基本輪廓的繪制w=malloc(imagesize(350,200,562,327);getimage(350,200,562,327,w);for(i=350,j=0;i>0;i-,j-)setfillstyle(EMPTY_FILL,0);pieslice(387+j,290,start,end,37);pieslice(525+j,290,start,end,37);start+=40;end+=40;delay(5); /處于運(yùn)動狀態(tài)的自行車車輪的軸線的繪制 putimage(i-1,200,w,COPY_PUT);line(2,327,562,327);delay(10); /自行車行駛動畫的實現(xiàn) for(i=0;i<10;i+)pi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論