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);
}
效果如图所示:
来,来,来 我们再做一个酷炫的例子:
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;
}
效果如图所示:(背景,横竖线有且无规则的变化)