版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計任務(wù)書</b></p><p> 題目: 彈跳的彩球動畫 </p><p> 課程設(shè)計任務(wù)書及成績評定</p><p> 課程設(shè)計的內(nèi)容和具體要求1.設(shè)計內(nèi)容:彈跳的球體:一個著色的三維球體,沿著一條給定的軌道(正弦衰弱曲線)不斷彈跳并同時翻滾,要求按ESC停止轉(zhuǎn)
2、動翻滾按↑加快彈跳速度,按↓減慢彈跳速度。2.設(shè)計要求:球體在屏幕上不斷地連續(xù)彈跳并同時翻滾,按↑加快移動速度,按↓減慢移動速度。</p><p><b> 一、摘要</b></p><p> 本課題實現(xiàn)一個著色的三維小球在一定的空間內(nèi)按照一條給定的軌道(正弦衰弱曲線)不斷彈跳并同時翻滾??刂奇I為按ESC退出程序,按“↑”鍵完成運動加速,使得三維小球加快彈跳速度;
3、按“↓”鍵完成運動減速,使得三維小球減慢彈跳速度。并且小球在屏幕中連續(xù)不斷的按照給定的曲線函數(shù)跳動,且三維小球自身也要進行翻滾。</p><p> 該程序的主要模塊分為如下部分:</p><p> 操作控制部分:該部分主要是實現(xiàn)對屏幕的操作,達到功能要求中按“ESC”結(jié)束程序,按“↑”加快三維小球運動,按“↓”減慢三維小球的運動。</p><p> 球體繪制部
4、分:該部分實現(xiàn)三維小球的繪制,其具體的是對三維球體的形狀、大小、經(jīng)緯線、以及在三維球體中填充顏色。</p><p> 球體運動軌跡控制部分:該部分是確定球體在屏幕上的運動軌跡,從而達到程序要求的功能。通過該部分,我們可以任意的對球體的運動軌跡進行設(shè)定,使得三維小球的運動豐富多彩。</p><p> 背景控制部分:通過該部分,我們可以設(shè)定三維小球在什么樣的背景下運動,對顏色的組合,使得背
5、景更加豐富,從而完善程序的運行界面,達到美觀的作用。</p><p> 二、總體設(shè)計方案及主要設(shè)計原理</p><p><b> 1.功能實現(xiàn)</b></p><p> 通過運行程序,我們看到該程序的功能我們已經(jīng)基本實現(xiàn),當(dāng)我們在三維小球在屏幕中按照預(yù)先給定的曲線函數(shù)路線進行運動,當(dāng)我們從鍵盤輸入“↑”時三維小球就加速運動。當(dāng)我們從鍵盤輸
6、入“↓”時,橢球體減速運動,按下“ESC”鍵就退出程序,最終達到了功能要求的目的。</p><p><b> 2.流程圖</b></p><p> 2.1函數(shù)qiu的流程圖</p><p> 如圖1所示為函數(shù)qiu的流程圖:</p><p> 圖1:函數(shù)qiu的流程圖 </p><p>
7、 2.2繪制球體的程序流程圖</p><p> 如圖2、圖3示為程序繪制球體的流程圖:</p><p> 圖2:球體繪制程序流程圖1 </p><p> 圖3:球體繪制程序流程圖2 </p><p><b> 2.3主程序流程圖</b></p><p> 圖4:主程序流程圖 </p
8、><p><b> 3.主要算法</b></p><p> 可用繪制三維曲面(規(guī)則曲面、參數(shù)方程為:x=Rsin(α)cos(β), y=Rsin(α)sin(β), z=Rcos(α),0≤α≤180,0≤β≤360)來設(shè)計球體的形狀,用軸測圖將它繪制到屏幕上,并對球面上的小方格進行填充,選擇5—10個不同方位的球體圖形用getimage()命令將它們的圖象保存;對
9、以后路徑上的圖形只需用命令Putimage()調(diào)出即可。其軌跡方程為:</p><p> z=A|sin(ωr+θ)|e-kr r=(x2+y2)1/2。</p><p><b> 三、源程序代碼</b></p><p> #include"math.h"</p><p> #inclu
10、de"graphics.h"</p><p> #include"bios.h"</p><p> #include"conio.h"</p><p> #define ESC 283</p><p> #define PAGEUP 18688</p><
11、p> #define PAGEDOWN 20736</p><p> double f[4][4],xx,yy,zz,dd;</p><p> double x0[40][40],y0[40][40],z0[40][40];</p><p> int x[40][40],y[40][40],z[40][40],this;</p><
12、p> int scx(double xj)</p><p><b> {</b></p><p><b> int x;</b></p><p> x=(int)(xj+40);</p><p> return(x);</p><p><b> }
13、</b></p><p> int scy(double yj)</p><p><b> {</b></p><p><b> int y;</b></p><p> y=(int)(yj+60);</p><p> return(y);</p&
14、gt;<p><b> }</b></p><p> void teq(double theta)</p><p><b> {</b></p><p> double th;</p><p> th=theta*3.14159/180;</p><p&g
15、t; f[0][0]=0.87*cos(th); f[0][1]=0.0; f[0][2]=-0.35*cos(th)-0.71*sin(th); f[0][3]=0.0;</p><p> f[1][0]=-0.5; f[1][1]=0.0; f[1][2]=-0.61; f[1][3]=0.0;</p><p> f[2][0]=0.87*sin(th); f[2]
16、[1]=0.0; f[2][2]=-0.35*sin(th)+0.71*cos(th); f[2][3]=0.0;</p><p> f[3][0]=0.0; f[3][1]=0.0; f[3][2]=0.0; f[3][3]=1.0;</p><p><b> }</b></p><p> double affine
17、3x(double x,double y,double z,double d)</p><p><b> {</b></p><p> xx=x*f[0][0]+y*f[1][0]+z*f[2][0]+d*f[3][0];</p><p> return(xx);</p><p><b> }</
18、b></p><p> double affine3z(double x,double y,double z,double d)</p><p><b> {</b></p><p> zz=x*f[0][2]+y*f[1][2]+z*f[2][2]+d*f[3][2];</p><p> return(z
19、z);</p><p><b> }</b></p><p> void draw()</p><p><b> {</b></p><p> int i,j,m[8],rt;</p><p> setfillstyle(1,RED);</p><
20、;p> for(i=9;i>=0;i--)</p><p> for(j=19;j>=0;j--)</p><p><b> {</b></p><p> if(j%2==1)</p><p><b> {</b></p><p> setfil
21、lstyle(1,RED);</p><p><b> }</b></p><p> else setfillstyle(1,BLUE);</p><p> m[0]=scx(x0[i][j]);m[1]=scy(z0[i][j]);</p><p> m[2]=scx(x0[i+1][j]);m[3]=scy(
22、z0[i+1][j]);</p><p> m[4]=scx(x0[i+1][j+1]);m[5]=scy(z0[i+1][j+1]);</p><p> m[6]=scx(x0[i][j+1]);m[7]=scy(z0[i][j+1]);</p><p> fillpoly(4,m);</p><p><b> }<
23、/b></p><p><b> }</b></p><p> void qiu()</p><p><b> {</b></p><p> double a=0.0,b=0.0;</p><p><b> int r=30;</b>&l
24、t;/p><p> int i=0,j=0,th;</p><p> for(i=0;i<=10;i++)</p><p><b> {</b></p><p> for(j=0;j<=20;j++)</p><p><b> {</b></p>
25、<p> x[i][j]=r*sin(a)*cos(b);</p><p> y[i][j]=r*sin(a)*sin(b);</p><p> z[i][j]=r*cos(a);</p><p> b=b+3.14159/10;</p><p><b> }</b></p><
26、;p> a=a+3.14159/10;</p><p><b> b=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> qiu1(int th,int u,int v)</p><p&
27、gt;<b> {</b></p><p><b> int i,j;</b></p><p> this=this+th;</p><p> teq(this);</p><p> for(i=0;i<=15;i++)</p><p> for(j=0;j
28、<=30;j++)</p><p><b> {</b></p><p> x0[i][j]=affine3x(x[i][j],y[i][j],z[i][j],1.0)+u;</p><p> z0[i][j]=affine3z(x[i][j],y[i][j],z[i][j],1.0)+v;</p><p>
29、<b> }</b></p><p><b> draw();</b></p><p><b> }</b></p><p><b> main()</b></p><p><b> {</b></p><
30、;p> int driver=VGA,mode=VGAMED;</p><p> initgraph(&driver,&mode," ");</p><p><b> qiu2();</b></p><p> closegraph();</p><p><b>
31、 }</b></p><p><b> qiu2()</b></p><p><b> {</b></p><p> int i=3,j=0,xw=0,yw=0,key,speed,dd=0,mm,xxw[200],yyw[200];</p><p> int xp[26]={
32、50,50,50,100,140,180,220,250,280,310,330,350,370,390,410,430,450,470,490,510,525,535,545,555,565};</p><p> int yp[26]={0,0,0,200,50,50,200,100,100,200,150,150,200,170,170,200,180,180,200,200,200,200,200,200
33、,200};</p><p> int xa,xb,xc,xd;</p><p> int ya,yb,yc,yd;</p><p> double t=0.5,tt=0.05;</p><p> xa=xp[0];xb=xp[1];xc=xp[2];xd=xp[3];</p><p> ya=yp[0];y
34、b=xp[1];yc=yp[2];yd=yp[3];</p><p><b> qiu();</b></p><p> outtextxy(100,100,"Press any key to start!");</p><p> qiu1(0,0,ya);</p><p><b>
35、getch();</b></p><p> for(j=0;i<26;j++)</p><p> {if(bioskey(1)==0){</p><p> if(j%2==0)</p><p> {setvisualpage(0);</p><p> delay(10000);</p&
36、gt;<p> setactivepage(1);</p><p> cleardevice();</p><p> setfillstyle(1,WHITE);</p><p> bar(0,260,700,320);</p><p> qiu1(-10,xw,yw);</p><p><
37、;b> if(t>=1)</b></p><p><b> {</b></p><p> xa=xp[i];xb=xp[i+1];xc=xp[i+2];xd=xp[i+3];</p><p> ya=yp[i];yb=yp[i+1];yc=yp[i+2];yd=yp[i+3];</p><p&
38、gt;<b> t=0;</b></p><p><b> i=i+3;</b></p><p><b> }</b></p><p> xw=((-xa+3*xb-3*xc+xd)*t*t*t+(3*xa-6*xb+3*xc)*t*t+(-3*xa+3*xb)*t+xa);</p>
39、;<p> yw=((-ya+3*yb-3*yc+yd)*t*t*t+(3*ya-6*yb+3*yc)*t*t+(-3*ya+3*yb)*t+ya);</p><p><b> t=t+tt;</b></p><p> xxw[dd]=xw+40;</p><p> yyw[dd]=yw+60;</p>&l
40、t;p> for(mm=0;mm<dd;mm++)</p><p><b> {</b></p><p> line(xxw[mm],yyw[mm],xxw[mm+1],yyw[mm+1]);</p><p><b> }</b></p><p><b> dd++;
41、</b></p><p> outtextxy(200,100,"press ESC to exit");</p><p><b> if(i>=26)</b></p><p><b> {</b></p><p><b> i=3;</
42、b></p><p><b> j=0;</b></p><p><b> dd=0;</b></p><p><b> t=0.5;</b></p><p> xa=xp[0];xb=xp[1];xc=xp[2];xd=xp[3];</p><
43、;p> ya=yp[0];yb=yp[1];yc=yp[2];yd=yp[3];</p><p> cleardevice();</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p&
44、gt;<p><b> {</b></p><p> setvisualpage(1);</p><p> delay(10000);</p><p> setactivepage(0);</p><p> cleardevice();</p><p> setfills
45、tyle(1,WHITE);</p><p> bar(0,260,700,320);</p><p> qiu1(-10,xw,yw);</p><p><b> if(t>=1)</b></p><p><b> {</b></p><p> xa=xp[
46、i];xb=xp[i+1];xc=xp[i+2];xd=xp[i+3];</p><p> ya=yp[i];yb=yp[i+1];yc=yp[i+2];yd=yp[i+3];</p><p><b> t=0;</b></p><p><b> i=i+3;</b></p><p><
47、b> }</b></p><p> xw=((-xa+3*xb-3*xc+xd)*t*t*t+(3*xa-6*xb+3*xc)*t*t+(-3*xa+3*xb)*t+xa);</p><p> yw=((-ya+3*yb-3*yc+yd)*t*t*t+(3*ya-6*yb+3*yc)*t*t+(-3*ya+3*yb)*t+ya);</p><p&
48、gt;<b> t=t+tt;</b></p><p> xxw[dd]=xw+40;</p><p> yyw[dd]=yw+60;</p><p> for(mm=0;mm<dd;mm++)</p><p><b> {</b></p><p> lin
49、e(xxw[mm],yyw[mm],xxw[mm+1],yyw[mm+1]);</p><p><b> }</b></p><p><b> dd++;</b></p><p> outtextxy(200,100,"press ESC to exit");</p><p&g
50、t;<b> if(i>=26)</b></p><p><b> {i=3;</b></p><p><b> j=0;</b></p><p><b> dd=0;</b></p><p><b> t=0.5;</b
51、></p><p> xa=xp[0];xb=xp[1];xc=xp[2];xd=xp[3];</p><p> ya=yp[0];yb=yp[1];yc=yp[2];yd=yp[3];</p><p> cleardevice();</p><p><b> }</b></p><p&
52、gt;<b> }</b></p><p><b> }</b></p><p><b> else{</b></p><p> key=bioskey(0);</p><p> switch(key)</p><p><b>
53、 {</b></p><p> case ESC:return;</p><p> case PAGEUP:tt=tt*2;</p><p><b> break;</b></p><p> case PAGEDOWN:tt=tt/2;</p><p><b> b
54、reak;</b></p><p> defualt:break;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> getch()
55、;</b></p><p><b> }</b></p><p><b> 四、測試及分析</b></p><p> 該程序是彈跳的小球,程序?qū)懲曛筮\行程序,會看到下面的界面:</p><p> 接著按照提示進行操作,就會出現(xiàn)彈跳的小球的最終效果,見下圖:</p>
56、<p><b> 五、結(jié)束語</b></p><p> 課程設(shè)計是培養(yǎng)學(xué)生綜合運用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學(xué)生實際工作能力的具體訓(xùn)練和考察過程.通過本次圖形學(xué)的課程設(shè)計,我學(xué)會了很多東西。以前那些似東非懂的知識,現(xiàn)在有很多已經(jīng)掌握了,原來根本沒聽過的東西也明白了很多,而且使我對C語言有了更進一步的認識和了解,要想學(xué)好它要重在實踐,
57、要通過不斷的上機操作才能更好地學(xué)習(xí)它,通過實踐,我也發(fā)現(xiàn)我的好多不足之處,如對C語言的一些標準庫函數(shù)不太了解,通過實踐,使我在這幾個方面的認識有所提高。</p><p> 通過實踐的學(xué)習(xí),我認到學(xué)好計算機要重視實踐操作,不僅僅是學(xué)習(xí)C語言,還是其它的語言,以及其它的計算機方面的知識都要重在實踐,所以后在學(xué)習(xí)過程中,我會更加注視實踐操作,使自己便好地學(xué)好計算機。</p><p> 圖形學(xué)
58、中二維圖形處理的很重要的一塊是裁剪。裁剪的算法是三維圖形處理中消隱的基本算法,也是大型圖形處理中很重要的一塊,對于算法的正確性,效率都有很高的要求。在這次課程設(shè)計中,能夠選擇這個題目我很高興。學(xué)到了很多的知識。也曾為了一些技術(shù)問題頭疼過,但當(dāng)我真的想出了一個可行的解決方案時,那種欣喜是無法用語言表達的。 </p><p> 不管怎么說,我覺得做這個課程設(shè)計,我是用了十分的努力的,我也從中獲得了極大的滿足
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 圖形學(xué)課程設(shè)計-- 計算機圖形學(xué)
- 計算機圖形學(xué)課程設(shè)計
- 計算機圖形學(xué)課程設(shè)計--圖形學(xué)基礎(chǔ)圖形處理實現(xiàn)
- 計算機圖形學(xué)課程設(shè)計報告
- 計算機圖形學(xué)論文-計算機圖形學(xué)
- 計算機圖形學(xué)課程設(shè)計--- 轉(zhuǎn)動鐘表
- 圖形學(xué)教案計算機圖形學(xué)a
- 計算機圖形學(xué)
- 計算機圖形學(xué)
- barsky直線裁剪算法計算機圖形學(xué)課程設(shè)計
- 計算機圖形學(xué)課程設(shè)計構(gòu)造完整系統(tǒng)
- 計算機圖形學(xué)課程設(shè)計——掃雷游戲程序設(shè)計
- 計算機圖形學(xué)簡介
- 計算機圖形學(xué)題庫
- 計算機圖形學(xué)答案
- 計算機圖形學(xué)簡介
- 計算機圖形學(xué)試題
- 計算機圖形學(xué) 瑣碎
- 計算機圖形學(xué)復(fù)習(xí)
- 計算機圖形學(xué)-wimswelcome
評論
0/150
提交評論