class LSystem { char [] alphabet = { 'F', '+', '-', '[', ']'}; String axiom; String [] rule = { "", "+", "-", "[", "]"}; String tree; LSystem(String axiom, String ruleset){ rule[0] = ruleset; this.axiom = axiom; tree = ""; } void draw(float x, float y, float step, float angle){ pushMatrix(); translate(x,y); for(int i = 0; i < tree.length(); i++){ switch(tree.charAt(i)){ case 'F': line(0, 0, step, 0); translate(step, 0); break; case '+': rotate(angle); break; case '-': rotate(-angle); break; case '[': pushMatrix(); break; case ']': popMatrix(); break; } } popMatrix(); } void iterate(int maxLength){ tree = new String(axiom); int [] ruleLength = new int[alphabet.length]; for (int i = 0; i < alphabet.length; i++){ ruleLength[i] = rule[i].length(); } for (int i = 0; i < maxLength; i++){ int newLength = 0; for (int j = 0; j < tree.length(); j++){ char c = tree.charAt(j); for (int k = 0; k < alphabet.length; k++){ if (c == alphabet[k]){ newLength += ruleLength[k]; break; } } } StringBuffer newTree = new StringBuffer(newLength); for (int j = 0; j < tree.length(); j++){ char c = tree.charAt(j); for (int k = 0; k < alphabet.length; k++){ if (c == alphabet[k]){ newTree.append(rule[k]); break; } } } tree = newTree.toString(); } } }