...

卒業論文

by user

on
Category: Documents
2

views

Report

Comments

Transcript

卒業論文
卒業研究論文
2010 年
2月
太陽系シミュレータ
(所属ゼミ:和島ゼミ)
ソフトウェア情報学部
ソフトウェア情報学科 4 年
ソ 18021
畑本義明
目次
第1章 序論................................................................................................................................................3
第1節 背景 ............................................................................................................................................3
第2節 研究の流れ .................................................................................................................................3
第2章 開発環境 ........................................................................................................................................3
第1節 Microsoft Visual Studio ............................................................................................................3
第2節 Visual C++ .................................................................................................................................4
第3節 DirectX SDK..............................................................................................................................4
第4節 GIMP .........................................................................................................................................4
第5節 Metasequoia ..............................................................................................................................4
第6節 ペイント .....................................................................................................................................4
第3章 設計................................................................................................................................................4
第1節 表示対象の選定 ..........................................................................................................................4
第2節 天体のパラメータ.......................................................................................................................5
第1項
軌道 ...................................................................................................................................5
第2項
位置 ...................................................................................................................................6
第3項
自転 ...................................................................................................................................6
第4項
摂動 ...................................................................................................................................7
第3節 操作系 ........................................................................................................................................7
第4節 表示モード .................................................................................................................................8
第1項
自由移動モード .................................................................................................................8
第2項
説明モード ........................................................................................................................9
第3項
固定モード ...................................................................................................................... 11
第4項
追跡モード ...................................................................................................................... 11
第4章 素材..............................................................................................................................................13
第1節 2D 画像 ....................................................................................................................................13
第2節 3D オブジェクト ......................................................................................................................14
第5章 クラス ..........................................................................................................................................17
第6章 軌道上の位置計算 ........................................................................................................................20
第1節 Euler 法 ...................................................................................................................................21
第2節 Runge-Kutta 法 .......................................................................................................................21
第3節 Newton-Raphson 法 ................................................................................................................22
第7章 補助効果 ......................................................................................................................................28
第1節 時間経過 ...................................................................................................................................28
第2節 日時の表示 ...............................................................................................................................28
第3節 ウィンドウ表示と全体表示 ......................................................................................................29
第4節 カメラ距離と画角.....................................................................................................................30
1
第5節 軌道の表示 ...............................................................................................................................30
第6節 天体の拡大表示 ........................................................................................................................31
第7節 ライト ......................................................................................................................................32
第8節 経線と緯線(黄径、黄緯) ...........................................................................................................32
第9節 経線と緯線(赤径、赤緯) ...........................................................................................................33
第10節 別バージョンのテクスチャ ...................................................................................................35
第11節 カーソル ...............................................................................................................................37
第8章 検証..............................................................................................................................................38
第1節 日食 ..........................................................................................................................................38
第2節 月食 ..........................................................................................................................................40
第3節 内惑星の太陽面通過 .................................................................................................................42
第1項
水星 .................................................................................................................................42
第2項
金星 .................................................................................................................................44
第4節 土星の環の消失 ........................................................................................................................45
第9章 問題点 ..........................................................................................................................................45
第1節 精度の問題 ...............................................................................................................................45
第2節 表示領域の問題 ........................................................................................................................46
第3節 明暗境界線 ...............................................................................................................................47
第10章 改善案 ......................................................................................................................................47
第1節 精度 ..........................................................................................................................................47
第2節 表示 ..........................................................................................................................................47
第3節 表示のバリエーション .............................................................................................................48
第11章 引用・参考文献 ........................................................................................................................49
2
第1章 序論
第1節 背景
日本の無人宇宙船 HTV による国際宇宙ステーションへの物資の輸送の成功など宇宙開発は着実に進
んでいる。しかし、一般人の宇宙に対する興味は決して高いとは言えない。そこで、簡単な操作で自由
に太陽系の天体を見ることができ、その動きを観察できるようなシステムを開発して公開することで、
宇宙の面白さを広く知ってもらえるのではないかと思い、このテーマを選択した。
第2節 研究の流れ
初めにシミュレータで扱う天体を選定した。とりあえず太陽と 8 つの惑星を扱うこととし、詳細なデ
ータの載っている文献を探した。天文年鑑 2009 [1]、2010 [2]にそれらのデータがあることがわかったので、
まずは太陽からの平均距離と質量、公転周期を使い、仮に円軌道上を動いているものとして初速度を与
え、Euler 法で惑星の移動をシミュレートしてみた。差分に用いるステップを 1~1000 秒まで変化させ
たが、軌道が大きく変化することもなく安定した。そこで衛星を加え、太陽-惑星系、惑星-衛星の重力を
独立に計算してみたところ、公転周期の短い衛星(火星のフォボスなど)ではステップが大きい場合は 1 年
程度で軌道が広がり発散してしまった。このシミュレータではタイムスケール(シミュレータ上の時間の
流れ/実時間)を変化させられるようにして、長時間にわたる天体の動きを見ることも目的としているので、
ステップを小さくしたときに計算時間が伸びてしまうことが問題となった。Runge-Kutta 法を用いて 1
ステップあたりの誤差を小さくすることも試したが、1 回の表示あたりの計算回数を 1000 回まで増やす
と動作が遅くなってしまう問題が残った。そこで、微分方程式を解いて 1 ステップ毎に位置と速度を求
める方法を捨て、初期位置と軌道要素から与えられた時刻の位置を求める方法に切り替えることにした。
人工衛星の位置の計算などに広く用いられている、初期位置と経過時間、周期、角速度から
Newton-Raphson 法で任意の時刻の離心近点角を求める方法では数回の計算で収束するので、ステップ
をいくら大きくしても時刻さえ与えれば瞬時に位置を求めることができる。これで計算の遅さの問題は
解決した。さらに表示方法を、選択した天体を中心に置いてカメラを黄径、黄緯に沿って移動させる「自
由移動」、天体の中心にカメラを置いて赤径、赤緯に沿って移動させる「固定」、天体の中心のカメラか
ら他の天体を追跡させる「追跡」の 3 つのモードに拡張した。惑星の軌道の黄道面からの傾きなどの軌
道要素を組み入れ、2009 年 1 月 1 日 0:00 の位置からスタートさせたところ、追跡モードで日食や内惑
星との合などの天文イベントがかなりの精度で再現されることが確認できた。この際、シミュレーショ
ンの開始日時以前の現象も確認できるように、キー操作で時間の流れを逆転できるようにした。また、
表示対象に準惑星と小惑星を加え、天体上にカーソルを置いてカーソルの当たっている天体の説明文を
表示する「説明」モードを追加した。
第2章 開発環境
第1節 Microsoft Visual Studio
Microsoft Visual Studio とは、Microsoft 社が開発したソフトウェア開発製品群及びそれらを管理する
総合開発環境である。本研究では、Visual C++を用いて太陽系惑星シミュレータのプログラムを制作し
た。
3
第2節 Visual C++
Visual C++とは、Visual Studio に含まれる開発環境の一つであり、Windows ネイティブなアプリケ
ーションや 2D、3D ゲームの開発を支援する様々な機能をもつ。
第3節 DirectX SDK
DirectX SDK とは、Microsoft 社から無償で提供されているソフトウェア開発ツールのキッドのことで
ある。グラフィックスやサウンドを多用したゲームの開発に利用されることが多い。本研究では、開発
に使用した PC に DirectX SDK のバージョン March 2008 と August 2006 をインストールし、そのライ
ブラリを使用した。
第4節 GIMP
GNU GPL のもと、無償で提供されているビットマップグラフィック編集や加工ソフトウェアであり、
透明レイヤーを持つ画像を作成することができる。本研究では、文字表示用のフォント画像の作成に使
用した。
第5節 Metasequoia
O.Mizuno 氏が開発した 3DCG ソフトウェアである。3D モデルの作成に特化した 3DCG モデラーで
あり、トゥーンレタリング・Python スクリプト・プラグイン等の機能を備える。本研究では、天体、カ
ーソルの 3D モデルの作成に利用した。
第6節 ペイント
Microsoft Windows に付属するグラフィックソフトウェア。本研究では、説明モードで使用する画像
の作成に使用した。
第3章 設計
第1節 表示対象の選定
はじめに太陽系シミュレータを作成するにあたって表示する天体を考察した。太陽系を構成する天体
として太陽と主な 8 つの惑星がある。さらにそれぞれの惑星には周囲を公転する衛星や環を持つものが
あるので、それらを対象に追加することで、惑星の様子をより深く知ることができるようにした。地球
の衛星は月一つだけであるが、日本が打ち上げた陸域観測技術衛星「だいち」、インフラの整っていない
地域でのインターネットのブロードバンド通信に使われる静止衛星「きずな」、ロシアが打ち上げた細長
い楕円軌道を描く「モルニア」など、さまざまな軌道を描く人工衛星も地球の衛星として対象に含めた。
また冥王星は 2006 年に IAU によって準惑星に分類されるまでは第 9 惑星としてなじみ深いものであ
ったので、それを含む 5 つの準惑星を表示対象に含めた。さらに火星と木星の軌道の間に多数存在する
小惑星の中には、高い離心率を持ち地球の軌道の内側まで入り込むものもあるので、小惑星のうち主な
ものも表示することにした。
4
第2節 天体のパラメータ
第1項
軌道
太陽系の惑星はいずれも太陽の周りをほぼ地球と同じ方向に楕円軌道を描いて回っているため、その
上にある惑星の位置を求めるためにはその軌道を一意に定義する必要がある。まず、楕円軌道の形を決
めるために必要なパラメータが軌道長半径 a (semi-major axis)と離心率 e (eccentricity)である。離心率が
0 になると軌道は完全な円になり、1 に近付くと軌道が扁平になる。1 では放物線軌道、1 より大きくな
ると双曲線軌道になるが、ここでは惑星などの安定した軌道だけを扱うので、楕円軌道のみを考える。
形が与えられても惑星の軌道が求まるわけではない。完全に軌道を定義するには、その軌道が地球の軌
道に対してどのような角度をなしているかをも定める必要がある。一般に惑星の楕円軌道の向きは近日
点引数  (argument of perihelion)と軌道傾斜角 i (inclination angle)、昇交点黄径  (longitude of the
ascending node)で表される。これは、黄道面(地球の公転面)上にある、太陽から見て近日点も地球と同
じ側( x 軸の正の方向)にある楕円軌道を、 z 軸の周りに  、 x 軸の周りに i 、再び z 軸の周りに  だけ回
転させた軌道である。どのような楕円軌道も、形を表す  , i ,  の計 5 つのパラメータで一意に定義する
ことができる。回転前の座標を( x0 , y 0 ,0)とすると回転後の座標( x , y , z )は
0
0  cos   sin  0  x0 
 x   cos   sin  0  1
  


 
 y    sin  cos  0  0 cos i  sin i  sin  cos  0  y 0 
