2006年10月30日

明け六つ 暮れ六つ計算 3

さて、明け六つ暮れ六つ発生装置を求めて
 オープンソースであること
 単機能でシンプルであること
 コマンドラインだけでできること。
 などと改造できそうなプログラムを探してたどり着いたのは、

FreeBSD Astro Ports でした。

なにやら天文関係のプログラムが集まっているようなので、未来の天文学者さんやお好きな方は突入してみましょう。

sscalc-1.0
A sunrise/sunset time calculator

これが良さそうです。

私の手元には、open blocks という小型LINUXマシンしか無かったのでこれでいじってみます。

プログラムソースはここから飛べます。

これを適当にPC-UNIX上で展開して遊ぶのですが、
なにやらBSD環境用のMakefileっぽいのでベタにコンパイルしてみましょう
[user1@LinuxServer sscalc-1.0]$ gcc sscalc.c -lm
[user1@LinuxServer sscalc-1.0]$ ./a.out
23:31:05 09:34:58

怪しい時刻が出てまいりました。
sscalc.c をあれこれ見てみます。

344
345 double lat = 47.66; /* if nothing else given, use the author
s */
346 double lon = 117.43; /* location of Spokane, Washington, USA
*/

なにやらデフォルトはSpokane, Washington, USAになっています。
[user1@LinuxServer sscalc-1.0]$ ./a.out -h
./a.out: invalid option -- h
usage: sscalc [-n reps][-m mon][-d day][-o lon][-a lat][-rs]

ヘルプオプションは無いようですが、
-o 経度 -a 緯度 です。

ソースファイルの中には、cities.txtという、都市名3457個と経度緯度の対応表も入っていました、どこかで使えるかも。
[user1@LinuxServer sscalc-1.0]$ wc cities.txt
3457 10337 112858 cities.txt
[user1@LinuxServer sscalc-1.0]$ grep Tokyo cities.txt
Tokyo, Japan:-139.73:35.68


では東京の緯度経度を入れて見ます。

[user1@LinuxServer sscalc-1.0]$ ./a.out -o -139.73 -a 35.68
06:00:39 16:48:22

今日は6時日の出、16時48分日の入りだそうです。

こよみのぺーじさんを見ると。

日の出 06時00分 : 日の入 16時49分
おお、大体あってる(笑)

さて探している補正項らしきものは。

83 /*
84 ** The hour angle returned below is only for sunrise/sunset, i.e. when
85 ** the solar zenith angle is 90.8 degrees. The reason why it's not 90
86 ** degrees is because we need to account for atmospheric refraction.
87 */
88 static double
89 calcHourAngle(double lat, double solarDec, short calcSunrise)
90 {
91 double latRad = degToRad(lat);
92
93 if (calcSunrise)
94 return (acos(cos(degToRad(90.833)) / (cos(latRad) * cos(solarDec
)) -
95 tan(latRad) * tan(solarDec)));
96 else
97 return -(acos(cos(degToRad(90.833)) /
98 (cos(latRad) * cos(solarDec)) -
99 tan(latRad) * tan(solarDec)));
100 }
101
102

ここですね、大気の屈折もカウントが必要とあります。
こよみのぺーじさんでは補正は0.899度でした。
ここを書き直してコンパイル+実行してみると。

[user1@LinuxServer sscalc-1.0]$ ./a.out -o -139.73 -a 35.68
06:00:18 16:48:42

... まあいいかな。

では作戦通りここを書き換えてみましょう。
 7度21分40秒+太陽の視半径16分=7+(21/60)+(40/3600) + 16/60 = 7.628 でやってみましょう。

上の90.833 を 97.628と書き換えて
デフォルトの緯度経度もとりあえず東京にしておきます。

[user1@LinuxServer sscalc-1.0]$ ./a.out
05:26:09 17:22:50


おお、これで良さそうです。これぞ、ユビキタス江戸クロックの原理!
世界のおおむねどこでも、明け六つ暮れ六つが幕府の定義通りわかるはずですね。

- つづく-
posted by ketaru at 21:05| Comment(2) | TrackBack(0) | ソフトウェア
この記事へのコメント
残念ながら、私にはプログラムのことはさっぱり分からないのだけど、
よくそんな面倒なことをやるねー(笑)。
Posted by 大阪方面担当 at 2006年10月31日 22:47
道楽です!(笑)
Posted by KETARU at 2006年10月31日 23:09
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/1610075

この記事へのトラックバック