Untitled 6

Corneel Cannaerts


Based on: Untitled 6 by Hans Korneder, 1978

Category: direct


Description:

//made during Processing Ghent Recode Workshop

//Corneel Cannaerts @introspect0r

This sketch is running in the browser.






/* 
Part of the ReCode Project (http://recodeproject.com)
Based on "Untitled 6" by Hans Korneder
Originally published in "Computer Graphics and Art" v3n2, 1978
Copyright (c) 2013 Corneel Cannaerts - OSI/MIT license (http://recodeproject/license).
*/

/* @pjs pauseOnBlur="true"; */

//made during Processing Ghent Recode Workshop 
//Corneel Cannaerts  @introspect0r 

int pad;
int numX;
int numY;
int stepX;
int stepY;
float gridOffSet;
float cenOffSet;
ArrayList<Polygon> polygons;

void setup() {
  size(740, 480);
  pad = 80;
  stepX = 80;
  stepY = 80;
  numX = 8;
  numY = 5;
  gridOffSet = 20;
  cenOffSet = 40;
  initPolygons();
}

void draw() {
  background(255);
  stroke(0);
  strokeWeight(2);
  noFill();
  for (Polygon p:polygons) {
    p.render();
  }
  noLoop();
}

//initialize the polygons
void initPolygons() {
  PVector[][] grid = new PVector[8][6]; 
  polygons =  new ArrayList();
  //make a distorted grid
  for (int i=0; i<numX; i++) {
    for (int j=0; j<numY; j++) {    
      grid[i][j] = new PVector(pad+random(-gridOffSet, gridOffSet)+stepX*i, pad+random(-gridOffSet, gridOffSet)+stepY*j);
    }
  }
  //initialize the polygons and add to arraylist
  for (int i=0; i<numX-1; i++) {
    for (int j=0; j<numY-1; j++) {    
      Polygon temp = new Polygon(grid[i][j], grid[i+1][j], grid[i+1][j+1], grid[i][j+1]);
      polygons.add(temp);
    }
  }
}

void mousePressed() {
  initPolygons();
  loop();
}

//simple polygon class
//stores coordinates and center
//renders offset 
class Polygon {
  PVector a, b, c, d, cen;
  Polygon(PVector a, PVector b, PVector c, PVector d) {
    this.a = a;
    this.b = b;
    this.c = c;
    this.d = d;

    //add all coordinates adn divide by 4
    cen = a.get();
    cen.add(b);
    cen.add(c);
    cen.add(d);
    cen.mult(0.25);

    //some centers offset downwards
    if (random(1)<0.5) {
      cen.add(new PVector(random(-cenOffSet, cenOffSet), random(0, cenOffSet)));
    }
  }

  //draw ploygons
  //we interpolate between coordinates and the center using lerp
  void render() {
    for (float i=0; i<1; i+=0.1) {
      beginShape();
      vertex(lerp(a.x, cen.x, i), lerp(a.y, cen.y, i));
      vertex(lerp(b.x, cen.x, i), lerp(b.y, cen.y, i));
      vertex(lerp(c.x, cen.x, i), lerp(c.y, cen.y, i));
      vertex(lerp(d.x, cen.x, i), lerp(d.y, cen.y, i));
      endShape(CLOSE);
      println(i);
    }
    point(cen.x, cen.y);
  }
}