java で描く太陽系天体の運動kato/f5_file/2012_inoue.pdf2 要約 java は1995...

62
2012 年度 卒業論文 Java で描く太陽系天体の運動 岡山理科大学 総合情報学部 生物地球システム学科 加藤研究室 井上 聡

Upload: others

Post on 04-Jun-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

2012年度

卒業論文

Java で描く太陽系天体の運動

岡山理科大学

総合情報学部

生物地球システム学科

加藤研究室

井上 聡

Page 2: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

2

要約

Java は 1995 年に発表された比較的新しい言語である。本研究では Java と球面三角法を用いて、天球上での太陽、

月の位置計算を行うプログラムを作成した。そのプログラムのルーチンを応用することにより日の出、日の入り、月の出、月

の入り、日食、月食の時刻や日付を求めることが出来る。またこれらのプログラムにはユリウス日、もしくはユリウス通日と呼

ばれる暦法が必須である。これらのプログラムを Java で作成することにより、Java への理解を深めること、Java の数値計

算への応用性を探ること、太陽系天体の位置計算への理解を深めること、などを目的とし卒業研究を行った。

Page 3: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

3

目次

1 序章 ............................................................................................................................................................................................ 4

2 球面三角法の基本原理と利用方法.............................................................................................................................. 5

2.1 球面三角形法の基本原理 .................................................................................................................................................................... 5

2.2 球面三角形の利用方法 ......................................................................................................................................................................... 6

3 作成したプログラムの一覧 ................................................................................................................................................... 7

4 基本原理とプログラムの概要 ............................................................................................................................................. 8

4.1 ユリウス日 ......................................................................................................................................................................................................... 8

4.2 日の出、日の入り .......................................................................................................................................................................................10

4.3 月の出、月の入り .......................................................................................................................................................................................13

4.4 日食、月食 ...................................................................................................................................................................................................14

5 プログラムと実行結果 ......................................................................................................................................................... 16

5.1 プログラムの実行方法について ............................................................................................................................................................16

5.2 作成したプログラムファイルについて....................................................................................................................................................17

5.3 実行結果とその考察 ................................................................................................................................................................................18

謝辞 ............................................................................................................................................................................................................................23

参考文献 .................................................................................................................................................................................................................24

付録 ............................................................................................................................................................................................................................25

Page 4: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

4

1 序章

JavaはSunMicroSystems社が 1995年の 5月に発表したプログラミ

ング言語の一つである。

初めて作られたプログラム言語として挙げられるのは機械語である。

機械語はCPUが直接理解し実行出来るプログラミング言語で0と1で

表現される最もレベルの低いプログラミング言語である。その後開発さ

れたのがアセンブリ言語で、この言語は分かりやすい形で機械語を記述

するプログラミング言語となっている。次に開発されたプログラミング言語

は最初の高級言語である Fortran であり、その後に COBOL が開発さ

れた。Fortran は科学技術計算用の言語であるのに対し、COBOL は

大量のデータを処理するための事務処理用及び、管理分野用の言語

である。次に開発されたのはBasicである。BasicはFortranを基にして

作られており、1970 年代以降にはコンピュータで広く使われた言語であ

る。次に開発されたのは C言語である。C言語はソフトウェア分野で数

多く利用されており、他の言語と比べ、非常に自由度が高いことで知ら

れている。

そして、そのC言語とC言語を拡張したC++を基にして作られたのが

Java である。Java は従来の様々な言語の欠点を克服するように作ら

れたプログラミング言語である。Java は他の言語と比べて歴史的には

17 年と短いが、現在では組み込みシステムや携帯機器(携帯電話、

PHS、PDA、スマートフォン等)のシステムやアプリケーション、企業の情

報システムを担う大規模なサーバーやスーパーコンピュータなどで数多く

利用されている。

本研究ではそのJavaでプログラミングを行うことにより、Javaの数値計

算への応用性を探ること、太陽系天体の位置計算を行うことを目的と

し研究を行った。

Page 5: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

5

2 球面三角法の基本原理と利用方法について

2.1 球面三角形法の基本原理 本研究では太陽系天体の運動および位置計算を計算を行うために、

球面三角法を用いている。ここではその球面三角法について、例を交

えながら詳しく説明を行っていく。

球面三角形法とは、球面上の 3 つの点を結ぶ三角形のことを言い、

このとき球面三角形を形成するのが”大円の弧”であることが重要であ

る(図 1)。大円とは球の中心を通るようにして球を切ったときに出来る

円のことである。また球の中心を通らず切った円のことを小円と呼ぶ。こ

の大円は球の直径の両端でない 2点A,Bが存在するときにこの 2点を

結ぶ大円が1つに定められ、2点間を結ぶ大円の弧の短い方が球面上

での 2 点間の最短距離となる。この技法を用いることにより、航空、航

海術などにおいて球面である地球を横断するときに、最短経路で進む

ことが出来る。

球面三角形と平面三角形の最大の違いとして挙げられるのが、辺の

大きさが長さで与えられるのではなく、球の中心角によって与えられるこ

とである。そのために球面三角形の辺の長さの単位は度あるいはラジア

ンとなっている。またこの球面三角形は平面三角形と同様に3つの角度

(A,B,C)と 3つの辺(a,b,c)6つの要素で構成されており、平面三角形で

はこの 6つの内の 3つの値が分かっていれば、残りの 3つの値も求める

ことが出来た。球面三角形も平面三角形と同様6つの内3つの値が分

かっていれば、残りの 3つの値も求めることが出来る。

この技法を天文学に応用することにより、天球上での 2点間の星と星

の角距離を求めることが可能となる。

球面三角形で重要なのは以下の正弦定理と余弦定理の式である。

正弦定理: AbBa sinsinsinsin =

余弦定理: Acbcba cossinsincoscoscos +=

図 1 球面三角形

Page 6: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

6

2.2 球面三角形の利用方法 私たちが天体を見る際には天球という概念を用いる。天球とは惑星

や恒星がその上に張り付き運動すると考えられた地球を中心に取り巻く

球体のことを言う。そのために、天球上の天体の運動を天球の外から見

ることが出来ると仮定することにより、天球上に球面三角形を適用する

ことが出来る。この天球という考え方は、2 世紀のプトレマイオスの著書

アルマゲストにも示されており、歴史的に見てもたいへん古いものである

と言える。

では天球上に球面三角形を適用する例として、北の夜空で目に付く

日本では北斗七星(英:Big Dipper)として知られている、おおぐま座

(Ursa Major)の指極星α星ドゥーベ(α=11h2m δ= ′5361°+ )、

β星メラク(α=11h0m δ= ′3156°+ )の角距離を求める(図2)。

まず考えるのはα星とβ星が天の赤道から何度離れているかである。

天の北極から天の赤道までは 90°なのでα星とβ星の赤経を用い

a: 4833.3329335361-90 °=°=°° ′′

b: 1166.280728536190 °=°=°° ′′

となり、天の北極からα星は 4833.33°

、β星は 1166.28°

とな

る。

続いて求めるのは天の北極からのα星とβ星の赤緯の開きCの角

度だが、これはα星とβ星の赤緯の差を用い 2m となる。この 2mを角

度に変換すると

5.060

2

24

360°==

mC

となり、これらの値を球面三角形の余弦定理に代入すると

5.0cos1166.28sin4833.33sin1166.28cos4833.33coscos +=c

9956.0=

323.5°=c∴

となり、おおぐま座のα星とβ星の角距離は 323.5°

となることがわか

る。

本研究では上記で例として説明した方法に類似した形で球面三角

法を使用しており、日の出、日の入り、月の出、月の入り、日食、月食

の値を求める際に使用している。このため球面三角法は本研究の要と

言っても過言ではない。

図 2 おおぐま座

Page 7: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

7

3 作成したプログラムの一覧

①日付からユリウス日を出力するプログラム

②ユリウス日から日付を出力するプログラム

③日の出、日の入りの時刻を出力するプログラム

④月の出、月の入りの時刻を出力するプログラム

⑤日食、月食の日付と時刻を出力するプログラム

Page 8: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

8

4 基本原理とプログラムの概要

4.1 ユリウス日(Julian Day Number) ①ユリウス日とは

ユリウス日とは紀元前4713年1月1日の正午(世界標準時)からの通

日のことであり、1583年にヨセフ・ユストゥス・スカリゲル(Joseph Justus

Scaliger)(写真3)によって考案された暦法である。スカリゲルは1582年

のグレゴリオ暦改暦によって年代学における日付の計算が煩雑かつ混

乱してしまうことを予想し、ユリウス暦、グレゴリオ暦双方での日付の変

換や日数計算の便のためにユリウス通日を考案した。

また"Julian Day Number"という名前の由来として、スカリゲルの父の

名であるジュリアス・シーザー・スカリゲル(Julius Caesar Scaliger)から

取ったものであると言われている。

このユリウス日は数年から数千年にわたる 2 時刻の間の日数や秒数

を計算するのに非常に便利で、今日における天文学においても数多く

利用されている。

今回作成したプログラムではユリウス通日の暦法で日数計算を行って

おり、ユリウス暦からグレゴリオ暦に切り替わるタイミングで計算方法など

も切り替えている。また本研究で作成した全てのプログラムにおいて、こ

のユリウス日のルーチンを使用している。

②グレゴリオ暦とユリウス暦とは

歴史的に用いられていた、あるいは現在用いられている主要な暦法と

してはユリウス暦とグレゴリオ暦の 2つがある。

ユリウス暦は地球が太陽の周りを回る周期を基にして作られた暦法で、

太陽暦の一種である。1年を原則として 365日とするが 4年に 1度閏

年をおき 366 日としている。そのために平均年は 365.25 日となる。ガイ

ウス・ユリウス・カエサル(Gaius Iulius Caesar)(写真1)によって制

定され、紀元前45年1月1日から施行された。

グレゴリオ暦は1582年にローマ教皇グレゴリウス13世ウーゴ・ブオンコン

パーニ(Ugo Buoncompagni)(写真2)がユリウス暦を改良して制定した

暦法である。400年間に97回の閏年を置き、その年を366日とすることに

より、400年間におおける1年の平均日数を365.2425日としている。これ

がグレゴリオ暦の本質であり、実際の観測で求められる平均太陽年(回

帰年)の365.242 189 572日に比べて26.821秒だけ長い。このグレゴリオ

暦は1600年より現行の太陽暦として世界各国で用いられている。

写真1 Gaius Iulius Caesar 写真 2 Ugo Buoncompagni 写真 3 Joseph Justus Scaliger

Page 9: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

9

③暦日からユリウス日への換算法

ユリウス暦とグレゴリオ暦の大きな違いとして挙げられるのが閏年の回数である。上記のユリウス日の基本原理でも述べたがユリウス暦は4年に1度必

ず閏年がくるのに対し、グレゴリオ暦では100年に1度閏年が来ない年が存在し、また400年に1度その閏年が来ない年に閏年を行う年も存在する。

それらの例外処理を行わなくては、数百年単位で計算を行うユリウス日のプログラムでは数日の誤差が生じてしまいかねない。

④プログラムの概要

まずプログラムを起動するとコンソール入力で知りたい日の日付の年

月日を問う形にしている。そこで年月日を入力するとその日のユリウス日

が出力される。本研究で作成したプログラムには全てこのユリウス日の

ルーチンが組み込まれており、プログラムの例としてその年の何日目なの

かを求める計算は

int[] data = new int[]{0,0,31,59,90,120,151,181,212,243,273,304,334}

と置き、入力された「月」を data型配列に反映させ、その月の 0日まで

の合計値を選択し「日」を加算させる流れとなっている。例えば 12 月 1

日と入力された場合にはdata型配列の12番目の334が選択され、そ

