Matlab實現(xiàn)振動彈簧的實時動畫參考模板_第1頁
Matlab實現(xiàn)振動彈簧的實時動畫參考模板_第2頁
Matlab實現(xiàn)振動彈簧的實時動畫參考模板_第3頁
Matlab實現(xiàn)振動彈簧的實時動畫參考模板_第4頁
Matlab實現(xiàn)振動彈簧的實時動畫參考模板_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Matlab實現(xiàn)振動彈簧的實時動畫摘要:Matlab是當前應用最廣泛的科學與工程計算軟件之一,本次課設(shè)將Matlab引入到圖形學動畫設(shè)計.本次課設(shè)主要可分為兩大步驟:一、應用Matlab對彈簧振子進行建模;二、應用Matlab實現(xiàn)彈簧振動的實時動畫。其中建模部分包括對天花板的建模、對連接直線的建模、對彈簧的建模、對振動小球的建模。模擬彈簧振動的過程主要包括:更新小球和彈簧的位置。 更新水平線的位置和長度。實時地畫出彈簧高度與時間的關(guān)系曲線。 關(guān)鍵字:Matlab, 振動彈簧,建模,實時動畫 1 / 26目錄1 緒論 . 1 1.1 matlab基本功能介紹 . 1 1.2 matlab的動畫制

2、作 . 22 振動彈簧的實時動畫 . 42.1 程序功能分析. 4 2.2 彈簧振子的matlab建模 . 6 2.2.1 天花板的建模 . 72.2.2直線的建模 . 82.2.3彈簧的建模 . 92.2.4球的建模 . 102.2.5 利用set函數(shù)返回句柄值改變來當前坐標軸 . 112.3 彈簧振動的實時動畫. 13 2.3.1彈簧振子簡諧振動的物理模型 . 132.3.2 利用matlab實現(xiàn)彈簧的實時振動. 142.4 調(diào)試結(jié)果. 193 設(shè)計總結(jié) . 23參考文獻 . 24 致謝 . 25 附錄-彈簧阻尼振動程序 . 26 2.1 程序功能分析以下是利用matlab實現(xiàn)振動彈簧的事

