2020年8月29日土曜日

恒星時計

 恒星時計(こうせいじ-けい)を実装した. ここからダウンロードできる.

 ダウンロードした時から走行し, 下の上の図のような形である. 右上のディジタル表示は現在の太陽時の年月日と時刻(時, 分, 秒). 左上の表示は現在の(地方)恒星時の時, 分, 秒である.

中央の時計がその恒星時をアナログ的に表示する. 恒星時は0時から24時まであるが, 時計の文字盤には時の表示が12個しかなく, この時計の時針は恒星時の12時間で1回転する. その代わり, 恒星時の正時に文字盤の時針と反対の位置の文字が12増えたり12減ったりする.

この図では, 時針は9時と10時の間にあり, そこから左周りに6時間は過去の時刻を, 右周りに6時間は未来の6時間を示す.

時計の周囲の四角形の内部をクリックすると, 時計は太陽時の秒が繰り上がった時点で停止し, その時刻での恒星時がミリ秒まで表示される. 下の時計の図は停止中の様子を示す. もう一度クリックすると走行を再開する.



時計の盤面に, 北極星を中心とする北天の星図が表示してある. この星図は星座早見盤の自作キットから使わせて頂いた. この星図は恒星時の24時間で左周りに1回転する. 通常の時計の6時相当する真下を時角0h, 3時に相当する右を時角6h, 真上を12h, 左を18hとして北天が日周運動する.

星図に薄く天の川が表示されている. 天の川が天の北極に近いのが赤経0hの方向で, 中央からその方向に辿ると天の川の中にカシオペアのWがあり, さらに外周へ探すとペガススの四角がある. その少し外の緑の点が春分点(Υ)で, 春分点の時角と恒星時が一致しているのが分る.

この時計の星図の下2/3くらいの横長の楕円が, その時刻に見える星空になる.

次の大きな円は星図の元の図である. 右の方の3本の左向き矢印の先の星が, 上からうお(Pisces)のλとω, くじら座(Cetus)のιである. その下の図がうお座とくじら座で, これから見ると春分点はこれら3つの星の中央にあり, 恒星時計の文字盤の春分点をその位置にマークした.




この時計では, ある太陽時の日時, 時刻の恒星時を知ることが出来る. 時計の枠内でキーボードから数字を入力すると時計が停止し, その数字を空白で区切りながら, 年, 月, 日, 時, 分, 秒と入力すると, 対応する恒星時が示される.

最初の時計の図の時刻では, 2020⨆8⨆8⨆11⨆53⨆9と入力すると, 左上に恒星時が現れ, 文字盤にはその時刻に現れる星空が表示される. ミリ秒の値は少し違うが.

恒星時の計算は暗算としてはこのようにする. 3月21日頃の春分には太陽が春分点にいるから, 昼頃, 太陽の南中時が恒星時の0h. それに太陽時の正午からの差を加える. 太陽の赤経は, 1ヶ月に2h増えるから, 例えば8月8日, 立秋の頃なら, 正午に太陽が南中するとき, 春分点は4ヶ月半近く, 9hだけ時角が離れる. つまり正午が9hである. 従って8月8日, 21時だと9h+9h=18hとおよその見当がつく.

しかしこの方法は時計には使えない. 理科年表や天文年鑑には, その年の毎日の世界時0時のグリニジ視恒星時の表があり, インターネットで探すと多くの関連ページが見付かる.

国立天文台の グリニジ恒星時計算HPで2020年1月1日から世界時0時の恒星時を1ヶ月表示したのの一部が次の図である. (出力時刻もGMT)


理科年表では0.1秒, 天文年鑑では0.1分まで表示されているのが, このHPでは0.001秒の精度で表示される.

インターネットにあるいくつかの恒星時計算アルゴリズムで, 2020年1月1日世界時0時の恒星時を計算して見ると, どういうわけかこの表の値にならないので, この値が得られるような数値を自分で計算した.

あるユリウス日がjd 0の日時での恒星時st 0が既知の時, ユリウス日がjdでの日時での恒星時st
 

st=st 0+1.0027378×(jd-jd 0)


だから, jdstのペアがあれば, あるjd 0でのst 0が計算できる.
 

jd 0としては, 何かの恒星時計算アルゴリズムにあった切断(?truncated)ユリウス日の起算時点(jd=2440000.5)を使うことにした. つまり1月中の0時のjdと対応するstから31個の
 

st 0=st-1.0027378×(jd-2440000.5)

を求めて平均し, st 0を作る. 恒星時の表はミリ秒のリスト
(226 778 330 882 435 990 548 109 672 237 802 365 925 481 34
585 136 688 243 801 362 925 487 49 609 167 721 274 824 374 924))

を用意し, ミリ秒が減った時は前日の秒に237秒を, 増えた時は236秒を足し, ミリ秒その日の値としながら, 1月の恒星時を入力した. そして定数st0を得たが, それで12月の恒星時を計算すると, 天文台の表と多少ずれるので, 12月についても同様に計算し, 両者の定数の平均を使うことにした. つまり
 

st=0.6712386796084648+(1.00273791×(jd-2440000.5))

を使う.

この値を使う, Pythonで書いた恒星時計算プログラムは次の通り.

def jd(y,m,d):
    def leap(y):
      return y%400==0 if y%100==0 else y%4==0
    return y*365+y//4-y//100+y//400-(489*(13-m)+26)//16\
      +((1 if leap(y)else 2)if m<3 else 0)+d+1721426
def sidereal(y,mo,d,h,mi,s):
    def frac(a):
      return a-int(a)
    ut=jd(y,mo,d)+(h-9+(mi+s/60)/60)/24-0.5    #-9: to GMT   
    st=0.6712386796084648+1.00273791*(ut-2440000.5)+9/24

    #+9/24: to JST 
    h=frac(st)*24
    m=frac(h)*60
    s=frac(m)*60
    ms=frac(s)
    return [int(h),int(m),int(s),ms]
print(sidereal(2020,1,1,9,0,0))


出力は[15, 40, 28, 0.20889443391934037]で, 前掲の1月1日の値 6h40m28.226sに9時間足したのにかなり合っている.

このような恒星時計が, 宮沢賢治の「銀河鉄道の夜」に出て来る 白鳥, わし, さそり, ケンタウルスなどの駅のホームや操車場やアルビレオ観測所で動いていると想像すると楽しい.

「ケンタウルス, 露をふらせ.」

0 件のコメント: