[matplotlibで錯視] 5. エーレンシュタイン錯視1

その他

matplotlibでエーレンシュタイン錯視1を作成する

エーレンシュタイン錯視とは?

エーレンシュタイン錯視は、放射状に配置された線分によって囲まれた中央部分が実際よりも明るく見える錯視現象です。この記事では、Pythonのmatplotlibライブラリを使用してエーレンシュタイン錯視を描画する方法を紹介します。放射状の線分を描くためのコード実装と、視覚効果が生まれるメカニズムについて解説していきます。

コード

解説

モジュールのインポートと図の作成

背景色の設定

fig.patch.set_facecolor(‘white’), ax.patch.set_facecolor(‘white’) で図を含めた画像全体の背景と図の背景を白にしています。

目盛と目盛ラベルを非表示

plt.tick_params(labelbottom=False, labelleft=False)で目盛ラベルを非表示にし、plt.tick_params(color=’white’)で目盛を白にして見えなくしています。

図の枠線の設定

図の枠線は、ax.spines[‘left’].set_visible(False)のようにすることで上下左右の枠線を非表示にできます。

円と四角を表示するためのパラメータ

四角と円を表示するためのパラメータとして、tとc,sを用いました。tは0〜2πのlinspace配列で、c,sはそのtを用いたcosとsinです。

四角の表示

四角はスーパー楕円の式を用いて生成しました。詳細は、下記を参照してください。

[matplotlib animation] 17. スーパー楕円(Superellipse)
matplotlibのFuncAnimationを使ってスーパー楕円のアニメーションを作成する方法を解説。数式の基本から実装コードまで、数学的図形の動的な表現方法を学べる記事です。

円の表示

リスト内包表記の[ax.plot(ic,is,’k-‘, lw=2) for i in np.arange(0.2,1.2,0.05)]を使用して、半径がnp.arange(0.2,1.2,0.05)の円を順次描画していきます。’k-‘, lw=2の指定により、linewidthが2の黒い実線として円が表示されます。

アスペクト比の調整

デフォルトの設定では、円が歪んでしまうので、ax.axis(‘scaled’)とすることで、xとy軸の表示間隔を揃えて、真円が表示されるようにしています。

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

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

まとめ

本記事では、matplotlibを使ってエーレンシュタイン錯視を再現する方法を紹介しました。放射状の線分を適切に配置することで、中央部分が明るく浮かび上がって見える錯視効果を作り出すことができます。Pythonとmatplotlibを使えば、このような視覚心理学の興味深い現象を簡単にプログラミングで表現できることがわかりました。

参考

エーレンシュタイン錯視 - Wikipedia

コメント