ねこでじ(Nekodigi)

Nekodigi’s diary

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

【Processing】画像を円の中に反転する

成果物

www.youtube.com
Houdini TutorialのHyperbolic TilingでMobiusInverseという名前の関数として定義されていたものが気になったので、調べてみたところ、Inversion in circleというものであることがわかりました。メビウス変換というものでもあるそうです。
こちらのサイトで、よい視覚化が紹介されているので、ぜひ見てみてください。
Non-Euclidean Geometry: Inversion in Circle

仕組み

 \begin{array}{l}
円の中心x_{0} ,円の半径k ,変換対象のx,yを与えると、変換後のx',y'が得られます。\\
x'\ \ =\ \ x_{0} +\frac{k^{2}( x-x_{0})}{( x-x_{0})^{2} +( y-y_{0})^{2}}\\
y'\ \ =\ \ y_{0} +\frac{k^{2}( y-y_{0})}{( x-x_{0})^{2} +( y-y_{0})^{2}}\\
画像を変形するためには、逆変換を行う必要があります。\\
この式は、数学友達にたのんで解いてもらいました。\\
x-x_{0} =X,\ y-y_{0} =Yとおくと、\\
x'-x_{0} =\frac{k^{2} X}{X^{2} +Y^{2}} ,y'-x_{0} =\frac{k^{2} Y}{X^{2} +Y^{2}}\\
( x'-x_{0})^{2} +( y'-y_{0})^{2} =\frac{k^{4}\left( X^{2} +Y^{2}\right)}{\left( X^{2} +Y^{2}\right)^{2}} =\frac{k^{4}}{X^{2} +Y^{2}}\\
X^{2} +Y^{2} =\frac{k^{4}}{( x'-x_{0})^{2} +( y'-y_{0})^{2}}\\
x'-x^{0} =\frac{( x'-x_{0})^{2} +( y'-y_{0})^{2}}{k^{4}} \cdot k^{2} X=\frac{( x'-x_{0})^{2} +( y'-y_{0})^{2}}{k^{2}} \cdot ( x-x_{0})\\
x-x_{0} =\frac{k^{2}( x'-x_{0})}{( x'-x_{0})^{2} +( y'-y_{0})^{2}} より\\
\\
x=x_{0} +\frac{k^{2}( x'-x_{0})}{( x'-x_{0})^{2} +( y'-y_{0})^{2}}  yでも同様に、\\
y=y_{0} +\frac{k^{2}( y'-y_{0})}{( x'-x_{0})^{2} +( y'-y_{0})^{2}}\\
実は、逆変換の数式は元とほとんど同じ形をしていて、\\
同じ関数を使いまわすことができます。
\end{array}
画像の補完についてはこちらページをご覧ください。
nekodigi.hatenablog.com

コード

github.com