We often use noise in our projects to create a random field, generate a dynamic pattern that appears atmospheric, or as simply a starting point. Below are two examples of animated 2D noise fields created with processing. One is a field of rectangles and the other a field of vectors. They both use Perlin noise, an algorithm for procedural gradient noise created by Ken Perlin in 1983.
import controlP5.*; ControlP5 cp5; float xsize = 12; float ysize = 12; float space = 60; float zcount = 0; float xcount = 0; void setup(){ size(1000,1000); cp5 = new ControlP5(this); cp5.addSlider("Nscale") .setPosition(40,40) .setRange(0,20) .setSize(200,20) .setValue(8) .setColorActive(color(180,180,180)) .setColorLabel(color(255)) .setColorBackground(color(70,70,70)) .setColorValue(color(0,0,0)) .setColorForeground(color(150,150,150)) ; cp5.addSlider("speed") .setPosition(40,80) .setRange(0,0.01) .setSize(200,20) .setValue(0.005) .setColorActive(color(180,180,180)) .setColorLabel(color(255)) .setColorBackground(color(70,70,70)) .setColorValue(color(0,0,0)) .setColorForeground(color(150,150,150)) ; } void draw(){ background(0); noStroke(); for(int x = 0; x < xsize; x++){ for(int y = 0; y < ysize; y++){ float n = noise(x/Nscale + xcount, y/Nscale + zcount); stroke(255); strokeWeight(4); point(x*space + width/2-(xsize*space/2)+space/2,y*space+height/2-(ysize*space/2)+space/2); float theta = map(n,1,0,0,2*PI); float r = space; float xp = x*space + width/2-(xsize*space/2)+space/2 + r * cos(theta); float yp = y*space + height/2-(ysize*space/2)+space/2 + r * sin(theta); stroke(255,255); strokeWeight(1); line(x*space + width/2-(xsize*space/2)+space/2,y*space+height/2-(ysize*space/2)+space/2,xp,yp); } } zcount = zcount + speed; }
import controlP5.*; ControlP5 cp5; float xsize = 12; float ysize = 12; float space = 60; float zcount = 0; float xcount = 0; void setup(){ size(1000,1000); cp5 = new ControlP5(this); cp5.addSlider("Nscale") .setPosition(40,40) .setRange(0,20) .setSize(200,20) .setValue(8) .setColorActive(color(180,180,180)) .setColorLabel(color(255)) .setColorBackground(color(70,70,70)) .setColorValue(color(0,0,0)) .setColorForeground(color(150,150,150)) ; cp5.addSlider("speed") .setPosition(40,80) .setRange(0,0.01) .setSize(200,20) .setValue(0.005) .setColorActive(color(180,180,180)) .setColorLabel(color(255)) .setColorBackground(color(70,70,70)) .setColorValue(color(0,0,0)) .setColorForeground(color(150,150,150)) ; } void draw(){ background(0); noStroke(); for(int x = 0; x < xsize; x++){ for(int y = 0; y < ysize; y++){ float n = noise(x/Nscale + xcount, y/Nscale + zcount); stroke(255); strokeWeight(4); point(x*space + width/2-(xsize*space/2)+space/2,y*space+height/2-(ysize*space/2)+space/2); float theta = map(n,1,0,0,2*PI); float r = space; float xp = x*space + width/2-(xsize*space/2)+space/2 + r * cos(theta); float yp = y*space + height/2-(ysize*space/2)+space/2 + r * sin(theta); stroke(255,255); strokeWeight(1); line(x*space + width/2-(xsize*space/2)+space/2,y*space+height/2-(ysize*space/2)+space/2,xp,yp); } } zcount = zcount + speed; }