scalaでLSystem入門
植物成長シミュレーションで使われているという*1LSystemについて、実際に描画できるのかscalaでやってみます。
実は一年前に
ScalaでL-Systemをやってみた - AccessViolation Exception
やっているのですが、どうにも気に入らない部分が多いのできっちり作りなおしました。
まともになったこと
もともと以前のやつがscala入門がてら書いていて今見るとひどいですね...そもそもこれpush/popある図形かけるのだろうか...
mutableな変数を抹消したかった
LSystemの構文定義をかっこ良く書きたかった
val fractalPlant = new Grammar("X",List('X' -> "F-[[X]+X]+F[+FX]-X",'F' -> "FF")) with DrawParameter { override val options: List[DrawOption] = List('+' angle 25,'-' angle -25, '[' push,']' pop,'F' drawForward) }
'X' -> "F-[[X]+X]+F[+FX]-X"
は(Char,Double)のimplicit conversionでRule('X',"F-[[X]+X]+F[+FX]-X")
になったり、'+' angle 25
とかも同様にして暗黙の変換ばっさばっさつかってます。これ自分ではいいんですけど他のライブラリとか使おうとするときに大変なんですよねぇ...