Facets

to generate a new and unique variation

Source Code

Every variart piece is a small program. This is the one that drew what you're looking at.

var background = '#FFFFFF';
var dark = '#4A4A4C';
var light = '#FFFFFF';
var margin = 60;

var cells = intVariable('Grid', 3, 7);
var wobble = intVariable('Wobble', 0, 30);

s.rect(0, 0, width, height).attr({fill: background});

var size = (width - margin * 2) / cells;
var jitter = size * wobble / 100;

// Jittered lattice. Points on the border move less, so its ragged edge stays
// clear of the canvas wrap.
var edgeJitter = Math.min(jitter, 15);
var points = [];
for (var r = 0; r <= cells; r++){
  points.push([]);
  for (var c = 0; c <= cells; c++){
    var dx = getRandomArbitary(-1, 1) * ((c == 0 || c == cells) ? edgeJitter : jitter);
    var dy = getRandomArbitary(-1, 1) * ((r == 0 || r == cells) ? edgeJitter : jitter);
    points[r].push([margin + c * size + dx, margin + r * size + dy]);
  }
}

function triangle(a, b, c){
  var fill = getRandomInt(0, 9) < 4 ? dark : light;
  s.polygon(a[0], a[1], b[0], b[1], c[0], c[1])
    .attr({fill: fill, stroke: dark, strokeWidth: 1, strokeLinejoin: 'round'});
}

// Each cell fans out from a point somewhere inside it into four triangles.
for (var r = 0; r < cells; r++){
  for (var c = 0; c < cells; c++){
    var tl = points[r][c], tr = points[r][c + 1];
    var br = points[r + 1][c + 1], bl = points[r + 1][c];
    var u = getRandomArbitary(0.2, 0.8), v = getRandomArbitary(0.2, 0.8);
    var top = [tl[0] + (tr[0] - tl[0]) * u, tl[1] + (tr[1] - tl[1]) * u];
    var bottom = [bl[0] + (br[0] - bl[0]) * u, bl[1] + (br[1] - bl[1]) * u];
    var centre = [top[0] + (bottom[0] - top[0]) * v, top[1] + (bottom[1] - top[1]) * v];
    triangle(tl, tr, centre);
    triangle(tr, br, centre);
    triangle(br, bl, centre);
    triangle(bl, tl, centre);
  }
}