【Scratchで天文計算】第5回 次のハレー彗星も見たい

この記事は約7分で読めます。
あじき
あじき

ハレー彗星のシミュレーションも今日が最終回です。

前回までのScrachのプログラムで、ハレー彗星の動きを速度の変化も含めて計算できるようになりました。今回は、ハレー彗星の動きとともに、ハレー彗星がいつ、どのあたりにあるのかや、次はいつ頃に太陽の近くに戻ってくるのか、その日付を計算してみます。

前回の記事「【Scratchで天文計算】第4回 彗星のアニメーション」はこちら

日付の計算とユリウス日

前回ハレー彗星が太陽の近くを通過したのは1986年2月9日でした。この時刻を「近日点通過時刻」と言います。前回までのプログラムではこの日から計算を始めています。プログラムの繰り返しでは、日を15日ずつ進めながらハレー彗星の位置を計算しました。

それでは、いま表示されているハレー彗星がいつの位置なのか、それを年月日で表示するにはどうすればよいのでしょうか。プログラムの最初は近日点から始まるので1986年2月9日、次はその15日後の2月24日です。さらに15日後の日付は3月11日となります。この年はうるう年ではないので2月が28日までだからです。そんなことを考えると、経過日数から日付を数字で求めるのは意外に面倒です。

そこで天文の世界では、「ユリウス日」という日付を使います。当然このユリウス日も毎日1日ずつ進んでいきますが、普通の暦と違って「年」や「月」という考え方がないので、どんどん「日」が増えていきます。このユリウス日の起点は紀元前4713年1月1日と決まっていて、例えば2022年1月1日をユリウス日で表すと2459580日と、とても大きな数字になります。またこのユリウス日は昼の12時に始まると決まっているので、さきほどの2022年1月1日の午前0時は2459580.5日のようになります。ここで、日の単位以下の時間や分、秒は小数で表します。

ユリウス日を計算する

さて、このユリウス日が何の役に立つのでしょうか。

実は、私たちが使っている暦の年月日からユリウス日を計算したり、逆にユリウス日から年月日を計算することができます。そこで、まず近日点通過時刻をユリウス日で表しておき、そこに経過日数を足してから年月日に換算することで、日付が計算できるのです。

