// 1-dimension Perlin noise // from code by Hugo Elias // http://freespace.virgin.net/hugo.elias/models/m_perlin.htm // click into applet window to change increment float s; float inc = .001; void setup() { size(400, 400); } void draw() { noFill(); for (int y=0; y < height; y++) { for (int x=0; x < width; x++) { float r = (perlinNoise(s) + 1) * 128; stroke(r); point(x , y); s += inc; } } println("s" + s); } float noise2(int x) { x = (x << 13) ^ x; return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0); } float smoothedNoise(float x) { return noise2((int)x)/2 + noise2((int)x-1)/4 + noise2((int)x+1)/4; } float linearInterpolate(float a, float b, float x) { return a * (1 - x) + b * x; } float interpolatedNoise(float x) { int intx = (int)x; float fx = x - intx; float v1 = smoothedNoise(intx); float v2 = smoothedNoise(intx + 1); return linearInterpolate(v1, v2, fx); } float perlinNoise(float x) { float total = 0; float p = .25; float n = 4; for (int i = 0; i <= n; i++) { float frequency = pow(2, i); float amplitude = pow(p, i); total += interpolatedNoise(x * frequency) * amplitude; } return total; } void mousePressed() { inc = (mouseX + .0) / 1000; println("inc" + inc); }