2017-02-04 7 views
0

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(); 
} 

を作成するために作られたと、私は自分のコードを実行すると、それは私が教科書内の溶液を見て、この

mySolution

のような画像を作成します。教科書は、外側のループが繰り返されるたびに、に戻って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外側のループに再初期化され、この

textbookSolution

なぜ、などのよりスムーズな画像を作成し、その時よりはるかに滑らかですか?言い換えれば、教科書のコードが私のコードよりもはるかに滑らかなイメージを作成するのはなぜですか?

forループが完了すると、コード内のySpaceが教科書のコードのySpaceよりも大幅に大きくなることがわかりました。しかし、なぜ私のコードのイメージが滑らかではないのかがわかりません。私の理解から、ノイズ(x、y)は2dパーリンノイズを生成します。ピクセルに適用すると、ピクセルは周囲のピクセルと似た色になるはずですが、コード内でそのように見えません。

+1

ここで何が問題なのかよく分かりません。アルゴリズムの基本パラメータを変更し、結果が変更されていないアルゴリズムと一致しない場合は驚きました。ブックのコードは、最初のループ内で "ySpace'を初期化しません" - *** ***は、外側のループの_every_繰り返しごとに値をゼロに初期化します。 –

+0

私の間違いを訂正するために投稿を編集しました。 'ySpace'の再初期化は教科書のイメージが私のものよりもはるかに滑らかな理由ですか? –

答えて

1

noise()関数は、基本的に2次元座標(または3次元座標、または1つの数値ですが、場合によっては2次元座標)を取り、その座標に基づいて乱数を返します。互いに接近している座標は、互いに近い乱数を生成します。

これを念頭に置いて、コードが何をしているのか、そして教科書が何をしているのかを考えてみましょう。教科書は、ウィンドウ内の位置に基づいてx,yの座標で供給されています。これは、結果のランダム値が描画される場所であるため意味があります。

しかし、あなたのコードは何であってもyの座標を増加し続けます。これはちょうど落ち続けていたピクセルの列が1つだけあったとしても、画面上のピクセルをループさせようとしている場合に意味があります。

関連する問題