首页 > 范文大全 > 正文

不同纬度的昼时周年变化动画的制作

开篇:润墨网以专业的文秘视角,为您筛选了一篇不同纬度的昼时周年变化动画的制作范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

由于黄赤交角的存在,太阳直射点在南北回归线之间作周年往复移动,其重要地理意义就是导致了同一纬圈上昼夜时长的周年变化。为了直观、定量地分析这种自然现象,在课堂教学中教师可以借助图形来解说这种规律,笔者运用Flash 8动作脚本较为成功地再现了各纬度的昼时周年变化的规律,其界面如图1所示。

图1

图1通过移动最左边纬度轴上的滑块动态演示不同纬度一年内不同日期的昼时状况。

一、制作原理

制作此动画,首先要理解太阳直射点南北回归运动的数学原理。

(1)由于地球在公转轨道上运动的速度是不均匀的,其运动的规律符合开普勒第二定律:在相等时间内,太阳和运动着的行星的连线所扫过的面积都是相等的。通过计算地球在其公转轨道上每天所扫过的面积得出其每天扫过的角度,这个角度也可看做太阳在黄道上每天移动的角度。

(2)根据太阳在黄道上位置计算出太阳直射点所在纬度,公式为:θ=acrsin (sinαsin23.5°)(α为太阳在黄道上的位置,即黄经),证明此规律见文后“附1”。

二、制作过程

(1)运行Flash 8,建立一个600 px×420 px的新文档“不同纬度的昼时周年变化.fla”。

(2)绘制如图1所示的坐标系,纵坐标的单位为20 px,横坐标的节气位置以后再定(由于相邻两个节气之间的时间长度不一)。

(3)在时间轴的第一帧加入如下脚本程序(下文中“//”之后内容为对程度的解释):

e = 0.0167;//地球公转轨道的离心率

b = 60;//设定图中的地球公转轨道椭圆的短轴长度

a = Math.sqrt(b*b/(1-e*e)); //计算出此轨道的短轴长度

p = a*a/Math.sqrt(a*a-b*b);//地球公转轨道的面积

s_day = Math.PI*a*b/365;// s_day为地球在轨道上每天移动的面积(此处一年以365天计算)

var lat_sun = new Array();//定义数组,存放太阳直射点一年中365天的纬度位置

angle = 0;

for (i=1; i

axis = e*p/(1+e*Math.cos(angle));//运用椭圆的极坐标方程求得极径,即每天的日地距离

delta_day = 2*s_day/(axis*axis);

//地球在轨道上每天移动的角度(单位为弧度),计算的方法是把每天扫过的范围(即s_day描述的范围)近似看成等腰三角形,这样每天移动的距离为2*s_day/axis,然后再把扫过的范围看成一个小扇形,求得圆心角

angle = angle+delta_day;

lat = Math.asin(Math.sin(angle)*Math.sin(23.45*Math.PI/180));//此值即为太阳直射点的纬度

lat_sun[i] = lat; } //把太阳直射点一年365天中每天移动的纬度数存放在这个数组中。

//以下循环实现每一指定纬度的全年昼时长度曲线及滑块与动态曲线的交互

play_sign = 1;//循环运行与停止的标识,初始状态1表示“运行”

onEnterFrame = function () {

button_y = button._y;//把现有的滑块纵坐标代替原有的滑块坐标

lat = Math.round((200-button_y)*3/4);//把滑块的纵坐标转变成图中的纬度

//以下条件语句是实现南北纬度数的显示,其中变量latitude将显示在图下面的动态文本中

if (lat>0) {latitude = lat+"°N";} else if (lat

latitude = -lat+"°S";} else {

latitude = lat+"°";}

if (play_sign == 1) {//当循环运行的标识为1时运行以下条件语句

clear();//清除上一循环画笔在屏幕上留下的痕迹

moveTo(100, 200);//画笔移动到显示区域的最左边

lineStyle(2, 0xff0000, 100);//定义线条的宽度与色调

//以下循环从lat_sun数组读取每天移动的纬度,计算出每天昼时长度并运用此数据绘出全年昼时变化的曲线。昼时长度等于24- 24arccos(tanθtanφ)/π(此公式的推导见文章最后“附2”),其中θ为太阳直射点的纬度,φ为参考点的纬度

//由于tanθtanφ大于1或小于-1时,反余弦函数没有意义,此时表示昼时超过了24小时或小于0小时,因此发生此现象下列程序中把tanθtanφ强制变成1

for (i=1; i

// condition即为公式中的tanθtanφ,通过以下条件判断实现在昼时超过24小时或小于0小时,把昼时显示为24小时或0小时

if (Math.abs(condition)>1) {condition = condition/Math.abs(condition);}

//以上条件语句的功能是:当condition大于1或小于-1时,将condition赋值为1

t_day = 80+240*Math.acos(condition)/Math.PI;

//每天的昼时长度

lineTo(100+480/365*i, t_day);//绘制曲线}}};

(4)添加实例名为“button”的按钮,作为纬度刻度上的滑块,在其上加入以下脚本程序:

on (press) {

startDrag(button, true, 30, 80, 30, 320);

//设定滑块移动范围

play_sign = 1; }//设定滑块可移动条件标识

on (release, rollOver) {

stopDrag();

play_sign = 0; }//取消滑块可移动条件标识

(5)在图中“当前纬度为:”后面加上动态文本框,其变量名为“latitude”。

(6)测试影片(Enter+Ctr)。

(7)在横坐标轴上标出四个节气较为准确的位置。到此标记的原因是相邻两个节气之间的时间长度不一,这样通过计算机的计算能较为准确地标记出其位置,更接近现实。

最后再次测试影片,在保存“各纬度的昼时周年变化.fla”的文件夹里有一个文件“各纬度的昼时周年变化.swf”,即为我们所需的动画。当然通过对文件的设置还可能生成可执行文件“各纬度的昼时周年变化.exe”。

附1:太阳在黄道上位置与太阳直射点纬度之间的关系

图2中OE为地球半径,设为R,A为太阳在黄道上参考起点,即春分点,∠EOA即太阳的黄经,设为α,D为E在赤道平面上的投影,OAOB;B为E在OB上的投影,C为B在赤道平面上的投影,因此∠COB=23.5°(即黄赤交角)。

图2

因此,BO= Rsinα, BC= Rsinαsin23.5°

图2中BC=AD

sin∠AOD= AD/R= sinαsin23.5°

所以,太阳直射点的纬度θ=acrsin (sinαsin23.5°),α为太阳的黄经。

附2:昼时长度的年较差随纬度变化

当太阳直射点的纬度为φ时,可通过几何方法求得某纬圈(其为纬度θ)的昼弧长λ昼和对应的昼时t昼。如图3所示,图中E点为直射点,直射在南半球,参考的纬圈在北半球,经过B的大圆为晨昏圈。

图3

设地球的半径为R,则:

∠OAO'=θ; ∠NOB=φ;

CO'=AO'=Rcosθ;OO'=Rsinθ;

O'D= OO' tanφ=Rsinθtanφ;

所以:cos∠AO'C== tanθtanφ;

λ昼=2 cos∠AO'C =2arccos(tanθtanφ) (弧度);

t昼==12λ/π=24arccos(tanθtanφ) /π(小时)。