void setup() {
size(800, 800);
int regions = (int)(random(5,10));
float shapesPerRegion = random(2, 200);
for (int i = 1; i <= regions; i++) {
int shapes = (int)((regions - 1) * shapesPerRegion) + 1;
for (int j = 0; j < shapes; j++) {
float len = (width / pow(2, i - 1));
float x = (int)(random(width / len)) * len;
float y = (int)(random(height / len)) * len;
stroke(0, 2);
noFill();
for (int k = 6; k > 0; k--) {
strokeWeight(k);
rect(x, y, len, len);
}
noStroke();
fill(randomColor());
float r = random(10);
if (r < 6) {
rect(x, y, len, len);
} else if (r < 8) {
fill(randomColor());
rect(x, y, len, len);
fill(randomColor());
triangle(x + len, y + len, x + len, y, x, y + len);
} else {
fill(randomColor());
rect(x, y, len, len);
fill(randomColor());
triangle(x, y, x, y + len, x + len, y + len);
}
}
}
}
int randomColor() {
int colors[] = {
color(77, 39, 94),
color(62, 224, 194),
color(184, 255, 82),
color(254, 143, 44)
};
return colors[int(random(colors.length))];
}