「毎日Unity」の技術ブログ

開発で役立つ情報を発信する

【Processing】L-system(1)

[ L-systemとは ]

L-Systemは、自然現象の模倣を可能にする形式文法の一種です。L-Systemは、再帰的に定義された文字列を生成することができ、これらの文字列は、植物の形態、細胞の増殖、結晶の成長など、さまざまな自然現象のモデル化に使用されます。

[ プログラム ]

WikiのL-systemにあるL-systemsの実例の例1(藻類)をProcessingで実装してみました。
ja.wikipedia.org

import java.util.Arrays;

final int Width_Window = 600;
final int Height_Window = 600;

final String[] V = new String[]{"A", "B"};
final String[] S = new String[]{};
final String W = "A";
final String[][] P = {new String[]{"A", "AB"}, new String[]{"B", "A"}};

String Current = W;

int Step = 0;

void settings()
{
    size(Width_Window, Height_Window);
}

void setup()
{
    println(Step + " : " + Current);

    Draw_Diagram();
}

void draw()
{

}

void mousePressed()
{
    String Next = "";
    
    for(int i = 0; i < Current.length(); i++)
    {
        final String Target = Current.substring(i, i + 1);

        if(Arrays.asList(S).contains(Target))
        {
            Next += Target;
        }
        else
        {
            for(int j = 0; j < P.length; j++)
            {
                if(Target.equals(P[j][0]))
                {
                    final int Random = (int)random(1, P[j].length);

                    Next += P[j][Random];

                    break;
                }
            }
        }
    }
    
    Current = Next;
    
    Step += 1;

    println(Step + " : " + Current);

    Draw_Diagram();
}

void Draw_Diagram() 
{
    background(255);
}

ウィンドウ内をクリックするとステップが進みます。

[ 実行結果 ]

0ステップ目

0 : A

1ステップ目

1 : AB

2ステップ目

2 : ABA

3ステップ目

3 : ABAAB

4ステップ目

4 : ABAABABA

5ステップ目

5 : ABAABABAABAAB

[ 参考文献 ]

ja.wikipedia.org