「がんばれない」けど「がんばりたい」

ITエンジニアの仕事のこと。AI、機械学習、ディープラーニング。地頭力。車のこと。

乱数とPerlin Noise

1)乱数については下のコードに統一しよう。

float randnum = (ofRandom(1) * (max - min)) + min;

2)パーリンNoiseは、…※ジェネラティブ・アートより引用

一般に数列を作成する。一連の乱数値(シード値)をわたすと、 それぞれの値によって0と1の間のノイズを返します。 数列をどの種から始めても良いが、スタート地点(乱数種)をランダムにしないと、 結果として生じる乱数が毎回同じになってしまいます。 種の増分を0と0.1の間くらいの小さな値にするのが最も良い結果を生み出す。

種を決める方法は何でも良いが、 だいたいRandom関数を使用するのが一般。 (※1)

その後の、ノイズを生成するところが、ちょっとポイント。 ofNoiseの引数に与える値(種)を 毎回Random関数で作成してしまうと、 思った通りにならないかもしれないです。 =>これだったら、パーリンノイズを使用する必要ない?   毎回Random関数で作った値でいいと思う。

なのでofNoiseの引数に与える種は、 上記の引用のように、 最初に作成した乱数種に対して、 0〜0.1の間のものを加算する。(※2)

//10までの乱数を作成(※1|乱数種)
float noise = ofRandom(1)+(10 - 0)+0;
float pNoise;

void draw() {
  pNoise = ofNoise(noise);
  noise += 0.03;(※2)
}

3)乱数のべき乗などのメモ ※ジェネラティブ・アートより引用

乱数(0〜1)を2乗すれば0に近づく。 1/2乗(ルート)にしたら、値は逆に1に近づく。 5乗にすると、ほとんどランダムでない結果を得られる