Mod:Coding Challenge #16: Fractal Trees - L-System
最近のYoutube、字幕の自動生成が精度が高くて英語が聞き取りやすい。動画の中で言っている
L-System is a recursive way of generating sentences over and over again using string replacement.
が今回の肝っぽい。特定の文字列を置き換えることを再帰的に繰り返すことで、文を生成する仕組みがLシステム。ここでのAxiom(公理)は、文字列を置換するルールのこと。
例えば、2つの文字ABを、
A AB
B A
というふうに、次の世代で変換するというルールを設けたとする。
この時、繰り返し変換していくと、最初に設定した文字列Aは、こんな感じで変化していく。
0: A 1: AB 2: ABA 3: ABAAB 4: ABAABABA 5: ABAABABAABAAB
この繰り返しをまずProcessingで書いてみることにする。条件分岐でも書けると思うけど連想配列を使いたかったので、HashMapで書いてみた。
import java.util.HashMap; import java.util.Iterator; import java.util.Map; String axiom = "A"; HashMap<String, String> rule; rule = new HashMap<String, String>(); rule.put("A", "AB"); rule.put("B", "A"); for (int depth = 0; depth < 10; depth++) { String str = ""; for (int i = 0; i < axiom.length(); i++) { String s = String.valueOf(axiom.charAt(i)); Iterator iterator = rule.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = (Map.Entry)iterator.next(); String keyName = (String)entry.getKey(); String valName = (String)entry.getValue(); if (s.equals(keyName)) { str += valName; } } } axiom = str; println(depth + ": " + axiom); }
実行すると出力結果はこんな感じになる。
0: AB 1: ABA 2: ABAAB 3: ABAABABA 4: ABAABABAABAAB 5: ABAABABAABAABABAABABA 6: ABAABABAABAABABAABABAABAABABAABAAB 7: ABAABABAABAABABAABABAABAABABAABAABABAABABAABAABABAABABA 8: ABAABABAABAABABAABABAABAABABAABAABABAABABAABAABABAABABAABAABABAABAABABAABABAABAABABAABAAB 9: ABAABABAABAABABAABABAABAABABAABAABABAABABAABAABABAABABAABAABABAABAABABAABABAABAABABAABAABABAABABAABAABABAABABAABAABABAABAABABAABABAABAABABAABABA
シンプルなルールから複雑なパターンが出来る。
で、ここまで出来たところから、次はルールを変更する。
F FF+[+F-F-F]-[-F+F+F]
というもの。ルールは一つだけど複雑っていうか強力で、寿司虚空編ぽい。あっちはこんなもんじゃないけど。
とにかく、Processingのコードをルールの部分に合わせて、depthを少なめにして書き換えてみると
import java.util.HashMap; import java.util.Iterator; import java.util.Map; String axiom = "F"; HashMap<String, String> rule; rule = new HashMap<String, String>(); rule.put("F", "FF+[+F-F-F]-[-F+F+F]"); for (int depth = 0; depth < 4; depth++) { String str = ""; for (int i = 0; i < axiom.length(); i++) { String s = String.valueOf(axiom.charAt(i)); Iterator iterator = rule.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = (Map.Entry)iterator.next(); String keyName = (String)entry.getKey(); String valName = (String)entry.getValue(); if (s.equals(keyName)) { str += valName; } } } axiom = str; println(depth + ": " + axiom); }
0: FF+[+F-F-F]-[-F+F+F] 1: FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F] 2: FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F] 3: FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]
最後に樹木の描画に当てはめてみる。第3階層の描画に1分ほどかかったので文字列操作とHashMapが重たい。しまった。
import java.util.HashMap; import java.util.Iterator; import java.util.Map; float angle = 25; String axiom = "F"; float depth = 0; HashMap<String, String> rule; void setup() { size(960, 540); colorMode(HSB, 360, 100, 100); rule = new HashMap<String, String>(); rule.put("F", "FF+[+F-F-F]-[-F+F+F]"); } void mousePressed() { depth++; generate(); redraw(); } void draw() { float len = 10; background(220,20,20); translate(width/2, height); stroke(0, 0, 100, 50); for (int i = 0; i < axiom.length(); i++) { String str = String.valueOf(axiom.charAt(i)); if (str.equals("F")) { line(0, 0, 0, -len); translate(0, -len); } else if (str.equals("+")) { rotate(radians(angle)); } else if (str.equals("-")) { rotate(-radians(angle)); } else if (str.equals("[")) { pushMatrix(); } else if (str.equals("]")) { popMatrix(); } } resetMatrix(); noLoop(); } void generate() { for (int j = 0; j < depth; j++) { String str = ""; for (int i = 0; i < axiom.length(); i++) { String s = String.valueOf(axiom.charAt(i)); Iterator iterator = rule.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = (Map.Entry)iterator.next(); String keyName = (String)entry.getKey(); String valName = (String)entry.getValue(); if (s.equals(keyName)) { str += valName; }else{ str += s; } } } axiom = str; } //println(axiom); }