3、實動畫的程序。rectangle('position',12,8.5,2,0.3,'FaceColor',0.5,0.3,0.4); axis(0,15,-1,10); %畫頂板 hold on plot(13,13,7,8.5,'r','linewidth',2); %畫直線 y=2:.2:7; M=length(y); x=12+mod(1:M,2)*2; x(1)=13; x(end-3:end)=13; D=plot(x,y); %彈簧 C=0:.1:2*pi;r=0.35; t1=r*sin(C); F1=fill(13

4、+r*cos(C),2+t1,'r'); % 球 set(gca,'ytick',0:2:9); set(gca,'yticklabels',num2str(-1:3'); plot(0,15,3.3,3.3,'black'); H1=plot(0,13,3.3,3.3,'y'); % 句柄黃線 Q=plot(0,3.8,'color','r'); % 運動曲線; td=;yd=; T=0; 5text(2,9,'理想中的彈簧振子簡諧振動','font

5、size',16); set(gcf,'doublebuffer','on'); while T<12; pause(0.2); Dy=(3/2-1/2*sin(pi*T)*1/2; Y=-(y-2)*Dy+7; Yf=Y(end)+t1; td=td,T;yd=yd,Y(end); set(D,'ydata',Y); set(F1,'ydata',Yf,'facecolor',rand(1,3); set(H1,'xdata',T,13,'ydata',Y(end),

6、Y(end); set(Q,'xdata',td,'ydata',yd) ; T=T+0.1; end 程序功能介紹:模擬彈簧振子簡諧運動的過程,同時畫出相應圓球質(zhì)心隨時間變化的曲線。 上面的程序為模擬彈簧振子的簡諧振動,若要模擬彈簧阻尼振動過程的程序,可見附錄。 2.2 彈簧振子的matlab建模圖2-1 彈簧振子建模圖上圖所示的圖形即為在matlab環(huán)境下的彈簧振子的建模圖形。 實現(xiàn)程序為: rectangle('position',12,8.5,2,0.3,'FaceColor',0.5,0.3,0.4); axis(0,1

7、5,-1,10); %畫頂板 hold on plot(13,13,7,8.5,'r','linewidth',2); %畫直線 y=2:.2:7; M=length(y); x=12+mod(1:M,2)*2; x(1)=13; x(end-3:end)=13; D=plot(x,y); %彈簧 C=0:.1:2*pi;r=0.35; t1=r*sin(C); F1=fill(13+r*cos(C),2+t1,'r'); % 球 set(gca,'ytick',0:2:9); set(gca,'yticklabels&#

8、39;,num2str(-1:3'); plot(0,15,3.3,3.3,'black'); 下面分步介紹它的建模過程。 2.2.1 天花板的建模2-2 天花板建模圖如上圖所示,為在matlab環(huán)境下天花板的建模圖形。 實現(xiàn)程序為:rectangle('position',12,8.5,2,0.3,'FaceColor',0.5,0.3,0.4); 程序功能介紹:rectangle的功能就是畫一個矩形,12,8.5為矩形的一個點,他的長和寬分別為2、0.3。'FaceColor',0.5,0.3,0.4是用來設(shè)置它的顏色

9、的。 2.2.2直線的建模2-3 直線的建模圖如上圖所示,為在matlab下的直線建模圖形。 實現(xiàn)程序為: plot(13,13,7,8.5,'r','linewidth',2) 程序功能介紹:plot是一個常用的畫圖函數(shù),13,13,7,8.5確定的直線的位置,'r'設(shè)置直線顏色為紅色。linewidth',2,直線的粗細設(shè)置。 2.2.3彈簧的建模2-4 彈簧的建模圖 如上圖所示,為在matlab環(huán)境下彈簧的建模圖形。 實現(xiàn)程序為:y=2:.2:7; M=length(y); x=12+mod(1:M,2)*2; x(1)=13; x

10、(end-3:end)=13; D=plot(x,y); 程序功能介紹:y=2:.2:7,2到7之間0.2為步長生成向量。M=length(y),M=y向量的長度。length為求向量長度的函數(shù)。M=26。x=12+mod(1:M,2)*2,生成14 12這樣的重復數(shù)據(jù)26個。 mod(x,y)為x模除y。mod(1:26,2) ans=1 0 1 0等26個。x(1)=13,令初始值為13。 x(end-3:end)=13,令最后4個數(shù)為13。D=plot(x,y),畫出該圖。 Plot函數(shù)介紹:plot(X,Y) 繪制所有由Xn和Yn數(shù)據(jù)對定義的曲線。如果僅Xn或者僅Yn是一個矩陣,plo

11、t函數(shù)繪制向量對矩陣的行或者列的曲線圖,取決于是向量的行還是列的尺寸與矩陣相匹配。 2.2.4球的建模2-5 球的建模圖 如上圖所示,為在matlab環(huán)境下球的建模圖形。 實現(xiàn)程序為: C=0:.1:2*pi;r=0.35; t1=r*sin(C); F1=fill(13+r*cos(C),2+t1,'r'); 程序功能介紹:C=0:.1:2*pi;r=0.35,0到2之間0.1步長生成向量,r=0.35. t1=r*sin(C),返回r乘以C中每個元素的正弦值的值。F1=fill(13+r*cos(C),2+t1,'r'),畫出多邊形小球。Fill函數(shù)介紹;函

12、數(shù)fill用于創(chuàng)建彩色的多邊形。格式; fill(X,Y,C) 從X和Y中的數(shù)據(jù)出發(fā)創(chuàng)建填充的多邊形,頂點顏色為C。C十一哥向量或者矩陣,它是指向色圖的指標。如果C是一個行向量,則length(C)必須等于size(X,2)和size(Y,2);如果C是一個列向量,則length(C)必須等于size(X, 1)和size(Y,1)。如果有必要,fill將通過最后一個頂點與第一個頂點連接來封閉多邊形。 2.2.5 利用set函數(shù)返回當前坐標軸 通過上幾步的建模我們可以得到如下所示的圖形2-6 未重新設(shè)置軸建模圖 為下一步實時動畫做好準備我們需要重新設(shè)定一下坐標。在matlab中可以利用set函

13、數(shù)返回句柄值改變來當前坐標軸。得到如下所示的圖形。 2-7 設(shè)置后建模圖 2-8 初步設(shè)置軸的建模圖 實現(xiàn)程序為: set(gca,'ytick',0:2:9); set(gca,'yticklabels',num2str(-1:3'); plot(0,15,3.3,3.3,'black'); 程序功能介紹:gca未返回當前axes對象的句柄值,ytick為控制Y軸坐標刻度記號的位置,即控制坐標軸上刻度記號的位置以及每隔多少值會到下一個刻度記號的位置,同時還需配合yticklabel屬性來調(diào)整。set(gca,'ytick'

14、;,0:2:9);將坐標軸從0開始以2為間隔到9設(shè)置Y坐標。而下一句程序set(gca,'yticklabels',num2str(-1:3')就是通過yticklabel來改變Y軸屬性,即由0、2、4、6、8變?yōu)?1、0、1、2、3。上面是對Y軸的設(shè)置。對平衡位置軸的設(shè)置為:plot(0,15,3.3,3.3,'black'),plot為畫直線的常用函數(shù)0,15,3.3,3.3定義了平衡位置軸的位置。'black',定義平衡位置軸的顏色為黑。 2.3 彈簧振動的實時動畫2.3.1彈簧振子簡諧振動的物理模型彈簧振子簡諧振動的物理模型彈簧振

15、子簡諧振動的物理模型彈簧振子簡諧振動的物理模型 圖2-9 彈簧振子的簡諧振動 現(xiàn)在我們來定量地分析上圖所示的彈簧振子的小振幅自由振動。 設(shè)彈簧的勁度系數(shù)為k,小球的質(zhì)量為m,忽略各種阻力,取平衡位置O為坐標原點,x坐標軸指向右為正。小球位置坐標為x時,所受彈性回復力Fx可表示為 : Fx=-kx (1.1) 根據(jù)牛頓定律,小球的M的運動微分方程為:mxkx?=? 通常將上式改寫成 20xx?+= (1.2) 其中2/km= (1.3) 微分方程(1.2)的通解為 cos()xAt=+ (1.4) 14式(1.4)就是小球M的運動學方程。式中A和是兩個積分常數(shù),他們的物理意義和確定方法將在后面討

16、論。將式(1.4)對時間求一階和二階導數(shù),得到小球運動速度和加速度 sin()vxAt=?+ (1.5) 2cos()axAt?=?+ (1.6) 因cos()sin(/2)tt+=+,故令'/2=+,則解(1.4)還可以寫成 'sin()xAt=+ (1.7) 即微分方程(1.4)的解即可寫成遇險函數(shù)的形式,也可以寫成正弦函數(shù)形式。 從解(1.4)看出,彈簧振子運動時,坐標x(即相對平衡未知的位移)按余弦(或正弦)函數(shù)規(guī)律隨時間變化。因此,只在線性彈性回復力作用下的彈簧振子運動是諧振動。式(1.5)、(1.6)表明,作諧振動物體的速度和加速度也是按余弦或正弦函數(shù)規(guī)律隨時間變化

17、的。見下圖,從式(1.2)看出,作諧振動物體的加速度大小總是與其位移大小成正比,二者符號相反,這一結(jié)論被視為諧振動的運動學特征。 圖2-10 簡諧運動曲線 2.3.2 利用利用利用利用matlab實現(xiàn)彈簧的實時振動實現(xiàn)彈簧的實時振動實現(xiàn)彈簧的實時振動實現(xiàn)彈簧的實時振動 由2.3.1節(jié)可知彈簧振動是的變化主要表現(xiàn)在彈簧和小球的位置隨時間的變化,而且小球的位移是按正弦規(guī)律變化的。據(jù)此我們先設(shè)計一個算法?,F(xiàn)用流程圖表示如下: 15 圖2-11 流程圖 Matlab是通過以下程序?qū)崿F(xiàn)彈簧振動的實時動畫的: rectangle('position',12,8.5,2,0.3,'F

18、aceColor',0.5,0.3,0.4); axis(0,15,-1,10); %畫頂板 hold on plot(13,13,7,8.5,'r','linewidth',2); %畫直線 y=2:.2:7; M=length(y); x=12+mod(1:M,2)*2; x(1)=13; 16x(end-3:end)=13; D=plot(x,y); %彈簧 C=0:.1:2*pi;r=0.35; t1=r*sin(C); F1=fill(13+r*cos(C),2+t1,'r'); % 球 set(gca,'ytick&#

19、39;,0:2:9); set(gca,'yticklabels',num2str(-1:3'); plot(0,15,3.3,3.3,'black'); H1=plot(0,13,3.3,3.3,'y'); % 句柄黃線 Q=plot(0,3.8,'color','r'); % 運動曲線; td=;yd =; T=0; text(2,9,'理想中的彈簧振子簡諧振動','fontsize',16); set(gcf,'doublebuffer','on

20、'); while T<12; pause(0.2); Dy=(3/2-1/2*sin(pi*T)*1/2; Y=-(y-2)*Dy+7; Yf=Y(end)+t1; td=td,T;yd=yd,Y(end); set(D,'ydata',Y); set(F1,'ydata',Yf,'facecolor',rand(1,3); set(H1,'xdata',T,13,'ydata',Y(end),Y(end); set(Q,'xdata',td,'ydata',yd)

21、; T=T+0.1; End 該程序的建模部分已經(jīng)在前面介紹過了,現(xiàn)介紹實現(xiàn)振動的部分。 17在此之前先做一些準備工作。即為以下程序段: H1=plot(0,13,3.3,3.3,'y'); % 句柄黃線 Q=plot(0,3.8,'color','r'); % 運動曲線; td=;yd =; T=0; text(2,9,'理想中的彈簧振子簡諧振動','fontsize',16); set(gcf,'doublebuffer','on'); 程序功能介紹:H1=plot(0,13,3

22、.3,3.3,'y'),畫句柄線。位置為0,13,3.3,3.3,顏色為黃色。td=;記錄時間的變量,yd =,記錄y軸位置的變量。T=0; 設(shè)置初始時的時間值。text(2,9,'理想中的彈簧振子簡諧振動','fontsize',16); 添加標注文字。位置為(2,9),標注為理想中的彈簧振子簡諧振動字符串大小為16號字體。set(gcf,'doublebuffer','on');啟動雙緩存,設(shè)置渲染效果。 通過上面的可得到如下圖所示的界面。 18 圖2-12 彈簧振子振動前的圖形 模擬彈簧振子簡諧振動的過程包括

23、以下內(nèi)容: 更新小球和彈簧的位置。 更新水平線的位置和長度。 實時地畫出彈簧高度與時間的關(guān)系曲線。 以上幾點將在下面程序介紹中解釋。 該彈簧振子的振動是通過一個while循環(huán)語句來實現(xiàn)的。程序語句為: while T<12; pause(0.2); Dy=(3/2-1/2*sin(pi*T)*1/2; 19 Y=-(y-2)*Dy+7; Yf=Y(end)+t1; td=td,T;yd=yd,Y(end); set(D,'ydata',Y); set(F1,'ydata',Yf,'facecolor',rand(1,3); set(H1,&

24、#39;xdata',T,13,'ydata',Y(end),Y(end); set(Q,'xdata',td,'ydata',yd) ; T=T+0.1; End 程序功能介紹:pause(0.2); 暫停一下,顯示動畫效果。Dy=(3/2-1/2*sin(pi*T)*1/2; 計算T時刻彈簧對平衡位置的位移。Y=-(y-2)*Dy+7;計算彈簧的縱坐標數(shù)值。Yf=Y(end)+t1; 計算圓球的縱坐標數(shù)值。td=td,T;yd=yd,Y(end); 更新運動曲線的數(shù)據(jù)。set(D,'ydata',Y); 更新彈簧的位置

25、數(shù)據(jù)。set(F1,'ydata',Yf,'facecolor',rand(1,3) ,更新圓球的位置數(shù)據(jù)。rand(m,n)函數(shù)是返回一個m*n的隨機矩陣,這里用來改變小球的顏色。set(H1,'xdata',T,13,'ydata',Y(end),Y(end),更新跟蹤黃線的數(shù)據(jù)。這里句柄黃線的主要作用為將振動彈簧的位移以運動曲線的形式變現(xiàn)出來,以便我們跟好的了解彈簧振子的簡諧振動。set(Q,'xdata',td,'ydata',yd),更新曲線的數(shù)據(jù)。T=T+0.1; 更新時間。 2.4 調(diào)

26、試結(jié)果調(diào)試結(jié)果調(diào)試結(jié)果調(diào)試結(jié)果 觀察T=0、3、6、9、12的調(diào)試圖形。 20051015-1 0 1 2 3理理理理理理理理理理理理 圖2-13 T=0的圖形 051015-1 0 1 2 3理理理理理理理理理理理理 圖2-14 T=3時的圖形 21051015-1 0 1 2 3理理理理理理理理理理理理 圖2-15 T=6時的圖形 051015-1 0 1 2 3理理理理理理理理理理理理 圖2-16 T=9時的圖形 22051015-1 0 1 2 3理理理理理理理理理理理理 圖2-17 T=12時的圖形 233 3 3 3 設(shè)計總結(jié)設(shè)計總結(jié)設(shè)計總結(jié)設(shè)計總結(jié) 本次設(shè)計實現(xiàn)了設(shè)計要求,實現(xiàn)了

27、利用matlab實現(xiàn)振動彈簧的實時動畫,同時畫出相應圓球質(zhì)心隨時間變化的曲線。 通過此次課程設(shè)計,讓我對matlab軟件的應用有了更多的了解,對一些基本matlab函數(shù)的功能及算法有了一定的掌握。在學習的過程中,對matlab軟件功能強大深有體會。 24參考文獻參考文獻參考文獻參考文獻 1徐東艷.MATLAB函數(shù)庫查詢辭典.中國鐵道出版社.2005. 2蘇金明.MATLAB實用教程.電子工業(yè)出版社.2008. 3李麗.MATLAB工程計算及應用.人民郵電出版社.2001. 4蔡旭輝.MATLAB基礎(chǔ)與應用教程.人民郵電出版社.2009. 5周建興.MATLAB從入門到精通.人民郵電出版社.20

28、08. 6張錚.MATLAB程序設(shè)計與實例應用.中國鐵道出版社.2003. 25致謝致謝致謝致謝 在本次設(shè)計的整個過程中,得到了敖老師和同學的大力幫助,借此機會向他們表示誠摯的感謝。 感謝在百忙之中對我的論文進行評審并提出寶貴意見的老師們。 26附錄附錄附錄附錄-彈簧阻尼振動彈簧阻尼振動彈簧阻尼振動彈簧阻尼振動程序程序程序程序 下面來模擬彈簧振子在阻尼力的作用下進行阻尼運動的過程,同時畫出相應圓球質(zhì)心隨時間變化的曲線。相應的MATLAB程序如下: close all;clear;clc; rectangle('position',12,8,2,0.3,'FaceColo

29、r',0.1,0.3,0.4); axis(0,15,-1,10);hold on; % 設(shè)置坐標軸范圍 plot(13,13,7,8,'r','linewidth',2); % 畫與彈簧連接的線 y=2:.2:7; % 得到彈簧對應的縱坐標數(shù)據(jù) M=length(y); % 獲取數(shù)據(jù)的長度 x=12+mod(1:M,2)*2; % 生成彈簧的橫坐標數(shù)據(jù) x(1)=13;x(end-3:end)=13; % 計算出彈簧上下端點的橫坐標值 D=plot(x,y); % 畫出彈簧 C=0:.1:2*pi; % 生成圓球的角度數(shù)據(jù) r=0.3; % 圓球的半徑

30、 t1=r*sin(C); % 計算出圓球?qū)χ行牡目v坐標數(shù)據(jù) F1=fill(13+r*cos(C),2+t1,'r'); % 畫出圓球 set(gca,'ytick',0:2:9); % 設(shè)置y軸的刻度 set(gca,'yticklabels',num2str(-1:3'); % 重新設(shè)置y軸的刻度值 plot(0,15,2,2,'black'); % 畫出平衡位置 H1=plot(0,13,2,2,'g'); % 球心的跟蹤線 Q=plot(0,2.5,'color','r'); % 畫出運動曲線; td=; % 記錄時間的變量 yd

溫馨提示

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

評論

0/150

提交評論