2020年6月21日,夏至遇上"金邊日食",刷爆了大家的朋友圈。那麼有好多小朋友就特別好奇日食現象是怎麼產生的呢?
家長朋友們於是就開始在各種網站上檢索關於日食的科普知識了。
但是關注表哥公眾號的讀者朋友可以使用下面這個表哥用Excel製作的日食模擬器來給小朋友們講解下。
請看效果圖:
這個模擬器可以模擬日食發生的全過程,雖然製作略顯簡易,但是作為兒童科普的話應該夠了。
今天分享的推文一方面是為了給小朋友們進行日食動畫演示,另外一方面也希望大朋友們藉此文章也學習一些Excel技能。
下面是教程分享:
01準備素材
首先需要在網上檢索一些月球、太陽的PNG圖片,再找一張地球的照片,按照下面的位置擺放好。
在開始選項卡->查找和選擇菜單下 將月亮和太陽的圖片進行命名:
同時還需要確定月球繞地球轉動的軌道圓心點Center。
02利用VBA更新月亮位置
要想實現文章開頭演示的動圖效果,就必須要請出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
03豐富細節
月亮位置不斷更新的數學原理是三角函數,從上面的代碼中就可以獲得相應公式,這點我們就不展開說了。
需要注意的一點是在Excel中所有的圖片,形狀對象的坐標原點都是左上角。
通過錄製宏,並手動修改的方式增加一些諸如太陽閃爍的細節。具體代碼感興趣的讀者朋友可以下載表哥給大家提供的Excel文件進行理解練習。
最後增加一個按鍵或者圖片修改文字為Play或者自己比較喜歡的文字,並指定剛才我們建立的Play宏代碼。
通過本文的分享我其實還是想告訴讀者朋友們:
Excel功能真的還蠻強大的,它可以很枯燥,但也可以很有趣;可以做簡單的數據處理,也能夠勝任高大上的圖形展示。
還記得之前分享的全球動態地圖嗎?就是用VBA結合函數實現的。
只要用心去學,Excel絕對可以驚豔到你!
需要此日食模擬器的讀者朋友可以關注公眾號並在下方的留言區獲取後臺下載關鍵詞哦~
註:本公眾號所載原創文章均為作者辛苦創作,轉載請聯繫作者並標明出處。
處處留心皆學問,建議大家可以將這篇推文收藏,以備不時之需。
你點的每個"在看"我都認真當成了喜歡▼