こに「日」の 1を加算し 335日目となる。また同時に閏年の判定を「年」

で行い、閏年であればさらにそこに 1 を加算し、閏年でなければなにも

行わないようにしている。またこの日付からユリウス日を出力するプログラ

ムで気をつけなければいけないこととして例外処理が挙げられる。ユリウ

ス日にはユリウス暦とグレゴリオ暦の2つが存在しているためにユリウス暦

からグレゴリオ暦に切り替わる年に、処理の方法を切り替えなければな

らない。そのために if文を用い、コンソール入力された年の値を判定とし

て紀元前4713年から 1600年までのユリウス暦の判定を

Seireki<1600 && Seireki<-4713

とし 1600年以降のグレゴリオ暦を

Seireki>1600

で判定を行う。

また暦を計算するプログラム全てに通ずることだが、プログラムを操作

した人間が意図して存在しない日、例えば、2013年2月29日と入力

したり、123年456月789日などと入力した場合の例外処理としてエラ

ーを発生させるなども本プログラムでは行っている。

⑤ユリウス日から暦日換算方法とプログラムの概要

先ほど述べた日付からユリウス日を出力させるプログラムの逆のことを行うプログラムとなっている。本プログラムを起動するとまずユリウス日が問われる。

例えば 2456353 と入力すると 2013年3月1日と出力される。このプログラムの仕組みとしてユリウス日から日付を出力し、その日付をまたユリウス日に

戻し、入力されたユリウス日と値の差の比較を行わせ、その差を加算しもう一度日付を再計算させる形となっている。これはプログラムを作成中にどうや

っても 1 度では正確な日付を出力させることができなかったための措置で、この再計算を行わせることにより正確な値を出力させることに成功した。その

ために本プログラムでは前述した日付からユリウス日を計算させる原理がそのまま入っている。

Page 10: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

10

4.2 日の出、日の入り ①原理

日の出入りの定義として、日の出は太陽の一部分が地平線(天頂か

ら90度の場所)から出現した瞬間、また日の入りは太陽全体が地平線

に沈んだ瞬間のことを言い、1日に1回しか起こらない。この時刻を求め

るには、太陽が南中の何時間前後に出没したのかを求めることによって

知ることが出来る。南中とは天体の中心が子午線を通過した瞬間のこ

とであり、日本では明石市の東経 135 度を基準としている。そのときの

天の北極(P)からの離角θが分かれば、南中からの経過時間を求める

ことが出来る。実際にはこれに明石市からの経度補正、太陽運動の非

一様性(均時差)の補正を行わなければならない。

日の出、日の入りの考え方として次の図3,4を参考に掲げる。

図 3 天球

図 4 天球上の球面三角形

図3から

90°-δ=天の北極から太陽までの離角

Z=太陽の天頂からの角度(90°)+太陽の視半径(16′)+大気差

(34′24″)

φ=観測値の緯度

とおくと図4のような関係を導くことが出来る。上でも述べているが、天の

北極(P)からの離角が分かれば時刻を求めることが出来るので、日の

出、日の入りの時刻を求めるのは、この離角θの値を求めていく形とな

っている。

Z,φ,δの値を既知として、球面三角形Z'SPに余弦定理を適用する

と、

δ

δθ

coscos

sinsincoscos

Z=

となり、θの値を求めることが出来る。

続いて日の出入りの時刻を算出する。θ,ΔT,ET を用い次式の T1で

日の出、T2で日の入りの時刻を求める。ΔT と ET については後述して

いる。

ETTT

ETTT

Δθ

Δθ

1512

2

1512

1

+=

=

この数式は太陽が南中した時刻の何時間前、もしくは何時間後に地

平線から出没したかを求めて、その値に経度補正、均時差の補正を行

ったものである。この式により算出された値を時刻換算してやることによ

り、日の出、日の入りの時刻を求めることが出来る。

Page 11: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

11

②太陽位置の計算

上記のとおり、日の出入りの時刻を求めるには太陽の赤緯が必要で

ある。これを求めるために以下の様な手続きを行った。

まず求めるのは太陽の黄経である。日付からユリウス日を求めるプロ

グラムと同様に年月日を問う。これはプログラム内に太陽の略算式を用

いているためである。太陽の略算式は色々な種類の形式の様々な精

度のものが作られている。例えばミューズ、バン・フランダン、モンテンブル

ック、ブレタニョンとシモンなどの各氏が導き出した式が存在し、日本でも

海上保安庁の井上、久保などが開発した略算式が存在する。これら

の多くの略算式は太陽の黄緯をゼロとし、黄経と距離を計算する方式

となっている。本研究では長沢工氏著『日の出、日の入りの計算』より

太陽の略算式を引用し、プログラムに組み込んだ。太陽の略算式は付

録に提示している(P40)。太陽の略算式を見て分かるように、sin 展開

がなされている。太陽の略算式 radというのはラジアンのことでありプログ

ラム内では

rad=180/Math.PI

rad=57.295779513

という式で radの値を求めている。

続いて t だが、これは時刻変数である。この時刻変数とは 2000 年 1

月1日力学時正午からの経過日数を k としたとき

k/365.25t =

という式で与えられる。この k の値は上記で示した日付からユリウス日を

求めるプログラムのルーチンの紀元4713年1月1日を 1日目と定義し

ているものを 2000 年 1月 1 日を 1 日目と定義を変更したものを組み

込むことにより、比較的簡単に求めることが出来る。

次に太陽の略算式内のλs の値を用い、赤経αと赤緯δを求める。

長沢工氏著『日の出、日の入りの計算』より換算式を引用し

ελδ

ελα

sinsinsin

costantan

s

s

=

=

で関係を求めることが出来る。このときのεとは黄道傾角のことである。

太陽は天の赤道に対して 23.4°傾いた黄道上を 1 年かけて移動する。

この黄道上を移動する際に、太陽が天の赤道上を通過する瞬間を春

分点、もしくは秋分点といい、天の赤道に対し、黄道上の太陽が最も

北のときを夏至、最も南のときを冬至と言う。εの値は次式で求めるこ

とが出来る。

t*20.00013004-23.439291=ε

またλs は太陽の黄緯であり、太陽からの天の赤道に線を下ろしたとき

の角度が太陽の赤緯δとなる。下記の図 5には 1年間の太陽の位置

を示している。

図 5 1年間の太陽位置

Page 12: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

12

③経度補正

経度補正とは東経135°の明石市からの東経のずれを補正するものである。次式で求めることが出来る。

°=

15

)0