z  0
0
1  0 sin i cos i  0
0
1  0 
  
で表される。
なお、地球は黄道面上を公転しているため昇交点黄径  や近日点引数  を定義できないが、近日点黄
径 L (longitude of perielion)のデータが天文年鑑から得られる。
L   
そのため地球については   0 , i  0 ,
  L とすれば軌道を確定できる。
惑星同様に、衛星についても 5 つのパラメータで軌道が決まるが、たとえば月や人工衛星については 
は近地点引数(argument of perigee)、  は昇交点赤径(right ascension of ascending node)と呼ぶ。すな
わち、惑星では、春分点を基準にしていたところを主星の天の赤道の赤径 0 度の点に置き換えて考える。
また、潮汐力のためにほとんどの惑星系で衛星の公転面は惑星の自転軸に垂直な面に近くなっているの
で、軌道傾斜角もこの面を基準にして考える。
5
図 3-1. 楕円軌道の軌道要素
第2項
位置
軌道が確定すると、ある時点(元期)での惑星の位置(または近日点からの回転角)と公転周期から任意の
時刻の惑星の位置を求めることができる。天文年鑑や理科年表
[3]などにこの値が記載されているので、
これを利用した。衛星のある惑星系では、衛星の位置を、惑星を中心とした楕円軌道として扱い、太陽
や他の惑星からの重力は考慮しない。すなわち、太陽から惑星への位置ベクトル、惑星から衛星への位
置ベクトルを独立に計算し、その和を衛星の位置として扱う。
第3項
自転
惑星は自身の地軸を中心に自転しているが、地軸の向きは黄道面に対する傾き  (地球では 23.4°)と地
軸を黄道面( xy 平面)に射影した直線と太陽―春分点のなす角  の 2 つの角度で定義できる。公転とは異
なり自転の速度は一定なので、元期での基準子午線の方向が確定すれば、自転周期から任意の時刻の惑
星の向きを求めることができる。
6
z


