分享

Mathematica应用之日月食的交互式演示

 考研竞赛数学 2020-10-09

1、日食形成的原理

日食的成因简单来说就是:当月球运动到地球和太阳之间,并且太阳、月球和地球基本处于统一直线上时,由于太阳的半径是月球的400倍左右,同时日地距离也是地月距离的400倍左右,故月球可以遮住太阳的光线,在地球上形成阴影区,在地球的阴影区就可以观测到日食现象。如图1所示,日食分为日全食、日偏食和日环食。


图1.日食形成原理(来自参考文献[2])

太阳照射月球使月球在背向太阳的方向会出现阴影,分为本影和半影。本影指没有受到太阳光直射的地方,半影指的是只受到部分太阳光直射的地方。当月球运行到近地点附近时本影锥的高度大于地月距离,此时在本影范围内的地表月球的视直径大于太阳,可以观测到日全食,在半影范围内可以观测到日偏食。当月球运行到远地点附近时本影锥的高度小于地月距离,本影锥反向延长形成的伪本影锥与地表相交,此时在伪本影锥范围内的地表区域,月球的视直径小于太阳,可以观测到日环食,在半影范围内可以观测到日偏食。

2、月食形成的原理

月食形成的原理简单来说就是:当月球运行到太阳的远端,且太阳、地球和月球基本处于同一直线上时,地球的影子会遮住太阳使得月球或月球的一部分接收不到太阳光,无法向地球反射光线,故形成月食。如图2所示,月食分为月偏食和月全食。


图2.月食形成的原理(来自参考文献[2])

太阳光经过地球会在地球后方形成本影区和半影区。只有当月球部分或全部进入本影区时才会发生月食,因为在半影区仍会有太阳光线照射在月球的半面上,使得月球可以正常反射太阳光线。当月球部分进入本影区时发生月偏食,全部进入本影区时发生月全食。

3、仿真程序Mathematica表达式

以下是一个简单的日月食原理仿真的Mathematica程序。程序不考虑真实尺度和黄白道等其他因素,仅将出现的几何原理用交互式操作展示出来。参数设置如下:

太阳半径

1

月球半径

0.3

地球半径

0.75

日地距离

7

地月距离

1.5~3

对应的Mathematica表达式如下(源文件来自Wolfram的由Jeff Bryant提供的演示项目Solar and Lunar Eclipses,我们对其进行部分改写和添加了注释):

Manipulate[sunrad=1;(*太阳半径*)

moonrad=.3;(*月球半径*)

earthrad=0.75;(*地球半径*)

(*绘制影线*)

nsunpenumbraln[x_]:=(-earthrad-sunrad)/(7-0) x+sunrad;(*上半半影线*)

nsunumbraln[x_]:=(earthrad-1)/(7-0) x+sunrad;(*上半本影线,1指的是太阳半径*)

ssunpenumbraln[x_]:=(earthrad+1)/(7-0) x-sunrad;(*下半半影线*)

ssunumbraln[x_]:=(-earthrad+1)/(7-0) x-sunrad;(*下半本影线*)

nmoonpenumbraln[x_]:=(moonorb(*轨道*) Sin[t]-moonrad-sunrad)/(moonorb Cos[t]+7-0) x+sunrad;(*上半半影线*)

nmoonumbraln[x_]:=(moonorb Sin[t]+moonrad-sunrad)/(moonorb Cos[t]+7-0) x+sunrad;(*上半本影线*)

smoonpenumbraln[x_]:=(moonorb Sin[t]+moonrad+sunrad)/(moonorb Cos[t]+7-0) x-sunrad;(*下半半影线*)

smoonumbraln[x_]:=(moonorb Sin[t]-moonrad+sunrad)/(moonorb Cos[t]+7-0) x-sunrad;(*下半本影线*)

Show[Graphics[{RGBColor[.3,.4,1],Disk[{7,0},earthrad],Gray,Circle[{7,0},moonorb],White,Disk[{moonorb Cos[t]+7,moonorb Sin[t]},moonrad]},ImageSize->{478,400}(*图像宽度和高度*),Background->RGBColor[.1,.1,.1],PlotRange->{{-2,15},{-6,6}}],Plot[{nsunpenumbraln[x],ssunpenumbraln[x],nsunumbraln[x],ssunumbraln[x]},{x,7,15},(*实际上不是从与地球的切线开始画的*)FillingStyle->{{GrayLevel[.3],Opacity[.3]},{Black,Opacity[.3]}},Filling->{1->{2}(*在曲线1与曲线2之间填充*),3->{4}},PlotStyle->Gray],Plot[{nmoonpenumbraln[x],smoonpenumbraln[x],nmoonumbraln[x],smoonumbraln[x]},{x,moonorb Cos[t]+7,15},FillingStyle->{{GrayLevel[.3],Opacity[.3]},{Black,Opacity[.3]}},Filling->{1->{2},3->{4}},PlotStyle->Gray],Graphics[{RGBColor[1,.7,.1],Disk[{0,0},sunrad]}]],(*太阳位置*)"XCyclic"->{{t,0,Style["月球位置",20]},0,2 \[Pi]},"Y"->{{moonorb,2,Style["月球距离",20]},1.5,3},(*默认值和名称、变化范围*)TrackedSymbols:>{t,moonorb}](*两个参变量*)(*TrackedSymbols(跟踪的变量符号)控制哪一个变量能被允许引起更新行为.*)

4、执行与部分演示结果

执行以上程序获得如下交互式控制界面,拖动上面的两个滑块改变月亮的位置和距离,可以演示出现的各种效果。


部分演示效果如下面列出的结果。




5、结论

这样我们通过运用Mathematica,成功演示了日月食的原理,形象生动,这种直观又简便的操作可以使人们更好地了解日食和月食。

【注1】该文内容由顾孔静同学提交的作业练习改编、整理而成。

【注2】本文参考的源代码连接地址与文字内容、原来图片来自如下参考文献。

[1] http://demonstrations./SolarAndLunarEclipses/

[2] 百度文库:日食与月食的形成原因图解. http://wenku.baidu.com/link?url=5tecdASVwm1xTwwC-NWf4ScHXITbs0OOSuEDKTLNaawm1IpyfnIz0-LoCdGU7BInecRPhEvrSExhngldwoIESQ9IdmvAlQS3TJSV0qZ---K

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多