まず年月日からユリウス日を求めるには次のようにします。

  ユリウス日 = [(年-[(14-月)÷12])×365.25
        + [(月+[(14-月)÷12]×12-2)×30.59]
        - [(年-[(14-月)÷12])÷100]
        + [(年-[(14-月)÷12])÷400]
        + 日+1721088.5

ここで[]は小数点以下を切り捨てることを意味します。

計算式が長くなるので、Scrachのプログラムにするために上式のそれぞれの行をA,B,C,D,Eという4つの変数に入れて、あとで全部足し算した結果を「ユリウス日」という変数に入れることにします。

Scratchの「メッセージ」を使おう

以前にもいろいろ変数を作りましたので、変数がさらに増えて、どれが何だかよくわからなくなってしまいますね。そこで今回は、日付の計算専用にスプライトを作ることにします。以前には太陽を表示するためにスプライトを作りました。今回は絵を表示するわけではないのですが、実はスプライトには、そのスプライトでしか使わない変数を作ることができます。

以前と同じようにしてスプライト(今回はリンゴの絵にしてみました)を作って、このスプライトに変数A,B,C,D,Eを作ります。なお、このスプライトの絵はステージに表示しないので、「表示する」のマークをOFFにしておきます。

例えば変数Aを作るときに、次のように「このスプライトのみ」を選びます。

こうすることで他のスプライトからは見えない、専用の変数を作ることができます。同様にB,C,D,Eを作ります。次に、ユリウス日を計算したい日付を入れる「年」「月」「日」という3つの変数、それと結果を入れる「ユリウス日」という変数を作りますが、これらは他のスプライトからも見えるようにしてください。

変数ができたら先ほどの計算をプログラムにしてみましょう。

さて、これを猫のスプライトから呼んで実行したいのですが、以前に使った「ブロック定義」では、残念ながら別のスプライトにあるものを呼び出すことができません。そこで、「メッセージ」という機能を使います。ブロックパレットの「イベント」グループから「<メッセージ1>を受け取ったとき」を選択します。この「メッセージ1」の部分をクリックして、「新しいメッセージ」を選択します。

すると新しいメッセージの名前を入力する画面が表示されます。ここで「年月日からユリウス日を求める」と入力します。これによってでできたイベントのブロックに、さきほどのプログラムをつなぎます。

さて、猫のスプライトに戻って、この計算を呼び出してみましょう。それにはまず変数「年」「月」「日」の変数に日付を入れて、先ほど作った「年月日からユリウス日を求める」のメッセージを送ります。これを試してみましょう。猫のスプライトに次のようなプログラムを作ります。

ここでメッセージは「送る」ではなく「送って待つ」にしてください。「待つ」にしないと、実際の計算が終わる前に次の命令に進んでしまうことがあります。
さて、このプログラムを実行すると、前回までに作成したプログラムの実行が始まると同時にユリウス日が計算され、猫が「2446470.50」と言います。これがハレー彗星の近日点通過時刻のユリウス日による表現です。本当はもっと正確に時分秒まで小数で計算するのですが、今回は日付だけにしておきます。

ユリウス日から年月日を求める

今度は逆に、ユリウス日から年月日を計算しましょう。これも計算式を書いてもいいのですが、少し長くなるのでScratchのプログラムで示します。これは「ユリウス日から年月日を求める」というメッセージで呼び出せるようにしておきます。

変数「ユリウス日」に値を入れて「ユリウス日から年月日を求める」というメッセージを送って待つことで、「年」「月」「日」という3つの変数に日付を得ることができます。

以上でユリウス日と年月日を相互に計算できるようになりました。ここからは、この計算をプログラムの中に組み込んでいきます。

暦の計算を組み込んでみよう

最初に、近日点通過時刻をユリウス日にしておきます。

あとは経過日数を進めていきながら、(近日点通過時刻+経過日数)というユリウス日の日付から、年月日の日付を計算します。

プログラムの繰り返しは、次のようになります。

これまでたくさんの変数を作ってきたので、実行するとステージにはたくさんの変数が表示されています。変数はブロックパレットの変数のグループにも並んでいますが、ここにあるチェックボックスをOFFにすることで、一部の変数をステージに表示しないようにもできます。これを使って、「年」「月」「日」だけを表示して実行してみましょう。

ハレー彗星はいつ帰ってくるのか

ハレー彗星が太陽のまわりを一周して2062年1月31日で繰り返しが終わり、再び太陽に近づく様子がわかります。ハレー彗星はこの頃に帰ってくることがわかります。

実際にハレー彗星が帰ってくるのは、2061年夏ごろと予想されています。今回使った近日点距離や離心率の値が少し古いものであることや、ハレー彗星が太陽系の中を移動するうちに他の惑星の影響を受て軌道が変化するなど、さまざまな影響で今回の結果は正確な値にはなっていませんが、だいたいの時期が計算できたことがわかります。

ここまでのプログラムを Scratch ハレー彗星5 に置いておきます。

5回にわたってお届けした「Scratchで天文計算」、いかがだったでしょうか。まだまだ楽しい計算はたくさんできるのですが、今回はここまでにしておきます。

もう一度復習したいという方は、次のリンクから是非じっくりと読み直してみてください。

もっと計算したいという方は、天文計算の書籍のほか、ネット上には計算方法に関する情報がたくさんありますので、ぜひ検索してみてください。また、計算した結果が正しいかどうか確認するには、定番の天文シミュレーションソフト「ステラナビゲータ」をぜひご活用ください。

関連リンク

タイトルとURLをコピーしました