摘要 介紹利用Flash的lineTo方法動態(tài)生成阻尼振動曲線的過程,此方法比以往duplicateMovieClip的實(shí)現(xiàn)方法更加簡單,曲線也更加真實(shí),改善了阻尼振動物理教學(xué)課件的效果,提高了課件制作的效率。
關(guān)鍵詞 阻尼振動;Flash;課件
中圖分類號 G642 文獻(xiàn)標(biāo)識碼 B文章編號 1671-489X(2008)18-0070-03
1 引言
隨著網(wǎng)絡(luò)的普及和教育技術(shù)的發(fā)展,多媒體課件被越來越多地應(yīng)用于課堂教學(xué)。物理課件應(yīng)用于課堂教學(xué)中,能使比較抽象的模型和過程直觀形象地表現(xiàn)出來,便于學(xué)生觀察和理解,從而提升課堂學(xué)習(xí)效率。Flash是目前多媒體課件制作的主要軟件,它強(qiáng)大的動畫和交互功能,自由的開發(fā)界面深受教學(xué)工作者的喜愛。尤其是阻尼振動這一章節(jié)的教學(xué),使用Flash模擬彈簧振子動態(tài)繪制曲線,在實(shí)際教學(xué)中有非常好的效果。但是縱觀阻尼振動的課件和介紹其制作的文章,都是使用Flash中的duplicateMovieClip方法繪制阻尼振動圖象。而duplicateMovieClip并非繪圖函數(shù),用該方法繪制圖象不僅復(fù)雜低效,而且效果也不理想。其實(shí)在Flash中已有專門繪圖的函數(shù)lineTo,而該函數(shù)卻一直未見用于課件制作。用Flash的繪圖函數(shù)組中的lineTo代替duplicateMovieClip完成阻尼振動的課件,不僅可以簡化Flash課件中的曲線繪制,而且能夠改善曲線的圖形效果。
2 兩種繪圖方法的比較
以往Flash制作阻尼振動使用duplicateMovieClip繪制曲線。duplicateMovieClip函數(shù)的功能是復(fù)制影片剪輯,因此通常的做法是先制作一個影片剪輯(MovieClip)放置在場景中,然后不斷調(diào)用duplicateMovieClip方法復(fù)制該影片剪輯,并使這些影片剪輯排列成曲線,完成阻尼振動的圖象。這種做法缺陷很明顯,繪制出來的曲線受影片剪輯大小的影響,粗細(xì)無法調(diào)節(jié)。在實(shí)踐中影片剪輯往往過大,繪制的曲線過粗,不能精確讀取曲線坐標(biāo)。在遇到曲率較大的地方,曲線呈現(xiàn)不連續(xù)的小圓點(diǎn)。而且每復(fù)制一個影片剪輯就要占用一個深度級別,十分占用系統(tǒng)資源。當(dāng)場景中的影片剪輯數(shù)量超過999后,F(xiàn)lash運(yùn)行就會非常緩慢。用duplicateMovieClip繪制的阻尼振動圖象如圖1所示,阻尼曲線上每一個小圓點(diǎn)都是一個被復(fù)制出來的影片剪輯。
lineTo是Flash中專門用于繪制圖形的函數(shù),用lineTo繪制的阻尼振動圖象如圖2所示,曲線十分平滑細(xì)膩,而且可以自由地控制曲線的顏色和粗細(xì)。
3 阻尼振動原理[1-2]
把豎直懸掛的彈簧振子的質(zhì)點(diǎn)置于液體之中,質(zhì)點(diǎn)受彈簧彈性力和液體阻尼力作用,即做振幅不斷減小的振動叫做阻尼振動。
根據(jù)牛頓第二定律,合外力
阻尼振動時振子受線形回復(fù)力和阻力的共同作用,所以合外力是二者之和。根據(jù)力的平衡給出動力學(xué)方程
經(jīng)過整理得到:()
其中β是阻尼因子、是固有頻率。
這是一個常系數(shù)線性微分方程。利用微分方程的知識,可以討論這個方程的解,給出3種不同振動狀態(tài),如圖3所示。
1)時,解為,其中
如曲線a所示,阻尼作用較小,振幅隨時間變化按指數(shù)規(guī)律衰減,稱為弱阻尼。
2)時,解為
如曲線b所示,系統(tǒng)很快地回到平衡位置,稱為臨界阻尼。
3)時,解為
如曲線c所示,偏離平衡位置的位移按指數(shù)規(guī)律衰減,需要很長時間才會回復(fù)到平衡位置,稱為過阻尼。
4 繪制阻尼振動圖象
4.1 lineTo的使用方法在Flash中用于繪圖的方法有9個,如圖4所示,分別是beginFill,beginGradientFill,clear,curveTo,endFill,lineGradientStyle,lineStyle,lineTo和moveTo;除lineGradientStyle外,其余方法在Flash 5版本中已有。這里使用lineTo方法繪制阻尼運(yùn)動曲線。lineTo的完整格式是MovieClip.lineTo(x, y)
lineTo方法畫線需要以下三行代碼完成:
_root.createEmptyMovieClip(\"a\", 100);
a.lineTo(x,y);
a.lineStyle(1,0xff0000,100)
這三行代碼的作用分別是創(chuàng)建對象、畫線和設(shè)置線的屬性。首先用createEmptyMovieClip激活lineTo方法,然后使用lineTo畫線,最后用lineStyle給畫的線設(shè)置顏色、寬度和透明度。lineTo(x,y)中的x,y是線的終點(diǎn)坐標(biāo),起點(diǎn)坐標(biāo)由上次lineTo(x,y)確定;lineStyle(1,0xff0000,100)中的“1”是線的粗細(xì)程度;“0xff0000”是線的顏色,ff0000表示紅色;“100”是線的透明度。
4.2 弱阻尼振動圖象的制作建立一個單幀的場景,在場景中添加一個按鈕和4個輸入文本框。4個輸入文本框分別設(shè)置變量zuni、zhengfu、jiaosudu、xiangwei,并賦上初始值0.05、1、4.5、1.9。然后在按鈕上添加on (press) {}動作,并在該動作內(nèi)寫入action script代碼。效果如圖5所示,按下按鈕后便繪制出弱阻尼運(yùn)動曲線。
以下是實(shí)現(xiàn)該效果的action script代碼。在代碼的相應(yīng)位置,給出注釋以說明每一行代碼的作用。
//阻尼運(yùn)動函數(shù)x=A[exp(-βt)]cos(ωt+φ)
//定義zuni 為阻尼β
//定義zhengfu為振幅A
//定義jiaosudu為角速度ω
//定義xiangwei為相位φ
//由于網(wǎng)格大小是18px*18px,F(xiàn)lash場景的橫縱坐標(biāo)最小單位1px,因此要設(shè)置系數(shù)擴(kuò)大橫縱坐標(biāo)最小單位,使曲線變得美觀
zuni2=Number(zuni)*0.1;
jiaosudu2=Number(jiaosudu)*0.18;
zhengfu2=Number(zhengfu)*18.5;
//創(chuàng)建畫圖對象
_root.createEmptyMovieClip(\"zhuniquxian\", 100);
//初始化自變量i,i即弱阻尼運(yùn)動方程中的變量t
i=0;
//設(shè)置計時器,以間隔20毫秒的速度繪制弱阻尼運(yùn)動曲線ruozuniyundong
setInterval(ruozuniyundong,20);
//清除原曲線
zuniquxian.clear();
//定義弱阻尼運(yùn)動曲線方程
function ruozuniyundong(){
//使曲線橫坐標(biāo)不超過400
if (i<=400){
//ω^2=ω0^2+β^2
jiaosudu3=Math.pow((Math.pow(jiaosudu2,2)-Math.pow(zuni2,2)),0.5)
//變量b即弱阻尼運(yùn)動方程中的變量x,x=A[exp(-βt)]cos(ωt+φ)
b=0-zhengfu2*Math.pow(Math.E,(-zuni2*i))*Math.cos(jiaosudu3*i+Number(xiangwei))+200;
//zuniquxian.lineStyle()要放在zuniquxian.lineTo()后面,確定坐標(biāo)點(diǎn)后再著色。
zuniquxian.lineTo(i+25,b);
//lineStyle()開始著色
zuniquxian.lineStyle(1,0xff0000,100);
i=i+1;
};};
}
4.3 臨界阻尼、過阻尼振動曲線和彈簧振子的制作
1)臨界阻尼和過阻尼圖象的繪制方法和弱阻尼運(yùn)動相同。根據(jù)臨界阻尼在Flash中生成曲線(圖6)。
過阻尼在Flash中生成曲線(圖7)。從生成的圖象中可知臨界阻尼在的曲線在極值的右半段和教材上的臨界阻尼圖象符合。如果是制作交互型課件,不僅要使臨界阻尼振動圖象隨著參數(shù)β、C1、C2的變化而變化,而且要使Flash只生成極值的右半段,以符合圖3的曲線b。這樣就需要對臨界阻尼求導(dǎo)確定t1值,然后讓Flash只生成,且的圖象,這樣做比較復(fù)雜。如果是制作演示實(shí)驗(yàn)用的課件,還有更簡單的方法。臨界阻尼和過阻尼方程復(fù)雜,而曲線簡單,可以用已繪制好的曲線為底板,然后利用圖層遮罩功能使曲線逐步顯現(xiàn)。這樣做不僅效果好,而且容易實(shí)現(xiàn)。
2)如果是制作交互型課件可以使用MovieClip.xscale,MovieClip.yscale方法控制彈簧的伸縮;用MovieClip.x,MovieClip.y方法控制小球的位置,使彈簧和小球與阻尼振動圖象運(yùn)動同步。如果是演示課件,左邊動畫部分可利用關(guān)鍵幀使彈簧和小球隨著曲線同步運(yùn)動。這樣做不需要寫代碼,制作簡單,但是只能根據(jù)曲線逐幀設(shè)置小球和彈簧的運(yùn)動。阻尼振動的演示實(shí)驗(yàn)的課件效果如圖8所示。
5 結(jié)論
lineTo繪圖函數(shù)的適用范圍是Flash 5版之后。用lineTo改進(jìn)后的阻尼振動圖象簡化了代碼,提高了運(yùn)行效率,而且使得繪制的曲線更為美觀。lineTo方法可以繪制任何復(fù)雜的曲線,包括連續(xù)的、不連續(xù)的曲線。例如用lineTo方法實(shí)現(xiàn)duplicateMovieClip方法的效果,只需要在上面的代碼“zuniquxian.lineTo(i+25,b);”前添加“zuniquxian.moveTo(i+24,b);”這一行就可以使連續(xù)的曲線打散成點(diǎn)(如圖9所示),效果完全和用duplicateMovieClip實(shí)現(xiàn)一樣。只要知道曲線的函數(shù)形式,用lineTo方法就可以繪制出該曲線的圖象,例如雙曲線、拋物線、螺旋線等。因此在Flash繪圖中,lineTo方法完全可以代替duplicateMovieClip。
參考文獻(xiàn)
[1]朱坤,李波.應(yīng)用Flash MX制作阻尼振動動畫[J].西北醫(yī)學(xué)教育,2005,13(5):505
[2]梁紹榮,管靖.基礎(chǔ)物理學(xué)[M].北京:高等教育出版社,2002