Context Free Art というのを試してみた。
再帰的な図形を簡単に描く為のプログラムらしい。いっちょやってみるか。例えば丸を描くのはこうする。丸 (CIRCLE) の他にも四角 (SQUARE) と三角 (TRIANGLE) が描ける。描ける図形は http://contextfreeart.org/mediawiki/index.php/Primitive_shapes に表がある。最初の startshape で図形の名前を指定して、その後に使いたい図形を書く。
startshape MARU
rule MARU {
CIRCLE {}
}
赤く塗って日の丸にするには {} の中に丸の性質を書く。例えば赤にするために hue (色相 0 〜 360) saturation (彩度 -1 〜 1) brightness (明るさ -1 〜 1) を指定した。数字は相対値になる。他の性質は http://contextfreeart.org/mediawiki/index.php/Shape_adjustments に表がある。
startshape HINOMARU
rule HINOMARU {
CIRCLE {hue 0 saturation 1 brightness 1}
}
図形を組み合わせて新しい図形を作れる。MEDAMA で赤と黒の目玉を作って、RYOUME で二つ並べる。ちなみに { x 1 } は左にに一歩ずれるという意味。
startshape RYOUME
rule RYOUME {
MEDAMA { x -1 }
MEDAMA { x 1 }
}
rule MEDAMA {
CIRCLE {}
CIRCLE {size 0.5 hue 0 saturation 1 brightness 1}
}
ここからようやく Context Free っぽくなる。ある図形の定義に、自分自身を使う事が出来る。さっき値が相対値と書いたのは、例えば hue 15 というのは描けば描くほど色相を 15 ずつずらして描くという事。
startshape GURUGURU
rule GURUGURU {
MEDAMA{}
GURUGURU { x 1 size 0.9 rotate 40 hue 15}
}
rule MEDAMA {
CIRCLE {}
CIRCLE {size 0.5 hue 0 saturation 1 brightness 1}
}
ここからさらに面白くなる。同じルールを二つ作ると、勝手にどちらか選んでくれる。ルール名の後ろの数字は、選ぶ比率です。
startshape NYORO
rule NYORO {
MEDAMA{}
NYORO { x 1 size 0.8 rotate 20 hue 15}
}
rule NYORO 0.2 {
NYORO {}
NYORO { flip 0 }
}
rule MEDAMA {
CIRCLE {}
CIRCLE {size 0.5 hue 0 saturation 1 brightness 0.9}
}
このように、気持ち悪い図形が幾らでも作れます。
ちなみに、有名な Aza Raskin 氏による Javascript 版もあります。 http://azarask.in/projects/algorithm-ink
mukaiyama
2008/06/22 19:30
お、これはおもしろそうですね。
oda
2008/06/23 03:03
わーむちゃ素敵。フラクタルやん?!今日ハマダさんと旅と人生について話をしててん。そしたらゴーヤはフラクタルなのだ、って事にイキ着いてんで。おもしろいなー。
propella
2008/06/23 07:40
ゴーヤって食べるゴーヤ?あれすごい好物やねん。豆腐と一緒に炒めたやつ最高!