y
x
図 3-2. 地軸の方向
第4項
摂動
ここまで軌道要素( a , e ,  , i ,  )を定数としてきたが、惑星は太陽からの重力だけでなくほかの惑星か
らも重力を受けて、長期的に軌道を変化させる(摂動)。天文年鑑にはユリウス日の 2 次の関数としてこれ
らのパラメータの変化が与えられているが、本研究ではこれを定数として扱った。
第3節 操作系
様々な環境での使用を想定し、キーボードとマウスのどちらでも操作できるようにした。また、メニ
ューバーを配置し、操作を覚えられなくても基本的な項目が変更できるように配慮した。
表 3-1. キーボードによる基本操作
キー
動作
1, 2
時間経過の速さの変更
3, 4
拡大表示の倍率の変更
W
表示モード切り替え
G
軌道表示のトグル
A
惑星拡大の表示のトグル
S
衛星拡大の表示のトグル
D
準惑星拡大の表示のトグル
F
小惑星拡大の表示のトグル
Y
黄径・黄緯の表示のトグル
R
赤径・赤緯の表示のトグル
C
ライト(周辺光) の表示のトグル
Q
操作ガイドの表示のトグル
Z
星空(背景)
Enter
リセット
Space
時間の進行方向逆転
7
表 3-2. マウスによる操作
マウス操作
動作
左ボタンドラッグ
カメラ移動
右ボタンドラッグ
時間経過の速さの変更
左、右ボタンドラッグ
拡大表示の倍率変更
図 3-3. メニューバーの選択項目
第4節 表示モード
天体自体を観察する、その動きを見る、天体からの他の天体の見え方を調べるなど、カメラを目的に
合わせて動かせるようにするため、4 通りのモードを用意した。
第1項
自由移動モード
画面中心に選択した天体が表示される。V キーで惑星系を、B キーで系内の惑星・衛星を順に切り替
える。惑星系によって衛星の数は異なるので、惑星系の切り替えでは常に衛星の(図 3-4 の横方向の)選択
をリセットする仕様にした。
8
太陽
惑星 1
惑星 2
惑星 3
衛星 1
惑星 4
衛星 1
衛星 2
衛星 3
衛星 4
衛星 2
・・・
惑星 8
図 3-4. キー操作による天体の選択
表 3-3.
自由移動モードでのキー操作
キー
変更項目
カーソルキー上下
カメラを黄緯に沿って移動
カーソルキー左右
カメラを黄径に沿って移動
PageUp, PageDown
カメラを天体に近づける、遠ざける
V
惑星系の切り替え
B
衛星の切り替え
X
テクスチャの切り替え
このモードでは V, B で切り替えた天体が中心に表示される。カメラの距離はマウスの中央ボタンを押し
て上下にドラッグしても変更できる。
第2項
説明モード
天体の上にカーソルを表示し、画面右側にその説明を表示する。中心にある天体とカーソルのある天
体が異なる場合は、その天体が画面内に収まるように自動的にカメラ距離を変更する。
中心に表示する天体の切り替えに関するキー操作は自由移動モードと全く同じだが、カメラは経度・
9
緯度方向の変更のみ可能とする。このモードではカーソルの当たっている天体の説明が画面右上に表示
される。カーソルの切り替えは T キーで行う。切り替えられる順番・対象は、中心に表示されている天
体によって異なる。衛星が中心に表示されているときは、カーソルはその衛星についた状態になる。
カーソルを切り替えた際に対象となる天体が画面外に出た状態になることを防ぐため、中心にある天
体とカーソルのついた天体が同じ場合はその半径の 3.8 倍、異なる場合はカーソルのある天体の遠点の距
離の 3.8 倍となるように自動的にカメラ距離を変化させた。
また、準惑星や小惑星を表示していて、太陽が中心にある場合にはこれらもカーソルを当てる対象と
した。その際、切り替えの順序を遠点が小さい順とした。
太陽
太陽
惑星
惑星 1
惑星 1
衛星 1
・・・
惑星 2
衛星 2
惑星 4
準惑星 1
惑星 3
衛星 3
惑星 5
・・・
・・・
・・・
惑星 8
衛星n
準惑星 5
図 3-5. 太陽が中心にある場合
図 3-6. 太陽が中心にある場合
(準惑星、小惑星表示なし)
(準惑星の表示あり)
表 3-4.
図 3-7. 惑星が中心にある場合
説明モードでのキー操作
キー
変更項目
カーソルキー上下
カメラを黄緯に沿って移動
カーソルキー左右
カメラを黄径に沿って移動
V
惑星系の切り替え
B
衛星の切り替え
T
カーソルと表示対象の切り替え
10
第3項
固定モード
天体中心に置かれたカメラからの星空を表示する。
カメラの口径はマウスの中央ボタンを押して上下にドラッグしても変更できる。
表 3-5.
第4項
固定モードでのキー操作
キー
変更項目
カーソルキー上下
カメラを赤緯に沿って移動
カーソルキー左右
カメラを赤径に沿って移動
PageUp, PageDown
カメラの口径を狭める、広げる
追跡モード
天体中心に置かれた、他の天体を追跡するカメラから見た星空を表示する。カメラから注視点までの
距離を一定にしているため、天体間の距離が変わるにつれて対象の大きさが変化する様子を観ることが
できる。カメラを置く天体によって追跡の対象や表示方向を
① 太陽にカメラがある場合
惑星を追跡する。惑星の公転面の法線方向を画面上方とする
② 惑星にカメラがある場合
太陽と他の惑星、その惑星系の衛星と追跡する。太陽を追跡している場合はその惑星の公転面の法線、
衛星を追跡している場合は衛星の公転面の法線の方向を画面上方とする
③ 衛星にカメラがある場合
その惑星系の主星と衛星を追跡する。常に自らの公転面の法線方向を画面上方とする
とした。追尾の対象はそれぞれ図 3-8~図 3-10 の順で切り替えられる。
11
太陽
惑星 1
惑星 2
惑星 3
惑星 4
・・・
惑星 8
図 3-8. キー操作による追跡対象の切り替え(太陽にカメラがある場合)
太陽
惑星 1
惑星 2
惑星 3
衛星 1
衛星 2
衛星 3
衛星 4
惑星 4
・・・
惑星 8
図 3-9. キー操作による追跡対象の切り替え(惑星 3 にカメラがある場合)
12
惑星
衛星 1
衛星 2
衛星 3
衛星 4
・・・
衛星n
図 3-10. キー操作による追跡対象の切り替え(衛星 3 にカメラがある場合)
表 3-6.
追跡モードでのキー操作
キー
変更項目
PageUp, PageDown
カメラの口径を狭める、広げる
T
追跡対象の切り替え
このモードではカメラの向きをキー操作で変えることはできない。
第4章 素材
第1節 2D 画像
説明モードにおいてカーソルのある天体の説明のための画像をペイントで作成した。太陽と惑星、月
についてはそれぞれの天体を表す記号を含めた。
13
図 4-1. 地球の説明画像
図 4-2. 月の説明画像
あらゆる情報表示で使用する、文字表示のためのフォント画像を作成した。プログラム中では画像の
切り出し位置を文字コードから求め、1 文字ずつ表示するメソッドを利用して日本語、英語の両方を表示
した。
図 4-4. 英数フォント画像
図 4-3. 日本語フォント画像
第2節 3D オブジェクト
図 4-5 に示すように、Metasequoia では基本図形として長方形、直方体、球、円柱、ドーナツ型、穴
開き円柱、角推、丸め直方体、丸め円柱を簡単に作成できる。そこで、まず、一般的な天体の表示のた
めに球を U,V とも分割数を 32 にしてモデルを作成した。このファイルは mqo 形式であるが、このまま
では DirectX で使用することができないので、X ファイルへの変換を行った。
14
図 4-5.
Metasequoia の基本図形
図 4-6. 球の作成
プログラムではこのモデルを読み込み、Veiws of the Solar System [4], JHT’s PLANETARY PIXEL
EMPORIUM [5], NASA-JPL Solar System Simulator [6]などで無料で提供されている正距円筒図法の天
体表面のテクスチャを張り付けてその天体の 3 軸方向の径に合わせて拡大して表示した。(自転のために
惑星の極方向の径は赤道方向の径より小さい。また、質量の小さい衛星は不規則な形をしているが 3 軸
の径のデータが与えられているのでそれに合わせて表示する。)
図 4-8. シミュレータ上の
図 4-7. シミュレータ上の木星の表示
フォボスの表示
これでほとんどの天体を表示できるが、木星以遠の惑星は環を持つので、惑星本体とは別に、穴あき
円柱を使って環のモデルを作成した。土星の A 環は内側が赤道半径の 2.03 倍、外側が 2.27 倍なので、
それに合わせてサイズを設定した。球のモデルに穴あき円柱を追加して、それを厚さ 0 に圧縮して一つ
のモデルとして作成した。なお、土星の A 環は内側が土星の中心から 122,200km,外側が 136,800km の
15
距離にあるので、土星本体のサイズに対して正しい比になるように内径、外径を設定した。同様に B~G
環や、他の天体の環のモデルも作成したが、E 環のような希薄リングと呼ばれる視認しにくいものにつ
いては、材質の透明度を高く設定した。表示の際は衛星の平均距離と周期から環の回転周期を求め、環
ごとに個別に回転させた。
図 4-9. 環の原型の作成
図 4-10. 縦方向の圧縮
固定モード、追跡モードでは、選択した天体から見た星空を表示するので、他の天体が星空に対して
どの位置にいるかも重要な情報である。そこで、球のモデルの表裏を反転させ、星空の鏡映反転テクス
チャを貼って天球を表示した。
図 4-11 は形は球であるが、カリングが図 4-6 のモデルとは逆であるため、内側からしか見えない。
16
図 4-11. 天球の 3D モデル
説明モードで使用するカーソルは、五角錐で作成した。
人工衛星は機体ごとに形が異なるが、ここでは CG のようにリアルに表現することを目的としていな
いので、模式的な形にとどめ、同一のモデルを使用した。
図 4-13. 人工衛星
図 4-12. カーソル
第5章 クラス
ここではシミュレータを Visual C++のプログラムとして実装する上で作成したクラスと主なフィール
ド、メソッドについて概説する。
1. CRocket
メインとなるクラス。初めに 3D オブジェクトや画像、天体のパラメータなどを読み込み、1/60 秒
毎に天体の位置の計算、描画を行う。フィールドとしてカメラ位置、天体の位置、時間や各種の表示
ON、OFF 用のフラグを持つ。主なメソッドは天体の位置計算、描画、カメラ更新、軌道の描画など
である。
「ひぐぺん工房」が提供する DirectX 支援ライブラリのクラス「CGame」の継承クラスであ
る。
以下に主なメソッドを上げる。
17




CRocket() (コンストラクタ)

変数の初期化

天体データ、メッシュ、画像、フォントの読み込み
void Move() (1/60 秒ごとに呼ばれる)

キーボード、マウスからの入力をチェックする (void KeyOperation)

1 ステップ分時間を進める

天体の位置を計算する

カメラの位置を更新する (void MoveCamera)
void Draw() (1/60 秒ごとに呼ばれる)

前のステップの画面を消す

カメラの位置を更新する (void MoveCamera)

天球の表示

経線、緯線の表示 (void DrawEclipticCoordinate, void DrawPolarCoordinate)

軌道の表示 (void DrawLine)
void MoveCamera()

表示対象からカメラに向かうベクトルの更新

上方ベクトルの更新(自由移動、説明モードではz軸方向に、固定モードではカメラのある
天体の地軸方向に、追跡モードでは公転面の法線方向に設定する)

void KeyOperation(const CInputState* is, const MOUSE_STATE ms) (キー入力、マウス操作に
応じて以下の作業を行う)

初期化

対象からのカメラの距離または画角の変更

カメラの回転

タイムスケールの変更

拡大天体の倍率の変更

惑星・衛星の切り替え

表示モードのトグル

ライトの種類のトグル

操作ガイドの表示のトグル