-( λλΔT

λ:求めたい地点の東経

λ0:明石市の東経135°

④均時差ET とその計算方法

均時差 ET とは、地球が軌道上を一定の速さで動くものと仮定したときと、実際の楕円軌道上を移動するときとの差、および地軸の傾斜によって生じ

る時間差のことを言う。この均時差は地球上のどの場所であっても変化はしない。次式で均時差ETを求めることが出来る。

366

2 Dπω=

1.1571)-* cos(3* 0.0053538-

1.261546) - * cos(2* 0.1654575-

1.498311)+ cos( * 0.1227715+

49 0 -0.0002786=ET

ω

ω

ω

D:元旦からの日数

⑤視直径と大気差

視直径とは天体の見かけの直径を角度で現したもので、太陽は 16′となっている。大気差とは天体からきた光が地球の大気層に入ると屈折し、見

かけの位置が上にずれる現象のことを言う。そのために、星や惑星、太陽などが地平線上に現れていなくても見えることがある。これらの視直径、大気

差を修正することにより、地平線上に太陽が現れた瞬間を正確に求めることが出来る。

⑥計算上の注意

tancos,sin, の計算を行う際にラジアン単位で計算しなければならない。例えば、関数電卓などでは 30sin と打ち込むだけで0.5という値が返

ってくるのに対し、エクセルなどの表計算ソフトや Javaなどで同じことをすると、-0.988031624 という数字が返ってくる。これを回避するためには 30 という

数字を 1ラジアンで割ってやらねばならない。1ラジアンは

57.2957795180

という計算式で求めることができ、この 57.2957795 という数字で 30を割ってやることで 0.5 という数字を返させることが出来る。

⑦プログラムの概要

本プログラムで日の出、日の入りの時刻を求めることが出来るのは日本国内限定である。その日本国内でも札幌と那覇では東経の差が 13.55°存

在する。これは15°で1時間の時差が生まれることを考えると、決して小さな数字ではない。そのために本プログラムではまずエリアの選択を行わせてい

る。エリアは 7か所(1.札幌、2.東京、3.名古屋、4.大阪、5.岡山、6.福岡、7.那覇)である。語頭にある数字を打ち込むことで、その地点を選択

出来る形式にしてある。語頭の数字を打ち込むと、続いて年月日の入力に移る。これは日付からユリウス日を出力するプログラムと同じ原理で年月日

を打ち込むだけでよい。

Page 13: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

4.3 月の出、月の入り ①原理

月の出、月の入りは日の出、日の入りと似た天体現象で基本原理も同じであり、出没するものが太陽から月に変わったものを言い、1 日に 2 回起こ

ることもある。日の出は太陽の一部分が地平線から出現した瞬間を言い、また日の入りは太陽全体が地平線に沈んだ瞬間のことを言った。だが一般

には月の出、月の入りは月の中心が地平線にかかる瞬間と定義されている。本研究で作成したプログラムでは、日の出、日の入りと同じ定義で月が一

部分でも地平線から出た瞬間を月の出、完全に沈んだ瞬間を月の入りと定義している。値の求め方として日の出、日の入りで求めた値を利用し、太

陽と月の離角から日の出、日の入りの時刻を修正し時刻を求めている。

②月の位置の計算法

月の出入りのプログラムは基本的に日の出入りと同じ流れである。太陽の赤経α、赤緯δを求める太陽の略算式があったように、月の略算式も存

在する。付録に、長沢工氏著『日の出、日の入りの計算』より月の略算式を引用し Java に書き換えたものを提示している(P45)。この月の略算式も

太陽の略算式と同様に sin展開がされている。

これらの値を用いる前に注意しなければならないこととして、λmの値が 360°を超えてしまう、もしくは 0よりも小さくなってしまう可能性がある。この場

合の例外処理として

while(λm>361)

λm=λm-360;

while(λm<0)

λm=λm+360;

と処理することにより、λmの値を 360°以内とすることが出来る。またλmは月の黄経で、月の通り道である白道は黄道から 5°傾いたところに位置し

ている。βmは月の黄緯を示している。

続いてこれらの値を用いて δα, の値を求める。ここで長沢工氏著『日の出。日の入りの計算』より換算式を引用し

ελβεβ

ελβεβ

λβ

sinsincoscossin

sinsincossinsin

coscos

mmmW

mmmV

mmU

+=

+=

=

の関係により WVU ,, を計算し、

22tan

tan

VU

W

U

V

+

=

=

δ

α

の関係から δα, の値を求める。

ここで求められたδの値を用い、太陽と月の赤緯δの差を計算する。その値を用い、日の出入りの時刻を求めたルーチンを修正してやることにより、

月の出入りの時刻を求めることが出来る。

③プログラムの概要

本プログラムでは日の出、日の入りの時刻を求めるプログラムと同様に、

月の出、月の入りの時刻を求めることが出来るのは日本国内限定であ

る。選択させるエリアも同様に 7か所(1.札幌、2.東京、3.名古屋、4.

大阪、5.岡山、6.福岡、7.那覇)である。語頭にある数字を打ち込

むことで、その地点を選択出来る形式にしてある。語頭の数字を打ち

込むと、続いて年月日の入力に移る。これは日付からユリウス日を出力

するプログラムと同じ原理で年月日を打ち込むだけでよい

Page 14: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

14

4.4 日食、月食

①計算の原理

日食は地上から見て月が太陽を覆う天体現象である。月の地球周回軌道、また地球の公転軌道は楕円形であるために、地上から見た太陽と月の

視直径は常に変化する。月の視直径が太陽の視直径よりも大きく、太陽の全体が隠される場合には皆既日食と言い、また逆に月の視直径よりも太

陽の視直径の方が大きく、月の外側を太陽がはみ出し細長い光輪状になることを金環日食と言う。日食は朔(新月)の時に起こり、黄道と白道が極め

て近いかもしくは重なる地点で日食となる。2012年5月21日には日本で 129年ぶりとなる金環日食を見ることができた。

本研究によるプログラムでは日食の判定条件として

太陽と月の黄経差│λs-λm│< 0.5 °かつ 本当の離角 S <1°のときに日食とした。また太陽と月の視直径の変化についてはプログラムに組み込

んでいないために、皆既日食なのか金環日食なのかの判別を行うことはできない。

月食は太陽と月の間に地球が入り、地球の影で月が欠けて見える天体現象である。日食と違い、月が見える場所であれば地上のどこからでも同時

に観測することが出来る。月の全ての部分が地球の影によって隠された場合を皆既月食と言い、一部分だけが隠された場合を部分月食と言う。月食

は望(満月)の時に起こりやすく、太陽と月が黄道、白道の交わる点(月の交点)付近にいる時にしか見られない。

本研究によるプログラムでは月食の判定条件として

太陽と月の離角179 °<│λs-λm│<181 °かつ本当の離角S <1°のときに月食と判定した。

日食、月食は日の出入り、月の出入りで求められた値の太陽の黄経λs、月の黄経λm、月の黄緯βmの 3 つを使用し、太陽と月の離角、球面三角

形の余弦定理を用い太陽と月の本当の離角Sを以下の式により求めることが出来る。

太陽と月の離角 ms λλ=

太陽と月の本当の離角S )cos()90sin( msm λλβ=

②プログラムの概要

上記の日食、月食の判別式を Javaに書き換えた。日食、月食と判定された際に出力するプログラムは以下のとおりとなっている。

if(lslm<0.5 && s<1)

System.out.println("日食"+ Seireki+"年"+Month+"月"+Day+"日"+M+"時");

if(lslm>179 && lslm<181 && s<0.95)

System.out.println("月食"+ (Seireki+"年"+Month+"月"+Day+"日"+M+"時");

これにより入力された年月日の日の日食、月食の判定を行うことが出来る。

しかし、現段階では入力された日のグリニッジ標準時の 0時が日月食かどうなのかしか判定を行うことが出来ず、また 100年200年単位で日月食の

予報を確認したいときにいちいち入力するのは非常に面倒である。そのために本プログラムでは、

0.041666724

11 ==

時間

 日時間

とし、while文の終了条件として

while(K<=k)

とし、while文の最後に

K=K+0.041666666667

で終了条件を満たすまでループさせている。言葉で書くと、K がスタート時のユリウス日。k が終了条件のユリウス日となっており、K に、

K+0.041666666667(1時間)させていくことで、終了条件である kになったときに終了させる形になっている。これにより、1時間ごとの判定を行わせること

が出来る。このために本プログラムではコンソール入力で入力された年月日から何日経過させたいかを問う形となっている。そのために、経過日数のとこ

ろに 100 と打ち込んだならばその日から 100日分の 24時間の判定を行い、日月食に判定されると出力される形となっている。

また本プログラムで出力される値は地球上から見た日食、月食ではなく、地球の中心から見た日食、月食となっている。そのために、地球の極付近で

Page 15: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

15

起こる場合には出力されないことがある。

図 6 黄道と白道

Page 16: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

16

5 プログラムと実行結果

5.1 プログラムの実行方法について

本研究で作成したプログラムはパソコンに JDKがインストールされてい

れば誰でも実行することが出来る。

JDKはORACLEのホームページ

( http://www.oracle.com/technetwork/java/javase/downloads/inde

x.html)からダウンロードすることが出来る。ただし、今後バージョンが更

新され新しい URL となる場合があるので必ずしも上記の URL とは限ら

ない。

プログラムを実行させるには、まずコマンドプロンプトでプログラムが入っ

ているフォルダまで飛ぶ必要がある。デスクトップに移動する場合には、

コマンドプロンプトに「cd」と入力しスペースをあけて、パソコンのデスクトッ

プのURL(パソコンによる)である

(C:\Documents and Settings\TOSHIBA\デスクトップ)を貼り付けてエ

ンターキーを押すことで移動することが出来る。そして「dir」と入力しエン

ターキーを押すことで、そのフォルダ内にあるものを確認することが出来

る。

拡張子が Java となっている Java ファイルはテキストエディタで開くこと

ができ、プログラムを書くときもこれらのアプリケーションを使用した。しか

し Javaの実行ファイルは「CLASS」という拡張子のCLASSファイルと呼

ばれるものであり、プログラムを実行する際にはこちらの CLASS ファイル

が実行される。この CLASS ファイルとは Java ファイルを機械語に翻訳

(コンパイル)したものである。そのためにプログラムを実行する際には

Javaファイル自体は必要ではない。

コンパイルは以下の手順でコマンドプロンプトから行うことが出来る。

javac ファイル名.java

このときプログラム内の冒頭にある class の後に続く言葉とファイル名は

同一でなければならない。また、プログラム内にエラーが存在する場合

にはここで警告され、エラーを解除しなければコンパイルをすることができ

ない。コンパイルすることが出来るとプログラムが入っているフォルダ内にフ

ァイル名.classでファイルが作成される。

コンパイルされたファイルを実行するには以下の手順をコマンドプロンプ

トで行う。

java ファイル名

この際に拡張子の「Java」をつける必要はない。これによりプログラムが

実行される。本研究ではコンソール入力により年月日などの値を入力

させる仕組みとしているために、実行した後に値を問われる。例えば、

日付からユリウス日を出力するプログラムであるならば、

年:

月:

日:

と順に問われる。これに対し、値を"数字"で入力することで、入力され

た年月日のユリウス日を出力させることが出来る。

Page 17: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

17

5.2 作成したプログラムファイルについて

以下は作成したプログラムファイルの一覧である。

表 1 作成したプログラム

名称 Java

ファイル 行数 文字数

CLASS

ファイル 入力 出力

日付からユリウス日を

出力するプログラム 4KB 106行 2148字 3KB 年月日 ユリウス日

ユリウス日から日付を

出力するプログラム 9KB 320行 5429字 6KB ユリウス日 年月日

日の出入りの時刻を

出力するプログラム 7KB 192行 4057字 5KB 年月日 日の出入りの時刻

月の出入りの時刻を

出力するプログラム 16KB 417行 10190字 12KB 年月日 月の出入りの時刻

日月食の日付と時刻を

出力するプログラム 14KB 339行 8675字 10KB 年月日 日月食の日付と時刻

Page 18: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

18

5.3 実行結果とその考察

本研究で作成したプログラムの実行結果について以下に記述する。

①日付からユリウス日を出力するプログラム

日付から正しいユリウス日を出力することが出来ている。ユリウス暦、

グレゴリオ暦に切り替わる際のプログラムの切り替えも正しく行われてい

る。ただし、小数点以下が切り捨てられており、時刻の換算を行うことは

出来ていない。

②ユリウス日から日付を出力するプログラム

ユリウス日から正しい日付を出力することが出来ている。ユリウス暦、

グレゴリオ暦に切り替わる際のプログラムの切り替えも正しく行われてい

る。ただし、日付からユリウス日を出力するプログラム同様に、小数点以

下が切り捨てられているために、時刻の換算を行うことは出来ていな

い。

③日の出、日の入りの時刻を出力するプログラム

表 2には 2013年 1月から 12月の各月の末日を、理科年表の値と

日の出入りのプログラムで比較を行っている。この表から理科年表に対

して±1 分以内の時刻を出力させることに成功していることがわかる。。

この±1 分の差というものは、秒の単位が四捨五入されているためでは

ないかと考えられる。例えば理科年表では 31 秒、本プログラムでは 29

秒だとすると、このとき両方共秒単位を四捨五入しているために 1 分の

差が出てしまう。これによりこの差が生まれていると考えられる。

④月の出、月の入りの時刻を出力するプログラム

理科年表に対して、±30分程度の時刻の差が生まれる結果となって

いる。原因は不明であるが、原理自体には問題がないと考えられるの

で、象限判定、または基本的なプログラムミスによりそのような結果を招

いているのではないかと考えられる。

⑤日食、月食の日付と時刻を出力するプログラム

表3、表4には2000年から2100年までの100年間の日食、月食の

日付を文献とプログラムで比較している。黄色に塗りつぶしているところ

は日付がずれていた日。灰色に塗りつぶしているところは文献、または

プログラムのどちらかのみ日食、月食となった日である。

黄色に塗りつぶしているところの最大の差は 1 日であった。文献、プロ

グラムともに時刻の差が 1秒でも違えば 1日ずれてしまう可能性がある

ために、これは大きな差ではないと考えられる。続いて灰色に塗りつぶさ

れている文献、プログラムのどちらかにしか出力されなかった部分である

が、これは本プログラムが地球の中心から見たときの日食、月食となって

いるために、地球の北極、南極付近などで見られる日食、月食を判定

することが出来なかったためでに出来たものであると考えられる。

表 2 日の出入りの比較

理科年表 プログラム 差

岡山 出 入 出 入 出 入

2013年1月31日 7:03 17:32 7:02 17:32 1 0

2013年2月28日 6:35 17:59 6:34 17:59 1 0

2013年3月31日 5:53 18:24 5:52 18:25 1 -1

2013年4月30日 5:15 18:48 5:14 18:48 1 0

2013年5月31日 4:53 19:11 4:52 19:11 1 0

2013年6月30日 4:54 19:21 4:53 19:20 1 1

2013年7月31日 5:13 19:08 5:13 19:07 0 1

2013年8月31日 5:36 18:33 5:37 18:32 -1 1

2013年9月30日 5:58 17:50 5:59 17:50 -1 0

2013年10月31日 6:23 17:12 6:24 17:11 -1 1

Page 19: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

19

2013年11月30日 6:52 16:54 6:52 16:53 0 1

2013年12月31日 7:11 17:03 7:10 17:02 1 1

Page 20: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

20

表 3 日食の比較

Page 21: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

21

Page 22: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

22

表 4 月食の比較

Page 23: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

23

Page 24: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

24

謝辞

この大学4年生の 1年間を通して、ゼミでの天文学、数学や物理学、英語、そして要旨や卒業論文の添削など多岐にわたっ

て熱心なご指導、ご助言をしてくださった指導教授 加藤賢一先生にはたいへんお世話になり、心から感謝するとともに御礼申

し上げます。おかげさまでゼミ生になってからの1年間は、順正保育園や児童会館へのボランティア活動など、今までの自分の人

生で経験したことがない、濃く充実した日々を過ごすことができ、数多くのことを学ぶことができました。本当にありがとうございまし

た。

また、天文学、物理学の講義や中間発表会、ポスター発表会などの際に、貴重なご意見をいただいた田邉健茲先生と福田

尚也先生にもたいへんお世話になりました。先生方のこの貴重なご意見があったからこそ、今のこの卒業論文があります。本当

にありがとうございました。

そして 1年間同じゼミ生として辛いときもお付き合いいただいた村中亮竜さんにも感謝しています。ありがとうございました。

また、田邉研究室の大学院の今村和義さんと高木良輔さんと小木美奈子さん、4年生の西井嵩浩さん、福田研究室の田村

佳那さんにはよく気に掛けていただき、その暖かい心遣いにはたいへん感謝しております。ありがとうございました。

最後に、加藤賢一先生をはじめとした皆様のご指導やお力添えがあったからこそ、この卒業論文を完成させることができました。

心より感謝申し上げます。

Page 25: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

25

参考文献

磯部琇三 佐藤勝彦 岡村定矩 辻陸 吉澤正則 渡邊鉄哉 天文の辞書 (朝倉書店 2003)

神吉達郎 javaプログラミング入門 (オーム社 1996)

木下宙 天体の軌道の力学 (東京大学出版 1998)

斎田博 天文の計算教室(新装版) (地人書館 1998)

坂下夕里 これならわかる Java入門の入門第2版 (翔泳社 2005)

中野主一 パソコン天文講座 天体の軌道計算 (誠文堂神光社 1992)

長沢工 日の出・日の入りの計算 (地人書館 1999)

三浦憲二郎 はじめのて javaプログラミング (朝倉書店 1998)

国立天文台 理科年表平成24年度(丸善出版 2011)

SeaGate HomePage http://www11.plala.or.jp/seagate/

高精度計算サイト http://keisan.casio.jp/

東京電機大学 情報メディア学科 Javaプログラミング

http://www.mlab.im.dendai.ac.jp/computer2/

とほほの Java入門 http://www.tohoho-web.com/java/

国立天文台 http://www.nao.ac.jp/

日食・月食・星食情報データベース http://www.hucc.hokudai.ac.jp/~x10553/

Page 26: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

26

付録

//日付からユリウス日を出力するプログラム

import java.io.*;

class H {

public static void main(String[] args) {

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

String str;

String j="ユリウス暦";

String g="グレゴリオ暦";

String x="日目";

String y="無効";

int Seireki=0;

int Month=0;

int Day=0;

int UruNissuu=0;

int Nissuu=0;

int Uruu,Reigai,Reigai1;

double YUruuDay,YUruu,Yuriusu,Julian,GYear,GDay,GUruu,HSkip,

HNoSkip,GUD,YKikan,YNoUKikan,YUKikan,YUK,Gregori;

int[] data = new int[]{0,0,31,59,90,120,151,181,212,243,273,304,334};

try {

System.out.print("年:");

str = input.readLine();

Seireki= Integer.parseInt(str);

System.out.print("月:");

str = input.readLine();

Month= Integer.parseInt(str);

System.out.print("日:");

str = input.readLine();

Day= Integer.parseInt(str);

}

catch(IOException e) {

System.out.println("Exception : " + e);

}

Uruu= Seireki%4;

Page 27: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

27

UruNissuu= data[Month] + Day + 1;

Nissuu= data[Month] + Day;

YUruu=(Seireki+4712)/4;

Yuriusu=(4712+Seireki)*365;

YUruuDay=YUruu + Yuriusu;

Julian=YUruuDay + Nissuu;

GYear=Seireki-1599;

GDay=GYear*365;

GUruu=GYear/4;

HSkip=GYear/100;

HNoSkip=GYear/400;

GUD=GDay+GUruu-(HSkip-HNoSkip);

YKikan=Seireki+4712-GYear;

YNoUKikan=YKikan*365;

YUKikan=YKikan/4;

YUK=YNoUKikan+YUKikan;

Gregori=Math.rint(GUD+YUK-0.5);

Reigai=Seireki%100;

Reigai1=Seireki%400;

if(Month>12 || Day>31 || Month==0 || Day==0)

x=y;

else

if(Month==2 && Day==30)

x=y;

else

if(Day==31 && Month==2 || Day==31 && Month==4 || Day==31 && Month==6

|| Day==31 && Month==9 || Day==31 && Month==11)

x=y;

else

if(Seireki>1599 && Month==2 && Day==29 && Reigai==0 && !(Reigai1==0))

x=y;

else

if(Seireki==1599 && Month==12 && Day>20)

x=y;

else

if(Uruu!=0 && Month==2 && Day==29)

x=y;

else

Page 28: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

28

if(Seireki<-4713)

x=y;

else {

if(1600>Seireki && -4713<Seireki && Month>2 && Uruu==0)

x=j+Julian+x;

else

if(1600>Seireki && -4713<Seireki && Month>2 && !(Uruu==0))

x=j+Julian+x;

else

if(1600>Seireki && -4713<Seireki)

x=j+Julian+x;

else

if(Seireki>=1600 && Reigai1==0 && Reigai==0 && Month>2)

x=g+(Gregori+Nissuu-10+1)+x;

else

if(Seireki>=1600 && !(Reigai1==0) && Reigai==0 && Month>2)

x=g+(Gregori+Nissuu-10)+x;

else

if(Seireki>=1600 && !(Reigai1==0) && !(Reigai==0) && Month>2 && Uruu==0)

x=g+(Gregori+Nissuu-10+1)+x;

else

if(Seireki>=1600 && !(Reigai1==0) && !(Reigai==0) && Month>2 && !(Uruu==0))

x=g+(Gregori+Nissuu-10)+x;

else

if(Seireki>=1600)

x=g+(Gregori+Nissuu-10)+x;

}

System.out.println(x);

}

}

Page 29: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

29

//ユリウス日から日付を出力するプログラム

import java.io.*;

import java.math.BigDecimal;

import java.text.*;

class Y {

public static void main(String[] args) {

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

String str;

String x="無効";

NumberFormat format = NumberFormat.getInstance();

format.setMaximumFractionDigits(0);

int Month, M;

double Day;

double Seireki, Uruu, Nissuu;

double YUruuDay, YUruu, Yuriusu, Julian;

double GYear, GDay, GUruu, HSkip, HNoSkip, GUD;

double YKikan, YNoUKikan, YUKikan, YUK;

double Gregori;

int[] data = new int[]{0,0,31,59,90,120,151,181,212,243,273,304,334,366};

double Reigai, Reigai1;

double JulianDay, JD, SinJD, OneDay, SinOneDay, D, JG, SaJG, SinJG;

JulianDay=0;

try {

System.out.print("日数の入力:");

str = input.readLine();

JulianDay= Integer.parseInt(str);

}

catch(IOException e) {

System.out.println("Exception : " + e);

}

JD=(JulianDay/365.25)-4712;

SinJD=JD;

BigDecimal bi = new BigDecimal(String.valueOf(JD));

double Seireki1 = bi.setScale(0,BigDecimal.ROUND_DOWN).doubleValue();

Seireki=Seireki1;

OneDay=0.0027378507871321;

SinOneDay=(((SinJD-Seireki)/OneDay) + 0.5);

if(SinOneDay<0)

Page 30: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

30

SinOneDay=SinOneDay*-1;

D=0;

M=0;

if(SinOneDay<data[2]) {

M=1;

D=Math.abs(SinOneDay);

} else

if(SinOneDay<data[3]) {

M=2;

D=SinOneDay - data[2];

} else

if(SinOneDay<data[4]) {

M=3;

D=SinOneDay - data[3];

} else

if(SinOneDay<data[5]) {

M=4;

D=SinOneDay - data[4];

} else

if(SinOneDay<data[6]) {

M=5;

D=SinOneDay - data[5];

} else

if(SinOneDay<data[7]) {

M=6;

D=SinOneDay - data[6];

} else

if(SinOneDay<data[8]) {

M=7;

D=SinOneDay - data[7];

} else

if(SinOneDay<data[9]) {

M=8;

D=SinOneDay - data[8];

} else

if(SinOneDay<data[10]) {

M=9;

D=SinOneDay - data[9];

} else

Page 31: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

31

if(SinOneDay<data[11]) {

M=10;

D=SinOneDay - data[10];

} else

if(SinOneDay<data[12]) {

M=11;

D=SinOneDay - data[11];

} else

if(SinOneDay<data[13]) {

M=12;

D=SinOneDay - data[12];

}

Month=M;

Day=D;

Uruu= Seireki%4;

Nissuu=0;

Nissuu= data[Month] + Day;

YUruu=(Seireki+4712)/4;

Yuriusu=(4712+Seireki)*365;

YUruuDay=YUruu + Yuriusu;

Julian=YUruuDay + Nissuu;

GYear=Seireki-1599;

GDay=GYear*365;

GUruu=GYear/4;

HSkip=GYear/100;

HNoSkip=GYear/400;

GUD=GDay+GUruu-(HSkip-HNoSkip);

YKikan=Seireki+4712-GYear;

YNoUKikan=YKikan*365;

YUKikan=YKikan/4;

YUK=YNoUKikan+YUKikan;

Gregori=Math.rint(GUD+YUK-0.5);

Reigai=Seireki%100;

Reigai1=Seireki%400;

Page 32: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

32

JG=0;

if(1600>Seireki && -4713<Seireki && Month>2 && Uruu==0) {

JG=Julian;

} else

if(Seireki>=1600 && Reigai1==0 && Reigai==0 && Month>2) {

JG=(Gregori + Nissuu - 10 + 1);

} else

if(Seireki>=1600 && !(Reigai1==0) && Reigai==0 && Month>2) {

JG=(Gregori + Nissuu - 10);

} else

if(Seireki>=1600 && !(Reigai1==0) && !(Reigai==0) && Month>2 && Uruu==0) {

JG=(Gregori + Nissuu - 10 +1);

} else

if(Seireki>=1600 && !(Reigai1==0) && !(Reigai==0) && Month>2 && !(Uruu==0)) {

JG=(Gregori + Nissuu - 10);

} else

if(Seireki>=1600) {

JG=(Gregori + Nissuu - 10);

}

SaJG=JulianDay-JG;

SinJG=JG + SaJG;

if(Seireki>=1600) {

if(SinOneDay + SaJG<0) {

Seireki=Seireki-1;

M=12;

D=31.5;

} else

if(SinOneDay + SaJG<data[2] && SinOneDay + SaJG<0 ) {

M=1;

D=SinOneDay + SaJG;

} else

if(SinOneDay + SaJG<data[3]) {

M=2;

D=SinOneDay + SaJG - data[2];

} else

if(SinOneDay + SaJG<data[4]) {

M=3;

Page 33: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

33

D=SinOneDay + SaJG - data[3];

} else

if(SinOneDay + SaJG<data[5]) {

M=4;

D=SinOneDay + SaJG - data[4];

} else

if(SinOneDay + SaJG<data[6]) {

M=5;

D=SinOneDay + SaJG - data[5];

} else

if(SinOneDay + SaJG<data[7]) {

M=6;

D=SinOneDay + SaJG - data[6];

} else

if(SinOneDay + SaJG<data[8]) {

M=7;

D=SinOneDay + SaJG - data[7];

} else

if(SinOneDay + SaJG<data[9]) {

M=8;

D=SinOneDay + SaJG - data[8];

} else

if(SinOneDay + SaJG<data[10]) {

M=9;

D=SinOneDay + SaJG - data[9];

} else

if(SinOneDay + SaJG<data[11]) {

M=10;

D=SinOneDay + SaJG - data[10];

} else

if(SinOneDay + SaJG<data[12]) {

M=11;

D=SinOneDay + SaJG - data[11];

} else

if(SinOneDay + SaJG<data[13]) {

M=12;

D=SinOneDay + SaJG - data[12];

}

System.out.println("AD " + format.format(Seireki) + "年" + M + "月" + format.format(Math.rint(D)) + "日");

Page 34: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

34

} else {

if(Seireki>=1 && Seireki<=1599) {

if(SinOneDay<=data[2]) {

M=1;

D=SinOneDay;

} else

if(SinOneDay<=data[3]) {

M=2;

D=SinOneDay - data[2];

} else

if(SinOneDay<=data[4]) {

M=3;

D=SinOneDay - data[3];

} else

if(SinOneDay<=data[5]) {

M=4;

D=SinOneDay - data[4];

} else

if(SinOneDay<=data[6]) {

M=5;

D=SinOneDay - data[5];

} else

if(SinOneDay<=data[7]) {

M=6;

D=SinOneDay - data[6];

} else

if(SinOneDay<=data[8]) {

M=7;

D=SinOneDay - data[7];

} else

if(SinOneDay<=data[9]) {

M=8;

D=SinOneDay - data[8];

} else

if(SinOneDay<=data[10]) {

M=9;

D=SinOneDay - data[9];

} else

Page 35: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

35

if(SinOneDay<=data[11]) {

M=10;

D=SinOneDay - data[10];

} else

if(SinOneDay<=data[12]) {

M=11;

D=SinOneDay - data[11];

} else

if(SinOneDay<=data[13]) {

M=12;

D=SinOneDay - data[12];

} else {

System.out.println(x);

}

if(Seireki==1599&& M==12 && D<=21)

System.out.println(x);

else

System.out.println("AD " + format.format(Seireki) + "年" + M + "月" + format.format(Math.rint(D)) + "日");

}

else

if(JulianDay<1721059) {

JulianDay=JulianDay/365.25;

BigDecimal Ji = new BigDecimal(String.valueOf(JulianDay));

double J = Ji.setScale(0,BigDecimal.ROUND_DOWN).doubleValue();

JulianDay=JulianDay-J;

JulianDay=JulianDay/OneDay;

Seireki=J+1;

SinOneDay=JulianDay;

if(SinOneDay<=data[2]) {

M=1;

D=SinOneDay;

} else

if(SinOneDay<=data[3]) {

M=2;

D=SinOneDay - data[2];

} else

if(SinOneDay<=data[4]) {

M=3;

Page 36: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

36

D=SinOneDay - data[3];

} else

if(SinOneDay<=data[5]) {

M=4;

D=SinOneDay - data[4];

} else

if(SinOneDay<=data[6]) {

M=5;

D=SinOneDay - data[5];

} else

if(SinOneDay<=data[7]) {

M=6;

D=SinOneDay - data[6];

} else

if(SinOneDay<=data[8]) {

M=7;

D=SinOneDay - data[7];

} else

if(SinOneDay<=data[9]) {

M=8;

D=SinOneDay - data[8];

} else

if(SinOneDay<=data[10]) {

M=9;

D=SinOneDay - data[9];

} else

if(SinOneDay<=data[11]) {

M=10;

D=SinOneDay - data[10];

} else

if(SinOneDay<=data[12]) {

M=11;

D=SinOneDay - data[11];

} else

if(SinOneDay<=data[13]) {

M=12;

D=SinOneDay - data[12];

} else {

System.out.println(x);

Page 37: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

37

}

System.out.println("BC " + format.format(Seireki) + "年" + M + "月" + format.format(Math.rint(D)) + "日");

System.out.println(Seireki-4713 + "年" + M + "月" + format.format(Math.rint(D)) + "日");

}

}

}

}

Page 38: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

38

//日の出日の入りのプログラム

import java.io.*;

import java.text.*;

class S {

public static void main(String[] args) {

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

String str;

NumberFormat format = NumberFormat.getInstance();

format.setMaximumFractionDigits(0);

int Seireki=0;

int Month=0;

int Day=0;

int[] data = new int[]{0,0,31,59,90,120,151,181,212,243,273,304,334};

double Tokei=0;

double Hokui=0;

double Titen=0;

double Akasi,Sisekii, Hsin,Hcos,Ssin,Scos;

double Z, Cossita;

double DT,T1,T2;

double ACossita, T1H, T2H, T1M, T2M;

System.out.println("エリアを選択してください。");

System.out.println("1札幌");

System.out.println("2東京");

System.out.println("3名古屋");

System.out.println("4大阪");

System.out.println("5岡山");

System.out.println("6福岡");

System.out.println("7那覇");

try {

System.out.print("エリアの選択:");

str = input.readLine();

Titen= Integer.parseInt(str);

System.out.print("年:");

str = input.readLine();

Seireki= Integer.parseInt(str);

Page 39: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

39

System.out.print("月:");

str = input.readLine();

Month= Integer.parseInt(str);

System.out.print("日:");

str = input.readLine();

Day= Integer.parseInt(str);

}

catch(IOException e) {

System.out.println("Exception : " + e);

}

double

SapporoT,SapporoH,TokyoT,TokyoH,NagoyaT,NagoyaH,OsakaT,OsakaH,OkayamaT,OkayamaH,FukuokaT,FukuokaH,NahaT,NahaH;

SapporoT=141.21;

SapporoH=43.03;

TokyoT=139.74;

TokyoH=35.65;

NagoyaT=136.54;

NagoyaH=35.11;

OsakaT=135.29;

OsakaH=34.41;

OkayamaT=133.93;

OkayamaH=34.67;

FukuokaT=130.23;

FukuokaH=33.35;

NahaT=127.66;

NahaH=26.21;

Akasi=135;

if(Titen==1) {

Tokei=SapporoT;

Hokui=SapporoH;

System.out.print("札幌");

} else

if(Titen==2) {

Tokei=TokyoT;

Hokui=TokyoH;

System.out.print("東京");

Page 40: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

40

} else

if(Titen==3) {

Tokei=NagoyaT;

Hokui=NagoyaH;

System.out.print("名古屋");

} else

if(Titen==4) {

Tokei=OsakaT;

Hokui=OsakaH;

System.out.print("大阪");

} else

if(Titen==5) {

Tokei=OkayamaT;

Hokui=OkayamaH;

System.out.print("岡山");

} else

if(Titen==6) {

Tokei=FukuokaT;

Hokui=FukuokaH;

System.out.print("福岡");

} else

if(Titen==7) {

Tokei=NahaT;

Hokui=NahaH;

System.out.print("那覇");

} else {

System.out.println("無効");

}

System.out.println(" 東経"+Tokei+"°"+"北緯"+Hokui+"°");

System.out.print(Seireki+"年");

System.out.print(Month+"月");

System.out.println(Day+"日");

double Uruu, Hundred, FourHundred;

Uruu=Seireki%4;

Hundred=Seireki%100;

FourHundred=Seireki%400;

int nissuu;

nissuu=data[Month]+Day;

Page 41: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

41

double Twokyear, KeikaYear, Keikanissuu, t;

Twokyear=2451545;

KeikaYear=(Seireki-2000);

Keikanissuu=KeikaYear*365.25;

t=(Keikanissuu+nissuu)/365.25;

double LambdaS,rad,q;

rad=180/Math.PI;

//太陽略算式

LambdaS = 280.4603 + 360.00769 * t

+ (1.9146 - 0.00005 * t) * Math.sin((357.538 + 359.991 * t)/rad)

+ 0.0200 * Math.sin((355.05 + 719.981 * t)/rad)

+ 0.0048 * Math.sin((234.95 + 19.341 * t)/rad)

+ 0.0020 * Math.sin((247.1 + 329.640 * t)/rad)

+ 0.0018 * Math.sin((297.8 + 4452.67 * t)/rad)

+ 0.0018 * Math.sin((251.3 + 0.20 * t)/rad)

+ 0.0015 * Math.sin((343.2 + 450.37 * t)/rad)

+ 0.0013 * Math.sin(( 81.4 + 225.18 * t)/rad)

+ 0.0008 * Math.sin((132.5 + 659.29 * t)/rad)

+ 0.0007 * Math.sin((153.3 + 90.38 * t)/rad)

+ 0.0007 * Math.sin((206.8 + 30.35 * t)/rad)

+ 0.0006 * Math.sin(( 29.8 + 337.18 * t)/rad)

+ 0.0005 * Math.sin((207.4 + 1.50 * t)/rad)

+ 0.0005 * Math.sin((291.2 + 22.81 * t)/rad)

+ 0.0004 * Math.sin((234.9 + 315.56 * t)/rad)

+ 0.0004 * Math.sin((157.3 + 299.30 * t)/rad)

+ 0.0004 * Math.sin(( 21.1 + 720.02 * t)/rad)

+ 0.0003 * Math.sin((352.5 + 1079.97 * t)/rad)

+ 0.0003 * Math.sin((329.7 + 44.43 * t)/rad);

double epsilon;

epsilon=23.439291-0.000130042*t;

double tana, sind;

tana=Math.tan(LambdaS/rad)*Math.cos(epsilon/rad);

tana=Math.atan(tana)*rad;

sind=Math.sin(LambdaS/rad)*Math.sin(epsilon/rad);

sind=Math.asin(sind)*rad;

//均時差

Page 42: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

42

double omega,ET;

omega=(2*nissuu*Math.PI)/366;

ET=-0.0002786049+0.1227715*Math.cos(omega+1.498311)

-0.1654575*Math.cos(2*omega-1.261546)-0.0053538*Math.cos(3*omega-1.1571);

Sisekii=sind;

Hokui=Hokui/rad;

Sisekii=Sisekii/rad;

Hsin=Math.sin(Hokui);

Hcos=Math.cos(Hokui);

Ssin=Math.sin(Sisekii);

Scos=Math.cos(Sisekii);

Z=90.84;

Z=Math.cos(Z/rad);

Cossita=(Z-Hsin*Ssin)/(Hcos*Scos);

ACossita=Math.acos(Cossita)*rad;

Cossita=Cossita/15;

DT=(Tokei-Akasi)/15;

T1=12-ACossita/15-DT-ET;

T2=12+ACossita/15-DT-ET;

T1H=T1%1;

T1=T1-T1H;

T1H=T1H*60;

T1M=T1H%1;

T1M=T1H-T1M;

T2H=T2%1;

T2=T2-T2H;

T2H=T2H*60;

T2M=T2H%1;

T2H=T2H-T2M;

System.out.println("日の出:"+format.format(T1)+"時"+format.format(T1M)+"分");

System.out.println("日の入り:" + format.format(T2) + "時"+format.format(T2H)+"分");

}

}

Page 43: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

43

//月の出月の入りのプログラム

import java.text.*;

import java.io.*;

class M {

public static void main(String[] args) {

NumberFormat format = NumberFormat.getInstance();

format.setMaximumFractionDigits(0);

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

String str;

System.out.println("エリアを選択してください。");

System.out.println("1札幌");

System.out.println("2東京");

System.out.println("3名古屋");

System.out.println("4大阪");

System.out.println("5岡山");

System.out.println("6福岡");

System.out.println("7那覇");

double Titen=0;

int Seireki=0;

int Month=0;

int Day=0;

try {

System.out.print("エリアの選択:");

str = input.readLine();

Titen= Integer.parseInt(str);

System.out.print("年:");

str = input.readLine();

Seireki= Integer.parseInt(str);

System.out.print("月:");

str = input.readLine();

Month= Integer.parseInt(str);

System.out.print("日:");

str = input.readLine();

Day= Integer.parseInt(str);

}

Page 44: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

44

catch(IOException e) {

System.out.println("Exception : " + e);

}

double SapporoT,SapporoH,TokyoT,TokyoH,NagoyaT,NagoyaH,OsakaT,OsakaH,OkayamaT,OkayamaH,FukuokaT,FukuokaH,NahaT,NahaH;

SapporoT=141.21;

SapporoH=43.03;

TokyoT=139.74;

TokyoH=35.65;

NagoyaT=136.54;

NagoyaH=35.11;

OsakaT=135.29;

OsakaH=34.41;

OkayamaT=133.93;

OkayamaH=34.67;

FukuokaT=130.23;

FukuokaH=33.35;

NahaT=127.66;

NahaH=26.21;

double Tokei=0;

double Hokui=0;

if(Titen==1) {

Tokei=SapporoT;

Hokui=SapporoH;

System.out.print("札幌");

} else

if(Titen==2) {

Tokei=TokyoT;

Hokui=TokyoH;

System.out.print("東京");

} else

if(Titen==3) {

Tokei=NagoyaT;

Hokui=NagoyaH;

System.out.print("名古屋");

} else

if(Titen==4) {

Tokei=OsakaT;

Page 45: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

45

Hokui=OsakaH;

System.out.print("大阪");

} else

if(Titen==5) {

Tokei=OkayamaT;

Hokui=OkayamaH;

System.out.print("岡山");

} else

if(Titen==6) {

Tokei=FukuokaT;

Hokui=FukuokaH;

System.out.print("福岡");

} else

if(Titen==7) {

Tokei=NahaT;

Hokui=NahaH;

System.out.print("那覇");

} else {

System.out.println("無効");

}

System.out.println(" 東経"+Tokei+"°"+"北緯"+Hokui+"°");

System.out.print(Seireki+"年");

System.out.print(Month+"月");

System.out.println(Day+"日");

Seireki=Seireki-2000;

int[] data = new int[]{0,0,31,59,90,120,151,181,212,243,273,304,334};

int nissuu;

nissuu=data[Month]+Day;

int uruu,hantei,taihinissuu;

taihinissuu=nissuu;

uruu=Seireki/4;

hantei=Seireki%4;

nissuu=nissuu+uruu;

double total=0;

if(hantei!=0)

total=Seireki*365+nissuu;

else

if(hantei==0 && Month<3)

Page 46: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

46

total=Seireki*365+nissuu-1;

else

if(hantei==0 && Month>=3)

total=Seireki*365+nissuu;

if(Seireki<0)

total=total-1;

else

total=total;

if(total>=0)

total=total+0.5-1;

else

if(total<0)

total=total-0.5;

double K,t;

K=total;

t=(K+64/86400)/365.25;

//月略算式

double LambdaM, AM, BetaM, BM, II;

double rad = 180/Math.PI;

AM = 0.0040 * Math.sin((119.5 + 1.33 * t)/rad)

+ 0.0020 * Math.sin(( 55.0 + 19.34 * t)/rad)

+ 0.0006 * Math.sin(( 71 + 0.2 * t)/rad)

+ 0.0006 * Math.sin(( 54 + 19.3 * t)/rad);

LambdaM = 218.3161 + 4812.67881 * t

+ 6.2887 * Math.sin((134.961 + 4771.9886 * t + AM)/rad)

+ 1.2740 * Math.sin((100.738 + 4133.3536 * t)/rad)

+ 0.6583 * Math.sin((235.700 + 8905.3422 * t)/rad)

+ 0.2136 * Math.sin((269.926 + 9543.9773 * t)/rad)

+ 0.1856 * Math.sin((177.525 + 359.9905 * t)/rad)

+ 0.1143 * Math.sin(( 6.546 + 9664.0404 * t)/rad)

+ 0.0588 * Math.sin((214.22 + 638.635 * t)/rad)

+ 0.0572 * Math.sin((103.21 + 3773.363 * t)/rad)

+ 0.0533 * Math.sin(( 10.66 + 13677.331 * t)/rad)

+ 0.0459 * Math.sin((238.18 + 8545.352 * t)/rad)

Page 47: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

47

+ 0.0410 * Math.sin((137.43 + 4411.998 * t)/rad)

+ 0.0348 * Math.sin((117.84 + 4452.671 * t)/rad)

+ 0.0305 * Math.sin((312.49 + 5131.979 * t)/rad)

+ 0.0153 * Math.sin((130.84 + 758.698 * t)/rad)

+ 0.0125 * Math.sin((141.51 + 14436.029 * t)/rad)

+ 0.0110 * Math.sin((231.59 + 4892.052 * t)/rad)

+ 0.0107 * Math.sin((336.44 + 13038.696 * t)/rad)

+ 0.0100 * Math.sin(( 44.89 + 14315.966 * t)/rad)

+ 0.0085 * Math.sin((201.5 + 8266.71 * t)/rad)

+ 0.0079 * Math.sin((278.2 + 4493.34 * t)/rad)

+ 0.0068 * Math.sin(( 53.2 + 9265.33 * t)/rad)

+ 0.0052 * Math.sin((197.2 + 319.32 * t)/rad)

+ 0.0050 * Math.sin((295.4 + 4812.66 * t)/rad)

+ 0.0048 * Math.sin((235.0 + 19.34 * t)/rad)

+ 0.0040 * Math.sin(( 13.2 + 13317.34 * t)/rad)

+ 0.0040 * Math.sin((145.6 + 18449.32 * t)/rad)

+ 0.0040 * Math.sin((119.5 + 1.33 * t)/rad)

+ 0.0039 * Math.sin((111.3 + 17810.68 * t)/rad)

+ 0.0037 * Math.sin((349.1 + 5410.62 * t)/rad)

+ 0.0027 * Math.sin((272.5 + 9183.99 * t)/rad)

+ 0.0026 * Math.sin((107.2 + 13797.39 * t)/rad)

+ 0.0024 * Math.sin((211.9 + 988.63 * t)/rad)

+ 0.0024 * Math.sin((252.8 + 9224.66 * t)/rad)

+ 0.0022 * Math.sin((240.6 + 8185.36 * t)/rad)

+ 0.0021 * Math.sin(( 87.5 + 9903.97 * t)/rad)

+ 0.0021 * Math.sin((175.1 + 719.98 * t)/rad)

+ 0.0021 * Math.sin((105.6 + 3413.37 * t)/rad)

+ 0.0020 * Math.sin(( 55.0 + 19.34 * t)/rad)

+ 0.0018 * Math.sin(( 4.1 + 4013.29 * t)/rad)

+ 0.0016 * Math.sin((242.2 + 18569.38 * t)/rad)

+ 0.0012 * Math.sin((339.0 + 12678.71 * t)/rad)

+ 0.0011 * Math.sin((276.5 + 19208.02 * t)/rad)

+ 0.0009 * Math.sin((218 + 8586.0 * t)/rad)

+ 0.0008 * Math.sin((188 + 14037.3 * t)/rad)

+ 0.0008 * Math.sin((204 + 7906.7 * t)/rad)

+ 0.0007 * Math.sin((140 + 4052.0 * t)/rad)

+ 0.0007 * Math.sin((275 + 4853.3 * t)/rad)

+ 0.0007 * Math.sin((216 + 278.6 * t)/rad)

+ 0.0006 * Math.sin((128 + 1118.7 * t)/rad)

Page 48: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

48

+ 0.0005 * Math.sin((247 + 22582.7 * t)/rad)

+ 0.0005 * Math.sin((181 + 19088.0 * t)/rad)

+ 0.0005 * Math.sin((114 + 17450.7 * t)/rad)

+ 0.0005 * Math.sin((332 + 5091.3 * t)/rad)

+ 0.0004 * Math.sin((313 + 398.7 * t)/rad)

+ 0.0004 * Math.sin((278 + 120.1 * t)/rad)

+ 0.0004 * Math.sin(( 71 + 9584.7 * t)/rad)

+ 0.0004 * Math.sin(( 20 + 720.0 * t)/rad)

+ 0.0003 * Math.sin(( 83 + 3814.0 * t)/rad)

+ 0.0003 * Math.sin(( 66 + 3494.7 * t)/rad)

+ 0.0003 * Math.sin((147 + 18089.3 * t)/rad)

+ 0.0003 * Math.sin((311 + 5492.0 * t)/rad)

+ 0.0003 * Math.sin((161 + 40.7 * t)/rad)

+ 0.0003 * Math.sin((280 + 23221.3 * t)/rad);

while(LambdaM>361) {

LambdaM=LambdaM-360;

}

while(LambdaM<0) {

LambdaM=LambdaM+360;

}

BM = 0.0267 * Math.sin((234.95 + 19.341 * t)/rad)

+ 0.0043 * Math.sin((322.1 + 19.36 * t)/rad)

+ 0.0040 * Math.sin((119.5 + 1.33 * t)/rad)

+ 0.0026 * Math.sin(( 55.0 + 19.34 * t)/rad)

+ 0.0005 * Math.sin((307 + 19.4 * t)/rad);

BetaM = 5.1282 * Math.sin(( 93.273 + 4832.0202 * t + BM)/rad)

+ 0.2806 * Math.sin((228.235 + 9604.0088 * t)/rad)

+ 0.2777 * Math.sin((138.311 + 60.0316 * t)/rad)

+ 0.1732 * Math.sin((142.427 + 4073.3220 * t)/rad)

+ 0.0554 * Math.sin((194.01 + 8965.374 * t)/rad)

+ 0.0463 * Math.sin((172.55 + 698.667 * t)/rad)

+ 0.0326 * Math.sin((328.96 + 13737.362 * t)/rad)

+ 0.0172 * Math.sin(( 3.18 + 14375.997 * t)/rad)

+ 0.0093 * Math.sin((277.4 + 8845.31)/rad)

+ 0.0088 * Math.sin((176.7 + 4711.96 * t)/rad)

+ 0.0082 * Math.sin((144.9 + 3713.33 * t)/rad)

Page 49: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

49

+ 0.0043 * Math.sin((307.6 + 5470.66 * t)/rad)

+ 0.0042 * Math.sin((103.9 + 18509.35 * t)/rad)

+ 0.0034 * Math.sin((319.9 + 4433.31 * t)/rad)

+ 0.0025 * Math.sin((196.5 + 8605.38 * t)/rad)

+ 0.0022 * Math.sin((331.4 + 13377.37 * t)/rad)

+ 0.0021 * Math.sin((170.1 + 1058.66 * t)/rad)

+ 0.0019 * Math.sin((230.7 + 9244.02 * t)/rad)

+ 0.0018 * Math.sin((243.3 + 8206.68 * t)/rad)

+ 0.0018 * Math.sin((270.8 + 5192.01 * t)/rad)

+ 0.0017 * Math.sin(( 99.8 + 14496.06 * t)/rad)

+ 0.0016 * Math.sin((135.7 + 420.02 * t)/rad)

+ 0.0015 * Math.sin((211.1 + 9284.69 * t)/rad)

+ 0.0015 * Math.sin(( 45.8 + 9964.00 * t)/rad)

+ 0.0014 * Math.sin((219.2 + 299.96 * t)/rad)

+ 0.0013 * Math.sin(( 95.8 + 4472.03 * t)/rad)

+ 0.0013 * Math.sin((155.4 + 379.35 * t)/rad)

+ 0.0012 * Math.sin(( 38.4 + 4812.68 * t)/rad)

+ 0.0012 * Math.sin((148.2 + 4851.36 * t)/rad)

+ 0.0011 * Math.sin((138.3 + 19147.99 * t)/rad)

+ 0.0010 * Math.sin(( 18.0 + 12978.66 * t)/rad)

+ 0.0008 * Math.sin(( 70 + 17870.7 * t)/rad)

+ 0.0008 * Math.sin((326 + 9724.1 * t)/rad)

+ 0.0007 * Math.sin((294 + 13098.7 * t)/rad)

+ 0.0006 * Math.sin((224 + 5590.7 * t)/rad)

+ 0.0006 * Math.sin(( 52 + 13617.3 * t)/rad)

+ 0.0005 * Math.sin((280 + 8485.3 * t)/rad)

+ 0.0005 * Math.sin((239 + 4193.4 * t)/rad)

+ 0.0004 * Math.sin((311 + 9483.9 * t)/rad)

+ 0.0004 * Math.sin((238 + 23281.3 * t)/rad)

+ 0.0004 * Math.sin(( 81 + 10242.6 * t)/rad)

+ 0.0004 * Math.sin(( 13 + 9325.4 * t)/rad)

+ 0.0004 * Math.sin((147 + 14097.4 * t)/rad)

+ 0.0003 * Math.sin((205 + 22642.7 * t)/rad)

+ 0.0003 * Math.sin((107 + 18149.4 * t)/rad)

+ 0.0003 * Math.sin((146 + 3353.3 * t)/rad)

+ 0.0003 * Math.sin((234 + 19268.0 * t)/rad);

double epsilon;

epsilon=23.439291-0.000130042*t;

Page 50: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

50

double U, V, W;

U=Math.cos(BetaM/rad)*Math.cos(LambdaM/rad);

V=-Math.sin(BetaM/rad)*Math.sin(epsilon/rad)+Math.cos(BetaM/rad)*Math.sin(LambdaM/rad)*Math.cos(epsilon/rad);

W=Math.sin(BetaM/rad)*Math.cos(epsilon/rad)+Math.cos(BetaM/rad)*Math.sin(LambdaM/rad)*Math.sin(epsilon/rad);

double tana,tand;

tana=V/U;

tand=Math.pow(U,2)+Math.pow(V,2);

tand=Math.sqrt(tand);

tand=W/tand;

double a,d;

a=Math.atan(tana)*rad;

if(U>0 && a>0)

a=a;

else

if(U<0)

a=a+180;

else

if(U>0 && a<0)

a=a+360;

d=Math.atan(tand)*rad;

double Fai;

Fai=Hokui;

Fai=Fai/rad;

d=d/rad;

double sinF,cosF,sinD,cosD;

sinF=Math.sin(Fai);

cosF=Math.cos(Fai);

sinD=Math.sin(d);

cosD=Math.cos(d);

double Z,cosZ,cosSita,AcosSita;

Z=90.5733333;

Z=Z/rad;

cosZ=Math.cos(Z);

cosSita=(cosZ-sinF*sinD)/(cosF*cosD);

AcosSita=Math.acos(cosSita)*rad;

double DT,Akasi;

Akasi=135;

DT=(Tokei-Akasi)/15;

Page 51: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

51

double LambdaS;

//太陽略算式

LambdaS = 280.4603 + 360.00769 * t

+ (1.9146 - 0.00005 * t) * Math.sin((357.538 + 359.991 * t)/rad)

+ 0.0200 * Math.sin((355.05 + 719.981 * t)/rad)

+ 0.0048 * Math.sin((234.95 + 19.341 * t)/rad)

+ 0.0020 * Math.sin((247.1 + 329.640 * t)/rad)

+ 0.0018 * Math.sin((297.8 + 4452.67 * t)/rad)

+ 0.0018 * Math.sin((251.3 + 0.20 * t)/rad)

+ 0.0015 * Math.sin((343.2 + 450.37 * t)/rad)

+ 0.0013 * Math.sin(( 81.4 + 225.18 * t)/rad)

+ 0.0008 * Math.sin((132.5 + 659.29 * t)/rad)

+ 0.0007 * Math.sin((153.3 + 90.38 * t)/rad)

+ 0.0007 * Math.sin((206.8 + 30.35 * t)/rad)

+ 0.0006 * Math.sin(( 29.8 + 337.18 * t)/rad)

+ 0.0005 * Math.sin((207.4 + 1.50 * t)/rad)

+ 0.0005 * Math.sin((291.2 + 22.81 * t)/rad)

+ 0.0004 * Math.sin((234.9 + 315.56 * t)/rad)

+ 0.0004 * Math.sin((157.3 + 299.30 * t)/rad)

+ 0.0004 * Math.sin(( 21.1 + 720.02 * t)/rad)

+ 0.0003 * Math.sin((352.5 + 1079.97 * t)/rad)

+ 0.0003 * Math.sin((329.7 + 44.43 * t)/rad);

while(LambdaS>360) {

LambdaS=LambdaS-360;

}

while(LambdaS<0) {

LambdaS=LambdaS+360;

}

double Ttana, Tsind,Ta,Td;

Ttana=Math.tan(LambdaS/rad)*Math.cos(epsilon/rad);

Ta=Math.toDegrees(Math.atan(Ttana));

Tsind=Math.sin(LambdaS/rad)*Math.sin(epsilon/rad);

Td=Math.toDegrees(Math.asin(Tsind));

double Tar = 0;

double sinTa,cosTa;

sinTa=Math.sin(Tar);

Page 52: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

52

cosTa=Math.cos(Tar);

double sinderuta,deruta,cosa,sina;

sinderuta=Math.sin(LambdaS/rad)*Math.sin(epsilon/rad);

deruta=Math.asin(sinderuta)*rad;

cosa=Math.cos(LambdaS/rad)/Math.cos(deruta/rad);

sina=-(Math.cos(LambdaS/rad)*cosa-Math.cos(deruta/rad))/(Math.sin(LambdaS/rad)*Math.cos(epsilon/rad));

if(sina<0 && cosa>0)

Ta=Ta+180;

else

if(sina<0 && cosa<0)

Ta=Ta+180;

else

if(sina<0 && cosa>0)

Ta=Ta+360;

else

Ta=Ta;

double T1,T2,Tukisa;

Tukisa=(a-Ta)/15;

int uruu1;

uruu1=Seireki%4;

if(uruu1==0 && Month>=3)

taihinissuu=taihinissuu+1;

else

taihinissuu=taihinissuu;

//均時差

double ET, omega;

omega=(2*Math.PI*taihinissuu)/366;

ET=-0.0002786049+0.1227715*Math.cos(omega+1.498311)

-0.1654575*Math.cos(2*omega-1.261546)-0.0053538*Math.cos(3*omega-1.1571);

T1=12-AcosSita/15-DT+Tukisa-ET;

T2=12+AcosSita/15-DT+Tukisa-ET;

if(T1>24)

T1=T1-24;

else

if(T1<0)

Page 53: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

53

T1=T1+24;

else

T1=T1;

if(T2>24)

T2=T2-24;

else

if(T2<0)

T2=T2+24;

else

T2=T2;

double T1H,T1M,T2H,T2M;

T1H=T1%1;

T1=T1-T1H;

T1H=T1H*60;

T1M=T1H%1;

T1M=T1H-T1M;

T2H=T2%1;

T2=T2-T2H;

T2H=T2H*60;

T2M=T2H%1;

T2M=T2H-T2M;

System.out.println("月の出"+format.format(T1)+":"+format.format(T1M));

System.out.println("月の入" + format.format(T2) + ":"+format.format(T2M));

}

}

Page 54: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

54

//日月食のプログラム

import java.text.*;

import java.io.*;

class NG {

public static void main(String[] args) {

NumberFormat format = NumberFormat.getInstance();

format.setMaximumFractionDigits(0);

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

String str;

double Titen=0;

int Seireki=0;

int Month=0;

int Day=0;

int Keikanissuu=0;

try {

System.out.print("年:");

str = input.readLine();

Seireki= Integer.parseInt(str);

System.out.print("月:");

str = input.readLine();

Month= Integer.parseInt(str);

System.out.print("日:");

str = input.readLine();

Day= Integer.parseInt(str);

System.out.print("日数:");

str = input.readLine();

Keikanissuu= Integer.parseInt(str);

}

catch(IOException e) {

System.out.println("Exception : " + e);

}

Seireki=Seireki-2000;

int[] data = new int[]{0,0,31,59,90,120,151,181,212,243,273,304,334};

int nissuu;

Page 55: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

55

nissuu=data[Month]+Day;

int uruu,hantei,taihinissuu;

taihinissuu=nissuu;

uruu=Seireki/4;

hantei=Seireki%4;

nissuu=nissuu+uruu;

double total=0;

if(hantei!=0)

total=Seireki*365+nissuu;

else

if(hantei==0 && Month<3)

total=Seireki*365+nissuu-1;

else

if(hantei==0 && Month>=3)

total=Seireki*365+nissuu;

if(Seireki<0)

total=total-1;

else

total=total;

if(Seireki>=2000 && Month<3)

total=total;

else

if(Seireki>=2000 && Month>2)

total=total+1;

double k=0;

double K=0;

double t;

K=total-0.5;

System.out.println("K="+K);

k=K+Keikanissuu; //経過日数

System.out.println("k="+k);

int M=0;

int[] dataDay = new int[]{29,31,28,31,30,31,30,31,31,30,31,30,31};

double Hantei,one,four,sixteen;

Page 56: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

56

while(K<=k) {

dataDay[2]=28;

dataDay[0]=29;

Hantei=Seireki%4;

one=(Seireki+2000)%100;

four=(Seireki+2000)%400;

sixteen=(Seireki+2000);

if(sixteen<1600 && Hantei==0)

dataDay[2]=dataDay[0];

else

if(sixteen<1600)

dataDay[2]=dataDay[2];

else

if(four==0)

dataDay[2]=dataDay[0];

else

if(one==0)

dataDay[2]=dataDay[2];

else

if(Hantei==0)

dataDay[2]=dataDay[0];

else

dataDay[2]=dataDay[2];

if(M>23)

Day=Day+1;

if(dataDay[Month]<Day) {

Day=Day-Day+1;

Month=Month+1;

}

if(Month>12) {

Month=Month-Month+1;

Seireki=Seireki+1;

}

if(M>23)

Page 57: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

57

M=M-24;

M=M+1;

t=(K+64/86400)/365.25;

//月略算式

double LambdaM, AM, BetaM, BM, II;

double rad = 180/Math.PI;

AM = 0.0040 * Math.sin((119.5 + 1.33 * t)/rad)

+ 0.0020 * Math.sin(( 55.0 + 19.34 * t)/rad)

+ 0.0006 * Math.sin(( 71 + 0.2 * t)/rad)

+ 0.0006 * Math.sin(( 54 + 19.3 * t)/rad);

LambdaM = 218.3161 + 4812.67881 * t

+ 6.2887 * Math.sin((134.961 + 4771.9886 * t + AM)/rad)

+ 1.2740 * Math.sin((100.738 + 4133.3536 * t)/rad)

+ 0.6583 * Math.sin((235.700 + 8905.3422 * t)/rad)

+ 0.2136 * Math.sin((269.926 + 9543.9773 * t)/rad)

+ 0.1856 * Math.sin((177.525 + 359.9905 * t)/rad)

+ 0.1143 * Math.sin(( 6.546 + 9664.0404 * t)/rad)

+ 0.0588 * Math.sin((214.22 + 638.635 * t)/rad)

+ 0.0572 * Math.sin((103.21 + 3773.363 * t)/rad)

+ 0.0533 * Math.sin(( 10.66 + 13677.331 * t)/rad)

+ 0.0459 * Math.sin((238.18 + 8545.352 * t)/rad)

+ 0.0410 * Math.sin((137.43 + 4411.998 * t)/rad)

+ 0.0348 * Math.sin((117.84 + 4452.671 * t)/rad)

+ 0.0305 * Math.sin((312.49 + 5131.979 * t)/rad)

+ 0.0153 * Math.sin((130.84 + 758.698 * t)/rad)

+ 0.0125 * Math.sin((141.51 + 14436.029 * t)/rad)

+ 0.0110 * Math.sin((231.59 + 4892.052 * t)/rad)

+ 0.0107 * Math.sin((336.44 + 13038.696 * t)/rad)

+ 0.0100 * Math.sin(( 44.89 + 14315.966 * t)/rad)

+ 0.0085 * Math.sin((201.5 + 8266.71 * t)/rad)

+ 0.0079 * Math.sin((278.2 + 4493.34 * t)/rad)

+ 0.0068 * Math.sin(( 53.2 + 9265.33 * t)/rad)

+ 0.0052 * Math.sin((197.2 + 319.32 * t)/rad)

+ 0.0050 * Math.sin((295.4 + 4812.66 * t)/rad)

+ 0.0048 * Math.sin((235.0 + 19.34 * t)/rad)

+ 0.0040 * Math.sin(( 13.2 + 13317.34 * t)/rad)

+ 0.0040 * Math.sin((145.6 + 18449.32 * t)/rad)

Page 58: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

58

+ 0.0040 * Math.sin((119.5 + 1.33 * t)/rad)

+ 0.0039 * Math.sin((111.3 + 17810.68 * t)/rad)

+ 0.0037 * Math.sin((349.1 + 5410.62 * t)/rad)

+ 0.0027 * Math.sin((272.5 + 9183.99 * t)/rad)

+ 0.0026 * Math.sin((107.2 + 13797.39 * t)/rad)

+ 0.0024 * Math.sin((211.9 + 988.63 * t)/rad)

+ 0.0024 * Math.sin((252.8 + 9224.66 * t)/rad)

+ 0.0022 * Math.sin((240.6 + 8185.36 * t)/rad)

+ 0.0021 * Math.sin(( 87.5 + 9903.97 * t)/rad)

+ 0.0021 * Math.sin((175.1 + 719.98 * t)/rad)

+ 0.0021 * Math.sin((105.6 + 3413.37 * t)/rad)

+ 0.0020 * Math.sin(( 55.0 + 19.34 * t)/rad)

+ 0.0018 * Math.sin(( 4.1 + 4013.29 * t)/rad)

+ 0.0016 * Math.sin((242.2 + 18569.38 * t)/rad)

+ 0.0012 * Math.sin((339.0 + 12678.71 * t)/rad)

+ 0.0011 * Math.sin((276.5 + 19208.02 * t)/rad)

+ 0.0009 * Math.sin((218 + 8586.0 * t)/rad)

+ 0.0008 * Math.sin((188 + 14037.3 * t)/rad)

+ 0.0008 * Math.sin((204 + 7906.7 * t)/rad)

+ 0.0007 * Math.sin((140 + 4052.0 * t)/rad)

+ 0.0007 * Math.sin((275 + 4853.3 * t)/rad)

+ 0.0007 * Math.sin((216 + 278.6 * t)/rad)

+ 0.0006 * Math.sin((128 + 1118.7 * t)/rad)

+ 0.0005 * Math.sin((247 + 22582.7 * t)/rad)

+ 0.0005 * Math.sin((181 + 19088.0 * t)/rad)

+ 0.0005 * Math.sin((114 + 17450.7 * t)/rad)

+ 0.0005 * Math.sin((332 + 5091.3 * t)/rad)

+ 0.0004 * Math.sin((313 + 398.7 * t)/rad)

+ 0.0004 * Math.sin((278 + 120.1 * t)/rad)

+ 0.0004 * Math.sin(( 71 + 9584.7 * t)/rad)

+ 0.0004 * Math.sin(( 20 + 720.0 * t)/rad)

+ 0.0003 * Math.sin(( 83 + 3814.0 * t)/rad)

+ 0.0003 * Math.sin(( 66 + 3494.7 * t)/rad)

+ 0.0003 * Math.sin((147 + 18089.3 * t)/rad)

+ 0.0003 * Math.sin((311 + 5492.0 * t)/rad)

+ 0.0003 * Math.sin((161 + 40.7 * t)/rad)

+ 0.0003 * Math.sin((280 + 23221.3 * t)/rad);

while(LambdaM>361) {

Page 59: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

59

LambdaM=LambdaM-360;

}

while(LambdaM<0) {

LambdaM=LambdaM+360;

}

BM = 0.0267 * Math.sin((234.95 + 19.341 * t)/rad)

+ 0.0043 * Math.sin((322.1 + 19.36 * t)/rad)

+ 0.0040 * Math.sin((119.5 + 1.33 * t)/rad)

+ 0.0026 * Math.sin(( 55.0 + 19.34 * t)/rad)

+ 0.0005 * Math.sin((307 + 19.4 * t)/rad);

BetaM = 5.1282 * Math.sin(( 93.273 + 4832.0202 * t + BM)/rad)

+ 0.2806 * Math.sin((228.235 + 9604.0088 * t)/rad)

+ 0.2777 * Math.sin((138.311 + 60.0316 * t)/rad)

+ 0.1732 * Math.sin((142.427 + 4073.3220 * t)/rad)

+ 0.0554 * Math.sin((194.01 + 8965.374 * t)/rad)

+ 0.0463 * Math.sin((172.55 + 698.667 * t)/rad)

+ 0.0326 * Math.sin((328.96 + 13737.362 * t)/rad)

+ 0.0172 * Math.sin(( 3.18 + 14375.997 * t)/rad)

+ 0.0093 * Math.sin((277.4 + 8845.31)/rad)

+ 0.0088 * Math.sin((176.7 + 4711.96 * t)/rad)

+ 0.0082 * Math.sin((144.9 + 3713.33 * t)/rad)

+ 0.0043 * Math.sin((307.6 + 5470.66 * t)/rad)

+ 0.0042 * Math.sin((103.9 + 18509.35 * t)/rad)

+ 0.0034 * Math.sin((319.9 + 4433.31 * t)/rad)

+ 0.0025 * Math.sin((196.5 + 8605.38 * t)/rad)

+ 0.0022 * Math.sin((331.4 + 13377.37 * t)/rad)

+ 0.0021 * Math.sin((170.1 + 1058.66 * t)/rad)

+ 0.0019 * Math.sin((230.7 + 9244.02 * t)/rad)

+ 0.0018 * Math.sin((243.3 + 8206.68 * t)/rad)

+ 0.0018 * Math.sin((270.8 + 5192.01 * t)/rad)

+ 0.0017 * Math.sin(( 99.8 + 14496.06 * t)/rad)

+ 0.0016 * Math.sin((135.7 + 420.02 * t)/rad)

+ 0.0015 * Math.sin((211.1 + 9284.69 * t)/rad)

+ 0.0015 * Math.sin(( 45.8 + 9964.00 * t)/rad)

+ 0.0014 * Math.sin((219.2 + 299.96 * t)/rad)

+ 0.0013 * Math.sin(( 95.8 + 4472.03 * t)/rad)

+ 0.0013 * Math.sin((155.4 + 379.35 * t)/rad)

Page 60: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

60

+ 0.0012 * Math.sin(( 38.4 + 4812.68 * t)/rad)

+ 0.0012 * Math.sin((148.2 + 4851.36 * t)/rad)

+ 0.0011 * Math.sin((138.3 + 19147.99 * t)/rad)

+ 0.0010 * Math.sin(( 18.0 + 12978.66 * t)/rad)

+ 0.0008 * Math.sin(( 70 + 17870.7 * t)/rad)

+ 0.0008 * Math.sin((326 + 9724.1 * t)/rad)

+ 0.0007 * Math.sin((294 + 13098.7 * t)/rad)

+ 0.0006 * Math.sin((224 + 5590.7 * t)/rad)

+ 0.0006 * Math.sin(( 52 + 13617.3 * t)/rad)

+ 0.0005 * Math.sin((280 + 8485.3 * t)/rad)

+ 0.0005 * Math.sin((239 + 4193.4 * t)/rad)

+ 0.0004 * Math.sin((311 + 9483.9 * t)/rad)

+ 0.0004 * Math.sin((238 + 23281.3 * t)/rad)

+ 0.0004 * Math.sin(( 81 + 10242.6 * t)/rad)

+ 0.0004 * Math.sin(( 13 + 9325.4 * t)/rad)

+ 0.0004 * Math.sin((147 + 14097.4 * t)/rad)

+ 0.0003 * Math.sin((205 + 22642.7 * t)/rad)

+ 0.0003 * Math.sin((107 + 18149.4 * t)/rad)

+ 0.0003 * Math.sin((146 + 3353.3 * t)/rad)

+ 0.0003 * Math.sin((234 + 19268.0 * t)/rad);

double epsilon;

epsilon=23.439291-0.000130042*t;

double U, V, W;

U=Math.cos(BetaM/rad)*Math.cos(LambdaM/rad);

V=-Math.sin(BetaM/rad)*Math.sin(epsilon/rad)+Math.cos(BetaM/rad)*Math.sin(LambdaM/rad)*Math.cos(epsilon/rad);

W=Math.sin(BetaM/rad)*Math.cos(epsilon/rad)+Math.cos(BetaM/rad)*Math.sin(LambdaM/rad)*Math.sin(epsilon/rad);

double tana,tand;

tana=V/U;

tand=Math.pow(U,2)+Math.pow(V,2);

tand=Math.sqrt(tand);

tand=W/tand;

double a,d;

a=Math.atan(tana)*rad;

if(U>0 && a>0)

a=a;

else

if(U<0)

a=a+180;

Page 61: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

61

else

if(U>0 && a<0)

a=a+360;

d=Math.atan(tand)*rad;

double Fai,sinF,cosF,sinD,cosD;

Fai=35;

sinF=Math.sin(Fai/rad);

cosF=Math.cos(Fai/rad);

sinD=Math.sin(d/rad);

cosD=Math.cos(d/rad);

double Z,cosZ,cosSita,AcosSita;

Z=90.5733333;

cosZ=Math.cos(Z/rad);

cosSita=(cosZ-sinF*sinD)/(cosF*cosD);

AcosSita=Math.acos(cosSita)*rad;

double LambdaS;

//太陽略算式

LambdaS = 280.4603 + 360.00769 * t

+ (1.9146 - 0.00005 * t) * Math.sin((357.538 + 359.991 * t)/rad)

+ 0.0200 * Math.sin((355.05 + 719.981 * t)/rad)

+ 0.0048 * Math.sin((234.95 + 19.341 * t)/rad)

+ 0.0020 * Math.sin((247.1 + 329.640 * t)/rad)

+ 0.0018 * Math.sin((297.8 + 4452.67 * t)/rad)

+ 0.0018 * Math.sin((251.3 + 0.20 * t)/rad)

+ 0.0015 * Math.sin((343.2 + 450.37 * t)/rad)

+ 0.0013 * Math.sin(( 81.4 + 225.18 * t)/rad)

+ 0.0008 * Math.sin((132.5 + 659.29 * t)/rad)

+ 0.0007 * Math.sin((153.3 + 90.38 * t)/rad)

+ 0.0007 * Math.sin((206.8 + 30.35 * t)/rad)

+ 0.0006 * Math.sin(( 29.8 + 337.18 * t)/rad)

+ 0.0005 * Math.sin((207.4 + 1.50 * t)/rad)

+ 0.0005 * Math.sin((291.2 + 22.81 * t)/rad)

+ 0.0004 * Math.sin((234.9 + 315.56 * t)/rad)

+ 0.0004 * Math.sin((157.3 + 299.30 * t)/rad)

+ 0.0004 * Math.sin(( 21.1 + 720.02 * t)/rad)

+ 0.0003 * Math.sin((352.5 + 1079.97 * t)/rad)

+ 0.0003 * Math.sin((329.7 + 44.43 * t)/rad);

Page 62: Java で描く太陽系天体の運動kato/f5_file/2012_Inoue.pdf2 要約 Java は1995 年に発表された比較的新しい言語である。本研究ではJava と球面三角法を用いて、天球上での太陽、

62

while(LambdaS>360) {

LambdaS=LambdaS-360;

}

while(LambdaS<0) {

LambdaS=LambdaS+360;

}

double coss,s;

double lslm=0;

lslm=LambdaS-LambdaM;

lslm=Math.abs(lslm);

double s1;

coss=Math.sin((90-BetaM)/rad)*Math.cos((LambdaS-LambdaM)/rad);

coss=Math.abs(coss);

s=Math.acos(coss)*rad;

if(lslm<0.5 && s<1) { //日食

System.out.println("日食 "+ (Seireki+2000)+"年"+Month+"月"+Day+"日"+M+"時");

}

if(lslm>179 && lslm<181 && s<0.95) { //月食

System.out.println("月食 "+ (Seireki+2000)+"年"+Month+"月"+Day+"日"+M+"時");

}

K=K+0.041666666667;

}

}

}