function divideRect(p1, p2, p3, p4, n) {
if (n <= 1) {
return [
{
p1,
p2,
p3,
p4,
fill: CSRandom.pick(colors.colors)
}
];
} else {
const w = distance(...p1, ...p2) + distance(...p3, ...p4);
const h = distance(...p1, ...p4) + distance(...p2, ...p3);
const t = 2 + 8 * skewness;
const r1 = (1 / t) * CSRandom.rangeFloor(1, t);
const r2 = (1 / t) * CSRandom.rangeFloor(1, t);
if (w < h) {
const v1 = divideLine(...p1, ...p4, r1);
const v2 = divideLine(...p2, ...p3, r2);
return [
...divideRect(p1, p2, v2, v1, n - 1),
...divideRect(v1, v2, p3, p4, n - 1)
];
} else {
const v1 = divideLine(...p1, ...p2, r1);
const v2 = divideLine(...p3, ...p4, r2);
return [
...divideRect(p1, v1, v2, p4, n - 1),
...divideRect(v1, p2, p3, v2, n - 1)
];
}
}
}