軌道の表示のトグル

経線、緯線の表示トグル

天球の表示のトグル

別バージョンのテクスチャ表示の切り替え

説明対象の天体の切り替え(説明モード)
18


追尾対象の天体の切り替え(追跡モード)
Void ShowInfo(LPDIRECT3DDEVICE9 device, D3DVIEWPORT9 viewport, int w, int h) (文字・画
像による追加情報の表示)

日時

タイムスケール

表示対象天体

カメラの置かれた天体

カメラと対象の間の距離(自由移動、説明モード)

カメラの画角(固定、追跡モード)

拡大表示天体の倍率
2. Body
天体を表すクラス。フィールドとして位置、速度、質量、自転の方向、軌道要素を持ち、自らの位
置を与えられた時間だけ経過した後のものに修正するメソッド、描画用のメソッドなどを持つ。

Body(D3DXVECTOR3 pos, D3DXVECTOR3 v, float p0, float omega_, float mass, float radius,
float tilt_, float phi2, float x_y_, float z_y_, float e_, float R_, float O_, float P0,
float ap, float ia, float lan) (コンストラクタ)


速度、質量、半径、地軸の方向、軌道要素、初期位置を受け取りパラメータを初期化する
void draw(Body b, CMesh *p, D3DXVECTOR3 center0, D3DXVECTOR3 center1, float magnification,
float alpha) (描画)


表示天体とメッシュ、位置補正ベクトル、倍率と透明度を受け取り、天体を表示する
void calcPos(float tm, float a) (天体の位置を計算する)

公転角速度と経過時間 tm を用いて平均近点角を更新する

平均近点角から Newton-Raphson 法で離心近点角を更新する(場合によっては緩和係数 a を
用いる)

離心近点角から天体の位置を計算する

天体の自転角速度と経過時間 tm を用いて自転角を更新する
3. Date
日時を表すメソッド。年、月、日、時、分、秒のフィールドを持ち、コンストラクタで決定された
時刻を、指定した秒数だけを変化させるメソッド、ユリウス日を返すメソッドなどを持つ。

CDate(int y, int mo, int d, int h, int m, int s) (コンストラクタ)

年、月、日、時、分、秒を受け取り、自らのフィールドに代入する
19

void addtime(int s) (更新)


void subtracttime(int s) (更新)


経過時間(秒)を受け取り、フィールドの値を更新する
戻す時間(秒)を受け取り、フィールドの値を更新する
float getJD() (ユリウス日取得)

ユリウス日を返す
第6章 軌道上の位置計算
天体の位置を求める方法として、位置と速度の初期値を元に、指定した日時まで運動方程式を解いて
いく方法(Euler 法、Runge-Kutta 法)と、楕円軌道を不動のものと仮定して、初期状態の平均近点角と指
定した日時までの経過時間からその時の平均近点角を求め、対応する離心近点角を Newton-Raphson 法
で求めることで天体の位置を算出する方法を試した。タイムスケールが大きい場合にリアルタイムにな
めらかに表示できる、精度が高いなどの理由から最終的に Newton-Raphson 法によるものを採用した。
いずれも太陽-惑星、惑星-衛星間の重力だけを考慮し、2 体問題として計算を行った。
ms

F
mp
図 6-1. 物体に働く重力
Newton の万有引力の法則によると、質量 ms 、 m p の物体 S,P があるとき、 m p には

ms m p  
F   3 (rp  rs )
r

(6-1)



の力が働く。ここで rs 、rp はそれぞれ物体 S、P の位置ベクトル、 r はその差の絶対値 r p  rs である。
この力によって物体 P には
20

m  
 F
a
  3s rp  rs  (6-2)
mp
r
の加速度が働く。
第1節 Euler 法


時刻 t 0 において惑星 P が r (t 0 ) の位置にあり、速度が r (t 0 ) であった場合、十分に短い時間 t だけ経過
したあとの P の位置は


r (t0 )  v t0 t

v (t0 )

r (t0  t )

r (t 0 )

F
図 6-2. 位置の変化の線形近似



r t 0  t   r t 0   v t 0 t
(6-3)
であらわされる。また、速度 v も経過時間に応じて変化し


 
v t 0  t   v t 0   a r t
(6-4)

となる。 a は(6-2)から求められる。これを繰り返すことで任意の時刻の位置、速度を求めることができ
る。シミュレータにこの方法を適用したところ、特に公転周期の短い衛星ではある程度時間が経過する
と軌道が広がり、発散してしまう問題が起こった。図 6-2 から明らかなように Euler 法で求めた位置が
常に真の位置の外側になってしまうことが原因であると思われる。 t を小さくすれば誤差は一次のオー
ダーで小さくなるが、計算量が多くなるためシミュレータの動作が遅くなるという問題が起こった。
第2節 Runge-Kutta 法
Runge-Kutta 法では、誤差をなるべく小さくするため、区間 t を分割して平均する方向をとる。
まず、
 
r0  r t 0 


 0   t 0 

 
a 0  a r0 
とおき、これを使って
21
(6-5)
  
r1  r0   0 t 2
  
 1   0  a0 t 2

 
a1  a r1 
を求める。さらに
最後に
(6-6)
  
r2  r0   1 t 2

 
 2   0  a1 t 2

 
a 2  a r2 
(6-7)
  
r3  r0   2 t

 
 3   0  a 2 t

 
a3  a r3 
(6-8)
を求め、 t 0 から t だけ経過したときの位置、速度を




 
r t 0  t   r t 0   v0  2v1  2v 2  v3  t 6
(6-9)






v t 0  t   v t 0   a 0  2a1  2a 2  a3  t 6
とする。この方法を使うと誤差は t  のオーダーとなるので、1 ステップ分の計算量は Euler 法より増
4
えるが、 t をあまり小さくしなくてもよいという利点がある。しかし、衛星の中には 8 時間程度の短い
周期を持つものもあるため、ステップをこれ以上長くすることはできない。
第3節 Newton-Raphson 法
初期状態から逐次的に位置、速度を計算する。これまでの方法は、長いタイムスケールでの位置の計
算に適さないことがわかったので平均近点角 M から離心近点角 E を求めることにした。平均近点角 M
は、実際の楕円軌道と同じ周期をもち、一定の角速度で公転する円軌道上の仮想的な「天体」の公転の
角度である。すなわち、初期状態での平均近点角を M 0 、公転周期を T とすると、 t だけ経過したときの
平均近点角は
M  M 0  2
t
T
(6-10)
となる。一方、離心近点角 E は、楕円軌道の中心からの天体の公転の角度である。近日点、遠日点でこ
れらが一致するものとすると、
22
y
P'
P
E
a
M

x
ea
図 6-3. 平均近点角と離心近点角
真近点角 と平均近点角 M と離心近点角 E は、近点で同時に 0 になるものとして、それらの間の関係を
求める。まず図 6-3 に示すように、焦点を原点とした座標系では
x  acos E  e 
y  a 1  e 2 sin E
z0
(6-11)
となるので、焦点から天体までの距離は
r  a 1  e cos E 
(6-12)
  
r  3 r  0
r
(6-13)
で表される。運動方程式
(ここで m s  m p とみなし   Gms とした)を動径方向と回転方向の成分に分けると、それぞれの方向
の単位ベクトルは


e r  e


e  er

e
r

er
図 6-4. 動径方向と角度方向の単位ベクトル
23
の様に変化するので、(6-13)式は
r  r e

2
r
1d 2 
 

r  e   2 er
r dt
r
となる。よって

r  r 2  
(6-14)
r2
r 2  h
(6-15)
が成り立つ。定数 h は角運動量である。補助的な変数として u  1 r を定義すると
1
1
d 2u
d du
d  d   du   d  d  u 



   

 

d 2 d d d  dt   dt   dt  dt   

1 d  u 
1
 2 2 2
 dt  hu  h u
 u
u2 
 2  2 3 
u 
u
が成り立つので(6-13)式は
du 2

u  2
2
d
h
となる。この形から明らかなように、 u 

は の三角関数になるので
h2
u

 A cos  B 
h2
と書くことができる。  0 が近点に対応するという初期条件から B  0 , 近点、遠点での距離の比が
1  e  1  e  になることから A  2 e となり
h
u

h
2


h2
e cos
となる。もとの変数 r で表すと
r
となるが、平均距離 a 
h2
1
 1  e cos
