2008/11/05

Context Free Art 文法

久しぶりの投稿です。
Context Free Artの文法よく分かってなかったので、Documentationとか見てちょっとだけ勉強したつもりです。
分かったこととか分かってたこととかをここに書いときます。

startshape ルール名

これはお決まりのものです。最初に書きます。

ちなみに、ルールを作るときは、

rule ルール名 {

//適当にルールを作る

}

みたいにします。

たとえば、円一つだけのものを作りたい時は

startshape en

rule en{
CIRCLE { }
}

これで円が描かれました。

では、円を動かしてみましょう。

startshape en{
CIRCLE { }
CIRCLE { x 1 }
}
どうですか。
もう一つ円が横に表示されたと思います。

ちなみに、基本図形が3つあって、
TRIANGLE { }
SQUARE { }
CIRCLE { }
の3つです。そのまんまですが、三角形、四角形、円です。


ではここからオプションについて解説します。
CIRCLE { }の括弧の中に入ってる x 1 とかのことです。

  • x ~ : x方向に~動かす
  • y ~ : y方向に~動かす
  • z ~ : z方向に~動かす(Context Free Artは2次元なので、z 方向というよりはレイヤーの上下と考えたらいいようです。)

  • r ~ : ~ だけ回転させる
  • flip ~ : ~度の角度で反転させる。flip 0でx軸に関して、flip 90でy軸に関して反転させます。

  • s ~ : サイズを~倍する。 s ~ ... でx方向に~、y方向に...倍する
  • hue ~ : 色相です。360までの範囲で色を指定。0が赤、値が大きくなるにつれて黄色、緑、青、紫、ピンクという風になっていきます。
  • sat ~ : 彩度です。 -1 ~ 1
  • b ~ : 明度です。-1 ~ 1

次に括弧の違いについて。

CIRCLE { }
と書くというのはさっき書いていますが、じつは
CIRCLE [ ]
と書くことも可能です。

この違いは何なのか。

{ }の方は、中身に書いたことをひとまとまりで解釈されます。
一方、[ ]は順番に解釈されます。
つまり、
CIRCLE [ x .5 s .5 x .5]
となっていると、「x方向に0.5動かして サイズを半分にして x方向に0.5動かす」
という意味になる、ということです。

あ、ちなみに小数は0を省略できます
0.5なら.5ってな感じに。

次に、回数指定。

3*{...} SQUARE { ~~~ }

このように書くとどうなるのでしょう。

この意味は、「3回だけ{ ... }したSQUARE { ~~~ }というルールをやってくれ〜〜」という意味です。

startshape shape

rule shape{
3*{y 1} SQUARE { s .3 b 1 sat 1 h 230 }
6*{x 1 r 20}CIRCLE { s .8 b 1 sat 1 h 0 }
}
やってみて下さい。
回数指定した分だけ描かれていますね。

成功成功。^^

次はruleの応用です。

ruleは同じ名前のもの何個でも作れます

あと、ruleは自分自身を自分の中で呼び出せます

2つ目があるから面白いのが描けちゃうわけですね〜Context Free Artでは。
自分の中で自分を呼び出せるので、どんどん成長していく絵が描けるのです。

1つ目については、どうなるかというと、どれをやろうかというのをを確率で決めます。

rule ルール名 数値 { }
こうすると、数値の分だけ確率的重みが付けられます。

rule A { }
rule A 0.2{ }
rule A 0.1 { }
仮に上記のように書いたとします。何も数値を指定しないと、自動的に1になります。
上からA1,A2,A3と呼ぶことにしましょう。

A1が実行される確率は、1/(1+0.2+0.1) = 1 /1.3 = 10 / 13
A2が実行される確率は、0.2/1.3 = 2 / 13
A3が実行される確率は、0.1/ 1.3 = 1 / 13

このようになります。13回に10回A1が実行されるが、13回に2回はA2、13回に1回はA3が実行される、ということになります。

コレは面白いですよね。

コレを使うと木のようなものを容易に作成できます。

startshape shape

rule shape{
CIRCLE { }
shape{ r 20 x 2 s .8 }
}

rule shape 0.2 {
shape { }
shape { flip 0 }
}

これで大体のものは作れるようになりました。

まだ僕自身よく分かってないとこもあるのですが、それは分かったらまた書こうかな〜と思ってます。。

Context Free Artをマスターしてすごい作品を作れるようになりたいですね。

----------------------------------------------

ここをクリックして下さい。お願いします。

0 件のコメント:

コメントを投稿