月(moon)の形がr*sin(θ)*cos(α)で求められる理由
プログラミングする際に、数学が必要になることがあります。
学校で公式を覚えさせられた時は「こんな数式なんて役に立つのかな?」
と思ったりしたものですが、図形描画プログラミングなどでは必須です。
月齢に応じた月の形は、r*sin(θ)*cos(α)になるのですが、その理由を
書いておきましょう。(θは月の緯度で、αは月齢に相当する角度です)。
北極上空から見た月の状況をマンガ的に描くと次のようになります。
中央の地球から見て、月が右にある時(α=0)が新月で、
左に来た時(α=π)が満月です。
任意の角度alphaの時を拡大すると次のようになります。
図の赤い三角形に注目すると、緑の小円のある角度は、
月齢に相当する角度alphaと等しくなります。
この円の半径を r とすると、赤い三角形の短辺は
r*cos(alpha) になる事が分かりますよね。
この短辺 r*cos(alpha) から右側(円周迄)が光って見えるわけですね。
月は球ですから、図の r は赤道に相当します。
緯度θに対する、半径 r は、r*sin(θ)になるわけです。
北極では、θ=0 で、半径 r*sin(0)=0、
赤道では、θ=π/2 で r*sin(π/2)=r になります。
この図は、最初手描きしようとして上手に書けなかったので
ええいっと、描画するプログラムを作ったのでした。
プログラミングは何かと役にたちますね。
PHPで月の満ち欠けを描画
PHPを使い、月の満ち欠けを画像として描画する。満月の写真をベースに、影の部分を描画する。影の部分は、月齢を三角関数に代入することで求めることができる。