今回の記事の目的はProcessingの「randomSeed()
関数」を理解し、自分なりに使ってみること。
【Processing】randomSeed()関数について
- randomSeedは「乱数の種」という意味
- 乱数はランダムという意味
randomSeed()
を使うと、毎回同じ順番で、決まった乱数の数を出てくるようにできます- 【メリット】ランダムを使って、同じ結果を出したいときに使うと便利
random()関数
だけだと、結果がバラバラになりすぎるし、あ~前のランダムの結果が良かったのに……みたいになる。←この前のランダムの結果を再現するには初心者の段階では分からない(この記事を書いている時点の僕もそう。なのでrandomSeed()
関数を使う
- 【注意点】
- 指示する順番や回数によって、表示される「ランダムの数値」が変わる
【Processing】randomSeed()関数の書き方【構文】
- randomSeed(整数)
- randomSeed(10)とかrandomSeed(100)とか
- randomSeed(10000)という大きな整数値も入力して、実行できました
- randomSeed(10)とかrandomSeed(100)とか
【Processing】randomSeed()関数の使い方3つ【画像とコード、重要な補足あり】
【1】指定した整数値で同じ順番で表示されるのか確認する
0から100の範囲で、ランダムを使って、同じ順番で同じ数値で表示させてみます。
よし、randomSeed()
関数を使って、0から100の間で、Processingにランダムな数値を選んでもらおう。
さらに、その数値を出てくる順番を固定して表示させてもらうぞ。randomSeed(50)
なら、どんな数値を出してくれるのかな?
最初は72.97136
次は、59.7892
その次は、61.41579って出た。
なるほど。
要するに、random(0, 100)
に対して、randomSeed(50)
を指示したら、1番目は72.97136、2番めは59.7892、3番目は61.41579が出てくるってことか。
4番目以降も数値は変わるけど固定されています。
size(100, 100);
randomSeed(50);
println(random(0, 100)); // 72.97136
println(random(0, 100)); // 59.7892
println(random(0, 100)); // 61.41579
何回も実行停止をくり返しても同じ数値を表示してくれた。
すごい。
【2】【1】の数値を使って、randomSeed()を使って円を書いてみる
上記の【1の項目】の数値を使って円を描いてみます。
上記の【1の項目】の数値を使って書いたのに、出てきている数値が違う。
【1】では、random(0, 100)
に対して、randomSeed(50)
を指示したら、1番目は72.97136、2番めは59.7892、3番目は61.41579が出てきたのに。
今回の【2】は、62.15813と48.9638と、50.235756だった。
これはなぜか次の「重要な補足」の項目で解説しています。
今はコードの確認をしてください。
size(100, 100); // キャンバスのサイズを設定
background(255); // 背景を白に設定
randomSeed(50); // 乱数の種を50に設定
ellipse(random(0, 100), random(0, 100), random(0, 100), random(0, 100)); // 円を描く
println(random(0, 100)); // 62.15813
println(random(0, 100)); // 48.9638
println(random(0, 100)); // 50.235756
【重要な補足】【1】と【2】では、randomSeed(50)で、random(0, 100)と同じ範囲を指定したのに、表示された数値が違うのはなぜか?
ポイントは、randomSeed(50);
が同じシードを設定しても、その後に random()
を呼び出す順序や回数によって生成される乱数の順番が変わるということ。
だから、【1】と【2】のコードでは結果が違う。
【1】のコードでは、3回連続で random()
を呼び出して乱数を生成し、その結果を表示している。
randomSeed(50);
println(random(0, 100)); // 72.97136
println(random(0, 100)); // 59.7892
println(random(0, 100)); // 61.41579
【2】のコードでは、最初に4回 random()
を呼び出して円を描くための位置やサイズを決めている。その後に3回 random()
を呼び出して結果を表示している。
size(100, 100); // キャンバスのサイズを設定
background(255); // 背景を白に設定
randomSeed(50); // 乱数の種を50に設定
// 4回 `random()` を呼び出している
ellipse(random(0, 100), random(0, 100), random(0, 100), random(0, 100));
// 3回 `random()` を呼び出して結果を表示
println(random(0, 100)); // 72.97136
println(random(0, 100)); // 59.7892
println(random(0, 100)); // 61.41579
randomSeed()
関数は、指示する順番や回数によって、表示される「ランダムの数値」が変わる。
【3】randomSeed()関数を使って、たくさん円を描く
この項目のコードを実行することで、キャンバス上に10個の円がランダムに配置されます。
ただし、randomSeed(50);
を使用しているため、実行するたびに同じ場所に同じ円が描かれます。
void setup() {
size(400, 400); // キャンバスのサイズを設定
background(255); // 背景を白に設定
randomSeed(50); // 乱数の種を50に設定
for (int i = 0; i < 10; i++) { // 10個の円を描く
float x = random(0, width); // キャンバス幅の中でランダムな位置
float y = random(0, height); // キャンバス高さの中でランダムな位置
float r = random(10, 50); // 円の半径をランダムに設定
ellipse(x, y, r, r); // 円を描く
}
}
【Processing】randomSeed()関数はどんな表現で使えそうか
ランダムを使って、図形表現や、ゲームなどで同じ結果を出したいときに使える。
僕は図形表現で主に使います。
【Processing】randomSeed()関数を使ってみた感想
randomSeed()
関数は、ゆるくランダム。みたいな感じなのかなと。random()
関数は、かなりランダムみたいな感じで理解しました。
あと、あんまり詳しくないけど、ガンダムSeedってアニメ思い出しました。面白そうだし、そのうち見てみよう。
それでは今日もレッツワクワクコーディング。