インドラの真珠:反復関数系による極限集合の生成
この節では、乱数を用いた極限集合の作り方について簡単に説明します。 「乱数」とは、規則性のない数の列です。さいころを投げるときのように、偶然に起こる事柄を表現するときによく使います。 2つの、縮小と回転による相似変換 $${f_1(z) , \ f_2(z)}$$ を考えます。 任意の点 $${z_0}$$ から始めて、1回目の像$${z_1}$$を $${f_1(z_0) , \ f_2(z_0)}$$ のいずれかからランダムに選びます。 次に、2回目の像$${z_2}$$を $${f_1(z_1) ,\ f_2(z_1)}$$ のいずれかからランダムに選びます。以後、これを繰り返していきます。その結果、雲のような点の集合ができます。 用意する相似変換は2つでなくても構いません。k個の相似変換を用いて、次のようなアルゴリズムでスクリプトを作ります。
zを始めの点、nを繰り返し回数とします。
以下をn回繰り返します。
r を1,2,・・・k から乱数を用いて任意に選ぶ。
$${z=f_k(z)}$$ として zを描く。
始めの点は任意に選びますので、始めのうちはいろいろなところに像ができます。次の図がその様子を示します。相似変換の設定は前節のものと同じで,2個です。
リンク先を開くと,反復回数が2回の図が出ます。黒い点が2つあり,少し大きさが異なります。大きいほうが1回目,小さい方が2回目です。
画面上でマウスカーソルを動かすと再描画されますが,その都度乱数で r を決めるので図が変わります。
スライダを動かして反復回数を変えてみましょう。始点の位置を変えるとこれらの点の位置も変わります。スライダを動かして反復回数をどんどん増やしていくと極限集合が生成されていき、それは始点の位置を変えても同じであることがわかるでしょう。
相似変換ではない単純な変換でも極限集合を作ることができます。
次の例では、点pとzの中点をとる変換 $${f(z)=\dfrac{p+z}{2}}$$ を使います。この変換を3つの点a,b,cをランダムに選んで点を写していきます。
リンク先を開くと,次のような図が出ます。黒の点2つが変換した点ですが,どの変換をするかは乱数で決めるので,この図と同じとは限りません。
この図では,まず始点とcの中点をとり,次にその点とbの中点をとっています。
3点は図のように三角形状に置かれており,できる極限集合はシェルピンスキーの三角形として有名なフラクタルになります。
以上は,Mathe Vital の Indras Pearls にあるもので,メッセージだけを日本語にしたものです。
当初の「乱数」をやめたらどうなるでしょう。これは Mathe Vital にはありませんがやってみましょう。必ず2つの変換の両方で変換するのです。
リンク先を開くと次の画面になります。
今,緑の始点を2つの対応で変換して,点が2つできています。
スライダを動かして,反復の深さを2にすると,点は4つになります。1回目に変換した2つの点に対してそれぞれ変換したので4つです。
ぜひリンク先を開いてやって欲しいので,画面は載せていません。
反復の深さを深くしていったときの図を,ランダムの場合と比べてみましょう。
3つの変換についても同じようにやってみます。
リンク先を開くと次の画面になります。
これも,反復の深さを増やしてみましょう。変換する回数(点の数)は3の2乗,3乗・・と増えていきます。
始点を動かしてみると,始めは変換した点の位置が異なりますが,深さを深くするとほとんど変わらない図形 ー シェルピンスキーの三角形 ー になることがわかるでしょう。
===============
ここからは,自分で変換を定義してやってみたい人のために,Cinderellaによる作り方を説明します。ただし,スライダや画面の色などの細かい設定は省きます。
まず作図ツールで点を4つとります。A,B,C を三角形状に配置します。
CindyScriptエディタを開いて,Draw スロットに次のスクリプトを書きます。ここからコピーしてもよいでしょう。
n=1000;
a=complex(A);
b=complex(B);
c=complex(C);
z=complex(D);
ga(z):=(a+z)/2;
gb(z):=(b+z)/2;
gc(z):=(c+z)/2;
repeat(n,
r=randominteger(3);
if(r==0,z=ga(z));
if(r==1,z=gb(z));
if(r==2,z=gc(z));
draw(gauss(z),size->1,color->[0,0,0]);
);
Shift+Enter で実行すると次の図ができます。
点A,B,Cを動かすと三角形の形状が変わりますが,点Dを動かしてもほとんど変わらないでしょう。
繰り返し数 n を n=10000 にして,点のサイズを size->0.1 にすると次の図になります。
いろいろ試してみましょう。
→インドラの真珠:目次 に戻る