Flash中阻尼振动图像的制作.docx
《Flash中阻尼振动图像的制作.docx》由会员分享,可在线阅读,更多相关《Flash中阻尼振动图像的制作.docx(11页珍藏版)》请在冰豆网上搜索。
Flash中阻尼振动图像的制作
Flash中阻尼振动图像的制作
摘要介绍运用flash动作脚本2.0绘制作阻尼振动图像的方法,把课本上比较抽象的模型和变化规律尤其是物理学规律直观地表达出来。
该方法制作的图像动画不仅利于学生观察和理解,而且可以激发他们的学习兴趣,从而提升课堂学习效率。
关键词阻尼振动Flash课件
AbstractIntroducedtheuseofFlashActionScript2.0mappingimagesforthemethodofvibrationdamping,Achievetomakethemoreabstractprocessandmodelswhichinthetextbooks,especiallytomakethelawsofphysicsthatcandisplayeddirectly,Thismethodisnotonlytheproductionofanimatedimagesforstudentstoobserveandunderstand,butcanalsostimulatetheirinterestinlearning,thusenhancingtheefficiencyofclassroomlearning.
KeywordsVibrationdampingflashCourseware
引言
随着网络和计算机技术的发展,多媒体课件被越来越多的应用于课堂教学。
尤其是把flash制作的物理课件应用于课堂教学中,能把物理中比较抽象的模型和过程直观形象的表现出来,便于学生观察和理解,能有效激发学生的学习兴趣,变被动学习为主动学习,使学生成为学习的主体。
从而提升了课堂学习效率。
Flash因其有强大的绘画功能、交互功能、自由的开发界面深受教学工作者的喜爱,是目前多媒体课件制作的主要软件,尤其是在阻尼振动这一章节的教学过程中,由于描述阻尼振动过程的曲线变化复杂,直接使用flash中的绘图工具和来创建复杂的阻尼振动曲线变化过程的动画是相当
困难的,有时再好的绘画功底也不起作用,这时只需要应用FlashActionScript2.0中
MovieClip类的绘画方法与Math类的方法结合,在主场景时间轴的第一帧上编写代码就可以轻松地创建出阻尼振动曲线变化过程的动画,直观地表达出阻尼振动过程位移与时
间的变化关系。
这在实际教学课件的制作中有重要的意义。
1、阻尼振动原理
对弹簧振子,在弹性力及阻力的作用下,由牛顿第二定律可知物体的动力学方程为
dt
时f=KPn
令m'2m,这里的「0为无阻尼时振子的固有角频率,-称为阻尼因子,代
入上式后可得
该方程为典型的二阶常系数微分方程。
根据解二阶常系数齐次线性微分方程的步骤,动力学方程所对应的特征方程为
r22:
r‘02=0
1.1当一:
2-S2:
:
:
01一s时
通解为
x=人代一cos(■'t_)■'=_02_22
其中A、,为待定常数,由初始条件决定,Ae」表示不断随时间而衰减的振幅,
cos(.'t-「)则以J为圆频率周期地变化,两因子相乘表示质点做运动范围不断缩小的
往复运动,这种振动状态成为欠阻尼状态。
图像如图示
如果初始条件为x(0)=X。
v(0)=vo则由
x=Ae」cos('t-)
^d^^-A^Pe^cos^'t一④)一民豹'e*sin(灼't—®).dt
lx。
二Aocos:
得0乜_
v0--A。
:
cosA。
'sin
把初速度除以初位移便可得出初相位即
x0_''/)2(V°:
«)2
cos丨:
:
'
因此可确定出运动学方程为
Vo
X=(Ufx°)2「tcosj't_arctgV^0)
-■'■■'x0
1.2当…•打=0:
=■p时
通解为
x=(c〔c2t)e_"
其中g、C2常数由初始条件决定。
图像如图示
图像表明由于阻力较小,随时间的推移质点运动不仅是非周期的,甚至不是往复的,质点移开平衡位置后释放会很快回到平衡位置并停下来,这种运动状态称为临界阻尼状^态。
如果初始条件为x(0)=Xov(0)=Vo则由
x二(c1c2t)e--t
v=d^=(c2_c〔P)e_Pt-c2Pte_3t-dt
得』R=C2=Vo+x)P
Wo=C2-ciP
因此可确定出运动学方程为
X二[Xo(VoXo:
)t]e_t
1.3当-0-0:
■■■■0时
通解为
x=討叽吓+c2e*^^
其中Ci、C2常数由初始条件决定。
图像如图示
20
A/cm
该图像也表明由于阻力很大,随时间的推移质点运动不仅是非周期的,甚至不是往复的,质点移开平衡位置后释放后便慢慢回到平衡位置并停下来,这种运动状态称为过阻尼状态。
如果初始条件为x(O)=Xov(0)=Vo贝y由
X0=C1C2一
vo=(ci-q)•--''o-(ciC2)■
c〔心V。
X0:
、»2(X0F)
dJ(X0一;。
+滸)
12、0「2_.。
2丿因此可确定出运动学方程为
x=e_±(XoCh:
2_£.2X。
2sh、-o2t)
JB2-%2
其中
sh:
2二21冷(eJ岚-J"岚)ch「2=02t=丁(e"岚「2」岚)
2、Flash脚本的绘图机制
在Flash创作过程中由于某些曲线变化复杂,直接使用绘图工具,有时再好的绘画
功底也不起作用,这时只需要应用FlashActionScript2.0中MovieClip类的绘画方法与
Math类中的方法结合,再根据Flash内主场景舞台或影片剪辑内的坐标特点,适当地做些简单的数学运算便可以在舞台的最佳位置上绘制我们所需要的图像。
2.1、MovieClip类的绘画方法与Math类的方法的使用
2.1.1MovieClip类的绘画方法
在FlashActionScript2.0中影片剪辑MovieClip类的绘画方法用于绘图的函数有多个,但对于复杂的曲线都可以看成是微小的线段元的组合,因此这里主要介绍在绘制线段中
moveTo;lineTo;lineStyle和clear使用。
moveTo用于确定绘画起点,在默认情况下,影片剪辑的绘画位置要么在影片剪辑的
中心,即影片剪辑自身坐标原点,要么是上一个画线动作的结束位置。
当下一个绘画动作的起点不在当前绘画位置时,就需要用该方法将绘画位置移动到正确的点上。
其使用格式为Mc.moveTo(x,y);Mc为一个影片剪辑实例,(x,y)为绘画起点坐标。
lineStyle用于定义线条样式,格式为Mc.lineStyle(a,b,c);a指线条的粗细,取值范围为0到255,0表示极细,255表示最粗。
b表示线条颜色,用一个十六进制数表示,十六进制数以0x开始,其后跟六位十六进制值,如0xff0000代表红色,0x00ff00代表绿色,OxOOOOff代表蓝色。
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(xO,yO);//设置画线起点
_root.lineStyle(3,OxffOOOO,1OO);
//定义绘画线条的样式,颜色为红色、宽度为3、不透明度1OO%
2.2.2Math类的方法
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类的方法确定振动图像坐标原点与lineTo下次画线的终点。
3、阻尼振动图象的制作过程
3.1主要编程思路
根据阻尼振动初始条件求解运动学方程的原理,在Flash中让横坐标表示时间,纵坐标表示阻尼振动质点离开平衡位置的位移,由输入文本框赋初值确定出阻尼振动的运动学方程,再通过数学方法与阻尼振动位移时间关系确定使用lineTo的画线位置,再通
过循环语句使得横坐标每增加一个像素lineTo执行一次画线动作,最终实现整个振动位移—时间图像的绘制动画。
3.2制作步骤
新建一个flash文档设置舞台大小为1000*400像素,在场景中创建一个按钮实例名称为“a”七个静态文本分别为阻尼系数B、角速度①0(固有圆频率)、初位移、初速度、1/s、cm、cm/s,四个输入文本,变量名分别为zuni、jiaosuduO、chuweiyiOchusuduO一个动态文本,变量名为leixing,以及位移时间坐标系,它们间的位置关系如以上三图所示。
在时间轴第一帧打开动作面板输入代码。
以下是完整代码和部分关键注释。
/*定义zhuni为阻尼B、定义zhenfu为振幅A、定义jiaosudu为角速度w0(固有圆频率)
、定义xiangwei为相位$*/
leixing="显示状态";
a.onPress=function(){//a为按钮的实例名称
_root.clear();//清除上一次的画线痕迹
chuweiyi=1O*chuweiyiO;
chusudu=1O*chusuduO;
k=Math.pow(zuni,2)-Math.pow(jiaosuduO,2);
xO=O;//线条起点的横坐标yO=2OO;//线条起点的纵坐标speed=2;//画线的速度n=O;//O时刻_root.moveTo(xO,yO);//起点
_root.lineStyle(3,OxffOOOO,1OO);//
定义线条的颜色为红色、宽度为3、不透明度1OO%
_root.onEnterFrame=function(){//
开始画线
if(n<1OOO){for(i=1;i<=speed;i++){t=O.O1*n;
x=xO+n;
if(kleixing.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(-3t)][cos(3t)cos$+sin(wt)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)
当阻尼系数B取0.7时为欠阻尼状态的振动图像
当阻尼系数B取4时为临界阻尼状态的图像
当阻尼系数B取14.2时为过阻尼状态图像
4、结论
应用FlashActionScript2.0中MovieClip类的绘画方法与Math类的方法结合,可以轻松方便地制作出阻尼振动位移—时间图像动画,直观地表达出阻尼振动过程位移与时间的变化关系。
依照此方法我们也可以绘制任何复杂的曲线,包括连续的、不连续的曲线,只要知道曲线的函数形式,如双曲线,抛物线,螺旋线等等。
这在实际教学课件的制作中具有重要的意义。
做到把课本上比较抽象的模型和过程特别是物理学规律直观形象的表现出来,便于学生观察和理解,并有效激发学生的学习兴趣,变被动学习为主动学习,使学生成为学习的主体。
从而提升了课堂学习效率。
参考文献
[1]杨维纮.力学与理论力学.北京:
科学出版社,2008.1
[2]姚炯沈小娟.物理课件中阻尼振动图象的绘制.中国教育技术装备,2008年,
第18期
[3]陈冬.FlashActionScript2.0互动编程从基础到运用.北京:
人民邮电出版社,
2007.7