郭德伟 肖天庆
【摘要】采用Flash ActionScript脚本技术研制了在机械教学中平面曲柄滑块机构和2K-H型周转轮系的教学模拟课件,并与传统的Flash逐帧动画模拟课件作出分析比较,指出基于Flash ActionScript技术的动画模拟方法在机械类教学课件制作中的优越性。
【关键词】Flash;ActionScript;模拟课件;机械教学
【中图分类号】G40-057 【文献标识码】B 【论文编号】1009—8097(2009)08—0093—05
随着现代教育技术的发展,采用计算机来制作模拟实验在教学中的应用越来越广泛,特别是在学校实验条件不足、实验器材缺少的情况下,采用计算机模拟部分教学实验具有简单、快捷、成本低廉等特点。而在这类实验教学模拟课件中,模拟的关键在于与现实环境的相互一致性,即能精确模拟或再现现实环境条件下的实验过程。例如,在学校机械类课程的教学中,教学课件不仅要能实现较精确的模拟运动,还要能够让课件具有一定的交互性和仿真性。然而早期的教学用模拟课件一般采用简单的逐帧运动模拟,不能完全反映真实情况下的机械运动效果。为此,本文采用Flash ActionScript脚本程序结合实例详细介绍了平面曲柄滑块机构教学模拟课件和2K-H型周转轮系教学模拟课件的制作过程,并和传统Flash模拟机械课件作分析比较,指出Flash ActionScript技术在制作机械类教学课件中的优越性,以期起到抛砖引玉的作用。
一 传统Flash模拟平面曲柄滑块机构运动模拟课件的制作方法
传统Flash机械教学课件是利用逐帧动画的原理,近似地来模拟机构的运动,并辅以简单的控制,如暂停、播放等。平面曲柄滑块的传统Flash模拟教学课件的制作过程如下:
创建各杆件及滑块的图形元件,并按相应位置分别放置在Flash主场景中不同的层上,采用补间动画形式建立动画,曲柄元件在总帧内旋转一周,逐帧调整连杆元件及滑块元件的位置和转角使其对应,在action层的最后帧加gotoAndPlay(2)返回第二帧,形成连续的运动机构模型(图1),生成的swf动画模型文件体积约为3KB。其相应元件的对应关系是通过鼠标或键盘方向键调整,类似杆件设计的几何作图法,存在一定人为操作的误差,所以该方法仅是机构运动的简单模拟,且运动情况单一,作为机械教学模拟课件适用范围略显不足。
二 基于Flash ActionScript的平面曲柄滑块机构教学模拟课件的研制
基于Flash ActionScript的动画模拟是利用ActionScript脚本语言结合Flash软件本身绘制矢量图的优势来制作。类似杆件设计的解析法,制作上述平面曲柄滑块机构的教学模拟课件必须要了解其运动的规律。若杆AB为曲柄,长度为l1,BC为连杆,长度为l2,C1、C2为滑块极限位置, H为滑块的行程,e为偏距(图2)。根据机构运动的原理[1],当曲柄AB匀速转动,各节点、滑块及角度 和 之间有如下关系:
A点的坐标为 ,则
B点的坐标为;
C点的坐标为 , ;
C1点的坐标为 , ;
C2点的坐标为 , ;
行程 ;
角度 和 之间关系有;
滑块的坐标即为点C的坐标;
为保证运动可行性,两杆长度还必须有 的关系。
根据以上关系,设计出平面曲柄滑块机构的动画模型,可以根据输入不同的曲柄和连杆的长度和偏距来观察机构不同的运动变化情况,并显示不同状态下滑块的行程,且曲柄的转速可调。其制作过程如下:
在Flash中分别创建一个小圆点(节点)的影片剪辑元件和滑块影片剪辑元件,放置在Flash主场景中并分别命名为“da”和“hk”;绘制4个输入文本框和1个动态文本框,分别定义为“sd”、“qb”、“lg” 、“pxj”和“H”,表示输入的速度值、曲柄长度值、连杆长度值和显示行程的值;点A、B、C、C1和C2的坐标分别表示为“xa”、“ya”、“xb”、“yb”、“xc”、“yc”、“xc1”、“yc1”和“xc2”、“yc2”;Flash公用库中引入3个按钮,分别用于确认输入数值和控制运动的播放(命名为“anp”)和暂停(命名为“ans”)(图3)。注意Flash中的y坐标轴正向向下,具体ActionScript程序如下:
主场景第一帧上的程序:
this.anp._visible = 0;//隐藏播放按钮
this.ans._visible = 1;//显示暂停按钮
this.jg._visible=0;//隐藏输入警告
xa = this.da._x;
ya = this.da._y;//将xa和ya表示为点A的坐标值
i = 90;//定义曲柄初始角度
v = 5;//定义曲柄初始转速
l1 = 100;//定义曲柄初始长度,用l1表示
l2 = 200;//定义连杆初始长度,用l2表示
e=0;//定义偏距初始值,用e表示
duplicateMovieClip(this.da, "db", 2);//生成点B
this.db._x = xa+l1*Math.cos(i*Math.PI*1.0E+00/180);
this.db._y = ya+l1*Math.sin(i*Math.PI*1.0E+00/180);
//定义点B的初始位置
xb = this.db._x;
yb = this.db._y;//将xb和yb表示为点B的坐标值
duplicateMovieClip(this.da, "dc1", 3);//生成点C1
this.dc1._alpha = 50;//改变点C1的透明度为50%
this.dc1._x = xa+(l2-l1);
this.dc1._y = ya+e;
//定义点C1的初始位置
duplicateMovieClip(this.dc1, "dc2", 4);//生成点C2
this.dc2._x = xa+(l2+l1);
this.dc2._y = ya+e;
//定义点C2的初始位置
H = this.dc2._x-this.dc1._x;
//将H表示为行程并显示在文本框H中
duplicateMovieClip(this.da, "dc", 5);//生成点C
this.dc._x = xb+l2*Math.cos(Math.acos(l1*Math.sin(Math.atan((xb-xa)/(yb-ya)))/l2));
this.dc._y = ya;//定义点C的初始位置
this.hk._x = this.dc._x;
this.hk._y = this.dc._y;
//定义滑块的初始位置,即为点C的位置
this.pj._y = ya+e;
主场景第二帧上的程序:
this.dc1._x = xa+Math.sqrt(Math.pow((l2-l1), 2)-Math.pow(e, 2));
this.dc1._y = ya+e;
this.dc2._x = xa+Math.sqrt(Math.pow((l2+l1), 2)-Math.pow(e, 2));
this.dc2._y = ya+e;
this.pj._y = ya+e;
H = Math.round((this.dc2._x-this.dc1._x)*100)/100;
//将H表示为行程并显示在文本框H中(保留两位小数)
xb = xa+l1*Math.sin(i*Math.PI*1.0E+00/180);
yb = ya-l1*Math.cos(i*Math.PI*1.0E+00/180);
this.dc._x = xb+Math.sqrt(Math.pow(l2, 2)-Math.pow((ya-yb+e), 2));
this.dc._y=ya+e;
xc = this.dc._x;
yc = this.dc._y;
this.hk._x = xc;
this.hk._y = yc;
this.pj._y = yc;
this.createEmptyMovieClip("gan", 1);
gan.lineStyle(5, 0x333333, 100);
gan.moveTo(xa, ya);
gan.lineTo(xb, yb);
gan.lineTo(xc, yc);//绘制曲柄和连杆
this.db._x = xb;
this.db._y = yb;
if (i>=360) { i = 0;}
i = i+v;
主场景第三帧上的程序:
gan.clear();
gotoAndPlay(2);
按钮上的ActionScript程序如下:
输入确定按钮
on (release, keyPress "
//将文本框中输入的数值赋给对应的值
v = Number(sd);
l1 = Number(qb);
l2 = Number(lg);
e= Number(pxj);
if (l2 this.jg._visible = 1; l2 = l1; e=0; } else { this.jg._visible = 0; } } 播放按钮 on (release) { play(); this.anp._visible = 0; this.ans._visible = 1; } 暂停按钮 on (release) { stop(); this.anp._visible = 1; this.ans._visible = 0; } 制作成的教学模拟课件如图3 所示,生成的swf动画文件体积约为8KB。该模拟课件可以显示机构在不同条件下的运动情况,如正反转和急回特性等,运动较为精确,课件具有一定的可调节性,如各杆长度、偏距、速度等可自行输入,比传统Flash模拟的平面曲柄滑块机构课件有了更好的交互性能,更有利于其作为教学模拟课件的应用。 三 基于Flash ActionScript的2K-H型周转轮系模拟课件的研制 周转轮系的传动比问题一直是学生在学习机械基础课程的难点,很多学生不能在思想上形成最初的机构模型。若采用传统Flash模拟动画制作该教学模拟课件,其中包括行星轮系和差动轮系,至少需要制作两个课件,而采用ActionScript程序,则仅用一个教学模拟课件就可以实现包括周转轮系的转化等这部分知识在内的教学需要。 制作这样的教学模拟课件,同样必须先了解该机构的运动规律。图4是最常见的2K-H型周转轮系,根据周转轮系的转化原理[1],各个参数之间有如下关系: 该周转轮系自由度 ,机构要有确定的运动必须有两个已知条件,考虑到教学的需要,将 和 作为已知条件输入,来调节周转轮系的运动情况,其制作过程如下: 在Flash中分别创建各个零件的影片剪辑元件和各控制按钮元件(图5),添加一个影片剪辑元件将转臂和行星轮元件放在一起,命名为“H”,将分别表示中心轮、内齿轮、行星轮和转臂的“l1”、“l3”、“l2”和“H”各元件按相应位置放置在Flash主场景中,其中中心轮、内齿轮和行星轮的齿数分别为21、57和18,模数取10个像素,“n1”、“n2”、“n3”和“nH”分别表示各构件的转速,“fdy”表示各轮的分度圆;将分别控制分度圆显示、数据输入说明显示和数据输入确认等按钮及其辅助元件也按相应位置放在Flash主场景中并给以命名。具体ActionScript程序如下: 主场景第一帧上的程序: n1 = 0; n3 = 0; z1 = 21; z2 = 18; z3 = 57; nH = 0; //定义各初始值 this.srjg._visible = 0;//隐藏数据输入警告 this.srsm._visible = 0;//隐藏数据输入说明 stop(); 主场景第二帧上的程序: this.l1._rotation = n1;//中心轮的转角 this.l3._rotation = n3;//内齿轮的转角 nH = (z1*n1+z3*n3)/(z1+z3); this.H._rotation = nH;//转臂的转角 this.H.l2._rotation=(n3-nH)*z3/z2; //行星齿轮相对转臂的转角 n1 = n1+i; n3 = n3+j; 主场景第三帧上的程序: gotoAndPlay(2); 各控制按钮上的ActionScript程序 使用说明按钮(显示数据输入说明) on (release) { this.srsm._visible = 1; } 关闭说明按钮(关闭说明和数据输入说明在同一个元件中) on (release) { this._visible = 0; } 显示分度圆按钮 on (release) { this.l1.fdy._visible=1; this.H.l2.fdy._visible=1; this.l3.fdy._visible=1; this.ycfdy._visible=1; this.xsfdy._visible=0; } 隐藏分度圆按钮 on (release) { this.l1.fdy._visible=0; this.H.l2.fdy._visible=0; this.l3.fdy._visible=0; this.ycfdy._visible=0; this.xsfdy._visible=1; } 数据输入确认按钮 on (release, keyPress " i = Number(t1); j = Number(t2); play(); if (i>10 || i<-10 || j>3 || j<-3) { i = 0; j = 0; this.srjg._visible = 1; } else { this.srjg._visible = 0; } } 制作成的教学模拟课件如图5 所示,生成的swf动画文件体积约为25KB。该模拟课件可以显示周转轮系在不同速度条件下的运动情况,例如输入负值该轮将实现反转,输入数值“0”则停止转动(自由度变为1),课件具有一定的可调节性,可模拟真实环境下的机构运动情况,作为教师课堂教学实验效果更佳。 四 结束语 在现代教学中,传统的模拟教学课件已经远远不能满足现代教学的要求,这对教学方式和教师等都提出了更高的要求,所以对于教学模拟课件的研制有着极为重要的意义。而这种基于Flash ActionScript的机械类教学模拟课件,不但动画体积占用空间小、画面质量高,还能实现机构运动的精确模拟,根据实际情况或教学的需要可以实现更好的交互性能,使教学模拟课件具有较高的仿真性;可以实现机构中特殊位置运动的轨迹再现,使教学模拟课件同时也具有了一定研究性;可以实现不同条件下(位置、角度、长度、速度等)机构不同的机械运动特性,大大提高了教学模拟课件的适用性和广泛性。