noise():(我理解的是得到一个无规律的小范围变化的随机值)

返回指定坐标处的Perlin噪声值。Perlin噪声是随机序列发生器,产生比标准random()函数更自然,谐波的数字序列。它由Ken Perlin在20世纪80年代开发,并已用于图形应用程序,以生成程序纹理,形状,地形和其他看似有机的形式。

与随机()相比函数,Perlin噪声定义在无限的n维空间中,其中每对坐标对应一个固定的半随机值(仅在程序的生命周期内固定)。结果值始终介于0.0和1.0之间。处理可以根据给定的坐标数计算1D,2D和3D噪声。通过在噪声空间中移动可以使噪声值动画化,如上面第一个例子中所示。第二维和第三维也可以解释为时间。

就功能的频率使用而言,实际的噪声结构类似于音频信号的结构。类似于物理学中的谐波概念,Perlin噪声是在几个八度音程中计算的,这些八度音程被加在一起以得到最终结果。

调整结果序列字符的另一种方法是输入坐标的比例。由于函数在无限空间内工作,坐标的值无关紧要; 只有连续坐标之间的距离很重要(例如在循环中使用noise()时)。作为一般规则,坐标之间的差异越小,产生的噪声序列越平滑。0.005-0.03的步骤对大多数应用程序最有效,但这取决于使用情况。

关于处理中噪声实施的准确性一直存在争议。为了澄清,它是1983年的“经典Perlin噪音”的实现,而不是2001年的新的“单纯噪音”方法。

random(): 得到一个随机值,无规律的

来看一个noise()单纯的例子:

float xoff = 0.0;

void draw() {
  background(204);
  xoff = xoff + .01;
  float n = noise(xoff) * width;
  println(noise(xoff));
  line(n, 0, n, height);
}

效果如图所示:  

    

process层是做什么的 java代码 process n_竖线

process层是做什么的 java代码 process n_3D_02

 

来,来,来 我们再做一个酷炫的例子:

float my_num = 100;
 
void setup() {
  size(400, 400);
}
 
void draw() {
  background(255 * noise(my_num + 100));
  stroke(255);
 
  // noise() returns a number between 0 and 1
  // when we multiply noise() by width, we get a number between 0 and width
  float x = noise(my_num) * width;
  println(noise(my_num));
  // draw a vertical line
  line(x, 0, x, height);
 
  // we add 40 to my_num to avoid getting the exact same random number
  // we got on our previous call to the noise() function
  float y = noise(my_num + 40) * height;  
  // draw a horizontal line
  line(0, y, width, y);
  
  my_num = my_num + 0.02;
}

效果如图所示:(背景,横竖线有且无规则的变化)

process层是做什么的 java代码 process n_应用程序_03