Java 为什么这张柏林噪声图像比另一张平滑?

Java 为什么这张柏林噪声图像比另一张平滑?,java,processing,visualization,noise,perlin-noise,Java,Processing,Visualization,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); backgro

希夫曼的一个练习要求我使用处理函数创建柏林噪声。这是我用来制造柏林噪音的代码

 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
时,图像会比未初始化时平滑得多?换句话说,为什么教科书的代码创建的图像比我的代码平滑得多

我注意到,一旦for循环完成,我代码中的
ySpace
将显著大于教科书代码中的
ySpace
。但我不确定这是否是我的代码图像不那么平滑的原因。根据我的理解,噪波(x,y)会产生2d柏林噪波。当应用到像素时,像素应该与周围像素的颜色相似,但它看起来不像是在我的代码中发生的

函数
noise()
基本上采用二维坐标(或三维坐标,或单个数字,但在本例中为二维坐标)并基于该坐标返回随机数。靠得更近的坐标将生成靠得更近的随机数

记住这一点,想想你的代码在做什么,教科书在做什么。教科书根据窗口中的位置以
x,y
坐标输入,这很有意义,因为这是生成随机值的地方


但是您的代码会不断增加
y
坐标。如果只有一列像素一直在下降,但您试图在屏幕上循环像素,这可能是有意义的。

不确定这里的问题是什么。您更改了算法的一个基本参数,当结果与未修改的算法不匹配时,您会感到惊讶。注意,这本书的代码并不是“在第一个循环中初始化
ySpace
”——它会在外部循环的每次迭代中将值重新初始化为零。
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 ;
      }