ちょっと潮の干満に興味を持ってきてアルゴリズムを調べようと思いました. いろいろネットで「潮汐予想」「タイトグラフ」等で検索してみたのですが, 「これは」というアルゴリズムが載っている所がありません.
まぁそれでも
さて, TD2 ファイルの中身は分からないのですが, 具体的な使い方は, ソースを流用すればいいわけです.
ソースですが, こちらの 方に[カツオドリ]/[Stormy Petrel]氏が作られた TIDE21CV (TD21CV.LZH) というのがありました (他にも Java とか Basic も見つけましたが, Java は正直喋れないし Basic は今更という気がしますので C を採用しました).
ただその中身ですが, Basic から移植された形跡がみられますし, 計算と制御, 表示が分離されてないコードで正直そのままでは流用に不向きです. まぁこれが作られた時代は, PC 上の C が出たばかりで, PC の性能も低かった わけですから (コプロが載ってる PC が珍しかった頃ですから) しかたないと 言えばしかた無いでしょう.
っという訳で潮汐情報を得て, 何か面白いプログラムを作る前に 計算部分を C++ でライブラリ化してみました. それが こちら です. 正直中身が分からないため, オリジナルと同じ日付, 同じ TD2 ファイルを食わせて 同じ結果が返るかで動作チェックをしつつ移植してます. っという訳で移植に失敗し特殊な日では結果が異なる可能性もあります.
関数名や変数名は, 出来るだけ体を表す物に変えてしまいましたが, 多分に専門用語が入るであろう世界ですので, 誤訳されている名前が 入っているかもしれません. コメントに【】でオリジナルの関数/変数名を入れていますので 動作チェックを行う方は参照してください.
注意点として TD2 ファイルには幾つかのバージョンがあるようです. はじめ, 同じ港同じ日付の結果が TIDEWIN と比べる計算誤差と考えるには 大きすぎる違いが出て悩んだのですが, その下の TD2 ファイルを見比べると微妙に数値が違っていたということがあります. どれが最新かは分かりませんが, とりあえず上述したリンク先にある奴を ダウンロードして使うのが間違いないでしょう. もう一つ, 私が移植したものは 1996 年に公開されたソースコードです. あれから 10 年経過してますし, 他所でソース (アルゴリズム) 自体も バージョンアップされている可能性があります.
さて肝心の使い方ですが, 簡単に書くと以下のような感じです.
#include <stdio.h> #include "Tide21Lib.h" // 潮汐ライブラリインクルード int main(){ Tide21Lib lib; // 潮汐クラス if (lib.Load("foo.td2")){ // 調和定数ファイル (TD2) 読み込み lib.TideCalcInit(2006, 7, 8); // 日付設定 for (int t=0;t < 24; t++){ double h=lib.CalcTideHight(t*60); // 潮高計算 printf("%d %lf\n", (double)t, h); } } return 0; } |
本来はこのライブラリを使って 面白いアプリケーションを作ることを目的としているのですが, それは何時になるか分かりません.
最後に著作権 (利用条件) ですが, 実はよく分かりません. もちろんオリジナルの作者は上述のカツオドリ氏であるため, 著作権も彼に所属するはずです. しかし「フリーウェア」で「転載可」である程度しか分かりませんでした. 移植や派生バージョンの作成に関しては特に制限してなさそうですし... まぁ「航海に利用しない」「商用ソフトに利用しない」「著作権表示を変えない」 程度で自由に使っても構わないと思います (私の改変部分に関しては特に制限はしません. オリジナルに準じることにします. ).