版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)任務(wù)書</p><p> 設(shè)計(jì)題目轉(zhuǎn)動鐘表</p><p> 設(shè)計(jì)內(nèi)容及要求內(nèi)容:在屏幕上設(shè)計(jì)一個(gè)可以轉(zhuǎn)動的“天王”牌鐘表,鐘表的秒針、分針和時(shí)針轉(zhuǎn)動的時(shí)間與標(biāo)準(zhǔn)時(shí)間一致。要求:圖中的直線、圓采用直線和圓的生成算法實(shí)現(xiàn),鐘表中的秒針、分針和時(shí)針能夠轉(zhuǎn)動。</p><p> 設(shè)計(jì)環(huán)境:程序在WIN-TC環(huán)境下編譯、運(yùn)行,然后生
2、成轉(zhuǎn)動鐘表的圖形界面</p><p> 實(shí)現(xiàn)目標(biāo):通過運(yùn)用C語言編程知識,編寫一個(gè)在桌面可以轉(zhuǎn)動的“天王”牌鐘表。圖形中的直線和圓弧曲線采用逐點(diǎn)比較法算法實(shí)現(xiàn),鐘表中的各指針轉(zhuǎn)動時(shí)的坐標(biāo)函數(shù)用三角函數(shù)表示,秒針、分針、時(shí)針每次轉(zhuǎn)動一下的時(shí)間分別為一秒、一分和一小時(shí),表針轉(zhuǎn)動過后會自動消除痕跡。 </p><p> 計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)教師評閱成績表</p><p
3、> 系名稱:信息科學(xué)與工程系 </p><p><b> 此表由教師填寫</b></p><p> 計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)承諾書</p><p><b> 摘 要</b></p><p> 日常生活中,我們的身邊可以看見各種各樣 的鐘表,隨著計(jì)算機(jī)的普及 和計(jì)算機(jī)科學(xué)的飛速發(fā)展 ,人
4、們開始越來越多的利用計(jì) 算機(jī)來解決實(shí)際問題,開發(fā)一 個(gè)易于查看的時(shí)鐘有很大的 現(xiàn)實(shí)意義。同時(shí),設(shè)計(jì)的時(shí)鐘會聽 到喀噠聲,程序與生 活緊密結(jié)合,具體直觀,開 發(fā)應(yīng)用簡單。利用 C 語言編輯源 程序,再進(jìn)行編譯鏈接生成 可執(zhí)行文件,運(yùn)行時(shí)可以查看時(shí)間,聽到喀噠聲,具體直觀,方便了生活。</p><p> 關(guān)鍵詞: 計(jì)算機(jī)圖形學(xué) WIN-TC 鐘表 逐點(diǎn)比較法</p><p>&l
5、t;b> 目錄</b></p><p><b> 概述</b></p><p><b> 1.1 設(shè)計(jì)概要</b></p><p><b> 1.2 系統(tǒng)環(huán)境</b></p><p><b> 總體設(shè)計(jì)</b></p>
6、;<p><b> 功能實(shí)現(xiàn)</b></p><p> 3.1 程序運(yùn)行結(jié)果分析</p><p> 3.2 程序運(yùn)行結(jié)果截圖</p><p><b> 設(shè)計(jì)總結(jié)</b></p><p><b> 概述</b></p><p>&l
7、t;b> 1.1 設(shè)計(jì)概述</b></p><p> 程序設(shè)計(jì)是一種技術(shù),也是一項(xiàng)工程。程序設(shè)計(jì)語言是程序設(shè)計(jì)的工具。</p><p> 一種程序設(shè)計(jì)語言凝聚了具有時(shí)代特征的程序設(shè)計(jì)理念和方法。本程序利用</p><p> C語言中的圖形處理函數(shù)完成時(shí)間的模擬顯示。用C語言編程,設(shè)計(jì)一個(gè)時(shí)鐘,</p><p> 掌
8、握用逐點(diǎn)比較法算法畫直線和圓,畫圓弧函數(shù) 聲Bcircle(),背景設(shè)置</p><p> 函數(shù)setbkcolor();坐標(biāo)函數(shù) x=a*cos(b*c*pi/180-pi/2)+300,</p><p> y=a*sin(b*c*pi/180-pi/2)+240; 音 函 數(shù) sound() 和系統(tǒng)時(shí)間函數(shù)</p><p> gettime() 。<
9、;/p><p><b> 1.2 系統(tǒng)環(huán)境</b></p><p> 主體程序采用C語言編寫,程序在WIN-TC環(huán)境下編譯和運(yùn)行。</p><p><b> 總體設(shè)計(jì)</b></p><p> 首先定義主函數(shù)void plot_circle_points(int xc, int yc, int
10、x,</p><p> int y, int c);</p><p> 用逐點(diǎn)比較法算法畫圓:從始點(diǎn)(x1,y1)開始畫起,首先向圓內(nèi)走</p><p> 一步,也就是先向-x方向走一步,然后與所要畫的圓弧進(jìn)行比較;接著判</p><p> 斷結(jié)果,落在園內(nèi)時(shí)向y方向走一步,依此類推,一直到達(dá)圓外為止;當(dāng)</p><
11、;p> 判斷結(jié)果落在園外時(shí),向-x方向走一步,直到再次到達(dá)圓內(nèi)為止;當(dāng)畫到</p><p> 終點(diǎn)(x2,y2)時(shí),終止比較,AB圓弧繪制結(jié)束。</p><p> void Bcircle (int xc, int yc, int radius, int c)</p><p> { int x, y, p;</p><p>
12、<b> x=0;</b></p><p><b> y=radius;</b></p><p><b> ……</b></p><p><b> ……</b></p><p> 程序主要運(yùn)用于表盤的生成;</p><p>
13、; 用逐點(diǎn)比較法算法畫直線:設(shè)坐標(biāo)系中有A(x1,y1),B(x2,y2),</p><p> 令Fm=y2*x1-y1*x2,推廣一般式Fi=x1*yi-y1*xi,然后判斷Fi與0的</p><p> 關(guān)系:若》0,向+x方向走一步;若《0,向+y方向走一步,依此走下</p><p> 去便可以畫出最終直線。</p><p>
14、void Bline (int x1, int y1, int x2, int y2, int c)</p><p><b> {</b></p><p> int x, y, tmp;</p><p> int dx, dy, d;</p><p><b> float k;</b><
15、;/p><p><b> ……</b></p><p><b> ……</b></p><p> 程序主要運(yùn)用于表針的生成以及表盤上分格短直線的生成;</p><p> ?。?)用Bcircle()函數(shù)畫表盤,設(shè)置表針轉(zhuǎn)動時(shí)的坐標(biāo):</p><p> x1=200*cos
16、(i*6*pi/180)+300;</p><p> y1=200*sin(i*6*pi/180)+240;</p><p> x2=(200-l)*cos(i*6*pi/180)+300;</p><p> y2=(200-l)*sin(i*6*pi/180)+240;</p><p> ?。?)在表盤中央添加“天王”二字和一小圓,運(yùn)
17、用outtextxy()函</p><p> 數(shù)在表盤上、下、左、右四個(gè)方向添加數(shù)字“12”、“6”、“9”和“3”;</p><p> (6)運(yùn)用 gettime(t)函數(shù)將計(jì)算機(jī)時(shí)間寫入結(jié)構(gòu)體t中,同時(shí)畫三</p><p><b> 根長度不一的表針;</b></p><p> 運(yùn)用d()函數(shù)清楚表針轉(zhuǎn)動過后
18、的痕跡,同時(shí)用sound函數(shù)設(shè)</p><p> 置表針轉(zhuǎn)動時(shí)的滴答聲;</p><p> ?。?)退出圖形系統(tǒng),返回文本模式:</p><p> getch(); </p><p> closegraph();</p><p><b> 功能實(shí)現(xiàn)</b></p><
19、p> 3.1程序運(yùn)行結(jié)果分析</p><p> 程序在WIN-TC環(huán)境下編譯生成圖形界面,圖形界面中的直線和圓弧</p><p> 都采用逐點(diǎn)比較法算法實(shí)現(xiàn),圖形界面為轉(zhuǎn)動的鐘表,背景顏色為淺藍(lán)</p><p> 色,由setbkcolor()函數(shù)實(shí)現(xiàn);表盤為以(300,240)為圓心,以20、</p><p> 200、20
20、3和206為半徑的圓,由畫圓函數(shù)Bcircle()函數(shù)實(shí)現(xiàn);表盤中</p><p> 央有“天王”二字和一小圓,由簡單的畫圖函數(shù)生成;表盤上有三根長度</p><p> 不一、顏色不同的的表針,它們轉(zhuǎn)動的位置坐標(biāo)由三角函數(shù)控制x=a*cos</p><p> (b*c*pi/180-pi/2)+300,y=a*sin(b*c*pi/180-pi/2)+240;
21、表針每次走</p><p> 過后,痕跡會由d()函數(shù)消除,表針轉(zhuǎn)動時(shí)有轉(zhuǎn)動聲音,由sound()函</p><p> 數(shù)控制,并且聲音有延遲時(shí)間,由delay()函數(shù)控制。</p><p> 3.2 程序運(yùn)行結(jié)果截</p><p><b> 第4章 設(shè)計(jì)總結(jié)</b></p><p>
22、歷時(shí)四周終于把課程設(shè)計(jì)做出來了,通過這次課程設(shè)計(jì),加強(qiáng)了我的動手、思考和解決問題的能力,同時(shí)也讓我對運(yùn)用C語言編寫計(jì)算機(jī)圖形學(xué)程序有新的興趣。而且在設(shè)計(jì)過程中,經(jīng)常會遇到這樣那樣的問題,通過自己查閱資料,找同學(xué)和老師幫助,問題最終得到了解決。 由于課本上的知識太多,平時(shí)課間的學(xué)習(xí)并不能很好的理解和運(yùn)用各個(gè)函數(shù)的功能,而且考試內(nèi)容有限,所以在這次課程設(shè)計(jì)過程中,我在書本上了解了很多函數(shù)的功能,并且對于其在程序中的使用有了更多的認(rèn)識。平時(shí)看
23、課本時(shí),有時(shí)問題老是弄不懂,做完課程設(shè)計(jì),那些問題就迎刃而解了,而且還可以記住很多東西。比如一些程序功能的實(shí)現(xiàn),平時(shí)看課本,這次看了,下次就忘了,通過動手實(shí)踐讓我們對各個(gè)函數(shù)印象深刻。我認(rèn)為認(rèn)識來源于實(shí)踐,實(shí)踐是認(rèn)識的動力和最終目的,實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)。所以這四個(gè)星期的課程設(shè)計(jì)對我的作用是非常大的。我覺得程序設(shè)計(jì)需要耐心和細(xì)心,有時(shí)候一個(gè)標(biāo)點(diǎn)的錯(cuò)誤,如果你不注意,可能會導(dǎo)致程序無法運(yùn)行,所以寫程序的時(shí)候一定要認(rèn)真、細(xì)心。由于時(shí)間有
24、限,自己的水平也有限,盡管查閱了許多資料,但依然感覺自己的課程設(shè)計(jì)有許多不足之處,比如程序圖形界面簡單等。本想加入一些其</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 王汝傳.黃海平.計(jì)算機(jī)圖形學(xué)教程[M]. 北京:人民郵電出版社,2009.</p><p> [2] 楊路明. C語言程序設(shè)計(jì)教程[M]. 北京:北
25、京郵電大學(xué)出版社,2005.</p><p> [3] 姜靈芝.C語言課程設(shè)計(jì)案例精編[M].北京:清華大學(xué)出版社.2008.</p><p> [4] 田祥宏.C語言程序設(shè)計(jì)[M].西安:西安電子科技大學(xué)出版社.2007.</p><p><b> 附錄</b></p><p><b> 程序代碼:&
26、lt;/b></p><p> #include<graphics.h></p><p> #include<math.h></p><p> #include<dos.h></p><p> #define pi 3.1415926</p><p> #define
27、 X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300;</p><p> #define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240;</p><p> #define d(a,b,c,d) X(a,b,c);Y(a,b,c);Bline(300,240,x,y,d)</p><p> void plot
28、_circle_points(int xc, int yc, int x, int y, int c)</p><p><b> {</b></p><p> putpixel(xc+x, yc+y, c);</p><p> putpixel(xc-x, yc+y, c);</p><p> putpixel(
29、xc+x, yc-y, c);</p><p> putpixel(xc-x, yc-y, c);</p><p> putpixel(xc+y, yc+x, c);</p><p> putpixel(xc-y, yc+x, c);</p><p> putpixel(xc+y, yc-x, c);</p><p
30、> putpixel(xc-y, yc-x, c);</p><p><b> }</b></p><p> void Bcircle (int xc, int yc, int radius, int c)</p><p><b> {</b></p><p> int x, y,
31、p;</p><p><b> x=0;</b></p><p><b> y=radius;</b></p><p> p=3-2*radius;</p><p> while (x<y){</p><p> plot_circle_points(xc, y
32、c, x, y, c);</p><p> if (p<0) p=p+4*x+6;</p><p><b> else{</b></p><p> p=p+4*(x-y)+10;</p><p><b> y-=1;</b></p><p><b>
33、 }</b></p><p><b> x+=1;</b></p><p><b> }</b></p><p> if (x == y)</p><p> plot_circle_points(xc, yc, x, y, c);</p><p><
34、b> }</b></p><p> void Bline (int x1, int y1, int x2, int y2, int c)</p><p><b> {</b></p><p> int x, y, tmp;</p><p> int dx, dy, d;</p>
35、<p><b> float k;</b></p><p> if( 0 == (x1 - x2))</p><p><b> {</b></p><p><b> x = x1;</b></p><p> if(y1 > y2)</p>
36、<p> { tmp = y1;y1 = y2; y2 =tmp;}</p><p> for(y = y1; y < y2; y ++)</p><p><b> {</b></p><p> putpixel(x, y, abs(getpixel(x,y)-c));</p><p><
37、b> }</b></p><p><b> return;</b></p><p><b> }</b></p><p> k = (float)(y2 -y1)/(float)(x2 - x1);</p><p> if(k > 1.0) </p>
38、<p><b> {</b></p><p> tmp = x1; x1 = y1; y1 = tmp;</p><p> tmp = x2; x2 = y2; y2 = tmp;</p><p><b> }</b></p><p> else if(k > 0)
39、 </p><p><b> {}</b></p><p> else if(k < -1.0) </p><p><b> {</b></p><p><b> x1 = -x1;</b></p><p><b> x
40、2 = -x2;</b></p><p> tmp = x1; x1 = y1; y1 = tmp;</p><p> tmp = x2; x2 = y2; y2 = tmp;</p><p><b> }</b></p><p> else if( k < 0)</p><
41、p><b> {</b></p><p> y1 = - y1;</p><p> y2 = - y2;</p><p><b> }</b></p><p><b> else </b></p><p><b> {&
42、lt;/b></p><p><b> y = y1;</b></p><p> if(x1 > x2)</p><p> { tmp = x1; x1 = x2; x2 = tmp;}</p><p> for(x = x1; x <= x2; x ++)</p><p&g
43、t;<b> {</b></p><p> putpixel(x, y, abs(getpixel(x,y)-c));</p><p><b> }</b></p><p><b> return;</b></p><p><b> }</b>&
44、lt;/p><p> if(x1 > x2)</p><p><b> {</b></p><p> tmp = x1; x1 = x2; x2 = tmp;</p><p> tmp = y1; y1 = y2; y2 = tmp;</p><p><b> }</b
45、></p><p> dx = x2 - x1;</p><p> dy = y2 - y1;</p><p> d = 2 * dy - dx;</p><p> x = x1; y = y1;</p><p> for(; x < x2; x ++)</p><p>&
46、lt;b> {</b></p><p><b> if(k > 1)</b></p><p> {putpixel(y, x, abs(getpixel(y, x) - c));}</p><p> else if(k > 0)</p><p> {putpixel(x, y, a
47、bs(getpixel(x,y)-c));}</p><p> else if( k < -1)</p><p> {putpixel(-y, x, abs(getpixel(-y,x)-c));}</p><p> else if(k < 0)</p><p> {putpixel(x, -y, abs(getpixel
48、(x,-y)-c));}</p><p><b> else {}</b></p><p> if(d >= 0)</p><p><b> {</b></p><p><b> y++;</b></p><p> d+=2*dy-2*d
49、x;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> d+=2*dy;</b></p><p><b> }<
50、;/b></p><p><b> }</b></p><p><b> }</b></p><p> void init()</p><p><b> {</b></p><p> int i,l,x1,x2,y1,y2;</p&
51、gt;<p> setbkcolor(3);</p><p> Bcircle(300,240,20,15);</p><p> Bcircle(300,240,200,15);</p><p> Bcircle(300,240,203,15);</p><p> Bcircle(300,240,206,15);<
52、;/p><p> Bcircle(300,240,5,15);</p><p> for(i=0;i<60;i++)</p><p><b> {</b></p><p> if(i%5==0) l=15;</p><p><b> else l=5;</b>&l
53、t;/p><p> x1=200*cos(i*6*pi/180)+300;</p><p> y1=200*sin(i*6*pi/180)+240;</p><p> x2=(200-l)*cos(i*6*pi/180)+300;</p><p> y2=(200-l)*sin(i*6*pi/180)+240;</p>&l
54、t;p> Bline(x1,y1,x2,y2,15);</p><p><b> }</b></p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p> int
55、 x,y,j;</p><p> int gd,gm;</p><p> unsigned char h,m,s;</p><p> struct time t[1];</p><p> detectgraph(&gd, &gm);</p><p> initgraph(&gd,&am
56、p;gm," ");</p><p> setcolor(2);</p><p> cleardevice();</p><p> moveto(250,190);</p><p> linerel(50,0);</p><p> moveto(275,190);</p>&
57、lt;p> linerel(0,25);</p><p> moveto(250,215);</p><p> linerel(50,0);</p><p> moveto(275,215);</p><p> linerel(-25,25);</p><p> moveto(275,215);<
58、;/p><p> linerel(25,25);</p><p> setcolor(4);</p><p> moveto(300,240);</p><p> linerel(50,0);</p><p><b> x=getx();</b></p><p>&l
59、t;b> y=gety();</b></p><p> moveto(x,y+25);</p><p> linerel(-50,0);</p><p> moverel(0,25);</p><p> linerel(50,0);</p><p> moverel(-25,0);<
60、/p><p> linerel(0,-50);</p><p> setcolor(5);</p><p> circle(330,210,30) ;</p><p> setcolor(6);</p><p> for(j=0;j<=6;j++)</p><p><b>
61、 { </b></p><p> outtextxy(300,80,"12") ; </p><p> outtextxy(300,390,"6"); </p><p> outtextxy(140,230,"9"); </p><p> outtextxy(
62、460,230,"3"); </p><p><b> } </b></p><p><b> init();</b></p><p> gettime(t);</p><p> h=t[0].ti_hour;</p><p> m=t[0]
63、.ti_min;</p><p> s=t[0].ti_sec;</p><p> d(150,h,30,7);</p><p> d(170,m,6,14);</p><p> d(190,s,6,4);</p><p> while(!kbhit())</p><p><b&
64、gt; {</b></p><p> while(t[0].ti_sec==s)</p><p> gettime(t);</p><p> sound(400);</p><p> delay(70);</p><p> sound(200);</p><p> de
65、lay(30);</p><p> nosound();</p><p> d(190,s,6,4);</p><p> s=t[0].ti_sec;</p><p> d(190,s,6,4); </p><p> if (t[0].ti_min!=m)</p><p>&l
66、t;b> {</b></p><p> d(170,m,6,14);</p><p> m=t[0].ti_min;</p><p> d(170,m,6,14);</p><p><b> }</b></p><p> if (t[0].ti_hour!=h)<
67、;/p><p><b> {</b></p><p> d(150,h,30,7);</p><p> h=t[0].ti_hour;</p><p> d(150,h,30,7);</p><p> sound(1000);</p><p> delay(240)
68、;</p><p> nosound();</p><p> delay(140);</p><p> sound(2000);</p><p> delay(240);</p><p> nosound();</p><p><b> }</b></p&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 圖形學(xué)課程設(shè)計(jì)-- 計(jì)算機(jī)圖形學(xué)
- 計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)
- 計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)--圖形學(xué)基礎(chǔ)圖形處理實(shí)現(xiàn)
- 計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)報(bào)告
- 計(jì)算機(jī)圖形學(xué)論文-計(jì)算機(jī)圖形學(xué)
- 圖形學(xué)教案計(jì)算機(jī)圖形學(xué)a
- 計(jì)算機(jī)圖形學(xué)
- 計(jì)算機(jī)圖形學(xué)
- barsky直線裁剪算法計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)
- 計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)-- 彈跳的彩球動畫
- 計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)構(gòu)造完整系統(tǒng)
- 計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)——掃雷游戲程序設(shè)計(jì)
- 計(jì)算機(jī)圖形學(xué)簡介
- 計(jì)算機(jī)圖形學(xué)題庫
- 計(jì)算機(jī)圖形學(xué)答案
- 計(jì)算機(jī)圖形學(xué)簡介
- 計(jì)算機(jī)圖形學(xué)試題
- 計(jì)算機(jī)圖形學(xué) 瑣碎
- 計(jì)算機(jī)圖形學(xué)復(fù)習(xí)
- 計(jì)算機(jī)圖形學(xué)-wimswelcome
評論
0/150
提交評論