ねこでじ(Nekodigi)

Nekodigi’s diary

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

【Processing】球面の画像をAzimuthal Equidistant Projection(正距方位図法)で投影する

仕組み

こちらの式を使って座標を変換していきます。
 \begin{array}{l}
球面上の経度\lambda 緯度\varphi と、回転\lambda _{0} ,\varphi _{0} から、平面上での位置x,yを求める式です。\\
x=k\cos \varphi \sin( \lambda -\lambda _{0})\\
y=k[\cos \varphi _{1}\sin \varphi -\sin \varphi _{1}\cos \varphi \cos( \lambda -\lambda _{0})]\\
k=\frac{c}{\sin c}\\
c=\arccos[\sin \varphi _{1} +\sin \varphi +\cos \varphi _{1}\cos \varphi \cos( \lambda -\lambda _{0})]\\
逆変換\\
c=\sqrt{x^{2} +y^{2}}\\
\varphi =\arcsin\left(\cos c\sin \varphi _{1} +\frac{y\sin c\cos \varphi _{1}}{c}\right)\\
atan2に変えると広い範囲に対応できます。\\
\lambda =\lambda _{0} +\arctan\left(\frac{x\sin c}{c\cos \varphi _{1}\cos c-y\sin \varphi _{1}\sin c}\right)
\end{array}
画像を投影するときは、画面上の位置から逆変換して画像上の位置を求め、Bicubic補間で補完します。
nekodigi.hatenablog.com
こちらのサイトを参考にしました。
Azimuthal Equidistant Projection -- from Wolfram MathWorld

コード

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