hatena

<body>
*1238707279*Context Free Art
眠れないので<a href="http://d.hatena.ne.jp/inajob/20081127">inajobの紹介していた</a>、<a href='http://www.contextfreeart.org/index.html'>Context Free Art</a>をダウンロードした。

さっそく
>||
startshape EGG

rule EGG{
	CIRCLE { }
	CIRCLE { b 1 s 0.9 }
	EGG { x 0.3 s 0.6 r 10}
	EGG { x -0.3 s 0.6 r 10}
}
||<
<img src="http://gyazo.com/626e15e506804b8a56d56f9a6ea74f06.png">

うむ、きれいなレンダラに食わせないとどうしても安っぽくなってしまいがちだった3次元版のStructureSynthに比べて、こっちは適当に白黒で作っただけなのに見栄えがいいな。

>||
startshape EGG

rule RING{
	CIRCLE { }
	CIRCLE { b 1 s 0.9 }
	SQUARE { s 0.6 }
}
rule EGG{
	RING {} 
	12 * {r 30} RING { s 0.2 x 0.4 r 30 }
	EGG {s 0.6 r -10}
}
||<

<img src="http://gyazo.com/7e96a2a853163ed816ab587e82d475da.png">

わっかなのになぜか渦巻きに見える。

>||
startshape EGG

rule RING{
	CIRCLE { }
	CIRCLE { b 1 s 0.9 }
	SQUARE { s 0.6}
}
rule EGG{
	RING {} 
	12 * {r 30} RING { s 0.2 x 0.4 r 30 }
	EGG {s 0.8 r -10 z 0.1 a -0.1 b 0.2}
}
||<

あー、いちおうz-order的な意味でzの値もあるんだ。
<img src="http://gyazo.com/9d183a00c0f303c98eb97f63475b4ae2.png">

referenceを見てもmax-depth的なものが見つからないんだが。
>||
startshape EGG

rule RING{
	10 * {s 0.99 hue 30 z 0.1} CIRCLE {b 1}
	CIRCLE {z 1 b 1 sat -1 s 0.9 }
}

rule EGG{
	RING {hue 0 sat 1} 
	3 * {r 120} EGG1 { s 0.8 x 0.1 z 3 r 10}
}

rule EGG1{
	RING {hue 0 sat 1} 
	3 * {r 120} EGG2 { s 0.8 x 0.1 z 3 r 10}
}

rule EGG2{
	RING {hue 0 sat 1} 
	3 * {r 120 z 2} EGG3 { s 0.8 x 0.1 z 3 r 10}
}

rule EGG3{
	RING {hue 0 sat 1} 
	3 * {r 120 z 2} EGG4 { s 0.8 x 0.1 z 3 r 10}
}

rule EGG4{
	RING {hue 0 sat 1} 
}
||<
<img src="http://gyazo.com/e319870f469fbcd2589f501380c518d6.png">


アルファがあるのはいいけど、合成が加算合成のみしかないように思える。あとくりぬかれたものを作る手段ってあるのかな。

>||
startshape GATES

rule GATE {
	SQUARE {x 1 s 1 3}
	SQUARE {y 1}
	SQUARE {x -1 s 1 3}
}

rule GATE_S {
	GATE {}
	GATE {z -0.1 b 0.2 s 1 0.6 skew 50 0  y -0.6 x 1.8}
}

rule GATES {
	GATE_S {}
	GATES { s 0.8 y 2 x 3 b 0.05}
	GATE_SPAWN { s 0.8 y 2 x -3 b 0.05}
}

rule GATE_SPAWN {
	GATE_S {}
}

rule GATE_SPAWN 0.1 {
	GATES {}
}
||<

<img src="http://gyazo.com/9d823b340a0b428fa567898b6ae13640.png">

>||
startshape EGG

background { b -1 }

rule GLOW {
	20 * { s 0.98 }
	CIRCLE {a -0.9 b 1}
}

rule ARC {
	8 * {r 30 hue 3} GLOW { x 1 sat 1}
}

rule ARCS {
	8 * {r 30 hue 3} ARC { x 4}
}

rule ARCSS {
	9 * {r 30 hue 3} ARCS { x 16}
}

rule EGG {
	3 * {r 120} ARCSS {x 24.5}
}
||<

<img src="http://gyazo.com/b992bcf43520afefe3904a0b52429251.png">

>||
startshape EGG

background { b -1 }

rule GLOW {
	20 * { s 0.98 }
	CIRCLE {a -0.9 b 1}
}

rule ARC {
	8 * {r 30 hue 3} GLOW { x 1 sat 1}
}

rule ARCS {
	8 * {r 30 hue 3} ARC { x 4}
}

rule ARCSS {
	9 * {r 30 hue 3} ARCS { x 16}
}

rule ES {
	ARCSS {}
	ARCSS {r 180 x 41}
}

rule STAR {
	7 * {r 51} ES {x 25}
}

rule EGG {
	STAR {}
	3 * {r 120} STAR {x 100 s 0.3 flip 180 }
}
||<
<img src="http://gyazo.com/28e1f6a3d6ed003479547dd8565f43ee.png">

*1238742197*Context Free Artは教育用途にむいているか?
>>
id:TAKESAKO  programming, cg  教育用に向いてる言語かな?
<<

一言でいうと「NO」ですね。プログラミング言語を教える教材というより、どちらかというと「フラクタルジェネレータでパラメータをいじっていたらなんかかっこいい画像ができた!」に近いです。「コードを書くと面白いものができる」という経験が全くない人に興味を持たせるとっかかりとしてはいいかもしれませんが、その後の発展性がなさすぎます。

