乱数を使ってみる


このページの内容は,プログラミングのようなことをやったことがない人にとっては,やや難しいかもしれません。よく分からん,という人は,とりあえずこのページのことは無視してください。(というか,あまり上手く説明できていません)


まずは次の画像を見てください。

上の画像のソースは右のようになっています。

赤字の部分で,「#while (...)〜#end」の繰り返し構文を使って7個の球を作成しています。「#while (...)〜#end」についてはこちら

この画像を元に,乱数を使っていろいろと試してみることにします。

camera {
	perspective 
	location <0.0, 4, -6>
	up y*image_height right x*image_width
	angle 60
	look_at <0.0, 2, 0>
}

light_source {<100, 100, -100>	rgb 1}

plane {
	<0.0, 1.0, 0.0>, 0.0
	texture{
		pigment {checker rgb <0, 0, 0>, rgb <1, 1.0, 1>}
		finish { ambient 0.3 }
	}
	translate <0.5, 0, 1>
}
plane {
	<0.0, 0.0, 1.0>, 0.0
	texture{
		pigment {checker rgb <0, 0, 0>,rgb <1, 1.0, 1>}
		finish { ambient 0.3 }
	}
	translate <0.5, 0, 1>
}

#declare MyValue = -3;
#while ( MyValue <=3 )
	object {
		sphere { <0, 0, 0>, 0.5 }
			pigment { color rgb <1, 0, 0> }
			finish { phong 0.8 ambient 0.2 }
		translate <MyValue, 0.5, 0>
	}
	#declare MyValue = MyValue + 1;
#end

まずは乱数を使って球の位置を適当に変えてみます。

右のソースの赤字の部分が,付け加えた箇所です。

#declare r1 = seed (12345);

#declare MyValue = -3;
#while ( MyValue <=3 )
	object {
		sphere { <0, 0, 0>, 0.5 }
			pigment { color rgb <1, 0, 0> }
			finish { phong 0.8 ambient 0.2 }
		translate <MyValue, 0.5+rand(r1)*3, 0>
	}
	#declare MyValue = MyValue + 1;
#end

乱数を使うときは,上のように「seed()」と「rand()」を使います。ここら辺,分かりやすく説明することができないのですがm(_ _)m,使い方を知っていれば乱数を発生できますので,上のように書くんだと覚えてしまってください。

#declare r1 = seed (12345); の部分で,「r1」は適当な名前でかまいません。「ransuu」とかでも大丈夫です。seed()の()内には適当な整数を入れてください。この数を変えると,r1の中身が変わりますので,上の例でいえば球の高さのバラバラさ加減が違うものになります。ここで定義したr1を,rand(r1)のように,rand()の()内に入れて使います。

rand()で発生する乱数は,0〜1の間の数になります。もっと大きな数にしたいときは,上の例のように3をかけたりしてください。


上の画像に加えて,色を適当に変化させてみます。

右のソースの赤字の部分が,付け加えた箇所です。

#declare r1 = seed (12345);
#declare r2 = seed (54321);

#declare MyValue = -3;
#while ( MyValue <=3 )
	object {
		sphere { <0, 0, 0>, 0.5 }
			pigment { color rgb <1*rand(r2), 0, 0> }
			finish { phong 0.8 ambient 0.2 }
		translate <MyValue, 0.5+rand(r1)*3, 0>
	}
	#declare MyValue = MyValue + 1;
#end

上の例では,色の成分のうち赤(r)の部分だけに乱数をかけていますので,暗い赤〜明るい赤だけの色になっていますが,緑(g)や青(b)に乱数をかけることによって,様々な色にすることができます。


大きさを適当に変えてみると,次のようになります。

右のソースの赤字の部分が,付け加えた箇所です。

#declare r1 = seed (12345);
#declare r2 = seed (54321);

#declare MyValue = -3;
#while ( MyValue <=3 )
	object {
		sphere { <0, 0, 0>, 0.5 }
			pigment { color rgb <1, 0, 0> }
			finish { phong 0.8 ambient 0.2 }
		scale rand(r2)*2
		translate <MyValue, 0.5+rand(r1)*3, 0>
	}
	#declare MyValue = MyValue + 1;
#end

ちなみに2005年の年賀状で使った画像(上)は,この乱数の機能を使って作ってみました。上の小さな画像をクリックすると,大きな画像を見ることができます。ニワトリ(もどき)の表面のテクスチャと向きを乱数で変更しながら,繰り返し構文を使って並べたものです。


戻る