[matplotlibで錯視] 10. ムンカー錯視のアニメーション

その他

はじめに

ムンカー錯視とは、帯状の構造内部にある物体が同じ色であるにも関わらず違った色に見える錯視である。周りの色と同じ色あいに見えるようになる色の同化効果と、反対の色あいに見えるようになる色の対比効果が関係していると言われている。ここでは縞模様の間隔を変化させることで起こる変化をアニメーションで表示する。

コード

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

解説

モジュールのインポート

図の生成

アニメーションの設定

アニメーションは一度fig上に表示したものをax.cla()で消すことで更新していく。
軸範囲などの設定も消えるのでupdate関数内で行う必要がある。

左の図の設定

ax.axhspan()で等間隔にならぶ帯状の長方形を作成する。0.8/(2*(num+1))*i, 0.4/(2*(num+1))+0.8/(2*(num+1))*i は長方形を生成するy軸方向の値であり、リスト内包表記により指定の回数だけ繰り返す。
xmin、xmaxは長方形を表示するx軸の範囲であり、facecolor=’0’により黒色とした。zorder=2とすることで黒い長方形が最前面にくるようにした。

六角形の表示

CirclePolygonで円を多角形で近似した構造を作ることができる。
resolution = 6とすることで6角形とすることができる。zorder =1とすることで黒い帯よりも下面に表示されるようにした。
ax.add_patch(cp6_l)により、図中に挿入した。

右の図の設定

右図では表示順を black -> lime -> whiteの順とするために、
[[ax.axhspan(0.8/(2*(num+1))*i-0.4/(2*(num+1)), 0.8/(2*(num+1))*i,xmin=0.5, xmax=1, facecolor=’1′,zorder=3) for i in range(3*(num+1))]のように帯状の白い長方形のzorderを3として最前面とした。その次に6角形、その後ろに黒い帯状の長方形となるようにzorderを設定した。

アニメーションの表示

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

参考

脳がだまされる!? 「錯視」の不思議を探ってみよう(立命館大学文学部・北岡 明佳准教授)2013/10/21 | WAOサイエンスパーク
同じ色なのに違って見える 「ムンカー錯視」画像が話題
拡大すると同じ色と分かる。
matplotlib.axes.Axes.axhspan — Matplotlib 3.1.0 documentation
matplotlib.patches.CirclePolygon — Matplotlib 3.1.0 documentation

コメント