uitspitss blog

プログラミングと音楽とエッセイ ※記載内容は個人の見解であり、所属する組織とは一切関係がありません。

python,matplotlibではやぶさ2の軌道図を作る

2014年12月3日に打ち上げられた「はやぶさ2」の地球スイングバイまで、1ヶ月切りました。
ということで、その軌道の様子をpython、matplotlibで作ってみました。

ちょっとした事情から、python,matplotilbで太陽系内惑星の図を作る部分は、作っておりました!?
なので、それに はやぶさ2特設サイト | ファン!ファン!JAXA! 内、「小惑星遷移軌道計画情報」という項目から頂ける軌道データを入れ込みます。
プレーンなテキストなので、行ごとに該当箇所をひたすら変数に格納していきます。
以下は、格納・描画部分を抜き出したもの。

class HAYA2:
    def __init__(self):
        self.lst = []
        h2txt = open("./haya2_orbit_jaxa.txt","r")
        h2list = [x.strip() for x in h2txt.readlines()][51:]
        for line in h2list:
            _d = {}
            # _d['date'] = line[0:10].replace("/", "") # target date
            _date = datetime.datetime.strptime(line[0:19], "%Y/%m/%d.%H:%M:%S")
            _d['date'] = datetime.date(_date.year, _date.month, _date.day) # date type
            _d['lp']   = int(line[22:26])          # L+ [days]
            _d['x']  = float(line[29:38])        # X pos. [au]
            _d['y']  = float(line[39:48])        # Y pos. [au]
            _d['z']  = float(line[49:58])        # Z pos. [au]
            _d['ex'] = float(line[59:68])
            _d['ey'] = float(line[69:78])
            _d['ez'] = float(line[79:88])
            _d['rs'] = float(line[122:129])      # distance of Sun-Haya2 [10**4 km]
            _d['re'] = float(line[133:140])      # distance of Earth-Haya2 [10**4 km]
            _d['ra'] = float(line[144:151])      # distance of 1999JU3-Haya2 [10**4 km]
            _d['vs']  = float(line[154:159])     # velocity of Haya2 on Sun [km/sec]
            _d['ve']  = float(line[162:167])     # velocity of Haya2 on Earth [km/sec]
            _d['alpha'] = float(line[169:176])   # ra [deg]
            _d['delta'] = float(line[179:185])   # dec [deg]
            _d['Dflt']  = float(line[186:194])   # distance of fling [10**4 km]

            _d['px'], _d['py'], _d['pz'] = convertCood(_d['x'], _d['y'], _d['z'])

            self.lst.append(_d)

def plotHaya2(day):
    haya2 = HAYA2()
    for h in haya2.lst[0:365]:
        plt.plot(h['px'], h['py'], "k.", ms=1)
    for h in haya2.lst[0:365:30]:
        plt.plot(h['px'], h['py'], "c.")
        plt.text(h['px'], h['py'], "${date:%m/%d}^{{\mathrm{{'}}{date:%y}}}$".format(**h),
                 ha='center', va='bottom', fontsize=6, color='blue')

ちなみに、def plotHaya2(day) のインデントはおかしいわけではありません。
アドホックに作ったら、中途半端なオブジェクト指向になったコードです。
また、この軌道データファイルには、はやぶさ2の目標天体である「Ryugu(1999JU3)」のデータもありますので、 はやぶさ2と同じように軌道を描けます。
以下、このスクリプトから生成した画像です。

f:id:uitspitss:20151105173352p:plain

緑丸が地球、水色丸がはやぶさ2、水色六角形がRyugu、という感じです。
2014年12月3日時点で、地球近傍にいるので、見た目にはよさそうプロットですね。

f:id:uitspitss:20151105173403p:plain

2015年12月3日付近の地球とはやぶさ2の拡大図です。
こちらもまぁまぁよさそう。

このスクリプトのTODOは

リファクタリング

です。

github.com

追記(2015/11/24) 下リンクの記事のようにリファクタリングしました
python,matplotlibではやぶさ2の軌道図を作る - uitspitss blog