■[Flash]曼荼羅図の描き方

前記事の「コマ大数学科:ベルヌーイ数」で「数学研究ノート」というサイトを紹介したけれど、このサイトに「曼荼羅」の描き方と画像がたくさん掲載されていた。カオスやら、フラクタル、マンデルブロなど、複雑系が好きな爺は、さっそくFlashで、曼荼羅図を描いてみた。

≪参考≫「数学研究ノート」
http://homepage3.nifty.com/y_sugi/index.htm


「Scale」は、1ステップ刻みで「300~500」まで設定できる。つまり、200種類の「曼荼羅」を描くことができる。キーワードは「複素数」だ。

「数学研究ノート」では、「UBASIC」を使って曼荼羅図を描いている。「UBASIC」は、木田祐司氏によって作られたフリーソフトウェアで、2700桁までの整数、2600桁までの有理数、複素数も実部、虚部を合わせて2600桁までの長桁計算ができる特徴がある。

UBASIC ver8.8f のダウンロード

図(1)

※出典:UBASICによるコンピュータ整数論(pdf)

※以下、引用(数学研究ノート)
  200   ‘ complex number (z^2)
  210   screen 3:cls:locate 0,27:S=0.93
  220   for X=0 to 400
  230     for Y=0 to 400
  250       Z=(X-200)*S+#i*(Y-200)*S
  260       pset (X,Y),round(abs(Z^2))@4096
  270     next
  280   next
※引用ここまで

じつに短い「UBASIC」のプログラムだ。本当にたったこれだけで、きれいな曼荼羅(まんだら)模様が描けるのはオドロキだ。 変数「S」は、スケール(縮小・拡大率)、複素数「Z」を計算している部分は、わずか一行。250行の(X-200)の意味は、画像のサイズが「400」なので、その半分を引いて、画面の中心を「0」とした極座標に合わせている。次の行で(X,Y)の位置に点を打っているんだけれど、Zの値によって色を変えている。「abs」は絶対値、「|Z|」(共役複素数と呼ぶらしい)。「round」は数値を丸めて整数にする。「@4096」というのは、「UBASIC」特有の命令だと思うが、数値を「4096」で割った余り、つまり「剰余」を求めている。これで、色数は、Zの値が大きくなっても、「0~4095」になる。

複素数(complex number)とは「a+bi」と表すことのできる数。「i」は二乗すると「-1」になる数で「虚数」(imaginary number)と呼ぶ。で、「UBASIC」には、複素数を扱う「#i」という命令があるけれど、FlashのActionScriptにはない。上の図(Flash)は、複素平面(極座標)で表したもの。半径(R)=「1」の円があるとすると、極座標では、「z=(r,θ)」、複素平面(ガウス平面)では、「z=r(cosθ+isinθ)」になるんだけれど、「Z」の長さ(原点からの距離)は、フツーの直交座標(デカルト座標)では、ピタゴラスの定理で、Z=sqrt(a^2+b^2)と表すことができる。

上の検証用「Flash」では変数S(Scale)を「1」とし、Zの値によって色を変えて、同心円を描く。初期設定のまま「Start」ボタンを押すと、同心円が描かれるはずだが、模様のようなものが見てとれると思う。これは、出版関係者にはお馴染みの「モアレ」(干渉縞)という現象。4色インクの印刷物は細かな(Red,Green,Blue,Black)の細かな点によって、写真などを表現しているが、各色の版の位置がちょっとズレてしまうと縞模様の「モアレ」が出る。漫画家なら、濃度が同じ2枚の点や線の「スクリーントーン」をちょっとズラすと、縞模様が出来ることは、体感的に知っていると思うが、あまりに一般的な「喩え」ではない><;

コンピュータの画面の「画素」(ピクセル)も物理的な大きさを持っているため、たとえば、6×6ピクセルで「円」を描けと言っても、「四角」になってしまう。微妙な違いは表現できない。比較的大きな円を描いても、X軸やY軸に交差するあたりでは、円が曲線ではなく、直線になっていることがわかる。それに加え、隣接するピクセルが干渉し合って「モアレ」が生じる。干渉の度合いは、周波数干渉のうねりと同じく、大きくなったり小さくなったりするのだろう。

話が脱線してしまったが、「Z=sqrt(a^2,b^2)」の状態でも、拡大率を変更することで、「曼荼羅」模様を作ることができる。でも、両辺を平方すると、「Z^2=a^2+b^2」の状態にできるよね。ラジオボタン(切り替えボタン)の「Z^2=a^2+b^2」をクリックして、「Start」ボタンを押すと、曼荼羅模様になるはずだ。複素数の値によって色の点を「XY座標」にプロットしていくだけで、曼荼羅図になるのは、不思議だ。

仏教の世界観、悟りの境地を象徴する曼荼羅。曼荼羅には物事の「本質」という意味もあるらしい。虚数は平方すると、実数の世界に表れる。つまり、虚数こそが数(世界)の本質なのではないだろうか。インドで生まれた仏教に曼荼羅が顕われたのは、5~6世紀頃と言われている。西欧で虚数という数概念が登場したのは16世紀。しかし、それより遥か前に東洋の仏教には「空」や「無」という概念があった。般若心経の「色即是空、空即是色」は、酔っ払いの爺には、「実部(色)すなわち、これ虚部(空)、虚部(空)すなわち、これ実部(色)」と言っているように思えてならない^^;

記事冒頭の「Flash」(flaファイル)のダウンロード
mandala_as3.zip(AS3.0)

≪参考≫
数学研究ノート
あらためて、サイト主催者のsugimoto氏に感謝したい。「曼荼羅」の他にも、興味をそそられるコンテンツがたくさん掲載されている。

「ガスコン研究所」の複雑系(?)過去記事
・Flash8:マンデルブロ集合の描き方 (2007.07.14)
・オートマトン (2007.07.26)
・Flash:ノミのジャンプ (2007.11.15)
・[Flash] 一次元セルオートマトンの作り方 (2009.06.03)
・[Flash] ライフゲームの作り方 (2009.06.10)
・[Flash] ラングトンの蟻 (2010.04.14)