h2
1
を使うと
 1  e2
ra
1  e2
1  e cos
(6-16)
と書ける。一方、(6-11)より
r  a 1  e cos E 
が成り立つので、(6-16), (6-17)より、 と E の間には
24
(6-17)
1  e2
 1  e cos E
1  e cos
cos 
tan

1 e
E
tan
1 e
2

2
cos E  E
1  e cos E
の関係が成立する。エネルギー保存則から

1 2 
V  
r
2
2a
(6-18)
角運動量 h は、近点では r が a 1  e  であること、速度の動径成分が 0 になることから
1
r 2     
r
2
2a
r 2    2  1 
r
2
a 2 1  e   2 
a
 2
  1 e
 1 

a 1  e  a 1  e
ar 1  e  
 1 e
a 1 e

2
h  a 2 1  e    a 1  e 2
と書ける。すなわち、一般の に対して
r 
h

r
a 1  e 2 
r
が成り立つので(6-18)式は


1 2 1
2
r  r    
r
2
2
2a
r 

r
a 2 e 2  r  a 
a
のように変形できる。これと(6-17)式より
E 

1
u 1  e cos E
3
がいえる。
dE
1  e cos E   3
dt
u
を積分すると
E  e sin E 
25

u3
t C
2

となるが、 t  0 で E  0 となるようにとると C  0 となる。周期 T は円軌道と同じなので、面積速度が
h 2 であることから
h
T  a 2 1  e 2
2
1
a1  e 2 T  a 2 1  e 2
2
T  2
a3

