Approximate to the Eisenlohr projection, and road to the general solution

地図投影法を開発してみたシリーズ2(近似と応用)

August's Conformal Projection of the Sphere on a Two-Cusped Epicycloidから

文中の複素sin関数によるEisenlohrっぽいやつを仮にfalse Eisenlohr projectionと呼ぶことにします。

f:id:dummy_index:20200821235349p:plain
August epicyclodal, false Eisenlohr and Eisenlohr projection

このAugust epicycloidalかfalse EisenlohrをもとにEisenlohrを近似したいと思います。

前回のApproximate to the Peirce quincuncial projection - dummy_indexのブログのノリで考えるとこのまま座標の重み付け和を取るところですが、そうするとcuspのところが調整しにくくなりますし、閉形式のinverse formulaを得るのが困難になります。そこで今回はLagrangeで円形になった段階で多項式により調整することを考えました。

false Eisenlohrに5次の有理式(係数の自由度4)による調整を組み合わせました。多項式ではなく有理式を使ったのは、閉形式のinverse formulaにするためになるべく次数を下げたかったからです。同じ係数1個でもy=x+ax^ 3だと3次ですがy=x/(1+ax^ 2)ならay \cdot x ^2 - x + y = 0で2次で解けます。結局5次になってしまったので閉形式は今後の課題です。

最適化にはGnuplotのfitコマンドを使用します。目的関数は『外周において長さスケール倍率が一定(=3+2\sqrt{2})に近くなるように』設定します。なお正解のEisenlohr projectionの外形は使用していません。注意点として、有理式のため零点と極が地図内に入ってきても外周だけ見ていると問題なく最適化できているように見えてしまうことがあります。係数が大きくなっていないか、全体図を表示して変なコブがないかを確認するようにしましょう。

結果、外形を目的関数に使わなくてもEisenlohrを再現できました。誤差12.5m、外周スケール倍率(対原点)は5.82829~5.82857 (幅0.005%)

f:id:dummy_index:20200821235719p:plain
Eisenlohr and approximate Eisenlohr projection

ここまでは既存の図法の近似でしたが、 On distortion and optimal projections - Page 10 - Mapthematics Forumsを受けて両半球の接合部の長さが270度(0.25)と90度(0.75)のパターンを作成してみます。正解は未知なので、外周スケール倍率の誤差幅だけで成否を判断することになります。

270度の場合、外周スケール倍率(対原点)は25.2726~25.2750 (幅0.01%)、ただし一部数値的に問題あり(修正すればもう少し誤差が改善しそうです。)

f:id:dummy_index:20200822000905p:plain
Approximate Eisenlohr (conn. 270°) projection (compare scale)
f:id:dummy_index:20200822001101p:plain
Approximate Eisenlohr (conn. 270°) projection (compare shape)

90度の場合、外周スケール倍率(対原点)は2.2390~2.2407 (幅0.08%)、ただし長さスケールが最小なのは原点ではなく0°N 66°W/Eで、原点でのスケールの0.9278倍となります。

f:id:dummy_index:20200822001313p:plain
Approximate Eisenlohr (conn. 90°) projection (compare scale)
f:id:dummy_index:20200822002158p:plain
Approximate Eisenlohr (conn. 90°) projection (compare shape)

外周スケールから安直に推測すると270度の場合は25m、90度の場合は0.4km程度の誤差になっているものと考えられます。false Eisenlohrが180度と270度の間なので、90度に対する近似は悪くなってもおかしくありません。

3次多項式でもsin関数でもなく、係数で膨らみを調整できる式がないものか…5次の項を足すのは嫌だし…ん?有理式…

(続くかも)

github.com

2020.08.22 初版/小修正 2020.09.03 カテゴリ編集