カオスゲームについて

このページは、自作ツールのカオスゲームの使い方の説明を目的としたページです。

カオスゲームとは

カオスゲーム(wikipedia)とは、フラクタル図形(wikipedia)を近似的に描画する方法の一種で、以下のような図を描けます。この方法で描画されるフラクタルは反復関数系(wikipedia)とよばれ、縮小して移動すると、元の図形の一部分と一致する性質を持っています。

サンプル

とりあえず描いてみる

まずは以下の手順で、サンプル図形を描画してみましょう。(使用するツールはこちら

  1. 左下のリストから描きたいサンプルを選んで、読み込みボタンをクリック
    (この操作で、使用する関数と設定が自動的に入力されます)
  2. その下の実行ボタンをクリック

これで選んだ図形が描画されたはずです。

色が薄いと思ったら、右上の設定でステップ数を増やしてみましょう。描画にかかる時間が増えますが、ほとんどの場合色が濃くなります。

アルゴリズム

カオスゲームは、以下のアルゴリズムで動作します。

点Aを(0,0)とする
次の内容を指定したステップ数だけ繰り返す【
  用意しておいた関数f1,f2,...,fnの中からランダムに一つ選ぶ
  選んだ関数fiを用いて、点Aをfi(A)へ移動する
  点Aの位置に点を描画する

これだけの単純な動作で、様々な図形を描画できます。

ここで使用する関数f1,f2,...,fnは、2次元上の座標を別の座標に変換する関数で、あらかじめ用意しておきます。これらの関数は繰り返し使うので反復関数と呼ばれ、これらの関数によって描画される図形が決まります。

使用する関数

アルゴリズムの項で述べた通り、使用する関数f1,f2,...,fnは、2次元上の座標を別の座標に変換する関数です。サンプルを選んだ時に自動入力される関数もそのようになっています。

この関数は、行列を用いて以下のように表現されます。\begin{eqnarray} f \left( \begin{array} .x \\ y \end{array} \right) = \left( \begin{array} .a&b\\c&d\end{array} \right)\left( \begin{array} .x\\y\end{array} \right) +\left( \begin{array} .e\\f\end{array} \right) \end{eqnarray}a,b,c,d,e,fは関数ごとに定められた定数です。この関数は座標(x,y)を別の座標に変換する関数になっており、このような変換をアフィン変換と呼びます。図形は座標(点)の集まりなので、そのすべてに変換を適応することで、図形を別の図形へ変換することもできます。

ここで公開しているツールでは、上に書いた関数を以下のように表現しています。書き方が違うだけで意味や計算結果は同じです。$$ \text{next }x = ax+by+e \\ \text{next } y = cx+dy+f $$右辺の\(x,y\) は変換前の座標で、\(\text{next } x,\text{next } y\)は変換後の座標を表しています。また、各関数が使用される割合を『重み』と表現しています。

この関数が、描画する図形の形を決定します。たとえば、サンプルの『シェルピンスキーのギャスケット』の3つの関数は、『点(0,2)を中心に図形を半分に縮小する関数』,『点(-2,-2)を中心に図形を半分に縮小する関数』,『点(2,-2)を中心に図形を半分に縮小する関数』になっています。出来上がる図形は、それぞれの関数で図形全体を変換したときに、元の図形の一部分と重なるものになります。

自作ソフト  2018/04/30  k.izumi