である。つまり、
E  e sin E  2
t
T
であり、右辺は平均近点角 M そのものである。よって
M  E  e sin E
(6-19)
の関係が成り立つ。
与えられた時刻の離心近点角 E がわかれば、軌道要素から天体の位置を求めることができる。軌道要
素  , i ,  が 0 である場合、すなわち軌道が黄道面上にあり、近日点が x 軸上の正の側にある場合は、図
6-3 の点 P の座標(6-11)が天体の位置となる。一般の  , i ,  についてはこれを z 軸の周りに  、 x 軸の
周りに i 、もとの z 軸の周りに  回転させれば天体の位置が得られる。
しかし、E は M で解析的に表すことができないので、Newton-Raphson 法で逐次的に近似値を求める
ことにする。
初めに E の初期値として M を用いる。
E0  M
E の関数
f E   M  E  e sin E
を考えると、 f E   0 の解が、求める離心近点角である。
26
0.30
0.20
0.10
E1
E2
0.00
0.00
-0.10
0.20
0.40
0.60
0.80
1.00
1.20
1.40
E0
-0.20
-0.30
図 6-5. Newton-Raphson 法による数値解の算出
点 E 0 , f E 0  での f E  との接線の式は
y  f ' E 0  x  E 0   f E 0 
となるので、 x 軸との交点での E の値 E1 は
E1  E0 
f E 0 
f ' E 0 
となる。さらに E1 , f E1  での接線と x 軸との交点を求めると
E 2  E1 
となり、次第に真の解に近づく。
f E1 
f ' E1 
f E i 
が十分に小さくなった時点で計算を終了し、その E から天体の
f '  Ei 
座標を求める。
図 6-6 は M  0.2 , e  0.2 の場合、図 6-7 は M  0.2 , e  0.8 の場合の f E  である。直感的にわかる
ように、 e が大きくなるほど解は M の値から離れる。
27
4.00
4.00
3.00
3.00
2.00
2.00
1.00
1.00
0.00
-4.00
図 6-6.
-2.00
-1.00
0.00
2.00
4.00
0.00
-4.00
-2.00
-1.00
-2.00
-2.00
-3.00
-3.00
-4.00
-4.00
M  0.2 , e  0.2 の場合の f E 
図 6-7.
0.00
2.00
4.00
M  0.2 , e  0.8 の場合の f E 
f E  は変曲点を持つので、 Ei と解の間に変曲点が入る場合は発散する現象が起こった。すると
f Ei  f ' Ei  はいつまでも小さな値にならないので、プログラムがそこで停止してしまう。
そこで、 e が 0.5 より大きい場合には
Ei 1  Ei 
f Ei 
2 f ' Ei 
のように数式をとして、計算ごとの変化の値を減らした。これにより収束のための計算の回数は増える
が、発散するケースを減らすことができた。
もっとも、e が極端に大きい場合はこれでも発散が起こったので、計算の回数に上限を設けその回数だ
け計算を繰り返しても収束しない場合は、天体の位置として 1 ステップ前のものを使ってフリーズを防
いだ。
第7章 補助効果
天体を見やすくする、軌道の傾きをわかりやすくするなどのために以下の補助効果を入れた。
第1節 時間経過
天体の運動のタイムスケールはさまざまであり、海王星に至っては 165 年もの長い周期を持つ。シミ
ュレータ上の時間経過を実時間と同じにしていてはこれを確認することができないし、手入力で日時を
指定するのも煩雑である。そこでシミュレータ上で自動的に時間が流れ続けるようにしておいて、
「タイ
ムスケール」をキーボードまたはマウス操作で変えられるようにした。
第2節 日時の表示
天体が正しく運動しているかどうかを検証するには、日食などの天体イベントがしかるべき日時に起
28
こるかどうかで確認するのがひとつの方法であるが、
「開始時から何秒経過した」という時刻の表示をし
ていたのでは非常にわかりづらい。そこで、天体の位置計算では秒単位で時間を進めつつ、日時を同時
進行で計算した。
年、月、日の計算ではグレゴリオ暦の閏年を考慮に入れ、年の値が 0 以下になった場合は紀元 0 年が
存在しないことによるずれを修正した上で BC という前置きをつけて表示した。
図 7-1. 日時表示
図 7-2. 紀元前の日時表示
第3節 ウィンドウ表示と全体表示
シミュレータはデフォルトではウィンドウ表示で起動し、最大化ボタン、ツールバーのダブルクリッ
ク、Alt+Enter キーで全画面表示にすることができるが、ウィンドウ表示の時と解像度を同じにすると
モニタのタイプによってはアスペクト比が狂う問題が生じる。そこで、アプリケーション起動時にモニ
タの解像度設定を取得し、全画面表示時の解像度をそれに合わせる仕様にした。このことにより、歪み
の解決だけでなく解像度の高いモニタを使った際にも鮮明な表示ができるようになった。また、これに
よりウィンドウ表示での解像度を 4:3, 16:9 などの一般的なモニタのアスペクト比に合わせる必要がなく
なったので、XGA のモニタにウィンドウが収まる程度の大きさ 1000×700pixel とした。
図 7-3. ウィンドウ表示
図 7-4. 全画面表示(1024×768)
29
図 7-5. 全画面表示(1920×1200)
第4節 カメラ距離と画角
直径、公転軌道のスケールは天体によって大きく異なる。そこで自由移動モードでは中心天体からの
カメラの距離をキーボードまたはマウス操作で変えられるようにした。このとき中心天体-カメラの距離
を 1 フレームあたり 1.05 倍または 1/1.05 倍にすることで、天体付近で容易に距離を微調整でき、太陽系
全体を表示している際も十分な速さでカメラを移動させられるようになった。また、天体はそれぞれ大
きさが異なるので、中心に表示する天体を切り替えた際にカメラが天体内に入ってしまったり、天体が
見えないほどカメラが遠くなるのを防ぐため、切り替えのタイミングで天体の中心からカメラまでの距
離を天体半径の 3.8 倍になるよう設定した。説明モードではカーソルを当てた天体が画面外に出ていると
都合が悪いので、あえてユーザーによるカメラ距離の変更の機能をなくし、自動的に最適なカメラ距離
になるようにした。その際、いきなりカメラ距離が大きく変化すると混乱を招くので、最終的な距離に
達するまでカメラ距離を 1 フレームごとに 1  0.1 f  800 w  倍または 1 1  0.1 f  800 w  倍(w は表
示領域の横幅)にした。一方、固定モード、追跡モードではカメラから対象までの距離が決められている
ため、画角を変化させることで画面上の表示対象のサイズを変える形にした。
第5節 軌道の表示
天体が公転する様子をよりわかりやすくするため、その軌道を表示する機能を追加した。天体の現在
位置に相当する離心近点角を起点として、1 周を 100 等分した平均近点角にあたる楕円軌道上の座標を
求め、それらを結んだものをポリラインで表示した。ただし、天体の表示の邪魔になることを防ぐため、
天体の両隣のセグメントは表示しないことにした。
惑星、衛星の軌道は白、準惑星の軌道は緑、小惑星の軌道は水色で表示し、多数の天体が表示されて
いる時も見分けがつくようにした。
30
図 7-6. 軌道の表示
図 7-7. 軌道の表示(木星とその衛星)
図 7-8. 軌道の表示(緑は準惑星、水色は小惑星)
第6節 天体の拡大表示
シミュレータで天体を表示するうえで、太陽系の構造全体と、個々の天体のサイズのスケールの違い
が問題となった。すなわち、海王星軌道の長半径が 1012 m 程度であるのに対して、太陽でさえ半径は 10 8
31
m 程度である。そのため、太陽系全体を見渡せる距離までカメラを離すと、どの天体も全く見えなくな
ってしまう。そこで、太陽以外の天体と同じ位置に半透明な「天体のコピー」を表示し、キー操作でそ
の倍率の変更と表示の ON、OFF が出来るようにした。ただし、惑星、衛星、準惑星、小惑星はそれぞ
れ大きさのオーダーが異なり、全ての拡大物が同時に表示されると見づらくなるケースもあるので、表
示の ON、OFF はこれらのグループ単位で個別に行えるようにした。
図 7-10. 天体の拡大表示
図 7-9. 本来のサイズの表示
第7節 ライト
太陽以外の天体は太陽から光を受けてそれを反射するため、昼側だけが明るく見える。表示する際に
太陽の位置に点光源を置くことでこれは容易に実現できたが、天体の表面をじっくり観察したい場合に
は全体を均一に明るくした方が見やすいので、キー操作で点光源と環境光のいずれかに切り替えられる
ようにした。なお、太陽光は距離の 2 乗に反比例して減衰するが、シミュレータ上でこれをそのまま適
用すると外惑星は昼夜の区別がつかないほど暗くなってしまうため、点光源のライトの場合も明度を距
離によらず一定になるよう設定した。
図 7-11. 点光源
図 7-12. 環境光
第8節 経線と緯線(黄径、黄緯)
地球以外の惑星は黄道面に近い軌道に沿って公転しているが、いずれもある程度の傾き i (軌道傾斜角)
を持っている。黄色のポリラインを用いて天球に黄径、黄緯の線を 15 度区切りで表示させることで、惑
星の軌道の傾きを視覚的にわかりやすくした。なお、経線はどの位置でも曲率が低いため緯線との交点
を線分で結んだだけであるが、緯線は高緯度では曲率が高くなるので、5 度区切りで表示した。
32
図 7-13. 経線と緯線(黄径、黄緯)
第9節 経線と緯線(赤径、赤緯)
前述のように衛星の軌道面は惑星の赤道面に近いので、赤径、赤緯(赤の線)を表示させることで衛星の
軌道がどれだけ傾いているかを理解しやすくなる。また、これと黄径、黄緯の経線、緯線を同時に表示
させることで、天体の地軸の傾きが一目でわかる。天の北極、南極は地軸の延長線上にあるので図 7-14
のように赤径、赤緯の線は傾いた状態になる。図 7-14 の天の赤道に沿って回転している天体は静止衛星
「きずな」である。
図 7-14. 赤径、赤緯(地球)
33
図 7-15. 黄径、黄緯と赤径、赤緯(地球)
天王星は地軸が黄道面に対して 97.86°傾いているため天の北極がほぼ黄道面上に来る。
図 7-16. 黄径、黄緯と赤径、赤緯(天王星,極側から)
34
図 7-17. 黄径、黄緯と赤径、赤緯(天王星,赤道側から)
第10節 別バージョンのテクスチャ
水星の地形はマリナー10 号によって接近観測されているが、詳細なデータは通過した側の半球のもの
しか存在しない。テクスチャ用の画像としては半球のみのものと、空白部分をデータのある半球の鏡映
対称で補完したものが入手できる。また、金星は地球からの観測では厚い大気によって表面をみること
ができないが、探査機マゼランによって地形のデータが得られている。このようなケースについては、
キーボードでテクスチャを切り替えられるようにし、切り替え可能な天体を表示している時に画面左上
に操作ガイドを表示した。
図 7-18. 水星(デフォルト)
図 7-19. 水星(マリナー10 号による観測)
35
図 7-20. 金星(デフォルト)
図 7-21. 金星(マゼランによる観測)
図 7-22. 地球(デフォルト)
図 7-23. 地球(夜景)
図 7-24. 地球(造山帯)
図 7-25. 地球(カンブリア紀)
36
図 7-26. 火星(デフォルト)
図 7-27. 火星(海あり)
図 7-28. タイタン(デフォルト)
図 7-29. タイタン(カッシーニによる観測)
第11節 カーソル
説明モードでは天体の説明の画像を表示するが、どの天体の説明を表示しているかをわかりやすくす
るため、天体の上側(中心から半径の 1.2 倍離れた位置)にカーソルを表示した。カーソルの表示には 3D
モデルを使用したが、カメラ距離の変更や回転とともに表示の倍率やオブジェクトの向きを変え、表示
サイズや向きが変わらないようにした。また、天体と見間違えることのないようにタイムスケールによ
らずに一定の速さで回転させた。
37
図 7-30. カーソルと説明の表示
第8章 検証
シミュレータの精度を確かめるため、2009 年~2010 年の天文イベントがどの程度再現されるかにつ
いて検証を行った。
第1節 日食
日食とは太陽、月、地球が一直線に並び、地球の一部が月の影に隠れる現象のことである。地球が楕
円軌道上を公転するためにおこる太陽の視直径の変化、同様の原因による月の視直径の変化のために日
食にはタイミングによって太陽の内側に月が収まる金環食、太陽が完全に覆われる皆既日食がある。天
文年鑑によると 2009 年 1 月 26 日、2010 年 1 月 15 日に金環食、2009 年 7 月 22 日、2010 年 7 月 12 日
に皆既日食が起こる。追跡モードで地球から太陽を見て、この日時の太陽と月の重なりを検証した。た
だし、以下の点を考慮する必要がある。
① シミュレータのスタート時刻である 2009 年 1 月 1 日時点の月の平均近点角のデータが得られな
かったため、その日付近辺の月齢を合わせるように初期値を仮に 60 度としてあるので食の開始、
終了時刻の精度はかなり悪い。
② 追跡モードではカメラが地球の中心にある。地球と月の距離は約 3.8  10 5 km、地球の半径は
6400km であるため、月の視直径は本来より 2%程小さくなる。
③ 地球は地球-月系の重心を中心として回転しており、重心からずれた位置にいるはずであるが、
シミュレータではそれを無視している。
実際の天文現象とのずれは太陽の視直径(31~32 分)を目安に評価する。
2009 年 1 月 26 日(金環食)
太陽に月が重なったのは 18 時 23 分~20 時 00 分の間。図 8-2.から金環食帯はほぼ地球の中心を通っ
ているので、最接近時には太陽と月が重なるべきであり、このときの視差が太陽の視直径の 0.6 倍である
ことから、ずれはほぼ 19 分程度である。表示上の視直径は太陽 201pixel、月 182pixel なので、皆既日
食の条件を満たしている。
38
図 8-2. 1 月 26 日に日食が見られる地域
図 8-1. 2009 年 1 月 26 日
2009 年 7 月 22 日(皆既日食)
太陽が北側にずれ、重ならない。最接近時の中心間の視差が太陽の視直径の 1.9 倍程度なのでずれは
60 分程度である。表示上の視直径は太陽 162 pixel、月 167pixel なので、皆既日食の条件を満たしてい
る。
図 8-4. 7 月 22 日に日食が見られる地域
図 8-3. 2009 年 7 月 22 日
2010 年 1 月 15 日(金環食)
太陽が南側にずれ、重ならない。最接近時の中心間の視差が太陽の視直径の 2.6 倍程度なのでずれは
80 分程度である。表示上の視直径は太陽 137pixel、月 124pixel なので、金環食の条件を満たしている。
39
図 8-5. 2010 年 1 月 15 日
図 8-6. 1 月 15 日に日食が見られる地域
2010 年 7 月 12 日(皆既日食)
太陽が北側にずれ、重ならない。最接近時の中心間の視差が太陽の視直径の 3.6 倍程度なのでずれは
112 分程度である。表示上の視直径は太陽 91pixel、月 95pixel なので皆既日食の条件を満たしている。
図 8-8. 7 月 12 日に日食が見られる地域
図 8-7. 2010 年 7 月 12 日
以上の結果から、元期から時間が経過するにつれて誤差が大きくなっていることが読み取れる。Lunar
Constants and Models Document [7]によると、月の公転面は 18.6 年周期の歳差を持っているので、1 年
で 19°程度昇交点黄径が変化するが、これを考慮に入れていないためだと思われる。
第2節 月食
月食とは太陽、地球、月が一直線に並び、月の一部またはすべてが地球の本影に隠れる現象のことで
ある。このうち、月が完全に本影に入るものを皆既月食、一部が本影に入るものを部分月食という。ま
た、半影だけに入るものを半影月食と呼ぶ(月食には分類されない)。
40
半影
太陽
地球
本影
半影
月
月
半影月食
皆既月食
月
部分月食
図 8-9. 月食と半影月食
天文年鑑によると 2009 年の 2 月 10 日、7 月 7 日に半影月食、2010 年の 1 月 1 日、6 月 26 日、12 月
21 日に月食が起こる。シミュレータでは影を表示していないため、地球の影を見ることはできないが、
追跡モードで月から地球を見て、この日時の太陽と地球の重なりを観測した。この場合も日食の時と同
様の誤差の原因が考えられる。ただし、以下の点を考慮する必要がある。
① 日食同様、平均近点角の初期値は詳細なデータが得られなかったため、開始と終了の時刻はかなり不
正確である。
② カメラを月の中心に置いて観測しているため、シミュレータの表示に比べると、月の北極側では地球
が南側に、南極側では地球が北側にずれて見えるはずである。そのずれは太陽の見かけの半径程度な
はずである。これを考慮して皆既月食、部分月食、半影月食のいずれであるかを判断する。
2009 年 2 月 9 日(半影月食)
太陽に地球が重なったのは 22 時 56 分~1 時 59 分の間。ただし、月の南極側では太陽はぎりぎり地球
の北極から少しだけ見える程度、北極側では太陽が全く重ならない状態になる。すなわち、このケース
は月の北側が地球の半影に入る半影月食であり、実際の天体現象が再現されている。
図 8-10. 第 1 接触(22 時 56 分)
図 8-11. 最接近時(0 時 25 分)
41
図 8-12. 第 4 接触(1 時 59 分)
7 月 7 日(半影月食)
最接近時でも太陽と地球が重ならない。月の北極側から見ると地球は太陽の見かけの半径程度太陽に
近くなるが、それでも全く重ならない。このケースでは月は地球の半影にすら入らない。
図 8-13. 最接近時(16 時 9 分)
2010 年の月食についても調べたがシミュレータ上では月食が起こらなかった。
図 8-14.
1 月 1 日の部分月食
最接近時(1 時 56 分)
図 8-15.
6 月 26~27 日の部分月食
最接近時(5 時 50 分)
図 8-16.
12 月 21 日の部分月食
最接近時(12 時 10 分)
第3節 内惑星の太陽面通過
日食や月食ほど派手ではないが、より稀な天体現象のひとつに内惑星の太陽面通過(日面通過)がある。
水星や金星は地球の内側を公転しているが、軌道の傾きのために一般には内合の際にも太陽と地球の間
に一直線に並ぶことはない。地球が内惑星に追い越されるタイミングでちょうどその惑星が昇交点また
は降交点(黄道面と軌道の交点のこと。前者は南から北へ、後者はその逆に交わる点)に来たときのみ、太
陽の光球上を惑星が通過する現象がみられる。
第1項
水星
水星の太陽面通過は 21 世紀の間に 14 回あるので、それらのシミュレータ上での再現性について検証
42
を行った。後になるほど日時がずれ、太陽面通過が起こらなくなった。原因は地球、水星の公転周期の
データの精度ではないかと思われる。図 8-17 から図 8-28 に直近 3 回の太陽面通過について第 1 接触か
ら第 4 接触までの様子を示す。第 1 接触、第 2 接触とは、太陽面通過の始まりの段階で太陽と水星の輪
郭が外接する状態、内接する状態のこと、第 4 接触、第 3 接触は終わりの段階でのそれのことである。
第 1~第 4 接触のことをそれぞれ「外触の始め」「内触の始め」「内触の終り」「外触の終り」とも呼ぶ。
2016 年 5 月 16 日
01:26 から 09:12 にかけて太陽面通過が起こった。この時の水星は降交点にいるので、シミュレータ
では左上から右下に向かって移動する。
図 8-17. 第 1 接触
図 8-18. 第 2 接触
図 8-19. 第 3 接触
図 8-20. 第 4 接触
2019 年 11 月 11 日
01:26 から 09:12 にかけて太陽面通過が起こった。この時の水星は昇交点にいるので、シミュレータ
では左下から右上に向かって移動する。
図 8-21. 第 1 接触
図 8-22. 第 2 接触
図 8-23. 第 3 接触
43
図 8-24. 第 4 接触
2032 年 11 月 13 日
01:26 から 09:12 にかけて太陽面通過が起こった。この時の水星は昇交点にいるので、シミュレータ
では左下から右上に向かって移動する。
図 8-25. 第 1 接触
図 8-26. 第 2 接触
図 8-27. 第 3 接触
図 8-28. 第 4 接触
表 8-1. 水星の太陽面通過のシミュレータ上での再現
第2項
実際の日付
シミュレータ上の日付
結果
2003 / 5 / 7
2003 / 5 / 7
合致
2006 / 11 / 8
2006 / 11 / 8
合致
2016 / 5 / 9
2016 / 5 / 9
合致
2019 / 11 / 11
2019 / 11 / 11
合致
2032 / 11 / 13
2032 / 11 / 12
1 日早い
2039 / 11 / 7
2039 / 11 / 6
1 日早い、太陽の南側を通過
2049 / 5 / 7
2049 / 5 / 5
2 日早い、太陽の北側を通過
2052 / 11 / 9
2052 / 11 / 8
1 日早い、太陽の南側を通過
2062 / 5 / 10
2062 / 5 / 7
3 日早い、太陽の北側を通過
2065 / 11 / 11
2065 / 11 / 10
1 日早い、太陽の南側を通過
2078 / 11 / 14
2078 / 11 / 13
1 日早い、太陽の南側を通過
2085 / 11 / 7
2085 / 11 / 5
2 日早い、太陽の南側を通過
2095 / 5 / 8
2095 / 5 / 4
4 日早い、太陽の北側を通過
2098 / 11 / 10
2098 / 11 / 8
2 日早い、太陽の南側を通過
金星
金星は水星より道傾斜角は低いが、地球との公転周期の差が小さいので内合の頻度が低いうえに内合
の際に水星よりも地球近くなるので、昇交点、降交点から少しでもずれると太陽に重ならなくなる。そ
のため、太陽面通過も 21 世紀中に 2 回しか起こらない。ここではその 2 回について検証を行ったが、い
ずれも太陽面の通過は起こらなかった。6 月に内合がおきた時の金星の視直径は 30 秒程度なので、最小
でも 2004 年には 4 分、2012 年には 2 分の誤差があるといえる。
44
図 8-29. 最接近時(2004 年 6 月 8 日)
図 8-30. 最接近時(2012 年 6 月 5 日)
第4節 土星の環の消失
土星の環は非常に薄い。そのため、環を真横から見る位置に地球が来た時を中心とした数日間は見え
なくなる。また、この環の消失は土星の公転周期の半分の約 15 年ごとに起きる(最近では 2009 年 9 月 4
日)。これを正しく再現するためには土星の位置だけではなく土星の地軸がどちらを向いているかという
情報が必要になるが、天文年鑑には地軸の傾きだけが与えられており、地軸を黄道面上に射影した直線
が太陽-春分点となす角( 2 )は与えられていない。そこで、しかるべき日に地球から土星の環が見えなく
なるようにこのパラメータを調整してこの現象を再現した。
他の惑星については衛星軌道のおおよその見え方から推定してこのパラメータを設定したので、かな
り不正確なものになっている。
図 8-31. 土星
図 8-32.
2009 年 9 月 4 日
土星の環消失
第9章 問題点
第1節 精度の問題
検証の結果、時間が経つにつれて誤差が大きくなっていることがわかる。原因として以下のことが考
えられる。
45
① データの精度
天体の軌道要素は天文年鑑のデータを元にして設定した。このうち有効桁数の低いものを見ると軌道
長半径(最小 4 桁)、離心率(最小 3 桁)などがある。また、地軸の傾きは与えられているものの、それを黄
道面上に射影したものがどの方向を向いているかを知ることのできるデータは得られなかった。そのた
め、土星のような特殊なイベントのある惑星についてしかこの値を詳細に決めることができなかった。
さらに、衛星の軌道は主星の地軸の向きに依存するため、それに引きずられて精度が落ちる。また、衛
星については地球の月を除いて主星の赤道面に対する地軸の傾き、赤道面に射影した地軸の向き、昇交
点赤径が与えられていないので、衛星の食の日時から大まかな値を設定することしかできなかった。
② 主星以外の天体の重力無視
天体の位置を計算する際に、惑星については太陽からの重力のみ、衛星については主星からの重力の
みを考慮して計算した。実際には他の惑星、特に木星からの重力のため軌道は楕円にならずに歪んでい
るが、その効果を考慮していない。
また、太陽は太陽系の重心に固定して考えたが、実際には木星、土星が同じ側にある際には太陽は太
陽系の重心から太陽半径よりも大きくずれる。
③ パラメータの変化の無視
天体の軌道要素は、長いタイムスケールでは他の天体の重力の影響を受けて変化する。また、地球の
地軸の黄道面上の法線も 18.6 年周期の歳差を持つ。これらの変化を無視していることによる不正確さが
生じている。
第2節 表示領域の問題
シミュレータで扱っている天体のうち最小のものと天体を同時に表示するために、DirectX に表示を行
わせる領域のカメラからの距離の下限と上限(near プレーンと far プレーン)を設定した。この 2 つの距離
の比は 10 8 程度である。この比を変えて試してみたところ、比が大きくなると距離の判定に誤りが出る。
すなわち「本来後ろ側に隠れるべき天体が手前の天体より前に表示されてしまう」という問題が起こっ
た。原因は深度バッファとして DirectX が自動的に割り当てるメモリの不足ではないかと思われる。現
時点での near プレーン、far プレーンの距離は妥協の範囲で設定したものである。
自由移動モードでは天体を切り換えた際に適切な大きさで表示されるようにカメラの距離を調節して
いるが、人工衛星やフォボスなどの小さい天体では、その距離にカメラを置いてしまうと天体が near プ
レーンの内側に入って表示されなくなってしまうので、例外的にカメラ距離を遠くしている。
また、追跡モードで惑星から別の惑星系を見ると、その衛星が惑星の前を通過したり、後ろ側に隠れ
る現象を見ることができるが、2 つのプレーンの距離の比を 10 8 程度にしていても「後ろにいるはずなの
に前に表示される」現象が起こる。これはカメラ-惑星の距離に対して惑星-衛星の距離が小さすぎるため
だと思われる。同様の理由で遠くから見ると土星の環の裏側と手前側の両方が見えてしまう。
46
図 9-1. 深度の誤認識
第3節 明暗境界線
ライトとして太陽からの点光源を使用している場合に、本来であれば天体の昼と夜の境界の部分はき
れいな円になるはずであるが、シミュレータ上ではギザギザの線になってしまう。天体の 3D モデルは
U,V それぞれ 32 分割した平面の集まりで構成されているため、光が当たる状態と当たらない状態との切
り替わりが不連続に起こることが原因ではないかと考え、試しにモデルの分割数を増やしてみたが、こ
の問題は改善されなかった。
第10章 改善案
第1節 精度
前節で指摘したシミュレータの精度の原因のうち、摂動による軌道要素の変化を考慮すると、数十年
の範囲で精度の向上が期待できる。天文年鑑によると、火星の軌道要素は
e  0.093401  0.000090 T
R  1.523679
  286.5021  1.0689T  0.0001T 2
