张明明
(滕州市中等职业教育中心学校机械电气部 山东 滕州 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”可以改变振子的振动频率,模拟在一般介质中,机械波的频率与波长成反比的特点.
广大的同行如果都能理解本课件的代码,就可以随心所欲地修改它,满足自己教学的需求.希望同行与笔者联系,交流经验,共同进步,为我国的中等职业物理教学事业做出更大的贡献.