论文部分内容阅读
摘要:在物理电学实验过程中的误操作或错误操作是不可避免的,这就可能损坏仪器,利用本文介绍的虚拟实验系统既可以使学生把课堂上学习的理论知识应用于实践,又可让学生提前预习实验,还可以弥补实验仪器缺乏与落后的缺陷。
关键词:Flash;仿真;电子实现;欧姆定律;虚拟
中图分类号:TP315 文献标识码:A文章编号:1007-9599 (2010) 09-0000-01
OHM Law Realization with Flash Programming
Yu Jijun
(Chongqing University of Arts&Sciences,Yongchuan402160)
Abstract:Misoperation or wrong operation,which may damage the instruments,
is inevitable in the process of physical electrical experiments.By using the virtual experiment system introduced in this paper,students may put theoretical knowledge into practice and preview experiments.In addition,it makes up the deficiency of instruments insufficiency and backwardness.
Keywords:Flash;Simulation;Electron experiment;Ohm law;Virtual
一、虚拟电路实验模型与制作思路
(一)实验模型
(二)制作思路
图中各电路实物是用绘画软件经过绘画、上色等处理而成。各仪表、仪器、连接线柱等都是用flash按钮制作的。一是为了美观,二是为了连线方便,以实现实物仪器间导线的连线。并给各按钮和对象取变量名,以方便在action script中调用。利用各变量名、实例名在欧姆定律公式的结合下让各组件协同工作。将实验器件连接好检查无误后,闭合电键,滑动变阻器的滑竿就可以改变其阻值,从而达到改变串联电路中电流大小之目的。
二、组件制作及程序控制
(一)灯泡
首先新建一个元件MC,在第一层时间轴上面,用绘画工具绘制一个灯泡底座并给第一层命名为底座。然后新建一个图层2并命名为灯泡层,用绘图工具绘制一个灯泡。调节两个元件的位置使灯泡和底座这两个对象刚好重叠在一起,并锁定图层。新建第三个层,制作好两个按钮放入其中,并将第三层命名为按钮层。给按钮取的实例名为light—right合light—left,这两个实例名的意思分别代表灯泡的左边连接柱和右边的连线柱。在灯泡层第5帧、第10帧、20帧处,按F6键插入关键帧。在每个关键处分别改变灯泡的颜色属性,让灯泡在开始时最红(红得最亮时是发白),5帧时淡红,10帧时不亮,呈灰色状态。选中所有帧,创建好补间动画。这样,一个灯泡的MC就做好了。
(二)制作开关MC
开关同样是一个MC控制动画,只不过是在一个只有两帧的MC中加入的两个图片状态。第一帧处是已经做好的一张开关打开状态的picture元件,第二帧是已经做好的一个关闭状态的picture元件。在第一帧中加入On(release){gotoandstop(2)}语句,在第二帧中加入On(release){gotoandstop(1)} 语句。这样在开关开启后就从第一帧开跳到第二帧关的状态。关后(单击开)就跳到第一帧开的状态。最后将这个开关拖到场景中并命名为KK。
(三)制作滑动变阻器
滑动变阻器仍是一个MC,但这个MC却非常关键,关系到整个实验的结果和演示过程。因此制作此部分时应特别小心。做好滑块和变阻器的主体部分。将滑块做成按钮,是为了方便连线,并给各按钮取好名字。本例中分别给滑动变阻器的左端、右端,线圈的左端和线圈的右端命名为:hua_anleft、hua_anright、hua_anxial、hua_anxia2。记录好各个点的位置,再将这些元件组合在一起。
(四)电压表、电流表、电源的制作
电压表和电流表可以用绘图工具绘制,填充好颜色,然后再加一个动态文本框,给文本框填充好颜色,并取一个实例名字,用于显示电流、电压等数值。电源更简单,画一个正方形填充成不同的形状和颜色就可以了。最后分别给这些元件的连线柱处做好大小相同的按钮,并取好名字,放入场景中备用。
(五)元器件之间导线连接的问题
要想实现两个元件之间任导线连接,也即是两个对象元件的坐标点之间画线的问题。首先要知道任意一个对象点的坐标值,也即是元件按钮点(接线柱)在场景之中的坐标值。我们可以用AS中get Property(_实例名,_x); get Property(_实例名,_y);函数获得对象的坐标。当获得了对象的坐标后,就可用Lineto方法连接两点之间的坐标。语法是lineto(x1,y1,x2,y2),再配上moveto方法,即可实现两点之间的连线。如果没有moveto函数,则系统默认是在坐标原点开始画线。当然在画线之前还得加上画线的风格语句:_root.huabu.lineStyl(2,0xff0000,100)。_root表示的是路径。为了克服画线时连线之间被覆盖的问题,可以给场景加个蒙板,即画布影片剪辑,huabu_MC。现就以电源的正极、开关之间的连线为例进行介绍说明元器件之间的导线连接问题。所有的连线接点也即是各按钮参数,需要在第一帧的AS动作中初始化,代码如下:
第一层第一帧
AS:stop();
fcommand(〞fullscreen 〞,〞true〞);//全屏显示命令
tellTarget(root.light_mc){//调用电灯泡影片剪辑让默认的是不亮却20帧的gotoAndStop(20);}
第二层第一帧: //在初始状态下让个连接点不可用,呈灰色状态。
_root.kk_left.enabled=false;
_root.kk_right.enabled=false;
……
第三层第一帧 //初始状态下让各点的坐标等于0
kk_leftx=0
kk_rightx=0
……
电源正极的源程序代码如下:
on(press)
if(_root.flag= =false)
{
myColor = newColor(_root.kk_right);
myColor.setRGB(0xFF0000);
_root.kk_right.enabled=true;
_root.qidianx=_root.zhengji._x;
_root.qidiany=_root.zhengji._y;
_root.flag=true;
}
Else
{
……
}
}
开关右边KK_right的源程序
On(press){
_root.zuobiao1.text=getProperty(_root.kk_right,_x);
_root.zuobiao2.text=getProperty(_root.kk_right,_y);
If(_root.flag= =false)
{
……
}
else
{
……
}
}
其它连线按钮的代码类似,只是各个连线按钮(接线柱)的实例名不一样。
(六)滑动变阻器参数改变的问题
要想滑动变阻器时,其电阻大小也随着改变,就必须先求出上下、左右的坐标值。可以用inity=_y;left=_x;right=_x;top=_y-50;bottom=_y+50方法来获取。然后再利用滑动变阻器的事件去调用滑块方法,即onClipEvent(mouseMove)事件。还需求出滑动变阻器左端滑到最右端的坐标值,可以用一个临时的动态文本框来显示。例如本文中用该条语句来获得滑动变阻器最左端到最右端的坐标值是100。这样就可以平均分配滑动变阻器的数值,配合到协同工作时的语句代码,在改变滑块时,电流电压表上面的数值就会发生变化了。
三、让各组件协同工作
(一)各组件协同工作的程序实现
由于所有的变化情况都是在滑动变阻器滑动时发生的变化,因此即可在滑动变阻器的移动事件中编写各组件的协同工作程序。这一点也是本程序的精华部分。思路是,先获得滑块左边的X坐标(实际上是Y坐标,因为本例中的滑动变阻器是倒置的),再用一个变量来获得滑块正在滑动的坐标,把两个值加起来,即得到了滑块滑动时的总坐标值,把这个坐标值乘以一个固定的常数就得了滑动变阻器的电阻值。在本例中我们约定灯泡的内阻是rl=30欧姆,电源的内阻是1欧姆,滑动变阻器的电阻为rr,电源的电动势等于3V,我们就能通过公式I=E/(1+rr+rl)求得电流的大小,再根据公式U=I*R即dianya_val=dianliu_val*rl求出电压(A)。最后分别将电压、电流值,用一动态文本显示在电流、电压表中。为了让滑块滑动时电灯泡的灯光明暗程度有变化,我们计算出灯泡MC的帧数为20帧,再得到滑动变阻器的总的坐标(即长度)100,把这个坐标除以5既得了灯泡MC的帧数。也即是滑动滑块时,灯泡就可以跳到相应的帧数去,即灯泡的明暗程序也得到了改变。初始状态时灯泡应该是不亮的,灯泡的帧就应该在最后一帧,即20帧处。
gotoAndStop(_root.move_frame+1)。在程序运行时,第一帧的变化值是20/20,所得到的结果就没有比值(0帧)了,在这程序中是不允许的,因此要加1帧。协同工作时电流、电压、电阻及滑动滑块时电阻的变化代码如下:
onClipEvent(load){
Inity=_y; /
left=_x;
right=_x;
top=_y-50;
bottom=_y+50;
}
onClipEvent(mouseMove)
{
_root.rr_disx.text=getProperty(_root.vertFader,_y);
Var temp = getProperty(_root.vertFader,_y);
Var cot_hau=35+temp
Rr = (35+tmp)*15;
//_root.rr_dis.text=3.0/(1+rr)
_root.rr_dis.text=rr;
If(_root.cir_hefa= =ture and _root.cir_hefa2= = true) /
{
Rl=Number(_root.dengpao_rr.text);
Rl=30//灯泡内阻是:30
_root.dianliu_dis.text=String(3/(1+rr+rl));
Dianliu_val=String(3/(1+rr+rl));
//ii3/(1+rr+_root.dengpao_rr.text);
//_root.dianya_dis.text=3-_root.dianliu_dis.text_dis.text*_root.dengpao_rr.text
_root.dianya_dis.text=dianliu_val*rl;
Dianya_val=dianliu_val*rl;
//灯光的设置
_root.move_frame+int(cot_hau/5)//总的坐标是100(-35to+65)再除以5等于20帧因为灯泡的MC等于20帧
//_root.dianya_dis.text=_root.move_frame;
tellTarget(root.ligt_mc){
gotoAndStop(_root.move_frame+1); //起点是第一帧开始20/20没有,因此至少需要1帧
}
}
}
(二)电流、电压显示时小数处理
在一般情况下,由于不同类型数值的精度和位数不同,在直接赋值处理数据时就会在小数点后面有一大串的小数或者零出现,为解决上面所说的问题,可以编写一个函数模块来处理小数点问题。在每次遇到电流、电压显示时就可以调用此函数来解决。
四、元器件之间连线的拆除
当实验完毕后应先断开开关,再拆除连线。也即是消除各个连接线按钮之间的鼠标画线。只要用清除方法就可实现清除连线。在场景中用_root.clear()方法可以清楚lineto()和moveto()方法中绘制的线条。在本例中,由于用了画布来屏蔽相交和被挡住的线条,因此只要清除画布上面得连线即可。
当然,欧姆定律编程中涉及到了大量的代码和编程,不仅是上面一些代码就可以完全实现的,上面的代码只是一些关键和主要的,限于篇幅在这里就不再介绍了。
参考文献:
[1]王德才.基于Flash平台的课件开发[J].潍坊教育学院报,2003,2
[2]简字虹.大学物理仿真实验的制作[J].广西民族学院学报(自然科学版),2003,11
[3]赵英杰.闪客梦幻工场—Flash网页编程宝典[M1].北京:北京希望电子出版社,2002
作者简介:
余继军(1981--),男,重庆万州人,硕士,重庆文理学院团干部,从事学生工作.
关键词:Flash;仿真;电子实现;欧姆定律;虚拟
中图分类号:TP315 文献标识码:A文章编号:1007-9599 (2010) 09-0000-01
OHM Law Realization with Flash Programming
Yu Jijun
(Chongqing University of Arts&Sciences,Yongchuan402160)
Abstract:Misoperation or wrong operation,which may damage the instruments,
is inevitable in the process of physical electrical experiments.By using the virtual experiment system introduced in this paper,students may put theoretical knowledge into practice and preview experiments.In addition,it makes up the deficiency of instruments insufficiency and backwardness.
Keywords:Flash;Simulation;Electron experiment;Ohm law;Virtual
一、虚拟电路实验模型与制作思路
(一)实验模型
(二)制作思路
图中各电路实物是用绘画软件经过绘画、上色等处理而成。各仪表、仪器、连接线柱等都是用flash按钮制作的。一是为了美观,二是为了连线方便,以实现实物仪器间导线的连线。并给各按钮和对象取变量名,以方便在action script中调用。利用各变量名、实例名在欧姆定律公式的结合下让各组件协同工作。将实验器件连接好检查无误后,闭合电键,滑动变阻器的滑竿就可以改变其阻值,从而达到改变串联电路中电流大小之目的。
二、组件制作及程序控制
(一)灯泡
首先新建一个元件MC,在第一层时间轴上面,用绘画工具绘制一个灯泡底座并给第一层命名为底座。然后新建一个图层2并命名为灯泡层,用绘图工具绘制一个灯泡。调节两个元件的位置使灯泡和底座这两个对象刚好重叠在一起,并锁定图层。新建第三个层,制作好两个按钮放入其中,并将第三层命名为按钮层。给按钮取的实例名为light—right合light—left,这两个实例名的意思分别代表灯泡的左边连接柱和右边的连线柱。在灯泡层第5帧、第10帧、20帧处,按F6键插入关键帧。在每个关键处分别改变灯泡的颜色属性,让灯泡在开始时最红(红得最亮时是发白),5帧时淡红,10帧时不亮,呈灰色状态。选中所有帧,创建好补间动画。这样,一个灯泡的MC就做好了。
(二)制作开关MC
开关同样是一个MC控制动画,只不过是在一个只有两帧的MC中加入的两个图片状态。第一帧处是已经做好的一张开关打开状态的picture元件,第二帧是已经做好的一个关闭状态的picture元件。在第一帧中加入On(release){gotoandstop(2)}语句,在第二帧中加入On(release){gotoandstop(1)} 语句。这样在开关开启后就从第一帧开跳到第二帧关的状态。关后(单击开)就跳到第一帧开的状态。最后将这个开关拖到场景中并命名为KK。
(三)制作滑动变阻器
滑动变阻器仍是一个MC,但这个MC却非常关键,关系到整个实验的结果和演示过程。因此制作此部分时应特别小心。做好滑块和变阻器的主体部分。将滑块做成按钮,是为了方便连线,并给各按钮取好名字。本例中分别给滑动变阻器的左端、右端,线圈的左端和线圈的右端命名为:hua_anleft、hua_anright、hua_anxial、hua_anxia2。记录好各个点的位置,再将这些元件组合在一起。
(四)电压表、电流表、电源的制作
电压表和电流表可以用绘图工具绘制,填充好颜色,然后再加一个动态文本框,给文本框填充好颜色,并取一个实例名字,用于显示电流、电压等数值。电源更简单,画一个正方形填充成不同的形状和颜色就可以了。最后分别给这些元件的连线柱处做好大小相同的按钮,并取好名字,放入场景中备用。
(五)元器件之间导线连接的问题
要想实现两个元件之间任导线连接,也即是两个对象元件的坐标点之间画线的问题。首先要知道任意一个对象点的坐标值,也即是元件按钮点(接线柱)在场景之中的坐标值。我们可以用AS中get Property(_实例名,_x); get Property(_实例名,_y);函数获得对象的坐标。当获得了对象的坐标后,就可用Lineto方法连接两点之间的坐标。语法是lineto(x1,y1,x2,y2),再配上moveto方法,即可实现两点之间的连线。如果没有moveto函数,则系统默认是在坐标原点开始画线。当然在画线之前还得加上画线的风格语句:_root.huabu.lineStyl(2,0xff0000,100)。_root表示的是路径。为了克服画线时连线之间被覆盖的问题,可以给场景加个蒙板,即画布影片剪辑,huabu_MC。现就以电源的正极、开关之间的连线为例进行介绍说明元器件之间的导线连接问题。所有的连线接点也即是各按钮参数,需要在第一帧的AS动作中初始化,代码如下:
第一层第一帧
AS:stop();
fcommand(〞fullscreen 〞,〞true〞);//全屏显示命令
tellTarget(root.light_mc){//调用电灯泡影片剪辑让默认的是不亮却20帧的gotoAndStop(20);}
第二层第一帧: //在初始状态下让个连接点不可用,呈灰色状态。
_root.kk_left.enabled=false;
_root.kk_right.enabled=false;
……
第三层第一帧 //初始状态下让各点的坐标等于0
kk_leftx=0
kk_rightx=0
……
电源正极的源程序代码如下:
on(press)
if(_root.flag= =false)
{
myColor = newColor(_root.kk_right);
myColor.setRGB(0xFF0000);
_root.kk_right.enabled=true;
_root.qidianx=_root.zhengji._x;
_root.qidiany=_root.zhengji._y;
_root.flag=true;
}
Else
{
……
}
}
开关右边KK_right的源程序
On(press){
_root.zuobiao1.text=getProperty(_root.kk_right,_x);
_root.zuobiao2.text=getProperty(_root.kk_right,_y);
If(_root.flag= =false)
{
……
}
else
{
……
}
}
其它连线按钮的代码类似,只是各个连线按钮(接线柱)的实例名不一样。
(六)滑动变阻器参数改变的问题
要想滑动变阻器时,其电阻大小也随着改变,就必须先求出上下、左右的坐标值。可以用inity=_y;left=_x;right=_x;top=_y-50;bottom=_y+50方法来获取。然后再利用滑动变阻器的事件去调用滑块方法,即onClipEvent(mouseMove)事件。还需求出滑动变阻器左端滑到最右端的坐标值,可以用一个临时的动态文本框来显示。例如本文中用该条语句来获得滑动变阻器最左端到最右端的坐标值是100。这样就可以平均分配滑动变阻器的数值,配合到协同工作时的语句代码,在改变滑块时,电流电压表上面的数值就会发生变化了。
三、让各组件协同工作
(一)各组件协同工作的程序实现
由于所有的变化情况都是在滑动变阻器滑动时发生的变化,因此即可在滑动变阻器的移动事件中编写各组件的协同工作程序。这一点也是本程序的精华部分。思路是,先获得滑块左边的X坐标(实际上是Y坐标,因为本例中的滑动变阻器是倒置的),再用一个变量来获得滑块正在滑动的坐标,把两个值加起来,即得到了滑块滑动时的总坐标值,把这个坐标值乘以一个固定的常数就得了滑动变阻器的电阻值。在本例中我们约定灯泡的内阻是rl=30欧姆,电源的内阻是1欧姆,滑动变阻器的电阻为rr,电源的电动势等于3V,我们就能通过公式I=E/(1+rr+rl)求得电流的大小,再根据公式U=I*R即dianya_val=dianliu_val*rl求出电压(A)。最后分别将电压、电流值,用一动态文本显示在电流、电压表中。为了让滑块滑动时电灯泡的灯光明暗程度有变化,我们计算出灯泡MC的帧数为20帧,再得到滑动变阻器的总的坐标(即长度)100,把这个坐标除以5既得了灯泡MC的帧数。也即是滑动滑块时,灯泡就可以跳到相应的帧数去,即灯泡的明暗程序也得到了改变。初始状态时灯泡应该是不亮的,灯泡的帧就应该在最后一帧,即20帧处。
gotoAndStop(_root.move_frame+1)。在程序运行时,第一帧的变化值是20/20,所得到的结果就没有比值(0帧)了,在这程序中是不允许的,因此要加1帧。协同工作时电流、电压、电阻及滑动滑块时电阻的变化代码如下:
onClipEvent(load){
Inity=_y; /
left=_x;
right=_x;
top=_y-50;
bottom=_y+50;
}
onClipEvent(mouseMove)
{
_root.rr_disx.text=getProperty(_root.vertFader,_y);
Var temp = getProperty(_root.vertFader,_y);
Var cot_hau=35+temp
Rr = (35+tmp)*15;
//_root.rr_dis.text=3.0/(1+rr)
_root.rr_dis.text=rr;
If(_root.cir_hefa= =ture and _root.cir_hefa2= = true) /
{
Rl=Number(_root.dengpao_rr.text);
Rl=30//灯泡内阻是:30
_root.dianliu_dis.text=String(3/(1+rr+rl));
Dianliu_val=String(3/(1+rr+rl));
//ii3/(1+rr+_root.dengpao_rr.text);
//_root.dianya_dis.text=3-_root.dianliu_dis.text_dis.text*_root.dengpao_rr.text
_root.dianya_dis.text=dianliu_val*rl;
Dianya_val=dianliu_val*rl;
//灯光的设置
_root.move_frame+int(cot_hau/5)//总的坐标是100(-35to+65)再除以5等于20帧因为灯泡的MC等于20帧
//_root.dianya_dis.text=_root.move_frame;
tellTarget(root.ligt_mc){
gotoAndStop(_root.move_frame+1); //起点是第一帧开始20/20没有,因此至少需要1帧
}
}
}
(二)电流、电压显示时小数处理
在一般情况下,由于不同类型数值的精度和位数不同,在直接赋值处理数据时就会在小数点后面有一大串的小数或者零出现,为解决上面所说的问题,可以编写一个函数模块来处理小数点问题。在每次遇到电流、电压显示时就可以调用此函数来解决。
四、元器件之间连线的拆除
当实验完毕后应先断开开关,再拆除连线。也即是消除各个连接线按钮之间的鼠标画线。只要用清除方法就可实现清除连线。在场景中用_root.clear()方法可以清楚lineto()和moveto()方法中绘制的线条。在本例中,由于用了画布来屏蔽相交和被挡住的线条,因此只要清除画布上面得连线即可。
当然,欧姆定律编程中涉及到了大量的代码和编程,不仅是上面一些代码就可以完全实现的,上面的代码只是一些关键和主要的,限于篇幅在这里就不再介绍了。
参考文献:
[1]王德才.基于Flash平台的课件开发[J].潍坊教育学院报,2003,2
[2]简字虹.大学物理仿真实验的制作[J].广西民族学院学报(自然科学版),2003,11
[3]赵英杰.闪客梦幻工场—Flash网页编程宝典[M1].北京:北京希望电子出版社,2002
作者简介:
余继军(1981--),男,重庆万州人,硕士,重庆文理学院团干部,从事学生工作.