万 丽 蔺志平 陈晓景 霍 莉
(保定学院 生化系,河北 保定 071300)
带有一个微孔的空心金属球,可以近似的看做为黑体。 教师用线段表示电磁辐射的轨迹如图1, 辅助黑体辐射多媒体教学。 该图片并不能形象地表达电磁辐射在黑体内动态的运动效果。 利用圆周上的随机函数与电磁辐射在黑体里的无规则运动相符合的特点,在Flash 脚本语言中设置相应的参数,制作电磁辐射的单个粒子被复制、分步跟踪的动画,表现出电磁辐射经微孔发射以及进入金属球微孔的辐射在金属球腔内多次吸收、反射的效果。 采用动态课件取代静止图片,在该知识点的描述上更加具有科学性和直观性[1]。
图1
制作该动画的要点是随机坐标的计算。 由于金属壳的外观是由弧线构成的圆, 所以需要应用Math.sqrt、Math.abs 等函数进行运算,即根据电磁辐射在金属壳的腔壁上出现的横坐标x,求得相应的纵坐标y。
第一步:创建带微孔的金属壳。 打开FlashCS,选择【插入】/【新建元件】,在对话框选择“图形”,命名为“金属壳”。 利用【椭圆工具】绘制一“笔触颜色”为黑,“笔触高度”为7,“填充颜色”为灰白色的圆形。 【属性】中设置宽=300.0;高=300.0;x=0;y=0。使用【橡皮擦工具】,点击【橡皮擦模式】,选择【擦除线条】在金属壳的右侧居中位置进行擦除微孔。
第二步:创建粒子。 命名为“粒子”。 利用【椭圆工具】绘制一线形渐变小球。
第三步:创建发射源。 新建“图片”,利用【矩形工具】绘制一“笔触颜色”为黑,“填充颜色”为灰白色的圆形。 使用【文本工具】添加文字“发射源”。
第一步:回到场景1,从【库】中分别拖动“金属壳”、“发射源”以及“粒子”到舞台。 在“金属壳”【属性】中设置x=50;y=50。
第二步:在“粒子”的【属性】命名为“e0”。 点击第一帧,打开【动作-帧】面板,添加代码:
stop();
x1=50;
y1=200;//粒子到达黑体最左侧的坐标
n=5;//粒子运行的步数
/* 复制4 个跟踪的粒子*/
for(i=1;i<=4;i++) {
duplicateMovieClip("e0","e"+i,i);
_root["e"+i]._alpha=_root["e"+(i-1)]._alpha/2;
}
onEnterFrame=function () {
/* 粒子与x1、y1 之间每次以1/n 的位移进行跟踪*/
e0._x+=(x1-e0._x)/n;
e0._y+=(y1-e0._y)/n;
/* 粒子与前粒子之间每次以1/n 的位移进行跟踪*/
for(i=1;i<=4;i++) {
_root["e"+i]._x+=(_root["e"+(i-1)]._x-_root["e"+i]._x)/n;
_root["e"+i]._y+=(_root["e"+(i-1)]._y-_root["e"+i]._y)/n;
}
if (Math.abs(e0._x-x1)<1 && Math.abs(e0._y-y1)<1) {
gotoAndPlay(2); //当粒子与x1,y1 近似重合,跳转到第二帧
}
};
第一步:在第二帧【插入】/【时间轴】/【关键帧】。
第二步:选中“粒子”,在【属性】中设置x=50;y=200。 点击第二帧,打开【动作-帧】面板,添加如下代码:
stop();//停留在第二帧保持金属壳内的反射运动
mx1=200;//金属壳的圆心坐标
my1=200;
r=150;//设金属壳的半径为30
n=3;
for(i=1;i<=4;i++) {
duplicateMovieClip("e0","e"+i,i);
_root["e"+i]._alpha=_root["e"+(i-1)]._alpha/2;
}
flag=0;
onEnterFrame=function(){
if(flag==0) {
/* 计算粒子在金属球内的随机坐标*/
x1=mx1-r+random(2*r);
if (random(2)==1) {
y1=my1+Math.sqrt(r*r-Math.abs(x1-mx1)*Math.
abs(x1-mx1));
} else {
y1=my1-Math.sqrt(r*r-Math.abs(x1-mx1)*Math.
abs(x1-mx1));
}
flag=1;
} else {
e0._x+=(x1-e0._x)/n;
e0._y+=(y1-e0._y)/n;
if(Math.abs(x1-e0._x)<0.5&&Math.abs(y1-e0._y)<0.5) {
flag=0;//当粒子与新坐标近似重合, 重新获取新坐标
}
for(i=1;i<=4;i++) {
_root["e"+i]._x+=(_root["e"+(i-1)]._x-_root["e"+i]._x)/n;
_root["e"+i]._y+=(_root["e"+(i-1)]._y-_root["e"+i]._y)/n;
}
}
};
图2
代码说明: 代码中所涉及的变量和属性值含义如图2 所示。
第三步:动画制作完成,按Ctrl+Enter 键可以测试影片[4]
[1]周公度,段连运.结构化学基础.第四版,北京:北京大学出版社,2009:1-2
[2]师书恩.计算机辅助教育基本原理[M].北京:电子工业出版社,1995:53-60
[3]徐邸祥.使用C# 开发数据库应用程序.北京:科学技术文献出版社,2008:162-196
[4]莫平,黄瑞国.《大学计算机基础》教学方法深层探索[J].电脑知识技术,2009,5(36):10415-10426