劉永勝,冷家融,張國福,陳有權,趙 悅,于曉慧
(長春工業大學人文信息學院機電工程學院,吉林 長春 130022)
動畫演示在教學中具有直觀清晰、豐富多彩、生動有趣、激發學生學習興趣的作用。隨著計算機圖形技術(以下簡稱“CG”)的發展,越來越多的行業開始應用或者開發三維動畫技術,在眾多CG 領域中特別是動畫電影制作拍攝和游戲制作及開發中,三維動畫技術的應用更是屢見不鮮[1]。
本文僅以Matlab 軟件中的drawnow 命令在動畫制作中的應用為例,將其應用于力學教學中。這種動畫制作方法簡單實用、易操作、演示效果好,但卻往往被很多人忽略,在教學中應用的并不普遍。
Matlab 是由美國Mathworks 公司研發的主要面對科學計算、可視化和交互式程序設計的高科技計算環境。Matlab擁有大量的庫函數,也允許用戶自定義函數[2]。它將數值分析、矩陣計算、科學數據可視化與非線性動態系統的建模和仿真等諸多強大功能集成在一個易于使用的視窗環境中,具有方便的數據可視化功能,可以將向量和矩陣用圖形表現出來,并對圖形進行標注和打印。新版Matlab 軟件增加了高層次的作圖功能,包括二維和三維的可視化、圖象處理、動畫和函數作圖[3]。
用drawnow 命令作動畫的基本功是直線的運動動畫,畫直線的命令為h_L=plot([x1x2],[y1y2]),作動畫一定是要循環的,這是第一個關鍵點,第二個關鍵點是改變對象的什么屬性,有的是’xdata’、’ydata’,有的是改變’position’,直線需要改變的屬性是’xdata’、’ydata’,程序如下(以下increment 簡寫為inc):
for i=1:n
set(h_L,’xdata’,[x1+i*inc1,x2+i*inc2],’ydata’,...
[y1+i*inc3,y2+i*inc4]);
drawnow;pause(value1);
end
橫坐標和縱坐標的增量值若不同的話,直線除了移動還會帶有縮放,要注意x、y的坐標顯示范圍必須在正確的位置給定,否則可能出現直線不動,坐標系移動的現象。
字母的顯示命令格式為:h_t=text(x,y,’F’),但作動畫時不是用的’xdata’,而是用的’position’,在循環中的語句格式為:
set(h_t,"position",[x1+i*inc1y1+i*inc2]),后面的 drawnow 命令是可有可無的。
根據以上知識,就能夠作出一個力(并帶有字母F)移動時的動畫了,力的移動在力學中是常見的,箭頭可以用三條直線表示,一條長線兩條短線,有了以上知識,如果能做出矩形縮放的話,桿件拉伸或壓縮的動畫就可做出了。
矩形畫法:h_r=rectangle(gca,"position",[x0y0 w h]),矩形縮放指令:for i=1:200
set(h_r,"position",...
[x0+i*inc1y0+i*inc2 w+i*2*inc1 h+i*2*inc2]);
drawnow;pause(0.01);
end
此功能十分實用,可以像一支筆一樣,畫出任意曲線。以畫出圓曲線為例,首先要畫出標記點:
h_mb=line("marker","o","xdata",1,"ydata",0);
for i=0:200
set(h_mb,"xdata",cos(i*pi/100),
"ydata",sin(i*pi/100));
drawnow,pause(0.015);
j=i-1:i;
line(cos(j*pi/100),sin(j*pi/100),...
"color",[0.8 0.1 0.3],"linewidth",2);
end
注意標記點的起始位置與正弦和余弦的初相位角必須協調一致,相位角為零時對應的起始位置為(1,0),當角度為正時,逆時針畫曲線,角度為負時,順時針畫曲線。
假設開始的直線為x軸上2~5,向下彎曲成拋物線,頂點在(3.5,y0),x軸上的截距為2 和5,截距中點x坐標為xm 截距的一半為a,拋物線方程為:(x-xm)^2=-a^2/y0*(y-y0);即:y=y0*(1-(x-xm).^2/a^2);
y0=0;
x=linspace(2,5,50);y=y0*(1-(x-3.5).^2/2.25);
h_Lwq=plot(x,y,"color",[0.8 0.4 0.3],"linewidth",5);
axis([0 6-0.5 0.2]);
for i=0:40
y0=-i*0.005;
set(h_Lwq,"ydata",y0*(1-(x-3.5).^2/2.25));
drawnow;pause(0.05);
end
由直線變為曲線的動畫演示如圖1 所示。

圖1 由直線變為曲線的動畫演示圖
材料力學是工程構件和機械元件承載能力的基礎性學科,也是固體力學中具有入門性質的分支[4]。筆者運用以上所述知識制作了大量的力學教學演示動畫,最典型的是材料力學中的構件基本變形動畫,以及曲柄連桿機構的運動。構件基本變形動畫演示如圖2 所示。
筆者們在力學教學中引用了Matlab 軟件的基礎應用部分,做到了計算編程化、公式函數化、演示用動畫、機構仿真化、復習查詢化,同時應用Matlab 軟件,制作了大量的運動動畫演示效果圖,并廣泛地應用于力學教學實踐。drawnow 命令在Matlab 繪圖中具有極為重要的作用,若沒有drawnow 命令,Matlab 要等任務序列執行完后才能去刷新屏幕。一般說來,在實時動畫中,為更新屏幕,drawnow是必須的[5]。drawnow 命令雖然具有制作運動動畫的功能,但也不可能解決制作動畫過程所有的問題。旋轉命令rotate也具有此項功能。另外,人們往往會把動畫演示作為GUI的一個部分,以及力學的計算編程等,都具有實際的應用價值。

圖2 構件基本變形動畫演示圖