Flash中阻尼振动图像的制作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Flash中阻尼振动图像的制作
摘要介绍运用flash动作脚本2.0绘制作阻尼振动图像的方法,把课本上比较抽象的模型和变化规律尤其是物理学规律直观地表达出来。
该方法制作的图像动画不仅利于学生观察和理解,而且可以激发他们的学习兴趣,从而提升课堂学习效率。
关键词阻尼振动 F l a s h课件
Abstract Introduced the use of Flash ActionScript2.0 mapping images for the method of vibration damping, Achieve to make the more abstract process and models which in the textbooks, especially to make the laws of physics that can displayed directly, This method is not only the production of animated images for students to observe and understand, but can also stimulate their interest in learning, thus enhancing the efficiency of classroom learning.
Key words Vibration damping flash Courseware
引言
随着网络和计算机技术的发展,多媒体课件被越来越多的应用于课堂教学。
尤其是把flash制作的物理课件应用于课堂教学中,能把物理中比较抽象的模型和过程直观形象的表现出来,便于学生观察和理解,能有效激发学生的学习兴趣,变被动学习为主动学习,使学生成为学习的主体。
从而提升了课堂学习效率。
Flash因其有强大的绘画功能、交互功能、自由的开发界面深受教学工作者的喜爱,是目前多媒体课件制作的主要软件,尤其是在阻尼振动这一章节的教学过程中,由于描述阻尼振动过程的曲线变化复杂,直接使用flash中的绘图工具和来创建复杂的阻尼振动曲线变化过程的动画是相当
困难的,有时再好的绘画功底也不起作用,这时只需要应用Flash ActionScript2.0中MovieClip 类的绘画方法与Math 类的方法结合,在主场景时间轴的第一帧上编写代码就可以轻松地创建出阻尼振动曲线变化过程的动画,直观地表达出阻尼振动过程位移与时间的变化关系。
这在实际教学课件的制作中有重要的意义。
1、阻尼振动原理
对弹簧振子,在弹性力及阻力的作用下,由牛顿第二定律可知物体的动力学方程为
22d x dx
m kx dt
dt λ
=-- 令
20,2k m m λ
ωβ=
=,这里的0ω为无阻尼时振子的固有角频率,β称为阻尼因子,代
入上式后可得
220220d x dx
x dt dt βω++=
该方程为典型的二阶常系数微分方程。
根据解二阶常系数齐次线性微分方程的步骤,动力学方程所对应的特征方程为
22
020r r βω++= 1.1当22
000βωβω-<<时
通解为
0cos(')t x A e t βωϕ-=-
'ω=
其中0A 、ϕ为待定常数,由初始条件决定,0t
A e
β-表示不断随时间而衰减的振幅,
cos(')t ωϕ-则以'ω为圆频率周期地变化,两因子相乘表示质点做运动范围不断缩小的
往复运动,这种振动状态成为欠阻尼状态。
图像如图示
如果初始条件为00(0)(0)x x v v == 则由
000cos(')cos(')'sin(')t t t
x A e t dx v A e t A e t dt βββωϕβωϕωωϕ---⎧=-⎪
⎨==----⎪⎩
得00000cos cos 'sin x A v A A ϕ
βϕωϕ
=⎧⎨
=-+⎩ 把初速度除以初位移便可得出初相位 即
00't v g x βωϕ=-+ 00
00
''v x v x tg arctg
x x ββϕϕωω++==如图示
c o s ϕ
=
0cos x A ϕ==
ϕ
00
v x β+0
'x ω
00
cos(')'t v x x t arctg x ββωω-+=-
1.2当22000βωβω-==时
通解为
12()t x c c t e β-=+
其中1c 、2c 常数由初始条件决定。
图像如图示
图像表明由于阻力较小,随时间的推移质点运动不仅是非周期的,甚至不是往复的,质点移开平衡位置后释放会很快回到平衡位置并停下来,这种运动状态称为临界阻尼状态。
如果初始条件为00(0)(0)x x v v == 则由
12212()()t
t t
x c c t e dx v c c e c te dt βββββ---⎧=+⎪
⎨==--⎪⎩
得01
200021x c c v x v c c ββ
=⎧⇒=+⎨
=-⎩
000[()]t x x v x t e ββ-=++
1.3当22000βωβω->>时
通解为
((12t
t
x c e
c e
ββ--=+
其中1c 、2c 常数由初始条件决定。
图像如图示
该图像也表明由于阻力很大,随时间的推移质点运动不仅是非周期的,甚至不是往复的,质点移开平衡位置后释放后便慢慢回到平衡位置并停下来,这种运动状态称为过阻尼状态。
如果初始条件为00(0)(0)x x v v == 则由
((12((12((t t
t t
x c e c e dx v c e c e dt
ββββββ----⎧=+⎪
⎨==---+⎪⎩
10
012
01212
10
1
(
2
1
(()(
2
c x
x c c
v c c c c c x
β
⎧
=
⎪
=+
⎧⎪⎪
⇒
⎨⎨
=-+
⎪⎪
⎩=
⎪
⎩
因此可确定出运动学方程为
()
t
x e x
β
-
=-
其中
11
()()
22
e e
=-=+
2、Flash脚本的绘图机制
在Flash创作过程中由于某些曲线变化复杂,直接使用绘图工具,有时再好的绘画功底也不起作用,这时只需要应用Flash ActionScript2.0中MovieClip类的绘画方法与Math类中的方法结合,再根据Flash内主场景舞台或影片剪辑内的坐标特点,适当地做些简单的数学运算便可以在舞台的最佳位置上绘制我们所需要的图像。
2.1、MovieClip类的绘画方法与Math类的方法的使用
2.1.1 MovieClip类的绘画方法
在Flash ActionScript2.0中影片剪辑MovieClip类的绘画方法用于绘图的函数有多个,但对于复杂的曲线都可以看成是微小的线段元的组合,因此这里主要介绍在绘制线段中move To;line To;line Style和clear使用。
moveTo用于确定绘画起点,在默认情况下,影片剪辑的绘画位置要么在影片剪辑的
中心,即影片剪辑自身坐标原点,要么是上一个画线动作的结束位置。
当下一个绘画动作的起点不在当前绘画位置时,就需要用该方法将绘画位置移动到正确的点上。
其使用格式为Mc.moveTo(x,y);Mc为一个影片剪辑实例,(x,y)为绘画起点坐标。
lineStyle用于定义线条样式,格式为Mc.line Style(a,b,c);a指线条的粗细,取值范围为0到255,0表示极细,255表示最粗。
b表示线条颜色,用一个十六进制数表示,十六进制数以0x开始,其后跟六位十六进制值,如0xff0000代表红色,0x00ff00代表绿色,0x0000ff代表蓝色。
c表示线条的透明度,其取值范围0到100,取0时表示完全透明,取100时表示纯色。
lineTo用于绘制直线,格式为Mc.lineTo(x,y); (x,y)为绘画终点,也为下一个运用lineTo绘画动作的起点,因此我们只要确定出横坐标与纵坐标之间的函数关系再运用一个简单for循环语句就可以实现连续画线的效果。
clear用于删除与影片剪辑关联的所有绘画命令包括线条样式,但用Flash绘画工具绘制的形状和线条不受影响,这也是我们完成制作每次在测试动画时坐标轴与刻度不会改变的原因。
格式为Mc.clear();Mc为影片剪辑实例。
在这边值得注意的是主场景其实我们可以看成是一个实例名为_root的元老级的影片剪辑,它不可能也不可以嵌入到其他影片剪辑中。
也就是说主时间轴对象_root具有与影片剪辑类似的机制,因此我们可以在主场景的第一帧中编写如下代码;
_root.clear();//清除上一次运用绘图方法绘制的所有线条
_root.moveTo(x0,y0); //设置画线起点
_root.lineStyle(3,0xff0000,100);
//定义绘画线条的样式,颜色为红色、宽度为3、不透明度100%
2.2.2 Math类的方法
Math类的方法用来执行常用的数学运算,以下是这次阻尼振动要使用的方法的说明Math.sin(x);用于计算x的正玄值,Math.cos(x)用于计算x的余弦值其中x的单位是弧度。
Math.sqrt(x)计算出x的平方根。
Math.exp(x)用于计算以e为底以x为指数的值。
Math.pow(x,y)用于计算x的y次方的值。
2.2、Flash中的坐标位置
文中我们直接将绘图方法运用于主场景中,因此在这边只介绍主场景舞台坐标的位置。
flash中默认的舞台大小是550*400像素,这意味着舞台的宽是550像素,高是400像素,这也是我们在后面编写代码时将横坐标100像素当成1秒,从坐标200像素当成20cm的缘故。
在flash坐标系中,X代表水平方向,向右为正。
默认情况下场景舞台的左边界的X坐标是0,又边界的X坐标是550;Y代表垂直方向,向下为正,默认情况舞台上边界的Y坐标是0,下边界的Y坐标是400.舞台左上角是坐标原点,即坐标(0,0),超出左边界时,X坐标为负,超出上边界时,Y坐标为负。
因此我们用简单的代数运算与Math类的方法确定振动图像坐标原点与line To下次画线的终点。
3、阻尼振动图象的制作过程
3.1 主要编程思路
根据阻尼振动初始条件求解运动学方程的原理,在Flash中让横坐标表示时间,纵坐标表示阻尼振动质点离开平衡位置的位移,由输入文本框赋初值确定出阻尼振动的运动学方程,再通过数学方法与阻尼振动位移时间关系确定使用line To的画线位置,再通过循环语句使得横坐标每增加一个像素line To执行一次画线动作,最终实现整个振动位移—时间图像的绘制动画。
3.2 制作步骤
新建一个flash文档设置舞台大小为1000*400像素,在场景中创建一个按钮实例名称为“a”,七个静态文本分别为阻尼系数β、角速度ω0(固有圆频率)、初位移、初速度、1/s、cm、cm/s,四个输入文本,变量名分别为zuni、jiaosudu0、chuweiyi0 chusudu0一个动态文本,变量名为leixing,以及位移时间坐标系,它们间的位置关系如以上三图所示。
在时间轴第一帧打开动作面板输入代码。
以下是完整代码和部分关键注释。
/*定义zhuni 为阻尼β、定义zhenfu为振幅A 、定义jiaosudu为角速度ω0(固有圆频率)、定义xiangwei为相位φ*/
leixing="显示状态";
a.onPress=function(){ //a为按钮的实例名称
_root.clear();//清除上一次的画线痕迹
chuweiyi=10*chuweiyi0;
chusudu=10*chusudu0;
k=Math.pow(zuni,2)-Math.pow(jiaosudu0,2);
x0=0; //线条起点的横坐标
y0=200; //线条起点的纵坐标
speed=2; //画线的速度
n=0; //0时刻
_root.moveTo(x0,y0); //起点
_root.lineStyle(3,0xff0000,100); //定义线条的颜色为红色、宽度为3、不透明度100% _root.onEnterFrame=function(){ //开始画线
if(n<1000){
for(i=1;i<=speed;i++){
t=0.01*n;
x=x0+n;
if(k<0){
leixing.text="欠阻尼状态";
jiaosudu=Math.sqrt(Math.pow(jiaosudu0,2)-Math.pow(zuni,2));
z=Math.sqrt(Math.pow(chuweiyi,2)+Math.pow((zuni*chuweiyi+chusudu),2))
zhenfu=z/jiaosudu;
cos=jiaosudu*chuweiyi/z;
sin=(chusudu+zuni*chuweiyi)/z;
y=y0-zhenfu*Math.exp(-1*zuni*t)*(Math.cos(jiaosudu*t)*cos+Math.sin(jiaosudu*t)*sin); //阻尼运动函数x=A[exp(-βt)][cos(ωt)cosφ+sin(ωt)sinφ]
}
if(k==0){
leixing="临界阻尼状态";
c1=chuweiyi;
c2=chusudu+zuni*chuweiyi;
y=y0-(c1+c2*t)*Math.exp(-1*zuni*t);
}
if(k>0){
leixing="过阻尼状态";
g=Math.sqrt(Math.pow(zuni,2)-Math.pow(jiaosudu0,2));
c1=0.5*(chuweiyi+(chusudu+chuweiyi)/g);
c2=0.5*(chuweiyi-(chusudu+chuweiyi)/g);
h1=-1*zuni+g;
h2=-1*zuni-g;
y=y0-c1*Math.exp(h1*t)-c2*Math.exp(h2*t);
}
this.lineTo(x,y); //画线的终点
n++;
}
}
}
}
3.3测试动画
完成以上步骤后,开始测试动画,在输入文本中适当的数值后单击按钮即可得到相应阻尼振动位移时间图像动画。
以上三幅图是通过多次测试所得的结果。
在输入文本中取初位移20(cm)初速度10(cm/s)角速度4(1/s)
当阻尼系数β取0.7时为欠阻尼状态的振动图像
当阻尼系数β取4时为临界阻尼状态的图像
当阻尼系数β取14.2时为过阻尼状态图像
4、结论
应用Flash ActionScript2.0中MovieClip类的绘画方法与Math类的方法结合,可以轻松方便地制作出阻尼振动位移—时间图像动画,直观地表达出阻尼振动过程位移与时间的变化关系。
依照此方法我们也可以绘制任何复杂的曲线,包括连续的、不连续的曲线,只要知道曲线的函数形式,如双曲线,抛物线,螺旋线等等。
这在实际教学课件的制作中具有重要的意义。
做到把课本上比较抽象的模型和过程特别是物理学规律直观形象的表现出来,便于学生观察和理解,并有效激发学生的学习兴趣,变被动学习为主动学习,使学生成为学习的主体。
从而提升了课堂学习效率。
参考文献
[1] 杨维纮.力学与理论力学.北京:科学出版社,2008.1
[2] 姚炯沈小娟.物理课件中阻尼振动图象的绘制.中国教育技术装备,2008年,
第18期
[3] 陈冬.Flash ActionScript2.0互动编程从基础到运用.北京:人民邮电出版社,
2007.7。