2020年6月21日,夏至遇上"金边日食",刷爆了大家的朋友圈。那么有好多小朋友就特别好奇日食现象是怎么产生的呢?
家长朋友们于是就开始在各种网站上检索关于日食的科普知识了。
但是关注表哥公众号的读者朋友可以使用下面这个表哥用Excel制作的日食模拟器来给小朋友们讲解下。
请看效果图:
Excel日食模拟器 这个模拟器可以模拟日食发生的全过程,虽然制作略显简易,但是作为儿童科普的话应该够了。
今天分享的推文一方面是为了给小朋友们进行日食动画演示,另外一方面也希望大朋友们借此文章也学习一些Excel技能。
下面是教程分享:
首先需要在网上检索一些月球、太阳的PNG图片,再找一张地球的照片,按照下面的位置摆放好。
在开始选项卡->查找和选择菜单下 将月亮和太阳的图片进行命名:
同时还需要确定月球绕地球转动的轨道圆心点Center。
要想实现文章开头演示的动图效果,就必须要请出VBA大法了。
在VBE编辑窗口插入一个模块,并粘贴如下代码:
Sub Play()
With Sheet1.Shapes("Center")
Center_Top = .Top
Center_Left = .Left
Center_x = Center_Left + .Width / 2
Center_y = Center_Top - .Height / 2
End With
With Sheet1.Shapes("Moon") '初始化月亮的位置
.Top = 220
.Left = 123
.Height = 88.5
.Width = 88.5
Moon_Top = .Top
Moon_Left = .Left
Moon_Height = .Height
Moon_Width = .Width
Moon_x = Moon_Left + .Width / 2
Moon_y = Moon_Top - .Height / 2
Moon_Radius = .Width / 2 * 1.414
Moon_Orbit_Radius = ((Center_x - Moon_x) ^ 2 + (Center_y - Moon_y) ^ 2) ^ 0.5
For i = 205 To 333 Step 1 '可修改step 值 加快演示
Sheet1.Shapes("Moon").Left = Center_x + Cos(i * (3.1416 / 180)) * Moon_Orbit_Radius - Moon_Width / 2
Sheet1.Shapes("Moon").Top = Center_y + Sin(i * (3.1416 / 180)) * Moon_Orbit_Radius - Moon_Height / 2
Sleep 50: DoEvents '通过API函数Sleep延时
If i > 280 Then '设置月亮距离太阳不同距离时的亮度
Color1 = Fix(255 / 50 * (i - 265))
Else
If i > 260 Then
Color1 = 0
Sleep 200
Else
Color1 = Fix(255 / 50 * (-i + 265))
End If
End If
Sheet1.Shapes("Moon").Select
Selection.ShapeRange.Fill.ForeColor.RGB = VBA.RGB(Color1, Color1, Color1)
[A1].Select
Next
End Sub
月亮位置不断更新的数学原理是三角函数,从上面的代码中就可以获得相应公式,这点我们就不展开说了。
需要注意的一点是在Excel中所有的图片,形状对象的坐标原点都是左上角。
通过录制宏,并手动修改的方式增加一些诸如太阳闪烁的细节。具体代码感兴趣的读者朋友可以下载表哥给大家提供的Excel文件进行理解练习。
最后增加一个按键或者图片修改文字为Play或者自己比较喜欢的文字,并指定刚才我们建立的Play宏代码。
通过本文的分享我其实还是想告诉读者朋友们:
Excel功能真的还蛮强大的,它可以很枯燥,但也可以很有趣;可以做简单的数据处理,也能够胜任高大上的图形展示。
还记得之前分享的全球动态地图吗?就是用VBA结合函数实现的。
只要用心去学,Excel绝对可以惊艳到你!
需要此日食模拟器的读者朋友可以关注公众号并在下方的留言区获取后台下载关键词哦~
注:本公众号所载原创文章均为作者辛苦创作,转载请联系作者并标明出处。
处处留心皆学问,建议大家可以将这篇推文收藏,以备不时之需。
你点的每个"在看"我都认真当成了喜欢▼