張明明
(滕州市中等職業教育中心學校機械電氣部 山東 滕州 277500)
機械波模型是高中及中職物理教學中十分重要的物理模型.在傳統教學中,教師上課時總要拿著沉重的機械波模型進行模擬,十分不便,而學生的觀察效果也不理想.雖然在一些光盤或互聯網上也能找到一些別人制作的“機械波”課件,卻總感覺與自己的教學思路不能完全匹配,不能按照自己的意愿隨意修改.于是筆者常想自己制作“機械波”課件,能夠比較容易地改變頻率、波長和振幅的大小,以便能給學生方便地演示和解釋機械波的傳播原理及各種特性的含義.
本人在學習Flash ActionScript 3.0腳本設計語言的過程中,摸索出制作“機械波”模型的方法.現在總結成文,期望與同行共同切磋.由于每位教師的教學思路都不一樣,如果大家都能夠學習一點Flash動畫制作及一些簡單的編程語言,就可以制作出完全切合自己教學思路的課件,增加自己的課堂色彩.
下面筆者詳細介紹一下自己的“機械波”課件的制作過程和思路.
打開Flash CS3,創建一個新的文檔,默認舞臺大小為“550×400 pixels”.打開“新建元件”對話框,創建一個名字為“zenz”的影片剪輯,使用繪圖工具在影片剪輯的中央位置繪制一個大小為5 pixels的圓形.打開“庫”面板,右擊剛才創建的元件“zenz”,在彈出的快捷菜單中選擇“鏈接…”命令,打開“鏈接屬性”對話框,勾選“為ActionScript導出”復選框,此時“類”和“基類”兩個文本框被激活并添加了默認值,如圖1所示.

圖1
本課件所需要繪制的圖形就這一個,注意不要畫到舞臺上,本課件所展示的圖形全部是由代碼控制產生的(當然如果想畫一些參考線,可以在舞臺的最下面一層添加).下面就進入代碼編寫階段.
將第一個圖層命名為“命令”圖層,選擇第1幀并打開“動作”面板,輸入以下代碼(“//”后面的文字是解釋文字):
var j:uint=0;
//定義變量j,并賦值為0.
var zhenFu:uint=100;
//定義變量zhenFu,并賦值為100.此變量控制機械波的振幅.
var boChang:uint=13;
//定義變量boChang,并賦值為13.此變量控制機械波的波長,它的數值實際上是兩個振子的水平間距.
var pinLv:uint=20;
//定義變量pinLv,并賦值為20.此變量控制機械波的頻率.
for (var i:uint=0; i<41; i++) {
this["zenz"+i]=new zenz();
this["zenz"+i].x=20+boChang*i;
this["zenz"+i].y=200-zhenFu*Math.sin((Math.PI/pinLv*j)-(Math.PI/pinLv*i));
addChild(this["zenz"+i]);
}
//這個for語句,是在舞臺上產生41個振子實例,實例名分別是“zenz0” 、“zenz1”、“zenz2”…“zenz40”,并按照機械波的規律分別安排了它們的位置(x,y坐標).此機械波的起點在舞臺上的(20,200)點,終點在(540,200)點.
functionmysin() {
//定義函數mysin,后面要不斷調用,才能使機械波的形態不斷地變換.
j=j+1;
if (j>(2*pinLv)) {
j=j-(2*pinLv);
}
//讓變量j不斷增加,并用一個if語句控制它的數值在一定范圍內循環變化.
for (i=0; i<41; i++) {
this["zenz"+i].x=20+boChang*i;
this["zenz"+i].y=200-zhenFu*Math.sin((Math.PI/pinLv*j)-(Math.PI/pinLv*i));
}
//這個for語句是在j為某一個值的時候,讓前面產生的41個振子實例按照正弦波的規律重新排好位置.
}
//函數mysin定義結束.
setInterval(mysin,20);
//此語句讓計算機每20 ms運行一次函數mysin,這樣就能產生出連續不斷運動的機械波了.
如果代碼到此為止,運行一下會發現舞臺上會出現一個由41個振子組成的不斷變化的機械波,如圖2所示.

圖2 由41個振子組成的機械波
如果想比較方便地改變它的頻率、波長和振幅,還需要增加一些控制按鈕.
在舞臺上新創建一個圖層并命名為按鈕,執行“窗口”→“公用庫”→“按鈕”命令打開按鈕庫,分別選擇classic buttons→playback文件夾中的gel Left按鈕和gel Right按鈕,將它們拖放到舞臺的下部,再分別復制兩次,在舞臺上建立6個按鈕實例.插入3個靜態文本,內容分別為“振幅”、“波長”和“頻率”.調整按鈕和文本的位置,如圖3所示.

圖3
選中第一個按鈕,打開“屬性”面板,設置它的實例名為“zhenJ”,如圖4所示.

圖4
依次選中另外5個按鈕,打開“屬性”面板,分別設置它們的實例名為 “zhenZ”、“boJ”、“boZ”、“pinJ”和“pinZ”.
再次選擇“命令”圖層第1幀,打開“動作”面板,在前面的代碼后面接著輸入以下代碼:
zhenJ.addEventListener(MouseEvent.MOUSE_DOWN,myzhenJ);
functionmyzhenJ(e:MouseEvent ) {
if (zhenFu>10) {
zhenFu=zhenFu-5;
} else {
zhenFu=zhenFu;
}
}
//在按鈕“zhenJ”上注冊一個鼠標事件的偵聽函數myzhenJ,使鼠標單擊此按鈕時,變量“zhenFu”的數值減小5,并用一個if語句控制變量“zhenFu”的數值最小為10.用戶通過點擊此按鈕可以減小機械波的振幅.
zhenZ.addEventListener(MouseEvent.MOUSE_DOWN,myzhenZ);
functionmyzhenZ(e:MouseEvent ) {
zhenFu=zhenFu+5;
}
//在按鈕“zhenZ”上注冊一個鼠標事件的偵聽函數myzhenZ,使鼠標單擊此按鈕時,變量“zhenFu”的數值增大5.用戶通過點擊此按鈕可以增大機械波的振幅.
用類似的方法可以給按鈕“boJ”、“boZ”、“pinJ”和“pinZ”添加控制代碼,通過改變變量“boChang”和“pinLv”的值,來調節機械波的波長和頻率的大小.由于篇幅所限,不再贅述.
通過點擊按鈕“zhenJ”和“zhenZ”可以改變機械波的振幅,方便講解振幅的概念;通過點擊按鈕“boJ”和“boZ”可以改變機械波的波長,方便講解波長的概念;通過點擊按鈕“pinJ”和“pinZ”可以改變振子的振動頻率,模擬在一般介質中,機械波的頻率與波長成反比的特點.
廣大的同行如果都能理解本課件的代碼,就可以隨心所欲地修改它,滿足自己教學的需求.希望同行與筆者聯系,交流經驗,共同進步,為我國的中等職業物理教學事業做出更大的貢獻.