ねこでじ(Nekodigi)

Nekodigi’s diary

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

【Processing】球面の画像をStereographic Projectionで投影する。

成果物

※修正しました。修正前も別の良さがあるので下に引き続き残しおきます。
www.youtube.com
www.youtube.com

バーン!

f:id:Nekodigi:20200325200347p:plain
動画では球体を表示していませんが、極座標をそのまま画像の位置に割り当てているので動作は同じです。

仕組み

前回の逆変換の式を使って、画面上の座標から、極座標を求めています。
nekodigi.hatenablog.com
 \begin{array}{l}
\phi =\arcsin\left(\cos( c)\sin( \phi _{1}) +\frac{y\sin( c)\cos( \phi _{1})}{\rho }\right)\\
\lambda =\lambda _{0} +\arctan\left(\frac{x\sin( c)}{\rho \cos( \phi _{1})\cos( c) -y\sin( \phi _{1})\sin( c)}\right)\\
\rho =\sqrt{x^{2} +y^{2}}\\
c=2\arctan\left(\frac{\rho }{2R}\right)
\end{array}
極座標が求められたら、Bicubic補間で画像の色を補間します。
nekodigi.hatenablog.com
ただ、半面、半面に領域が分かれてしまうという問題があります。今回は問題がないのでそのまま続けていますが、どうしても困る場合は領域を分けて計算することで対応できると思います。
λを求めるときのAtanをAtan2に変えることで解決できました。

コード

Stereographic projectionという名前でProjectionリポジトリに追加しました。
github.com