ゆるふわブログ

東京大学理科 I 類 2 年の学生です.プログラミング,大学の勉強,日常生活で感じたことをゆるふわに書いていけたらなと思います.技術的に拙いところがあっても温かい目で見守っていただければ幸いです.

プラネタリウム作ってみた

こんにちは!Ysmr-Ry です!

まあ知っての通り「放課後のプレアデス*1を愛してやまないので星に関わることをしたくって.

この度ヒッパルコス星表のデータを使い,JavaScriptcanvasプラネタリウムというか動く天球を作ってみました!
成果物で遊ぶだけでも楽しいので見ていってください〜

成果物

これです.

https://ysmr-ry.github.io/Hipplanetarium/

f:id:Ysmr_Ry:20170806104120p:plain

操作方法は左の方に書いてある通りなんですが,一応.

キー 操作内容
A 星座強調 On / Off
S 星座線 On / Off
X 星の名前表示 On / Off
C 星座名 非表示 / 和名 / 英名
Q モード切り替え 天球 / 天球距離反映 / 宇宙空間
Z 拡大
星をクリック 星にフォーカス / 詳細を表示
Space 星座ツアー開始 / 次の星座へ
Shift + Space 前の星座へ
矢印 (←↑↓→) キー 天球を回転

ちなみに星をクリックしてフォーカスしている時に,その星がどこかの星座に属していたならばそのまま Space を押すとその次の星座から星座ツアーが始まります.
クリックしていた星が属している星座にフォーカスしたい時は,Space → Shift + Space とするとできます(
星座線表示しながらモードを SphereDist にすると,すばるの「よりそうように輝く星も、本当は、ひとつひとつが、何光年も遠く遠く離れています。」というセリフも理解できるんじゃないでしょうか.
あ,完全に PC でやることを前提としてます.スマホ勢のみなさんごめんなさい(((

ヒッパルコス星表

ヒッパルコス星表とは,1988 年に打ち上げられた位置天文衛星ヒッパルコスが 4 年間かけて収集した恒星のデータです.
ちなみにヒッパルコスとは古代ギリシア天文学者の名前なのだそう.(英語の綴り違うみたいだけど)
今回の成果物はそのヒッパルコス星表の基本的な Visualizer です.
ちなみに Hipplanetarium という名前は Hipparcos + Planetarium ということです.
(ネーミングセンスが絶望的にない)

ちょっと舞台裏

ちょっと中身の話についてすると,canvas で描画してるので,遠近法の計算は自前でやっていて,3 次元回転には四元数 (Quaternion; クォータニオン) を使ってます.
複素平面とか知ってる人はその 3 次元 Ver. と思っていただければいいと思います.
まあその程度しか知らないんですが.

あとは基本データをうまく処理して描画するだけだったんですが,ちょっと苦労したのが星の色ですね.
ヒッパルコス星表には安直に星の色が RGB でいくら,みたいなことは載ってないので,そこはあるデータから自分で計算せねばならんのです.
今回は bv Color という値から下記の式で表面温度を推定し,そこから Plank の黒体輻射の分布式を XYZ 等色関数で数値積分して XYZ 表色系での値を求め,RGB に線形変換してます.

f:id:Ysmr_Ry:20170806102538p:plain

このサイトを参考にしました.

www.geocities.jp

ただ,これで計算すると RGB が負になったりしてよくわかんなかったところはあるんですね.
ちょっとだけ色のお勉強をして見た*2んですが,どうも RGB ですべての色が表せるという単純な話ではないようで,黒体の色温度がディスプレイで再現できる色の範囲を出てしまってるってことなんだと思いますたぶん.こんな風に黒体軌跡が色域の三角形を出てる感じ?

f:id:Ysmr_Ry:20170806103148p:plain

あとは色相を保って明るさ最大にしてるので,色の違いが目立っていいのかなぁと.
星の色ちゃんとあってますかね… さそり座のアンタレスが赤いから大丈夫だろうという謎の基準()
おかしかったら星に詳しい人教えてください〜

あとの詳細が知りたい人は僕にコメントとかで聞いてもらうか,Github にソースが上がってるので解読して貰えばいいと思います.(拙くて申し訳ないですが)

github.com

これの docs ってフォルダーの中です.

ちなみに

やっぱり同じようなこと考えた人はいて,もっとやばいことやってるのがありました.

HippLiner -- A 3D interstellar spaceship simulator with constellation writing function

でも星の知識とか絶望的に足りないし今回はとりあえずこんな感じで… orz

おわり

まあ,僕大昔に同じようなの作ったことあるんですが,その時は星の色とかかなり適当だったので作り直してみようかと思いまして.
それに canvas 使えばまあ Web ブラウザが動けばどこでも見れますし.
あと夏休みで暇だったので()

*1:いい加減しつこいのですがいいものはいいのです笑
なんか昨日はいつきちゃんの誕生日だったらしくて上映会をやってたみたい (?) ですね.
よかったら見てみて〜
sbr-gx.jp

*2:このサイトがわかりやすかったです.
qiita.com
qiita.com
あと,このサイトが参考にしてる本も特に 3 章の表色系の話が数学と絡んできて面白かったです.
( というかそれしか読んでない() )

色彩工学入門 定量的な色の理解と活用 | 森北出版株式会社