驚きの表現力のお絵かきプログラミング Context Free Art を試してみた
文脈自由文法でアートが楽しめる Context Free Art というのを試してみた。
Windows, Mac, Linux などで利用できて、簡単なコードを書けくだけで複雑な幾何学アートを生成してくれる。
サンプルから1つ
起動後、メニューの Example からいくつかのサンプルを試してみた。
たとえば、木を生成するサンプル「weighting_demo」のソースはこんなの。
startshape SEED1 rule SEED1 { SQUARE{} SEED1 {y 1.2 size 0.99 rotate 1.5 brightness 0.03} } rule SEED1 0.05 {SEED1 {flip 90}} rule SEED1 0.05 { SQUARE{} SEED1 {y 1.2 s 0.99 r 1.5 b -0.5 flip 90} SEED1 {y 1.2 x 1.2 s 0.6 r -60 b -0.5} SEED1 {y 1.2 x -1.2 s 0.5 r 60 b -0.5 flip 90} }
それっぽい木を生成してくれる。
確率的に描画してるので、メニューから Render→Render で再描画すると、また違った見た目の木ができあがる。
こんな簡単なルールの記述で自然界のものを記述できることが驚きだ。自然のものは案外、単純なルールと確率的な振る舞いで出来てるんだろうか。
文脈自由文法って?
Context Free という名前の通り、文脈自由文法でプログラムを記述する。文脈自由文法については 文脈自由文法 - Wikipedia が詳しいんだけど、小難しくてよく分からん。どうやら、プログラミング言語の文法定義に出てくる「A は A か B」みたいなやつのようだ。BNF も文脈自由文法を記述するための方法らしい。
Context Free Art では文法を定義するような感じで、図形のルールを記述していく。変数や関数もないし、凝ったことはできないんだけど、幾何学模様や木のような自然界のものは短いコードで描画できる。できあがった絵は、ちょっと値を変えるだけで見た目が大幅に変わるし、ちょっとした実験が気軽にできて楽しい。
ためしに作ってみた
自分でも作ってみようと 文脈自由絵画 Context Free Art http://contextfreeart.org - 言語ゲーム の解説を参考に、改造していった。
なんかそれっぽいのができた。ソースはこんなの。詳しくは次回解説する。
startshape Test rule Test{ CIRCLE { h 30 sat 1 b 1 } Test { x 1 s .9 r 10 h 30} } rule Test{ Test { flip 180 } } rule Test .2{ Test { flip -30 s .7} Test { flip 30 s .7} Test {} }