[ プログラム ]
import java.util.Arrays; final int Width_Window = 600; final int Height_Window = 600; final String[] V = new String[]{"F"}; final String[] S = new String[]{"+", "-", "[", "]"}; final String W = "F"; final String[][] P = {new String[]{"F", "F[+F][-F[-F]F]F[+F][-F]"}}; String Current = W; int Step = 0; float Length = Height_Window / 3; float Theta = radians(30); float Rate = 0.5; 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; Length = Length * Rate; Step += 1; println(Step + " : " + Current); Draw_Diagram(); } void Draw_Diagram() { background(255); translate(width / 2, height); for(int i = 0; i < Current.length(); i++) { final String Target = Current.substring(i, i + 1); if(Target.equals("F")) { line(0, 0, 0, -Length); translate(0, -Length); } else if(Target.equals("+")) { rotate(Theta); } else if(Target.equals("-")) { rotate(-Theta); } else if(Target.equals("[")) { pushMatrix(); } else if(Target.equals("]")) { popMatrix(); } } }
ウィンドウ内をクリックするとステップが進みます。
[ 実行結果 ]
0ステップ目
1ステップ目
2ステップ目
3ステップ目
4ステップ目
5ステップ目