代码本色–前五章编程习作(processing)
本文章主要是基于《代码本色》这本书的内容编写的拓展程序,使用语言为processing。
随机行为编程(曲面)
提到随机,大家可能先想到的就是random了,日常编程需要随机数时,基本都是使用random去生成随机数,实际上random产生的随机数是服从均匀分布的,他也不是真正意义上的‘随机’数。在processing中,我们还可以产生服从正态分布的随机数,使用nextGaussian()函数即可产生服从正态分布的随机数,但是这些方法产生的随机数不是很自然,我们可以使用Perlin噪声产生符合自然排序的伪随机数,processing也有现成的函数noise()实现Perlin噪声算法,noise()函数具体使用详见noise()函数解析,下面我就基于Perlin噪声生成美丽的图案。
图案展示
下为示例图案(因行为随机,每次运行曲面走向不同,产生图案不同),动图所占内存太大,所以只能录其中一部分
代码展示
public void update(float nx, float ny)
{
this.pre_x=this.noise_x;
this.pre_y=this.noise_y;
this.noise_x=nx;
this.noise_y=ny;
line(pre_x, pre_y, noise_x, noise_y);
}
void draw() {
if (t%3==0)
{
time=time+0.005f;
}
if (t<=1440)
{
initH=t/4;
initS=t/1440*20+80;
initB=t/1440*20+80;
} else
{
t=1;
initH=t/4;
initS=t/1440*20+80;
initB=t/1440*20+80;
}
t++;
float alpha=map(noise(time), 0,1,1,5);
stroke(initH, initS, initB, alpha);
// stroke(130);
//stroke(100, 200,10,3);
strokeWeight(1);
if (time<20f)
{
for (int i=0;