[matplotlibで錯視] 12. 回転する四角形のサイズ変化錯視

その他

はじめに

本記事では、回転する四角形が大きさが変わって見える錯視について解説します。この錯視は、四角形が回転する際に、四隅に配置された四角形によって一部が隠れることで生じる視覚効果です。Matplotlibを使用してこの錯視アニメーションを作成する方法を紹介します。

四角形の辺が他の図形と交差する際に、その大きさが変化しているように感じる現象は、私たちの視覚システムが持つ特性によるものです。実際には四角形のサイズは変わっていませんが、周囲の要素との関係によって、私たちの脳はそのサイズを異なって知覚します。

コード

解説

モジュールのインポート

データの生成

各種パラメータの生成

anglesは回転する角度で、sizeは4隅の四角の幅と高さを変化させるためのパラメータとなっています。

図の表示

patches.Rectangleを使用して4隅の長方形を作成します。xyで長方形の左下座標を指定し、widthで幅、heightで高さを設定します。colorで色を、zorderで表示順を設定します(値が大きいほど前面に表示)。add_patch()で図中に長方形を挿入します。

angleの値を変えることで長方形の表示角度が変化し、見かけ上のサイズ変化の方向を調整できます。

回転する正方形はax.fillメソッドで作成します。

アニメーションの設定

回転行列を使って座標(x,y)を回転させ、その回転したデータをset_xyメソッドで現在表示されているプロットに適用します。

アニメーションのフレーム数が100を超えたあと、set_widthset_heightメソッドを使用して4隅の四角形のサイズを変化させます。

アニメーションの表示

animation.FuncAnimationにより、フレーム数200、間隔25msとした5秒のアニメーションを作成し、HTML(ani.to_html5_video())でjupyter lab または notebook上に表示します。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

まとめ

この記事では、Matplotlibを使って回転する四角形が大きさが変わって見える錯視アニメーションを作成しました。実際には大きさが変わっていない四角形が、回転して四隅の四角形と交差する際に、サイズが変化しているように見える現象を視覚化しています。この錯視は、私たちの視覚システムがどのように情報を処理し、時に誤った解釈を行うかを示す興味深い例です。Pythonとmatplotlibを使うことで、このような複雑な視覚効果も比較的簡単にプログラミングできることがわかりました。

参考

ちょっと脳を混乱させたい人の為の6つの面白錯視アニメーション | カラパイア
なんとも不思議な錯視の中にはもはやわが目も信じられなくなり混乱をきたしたユーザーが救いを求める現象を招くものもある…
matplotlib.patches.Rectangle — Matplotlib 3.1.2 documentation

コメント