Context Free Artは結局のところ樹木曲線なんかのような「再起呼び出しを使うと自然に書ける図形」を記述するための、とても表現力の限られたDSLにすぎません。長所としては

- 再起呼び出しの終了条件を明示的に書く必要がない(十分小さくなると自動的に停止する)ので無限ループになってしまうありがちなミスをさけられる
- 自動的に適切なサイズにスケールする
- 直接カンバスに描きながら再起呼び出しをするだけではなく、Zオーダーでソートしてから描き直す処理を自動でやってくれる。
- アンチエイリアスしているのできれい(おそらく一度大きなカンバスに描いてから縮めている)
- 回転、スケール、色などのコンテキストのpushとpopを明示的に書かなくてもやってくれる

というあたり。一方短所としては

- 変数がないのでマジックナンバーの嵐
- 加減乗除がないので「360の7分の1」も51.4などとマジックナンバーで記述
- ルールが引数を取れないので、同じ螺旋でも縮まり速度の違うものを作りたかったらルールをコピペしてマジックナンバーを書き換えなければいけない
- 「5個おきに何かをする」というコードが書きたかったら5個のほぼ同じ内容のルールを書くことになる
- アルファベット1文字の命令などとても可読性が低い

というあたりかな。おすすめのユースケースとしては中学か高校の情報の時間に30分くらい学生にいじらせてみて、強い関心を示した子をNodeBoxなりProcessingなりActionScriptなりへ誘導するとかじゃないでしょうか。

*1238768103*Context Free Art 2
>||
startshape EGG

rule RING{
	100 * {s 0.98 hue 10 z 0.01} CIRCLE {b 1}
}

rule EGG{
	5 * {r 6 z 1}{
		12 * {r 30 } RING {sat 1 s 10 1}
	}
}
||<
<img src="http://gyazo.com/ca223ca732876a5fdb577cd5c3ff9ed7.png">

こういう配色って見慣れていない人には「おお、すごい」と見えるかもしれないけど、ちょっとわかってくると「あー、はいHSVね」って感じで陳腐に見えてしまう。HDRの写真も、最初に見たときは鮮やかさに驚いたけども、今となっては「ああ、HDRね」という感じになってしまう。陳腐化しない美しさはあるのだろうか。あとContext Free Artだと色相環の回転以外で色をいじるのが至難の業なのでこれ以上を目指すのはとても大変だ。陳腐な配色にするよりはいっそ白黒に徹した方がいいのかもなぁ。
<hr>

>||
startshape EGG

rule PART {
	SQUARE {x -0.6 y -0.6}
	SQUARE {x 0.6 y -0.6}
	SQUARE {x 0.6 y 0.6}
	SQUARE {x -0.6 y 0.6}
	CIRCLE { b 1 s 2 z 1}
}

rule EGG {
	PART {}
	EGG {s 0.95 x 1.95 r 31}
}
||<

<img src="http://gyazo.com/c1584aeaab3649b19bcd67bba106d699.png">

螺旋も螺旋で、陳腐な等角螺旋ばっかり。まあ、ランダム要素を入れて揺らしてやることは不可能じゃないけど。うーん。

いじってたらこんなのなった

>||
startshape EGG

rule PART {
	SQUARE {x -0.6 y -0.6}
	SQUARE {x 0.6 y -0.6}
	SQUARE {x 0.6 y 0.6}
	SQUARE {x -0.6 y 0.6}
	CIRCLE { b 1 s 2 z 1}
	PART { s 0.75 z 1 r 5}
}

rule EGG {
	PART {}
	EGG {s 0.95 x 1.95 r 31 z -1}
}
||<

<img src="http://gyazo.com/1e2bb4e196c88de2743e8bf839d2304f.png">

端が見えているとネタバレだけど、ここだけ切り取るとなぞの模様だ。
<img src="http://gyazo.com/5c8a6d0f9fc5c305f85d2ded2c78cd2b.png">

<hr>

お、ひねりを大きくしたら面白いことになった。
>||
	PART { s 0.75 z 1 r 15}
||<
<img src="http://gyazo.com/0c3f11d13e770df69a0a7deb68ab40fd.png">

<hr>

おお、なんか書かれていない線が見える!
>||
	PART { s 0.75 z 1 r 15 flip 180}
||<
<img src="http://gyazo.com/f290e24cf9a85dea630f5cae0f46bd81.png">

<hr>

薔薇っぽい

<img src="http://gyazo.com/d2269a650d13481b4af48703d53f1bd7.png">

<hr>
>||
startshape EGG

rule EGG {
	SQUARE { a -0.8}
	EGG {s 0.8 1.01 a -0.01 r 5}
}
||<
<img src="http://gyazo.com/6db348dc22801c57e5307876629f329b.png">

*1238771461*お茶

f:id:nishiohirokazu:20090404001058j:image

*1238779865*Context Free Artで数学のお勉強
<img src="http://gyazo.com/5b6f4d99b25b3351fb0c01a88987df8a.png">

まあ、黄金比のお話です。

>||
startshape EGG

rule PART {
	SQUARE {s 16.2 1 a -0.5 x 8.1}
	SQUARE {s 16.2 1 a -0.5 x 18.1}
}
rule STAR {
	5 * {r 72} SQUARE {y 4.3 s 26.2 0.3 a -0.7}
}
rule EGG {
	STAR {x 13.1 y -4.1 }
	STAR {x 13.1 y 4.1 flip 0}
	EGG_DOWN{y -1.2}
	EGG_UP{y 1.2}
}

rule EGG_DOWN{
	PART {}
	EGG_DOWN {y -1.2 s 0.62 1}
}

rule EGG_UP {
	PART {}
	EGG_UP {x 10 y 1.2 s 0.62 1}
}
||<
</body>

はてなダイアリー 2009-04-03