[ 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