インドラの真珠:Barnsleyのシダ
反復関数系の有名な例に「バーンズリーのシダ」があります。シダの葉は、全体と部分が相似な自己相似形をしています。アフィン変換の反復関数系を用いて次のような図が描けます。CindyJSのギャラリーにあるものです。
赤い点をドラッグすると形を変えることができます。また,先端の点はアニメーションになっていて動いています。
点は12個あります。一つのアフィン変換は3つの点の対応で決められますので,ここでは4つのアフィン変換を使っていることになります。
タイトル画像はCindyJSではなくCinderellaで作成したものです。上記のリンク先をにあるものとは色合いなどが違っています。上記のリンク先のものは,CindyGLという描画エンジンも使っています。一方,タイトル画像のものではプログラムは書いていません。Cinderellaに備わっているツールだけで描いています。以下で,その作り方を説明しましょう。
まず、編集メニューからインスペクタを開き、「表示方法の初期設定」で直線の表示方法を「端点で切る」(一番右)にしておきます。
線分を描くツールで、線分ABを引きます。次に、垂線を描くツールをクリックし、線分AB上でマウスボタンを押し、そのまま点Aまでドラッグします。
できた垂線上の適当なところでクリックして、さらに垂線を描きます。線上でマウスボタンを押して少し動かしてから離します。
AB上でマウスボタンを押し、Bまでドラッグして、Bを通る垂線を引きます。
「2つの直線の交点を求める」ツールをクリックし、Cから引かれている直線をクリックします。
すると,インスペクタで「端点を切る」にしておいた効果で,直線が線分に変わり,長方形ABDCができます。これが、アフィン変換の元になる3点A,B,Cからなる長方形になります。
同じ要領で長方形を4つ追加します。
シダの葉の曲がり具合を示す長方形(次の図EFHG)
左の葉に関係する長方形(KLNM)
右の葉に関係する長方形(OPRQ)
茎を描く長方形(STVU):中央に細目に
描く順序は問いません。長方形の頂点を描く順序も問いません。とにかく、全部で5つの長方形を描きます。
ただし、ある程度は次の図のような位置関係と大きさで描くのがよいでしょう。
これで、アフィン変換を作るための図形ができました。実際には長方形の4つの頂点のうち、使うのは3つだけですので、必ずしも長方形である必要はありません。あとで示すような直角に折れ曲がった4組の線分でも結構です。
では、アフィン変換を定義します。モードメニューの「変換」からアフィン変換を選び、まず、次の図のように3つの対応を指定します。順序は問いません。
2つめのアフィン変換を次のように対応させます。
3つめのアフィン変換を次のように対応させます。前の2つと異なり、A,Bが逆順になります。
最後に中央の細い長方形に対応させます。
動かすモード(選択モード)で、シフトキーを押しながら4つのアフィン変換のアイコンをクリックして選びます。モードメニューの特別ニューから「特別/反復関数系(IFS)」を選びます。
それらしい図ができました。
インスペクタの「表示方法」で色を変えます。反復関数系の色を0,1,2,は濃い緑、3は茶色にします。
あとは、各長方形の大きさや位置を調整して、シダらしく仕上げます。(仕上げは結構難しいです)
さて、アフィン変換を定義するのに使ったのは、長方形の3つの点でした。したがって、次の図のように、長方形ではなく、直角に折れ曲がった線分を描いて作ることもできます。
→次節:2つのメビウス変換による極限集合
→インドラの真珠:目次 に戻る