i  1.8497  0.0006 T
  49 .5581  0.7721T
で与えられる( d はユリウス日-2451545, T は d /36525)。他の惑星にも同様に軌道要素の時間変化が与え
られているので、それを適用すれば開始の日時からしばらくの間は精度の向上を期待できる。しかし、
これらは T の 2 次の近似に過ぎないため精度が保障される期間を過ぎると、むしろ非常に大きな変化率
をもたらしてしまうので、長期間のシミュレーションではかえって精度が悪くなる。
第2節 表示
問題点として指摘した表示領域の限界、深度の誤認識は DirectX の仕様によるものなので、自前で表
47
示のためのライブラリを作り、能動的に表示範囲を変化させれば、深度の認識の誤りは解決できると思
われる。
第3節 表示のバリエーション

地上カメラモード
追跡モードではカメラが天体の中心にある状態になっている。特に地球から月のような近い天体を観
測する場合などは地表にカメラがある場合に比べて大きな差が出てしまうので、緯度、経度を指定して
地表にカメラを置いて、上方ベクトルをその地点の天頂にし、注視点を地球の自転とともに移動させれ
ば、(精度を高めることが前提だが)日本や他の国での星空の見え方を再現したり、緯度や季節による太陽
の軌道の違いを見ることができる。地軸の歳差を導入した上でこのモードを使えば、北極星が時代とと
もに変化していく様子も見られる。
天頂
地平線
図 10-1. 地表の特定地点からの星空

