ShiffmanのNature of Codeでの演習では、Processingのnoise()関数を使用してPerlin Noiseを作成するように求められています。ここに私のコードは、私はパーリンノイズなぜこのパーリンノイズ画像は他の画像より滑らかですか?
float xSpace = 0; // Signifies "space" between noise() values on the x coordinate.
float ySpace = 0; // Signifies "space" between noise() values on the y coordinate.
void setup(){
size(500,500);
background(0);
loadPixels();
for(int x = 0; x < width; x++) {
for(int y = 0; y < height; y++) {
float bright = map(noise(xSpace,ySpace),0,1,0,255);
pixels[(y * width) + x] = color(bright);
//Each pixel in the pixels[] array is a color element.
ySpace = ySpace + 0.01;
}
xSpace = xSpace + 0.01 ;
}
updatePixels();
}
を作成するために作られたと、私は自分のコードを実行すると、それは私が教科書内の溶液を見て、この
のような画像を作成します。教科書は、外側のループが繰り返されるたびに、に戻ってySpace
を再初期化する以外は、教科書の解と私の解はほぼ同じです。私は教科書のコードを実行したときに
// Textbook's solution
for(int x = 0; x < width; x++) {
ySpace = 0;
for(int y = 0; y < height; y++) {
float bright = map(noise(xSpace,ySpace),0,1,0,255);
pixels[(y * width) + x] = color(bright);
ySpace = ySpace + 0.01;
}
xSpace = xSpace + 0.01 ;
}
しかし、コードは画像が出ない、ySpace
外側のループに再初期化され、この
なぜ、などのよりスムーズな画像を作成し、その時よりはるかに滑らかですか?言い換えれば、教科書のコードが私のコードよりもはるかに滑らかなイメージを作成するのはなぜですか?
forループが完了すると、コード内のySpace
が教科書のコードのySpace
よりも大幅に大きくなることがわかりました。しかし、なぜ私のコードのイメージが滑らかではないのかがわかりません。私の理解から、ノイズ(x、y)は2dパーリンノイズを生成します。ピクセルに適用すると、ピクセルは周囲のピクセルと似た色になるはずですが、コード内でそのように見えません。
ここで何が問題なのかよく分かりません。アルゴリズムの基本パラメータを変更し、結果が変更されていないアルゴリズムと一致しない場合は驚きました。ブックのコードは、最初のループ内で "ySpace'を初期化しません" - *** ***は、外側のループの_every_繰り返しごとに値をゼロに初期化します。 –
私の間違いを訂正するために投稿を編集しました。 'ySpace'の再初期化は教科書のイメージが私のものよりもはるかに滑らかな理由ですか? –