AccessViolation Exception

仕事でもはんだづけ、家でもはんだづけ

scalaでLSystem入門

植物成長シミュレーションで使われているという*1LSystemについて、実際に描画できるのかscalaでやってみます。

実は一年前に

ScalaでL-Systemをやってみた - AccessViolation Exception

やっているのですが、どうにも気に入らない部分が多いのできっちり作りなおしました。

kamiyaowl/lsystem · GitHub

f:id:kamiyaowl:20150311153125p:plainf:id:kamiyaowl:20150311153138p:plainf:id:kamiyaowl:20150311153139p:plainf:id:kamiyaowl:20150311153142p:plainf:id:kamiyaowl:20150311153146p:plain

まともになったこと

もともと以前のやつが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とかも同様にして暗黙の変換ばっさばっさつかってます。これ自分ではいいんですけど他のライブラリとか使おうとするときに大変なんですよねぇ...

*1:Blenderの木生成プラグイン等に利用されてるらしい