スーパーフラクタル生成ツール

IFS を何組か用意して、縮小コピーを作るたびにランダムに切り替えると、毎回少しずつ違うフラクタルができます。V を 1 から上げていくと、規則正しい図形がばらばらな自然物のような図形に変わっていきます。

    バッファ一覧

    計算に使った V 枚のバッファ B₁〜BV です。上の大きな画像は B₁ です。どのバッファも、各部品はこの V 枚のどれかを縮小したものなので、どの大きさで見ても部品の形は V 種類以内になります。

    V を変えて比べる

    同じシードのまま、V = 1, 2, 4, 16 の 4 枚を並べます。

    1

    指を離すと計算し直します。

    IFS を選ぶ確率

    表示

    保存と共有

    𝕏 に投稿

    共有 URL には、プリセット・V・シード・確率・表示の設定(写像を編集したときは写像も)が入ります。同じ URL を開くと同じ画像になります。画像や設定がサーバーへ送られることはありません。

    写像を編集する(上級者向け)

    各 IFS の写像 x′ = a x + b y + e、y′ = c x + d y + f の係数です。座標は画像の左下を (0, 0)、右上を (1, 1) とします。縮小写像(最大の特異値が 1 未満)でないと計算できません。「固定」と付いた写像(プリセット E の葉)は、乱数で選んだバッファではなく、決まった図形(シェルピンスキーの三角形)を写します。

    IFS のおさらい

    IFS(反復関数系)は、図形を縮小・回転・移動する写像をいくつか組にしたものです。図形を写像の数だけ縮小コピーして並べ、できた図形にまた同じことをする、という操作を繰り返すと、最初の図形が何であっても、決まった 1 つの図形(アトラクタ)に近づいていきます。シェルピンスキーの三角形は「1/2 に縮めて 3 か所に置く」、バーンスレイのシダは 4 つの写像でできています。

    この繰り返しの様子は、シミュレーターの「ステップ表示」で 1 段ずつ見られます。IFS のアトラクタは、どこを拡大しても全体と同じ形の部品でできている、自己相似な図形です。

    自然の植物や海岸線も、拡大すると似た形が現れます。ただし、本物のシダの葉は 1 枚ずつ少しずつ違い、IFS のシダのように全部が同じ形ではありません。スーパーフラクタルは、この「似ているけれど、同じではない」形を作るための考え方です。

    スーパーフラクタルとは

    スーパーフラクタルでは、IFS を 1 組ではなく何組か用意します。上のツールのプリセット A なら、シェルピンスキーの三角形の IFS と、その部品を上下逆さにした IFS の 2 組です。縮小コピーを作るたびに、どの IFS を使うかを乱数で選びます。

    もし部品ごとに完全に自由に IFS を選ぶと、ばらばらなランダムフラクタルになります。逆に、どの部品にも同じ IFS を使えば、ふつうの決まった形のフラクタルです。Barnsley・Hutchinson・Stenflo は、この 2 つの間をつなぐものとして V-variable フラクタルを考えました。V は 1 以上の整数で、形のばらつきの度合いを決めます。V-variable フラクタルの集まりと、その確率分布をまとめたものがスーパーフラクタルです。

    V の意味(V-variable)

    V-variable フラクタルは、どの拡大レベルで見ても、部品の形が高々 V 種類しかない図形です。

    プリセット A、V = 1 のサンプル
    V = 1
    プリセット A、V = 2 のサンプル
    V = 2
    プリセット A、V = 4 のサンプル
    V = 4
    プリセット A、V = 16 のサンプル
    V = 16
    プリセット A(2 つの三角形)を、同じシード 12345 のまま V だけ変えて描いたもの。上のツールの「V = 1, 2, 4, 16 を並べる」と同じ計算です。

    V = 1 の図では、三角形の向きが段ごとにそろっています。ある段で「上下逆さ」が選ばれると、その段の部品はすべて逆さになるからです。V が大きくなるにつれて、部品ごとに向きが入り混じっていきます。ツールの「バッファ一覧」に並ぶ V 枚の画像が、その V 種類の形のもとになっています。

    木のような形でも同じです。

    プリセット D(樹木)、V = 1 のサンプル
    V = 1
    プリセット D(樹木)、V = 16 のサンプル
    V = 16
    プリセット D(3 種類の木)、シード 12345。色は、部品がどの木の IFS を使ったか(IFS 別の色)です。V = 1 では同じ大きさの枝がすべて同じ形になり、V = 16 では枝ごとに木の種類が混ざります。

    生成のしくみ(バッファ法)

    このツールでは、V 枚の画像(バッファ) を同時に更新して描きます。論文では、V 枚の「スクリーン」を使う方法として説明されています。

    1. 最初は、どのバッファも全面を塗りつぶした正方形にします。
    2. 新しいバッファ ()を 1 枚ずつ作ります。
    3. 使う IFS を、選ぶ確率に従って 1 つ選びます。
    4. その IFS の写像ごとに、元にするバッファを から 1 枚ずつ乱数で選びます。
    5. 選んだバッファを写像で縮小し、重ね合わせたものを とします。
    6. V 枚とも作り終えてから、 と入れ替えます。
    7. 2〜3 を、部品が 1 画素より小さくなるまで繰り返します。
    1 ステップ前のバッファ B1
    B1
    1 ステップ前のバッファ B2
    B2
    1 ステップ前のバッファ B3
    B3
    新しいバッファ B1。部品を写像ごとに色分けしたもの
    新しい B1
    • 写像 1 で B2 を縮小
    • 写像 2 で B1 を縮小
    • 写像 3 で B2 を縮小
    プリセット A(2つの三角形)、V = 3、シード 2 の最後のステップ。新しい B1 を作るときに IFS 2(上下逆さ)が選ばれ、3 つの写像がそれぞれ、乱数で選んだ 1 ステップ前のバッファを縮小して重ねています。部品は写像ごとに色分けしました。

    どのバッファも、部品は V 枚のバッファのどれかを縮小したものです。そのため、どの段まで下っても、部品の形の種類は V を超えません。また、同じシードからは毎回同じ乱数が出るので、同じ設定なら必ず同じ画像になります。共有 URL にシードを入れているのはこのためです。

    反復の回数は、いちばん縮小率の大きい写像を何回使えば 1 画素より小さくなるかから決めています(縮小率が 1/2 なら、512 画素で 12 回)。シダのように縮小率が 0.85 ほどある写像では、反復が多くなり、計算に時間がかかります。

    決まった形とランダムな形の橋渡し

    V = 1 は、IFS が 1 組だけならふつうの決まったフラクタルになり、IFS が何組かあれば段ごとにそろった形になります。反対の端は「V が無限大」で、部品ごとに独立に形が決まる、標準的なランダムフラクタルです。論文では、V を大きくしていくと、V-variable フラクタル(とその確率分布)が標準的なランダムフラクタルに近づくことが示されています。

    つまり V は、規則正しいフラクタルと、ばらばらなランダムフラクタルの間を連続的につなぐつまみです。実際の植物は、枝や葉の形がすべて同じではないものの、似た形がくり返し現れます。V を少しずつ上げると、そのような「ふぞろいだけれど似ている」形に近づいていく様子を確かめられます。

    フラクタル次元

    プリセット A と B は、形が毎回違っても、フラクタル次元は同じになるように作ってあります。どちらも、すべての写像が縮小率 1/2 で、IFS ごとに 3 つずつです。どの IFS も、正方形を 4 等分したうちの 3 つの小さな正方形に、重ならないように写します。

    すると、どのサンプルでも、 段目の部品はちょうど 個で、どれも 1 辺 の正方形の中に 1 つずつ収まります。1 辺 の箱で覆うと、箱の数は になるので、ボックスカウント次元は

    です。V にもシードにもよりません。これは、論文で標準的なランダムフラクタル(V が無限大の場合)の次元を与える式 ( は IFS を選ぶ確率、 は縮小率)に、、写像 3 つを入れた の解とも一致します。

    実際にツールで描いた画像を、画像のフラクタル次元を測るページと同じ 2 値ボックスカウント法で測ると、次のようになりました。

    各条件でシードを 10 個(1〜10)変え、B₁(1024×1024 画素)を /dimension/ と同じ 2 値ボックスカウント法で測った値。理論値は 1.585。
    プリセットV平均最小最大
    A. 2つの三角形11.5841.5781.589
    A. 2つの三角形41.5851.5811.589
    A. 2つの三角形161.5851.5821.590
    B. 欠けた正方形11.5961.5761.611
    B. 欠けた正方形41.5891.5771.606
    B. 欠けた正方形161.5891.5811.604

    60 枚すべてが 1.576〜1.611 の範囲に入り、理論値に近い値になりました。値が少しずつ違うのは、画素の大きさで形を区切って数えるため、細かい部分の数え方がサンプルごとに変わるからです。ツールの「この画像のフラクタル次元を測る」ボタンで、表示中の画像を同じ方法で測れます。

    縮小率の違う写像が混ざっていると、事情は変わります。論文では、このような場合の次元が V によって変わりうることが、例で示されています。プリセット C〜E は相似変換でない写像を含むため、理論上の次元は示していません。

    プリセットの作り方

    C〜E の写像は、すべての写像をまとめた IFS の図形が画像の枠に収まるよう、縦横同じ倍率で縮めて配置しています。こうしておくと、どのサンプルも枠からはみ出しません。

    よくある質問

    V を無限大にするとどうなりますか?

    部品ごとに独立に形が決まる、標準的なランダムフラクタルに近づきます。Barnsley・Hutchinson・Stenflo の論文では、V を大きくしたときに、V-variable フラクタルとその確率分布が、標準的なランダムフラクタルに近づくことが示されています。このツールでは計算の重さのため、V は 32 までです。

    点を打つカオスゲームで描けないのはなぜですか?

    カオスゲームは、写像を 1 回ずつ乱数で選んで点を動かし、その跡を描く方法です。スーパーフラクタルの IFS をそのまま混ぜて点ごとに選ぶと、点ごとに別々の IFS を選ぶことになり、「1 枚のサンプル」を表しません。結果は、すべての写像を 1 つの IFS にまとめたときの図形に近づきます。そこでこのツールは、点ではなく画像(バッファ)を丸ごと写す方法で描いています。

    IFS Studio のシミュレーターとは何が違いますか?

    シミュレーターは、1 組の IFS が作る決まった図形(アトラクタ)を描きます。何度描いても同じ形です。スーパーフラクタルは、IFS を何組か使い、シードを変えるたびに違う形を描きます。シミュレーターの「スーパーフラクタルの 1 組にする」ボタンで、シミュレーターの写像をこのツールに持ってこられます。

    同じ設定なのに、前と違う画像になりました。

    シードが変わっていないか確かめてください。「もう 1 枚」を押すとシードが変わります。シード・V・確率・写像が同じなら、必ず同じ画像になります。共有 URL にはこれらがすべて入っているので、URL を開けば同じ画像を再現できます。

    V を上げると、フラクタル次元は変わりますか?

    プリセット A と B では変わりません。すべての写像の縮小率が 1/2 で数も同じなので、どの V でも理論値は log 3 / log 2 です(上の表のとおり、測っても同じくらいの値になります)。縮小率の違う写像が混ざっている場合は、V によって次元が変わることがあります。

    参考文献