ねこでじ(Nekodigi)

Nekodigi’s diary

学習中の気づきをまとめています。応援よろしくお願いします

【Processing】球面の画像をMollweide Projection(モルワイデ図法)で投影する

成果物

ワイヤーフレーム

www.youtube.com
ちょっとレトロな雰囲気の地図でよく見かけるあの形です。某飲料シリーズのロゴでも使われていた気がします。

画像

www.youtube.com
前回のサンソン図法と少し似ていますが、端がとがっていないのが特徴です。

仕組み

こちらの式を使って計算することができます。
 \begin{array}{l}
球面上の経度\lambda ,緯度\varphi と、回転\lambda _{0} から、平面上での位置x,yを求める式です\\
x=\frac{2\sqrt{2}( \lambda -\lambda _{0})\cos( \theta )}{\pi }\\
y=\sqrt{2}\sin( \theta )\\
\theta と\varphi にはこのような関係があります。\theta は直接求めることができません。\\
2\theta +\sin( 2\theta ) =\pi \sin( \varphi )\\
しかし、以下のニュートン法を使って繰り返し計算することで、\\
\varphi から\theta を求めることができます。\\
\theta _{n+1} =\theta _{n} -\frac{2\theta _{n} +\sin( 2\theta _{n}) -\pi \sin( \varphi )}{2+2\cos( 2\theta _{n})}\\
逆変換\\
\varphi =\arcsin\left(\frac{2\theta +\sin 2\theta }{\pi }\right)\\
\lambda =\lambda _{0} +\frac{\pi x}{2R\sqrt{2}\cos \theta }\\
{\displaystyle \theta =\arcsin\left(\frac{y}{R\sqrt{2}}\right) \ }
\end{array}
画像を投影するときは、画面上の位置から逆変換して画像上の位置を求め、Bicubic補間で補完します。
nekodigi.hatenablog.com
こちらのサイトを参考にしました。
Mollweide Projection -- from Wolfram MathWorld

コード

Mollweide Projectionという名前で追加しています。
github.com