見かけの軌道の表示
現状では惑星については静止系に対しての軌道、衛星については惑星系の重心を中心とした軌道を表
示しているが、追跡モードで見た場合もこの軌道が見えている。しかし、たとえば水星や金星を観測す
る場合は、太陽を基準として位置がどのように変化していくかという情報の方が役に立つ。そのため、
追跡モードで地球から太陽を追跡している場合は、現在時刻の前後の一定期間にわたって内惑星と太陽
の視差を計算し、それらを結んだ軌道を表示させれば、それらの惑星がこの複雑な曲線に沿って動いて
いく様子が見られるはずである。
また、外惑星は天球上を順行したり逆行したりしているが、これも固定モードで特定の期間の地球と
その惑星を結んだ直線の先をつなげばその軌跡を表示できる。
48
図 10-2. 太陽を中心とした水星のみかけの軌道
図 10-3. 太陽を中心とした金星のみかけの軌道
図 10-4. 天球上の火星の軌道(2010)
第11章 引用・参考文献
1. 天文年鑑 2009, 天文年鑑編集委員会, 誠文堂新光社.
2. 天文年鑑 2010, 天文年鑑編集委員会, 誠文堂新光社.
3. 平成 21 年 理科年表, 国立天文台. : 丸善株式会社.
4. Views of the Solar System, Hamilton, Calvin J.,
http://www.solarviews.com/eng/index.htm.
5. JHT's PLANETARY PIXEL EMPORIUM,
http://planetpixelemporium.com/planets.html.
6. NASA-JPL Solar System Simulator,
http://maps.jpl.nasa.gov/.
7. Lunar Contants and Models Document,
http://www.scribd.com/doc/18687841/Lunar-Constants-and-Models-Document.
8. EMSolutionTopics, サイエンスソリューションズ株式会社,
http://www.ssil.com/em/EMSolution/ja/News/topics/topics_9.PDF.
9. JAXA 宇宙航空研究開発機構 トップページ, JAXA 宇宙航空研究開発機構,
http://www.jaxa.jp/.
10. Masataka takagi, 高知工科大学, 高木方隆,
http://www.infra.kochi-tech.ac.jp/takagi/RSGIS/4Estimation.pdf.
11. Solar System Dynamics v2.0, Fujii, Akihiro. .
12. 国立天文台:トップページ, 大学共同利用機関法人自然科学研究機構,
49
http://www.nao.ac.jp/.
13. 地球惑星物理学演習 2009, 櫻庭中,
http://www-solid.eps.s.u-tokyo.ac.jp/~ataru/edu/ensyu090617-18.pdf.
14. 天体と軌道の力学, 木下宙. : 東京大学出版会.
15. 惑星地質学, 宮本英昭・橘省吾・平田成・杉田精司. : 東京大学出版会.
16. シューティングゲームプログラミング, 司ゆき
松浦健一郎.
50
Fly UP