xxxxxxxxxx
132
// RecurseQuad constructor(a, b, c, d, depth, dense, tilt, miss, evenness, col1, col2, backCol)
// a,b,c,d: corners of start quad
// depth: steps of recusrsion
// dense: perc. of tiles with fill color
// tilt: max tilt of segmentation of one quad from range 0 - 0.5
// miss: perc. of one quad not beeing splittet
// evenness: perc. of split beeing regularly alternating btw. horizontal and vertical
function setup() {
createCanvas(900, 1600);
let grid = 3;
let scl = width / grid;
let offset = 35;
let globalDots = [];
let scheme = [
[color("#D0CEC8"), color("#26355E"), color("#7892B3"), color("#E5976A"), color("#C53C2F")],
[color("#DEECE4"), color("#DCABB5"), color("#8C435D"), color("#281E2F"), color("#3A8777")],
[color("#FFFFDC"), color("#8C8476"), color("#A5C39F"), color("#555B51"), color("#824b02")]
];
let cols = random(scheme)
let backCol = cols[0];
background(backCol);
let borderStrokeW = 15;
let borderCol = color(30);
let a1 = createVector(0, 0);
let b1 = createVector(width, 0);
let c1 = createVector(width, height);
let d1 = createVector(0, height);
let q1 = new RecurseQuad(a1, b1, c1, d1, 9, 1, 0, 0.2, 0.9, color(0, 0), color(0, 0), backCol);
q1.recurse();
q1.show();
translate(0, 50);
for (let x = 0; x < grid; x++) {
for (let y = 0; y < grid + 2; y++) {
push();
translate(x * scl, y * scl);
let a = createVector(offset, offset);
let b = createVector(scl - offset, offset);
let c = createVector(scl - offset, scl - offset);
let d = createVector(offset, scl - offset);
let dots = [a, b, c, d];
if (random() < 0.6) {
let dot = random(dots);
globalX = dot.x + x * scl;
globalY = dot.y + y * scl;
globalDots.push(createVector(globalX, globalY));
}
strokeWeight(borderStrokeW);
stroke(borderCol);
rect(a.x, a.y, scl - 2 * offset, scl - 2 * offset);
strokeWeight(1);
stroke(backCol);
if (random() < 0.9) {
let cs = cols.slice(1, cols.length - 1);
let c1 = random(cs);
let c2 = random(cs);
let steps = floor(random(11, 14));
let dense = random(0.7, 1);
let tilt = random(0.05);
let miss = random(0.3);
let evenness = random(0.7, 1);
let q = new RecurseQuad(a, b, c, d, steps, dense, tilt, miss, evenness, c1, c2, backCol);
q.recurse();
q.show();
push();
while (random() < 0.5) {
scale(random(0.7, 0.9));
rotate(random(0.03, 0.08));
translate(random(20, 30), random(5, 15));
strokeWeight(borderStrokeW);
stroke(borderCol);
rect(a.x, a.y, scl - 2 * offset + 1, scl - 2 * offset + 1);
strokeWeight(1);
stroke(backCol);
let c1 = random(cs);
let c2 = random(cs);
let q = new RecurseQuad(a, b, c, d, steps, dense, tilt, miss, evenness, c1, c2, backCol);
q.recurse();
q.show();
}
pop();
} else {
fill(backCol);
noStroke();
rect(a.x, a.y, scl - 2 * offset, scl - 2 * offset);
}
pop();
}
}
let ff = cols[cols.length - 1];
let c = new Curve();
for (let i = 0; i < globalDots.length; i++) {
c.addPoint(globalDots[i]);
}
c.makeCurve();
c.subdiv(7, 0.25);
strokeWeight(12);
stroke(cols[cols.length - 1]);
c.show();
ff.setAlpha(210);
fill(ff);
noStroke();
for (let i = 0; i < globalDots.length; i++) {
ellipse(globalDots[i].x, globalDots[i].y, 35, 35);
}
save('tiles.png');
}
function draw() {
}