0x983f10b6…313dsent to0xa7d8d9ef…d270·#13,374,940·view on Etherscan
function draw() {
background(col[0]);
strokeWeight(u * 0.8);
stroke(col[1]);
let m = 2 * u;
let tEC = cH * def * gR;
let wEC = cW * def * gR;
let hH = cH / 2;
let hW = cW / 2;
pattSides = [
[[m, m], [cW - m, m]],
[[cW - m, m], [cW - m, cH - m]],
[[cW - m, cH - m], [m, cH - m]],
[[m, cH - m], [m, m]]
];
let recFP = [
[[m, m], [cW - m, m]],
[[cW - m, m], [cW - m, cH - m]],
[[cW - m, cH - m], [m, cH - m]],
[[m, cH - m], [m, m]]
];
let cenP = [
[[hW, hH], [hW, hH]],
[[hW, hH], [hW, hH]],
[[hW, hH], [hW, hH]],
[[hW, hH], [hW, hH]],
];
allPattP.push(buildQuad(pattSides));
if (rP == 1) {
allPattP.push(buildQuad(cenP));
}
for (let i = 1; i < rP; i++) {
rectRecurser(recFP, cW / 1.3, cH / 1.3, rP);
allPattP.push(buildQuad(recFP));
}
let shapeSides = [];
let wCalc = (cW - cW * def) / 2;
let hCalc = (cH - cH * def) / 2;
if (shape == 1 || shape == 4 || shape == 7) {
shapeSides = [
[[wCalc, hCalc], [cW - wCalc, hCalc]],
[[cW - wCalc, hCalc], [cW - wCalc, cH - hCalc]],
[[cW - wCalc, cH - hCalc], [wCalc, cH - hCalc]],
[[wCalc, cH - hCalc], [wCalc, hCalc]]
];
}
if (shape == 2 || shape == 5 || shape == 8) {
shapeSides = [
[[wCalc, hH], [hW, hCalc]],
[[hW, hCalc], [cW - wCalc, hH]],
[[cW - wCalc, hH], [hW, cH - hCalc]],
[[hW, cH - hCalc], [wCalc, hH]]
];
}
if (shape != 3 && shape != 6 && shape != 9) {
for (let i = 1; i <= rS; i++) {
allSP.push(buildQuad(shapeSides));
if (shape == 1 || shape == 4 || shape == 7) {
rectRecurser(shapeSides, cW / 1.66, cH / 1.66, rS);
}
if (shape == 2 || shape == 5 || shape == 8) {
diamRecurser(shapeSides, cW / 1.66, rS);
}
}
}
if (shape == 3) {
let cP = (midPs + 1) * 4;
let radi = cW * def /2;
for (let i = 1; i <= rS; i++) {
let points = [];
points.push(circumP(cP,radi));
allSP.push(points);
radi = radi - radi / 4;
}
}
function circumP(cP, radi) {
let ps = [];
for (let i = 0; i < cP; i++) {
let x = (radi * Math.cos((2 * Math.PI * i) / cP)) + hW;
let y = (radi * Math.sin((2 * Math.PI * i) / cP)) + hH;
ps.push([x, y]);
}
return ps;
}
if (shape == 6 || shape == 9) {
let cP = midPs + 1;
let side1 = [];
let side2 = [];
for (let i = 0; i <= cP; i++) {
let t = i / cP;
if (shape == 6) {
side1.push(getCurvePoints(cW + wEC, 0, hW, hCalc, hW, cH - hCalc, cW + wEC, cH, t));
side2.push(getCurvePoints(-wEC, cH, hW, cH - hCalc, hW, hCalc, -wEC, 0, t));
} else {
side1.push(getCurvePoints(0, cH + tEC, wCalc, hH, cW - wCalc, hH, cW, cH + tEC, t));
side2.push(getCurvePoints(cW, - tEC, cW - wCalc, hH, wCalc, hH, 0, - tEC, t));
}
function getCurvePoints(c1x, c1y, x1, y1, x2, y2, c2x, c2y, t) {
x = curvePoint(c1x, x1, x2, c2x, t);
y = curvePoint(c1y, y1, y2, c2y, t);
let p = [x, y];
return p;
}
}
allSP.push([side1, side2]);
for (let i = 1; i < rS; i++) {
let lastSet = allSP.length -1;
let newSet = [];
for (let crv = 0; crv <2; crv ++){
let newPs = [];
for (let v = 0; v < allSP[lastSet][crv].length; v++) {
let oldP = allSP[lastSet][crv][v];
let newX, newY;
if (shape == 6) {
newY = ((oldP[1] - hH)) * .88 + hH;
newX = oldP[0];
} else {
newX = ((oldP[0] - hW)) * .88 + hW;
newY = oldP[1];
}
newPs.push([newX,newY]);
}
newSet.push(newPs);
}
allSP.push(newSet);
}
}
function rectRecurser(ss, xLim, yLim, r) {
let xD = (xLim - ss[0][0][0]) / r;
let yD = (yLim - ss[0][0][1]) / r;
ss[0][0][0] += xD;
ss[0][0][1] += yD;
ss[0][1][0] -= xD;
ss[0][1][1] += yD;
ss[1][0][0] -= xD;
ss[1][0][1] += yD;
ss[1][1][0] -= xD;
ss[1][1][1] -= yD;
ss[2][0][0] -= xD;
ss[2][0][1] -= yD;
ss[2][1][0] += xD;
ss[2][1][1] -= yD;
ss[3][0][0] += xD;
ss[3][0][1] -= yD;
ss[3][1][0] += xD;
ss[3][1][1] += yD;
}
function diamRecurser(ss, xLim, r) {
let xD = (xLim - ss[0][0][0])/r;
ss[0][0][0] += xD;
ss[0][1][1] += xD;
ss[1][0][1] += xD;
ss[1][1][0] -= xD;
ss[2][0][0] -= xD;
ss[2][1][1] -= xD;
ss[3][0][1] -= xD;
ss[3][1][0] += xD;
}
function buildQuad(qSides) {
rectMode(CENTER);
let allP = [];
let sideP = [];
for (let side = 0; side < 4; side++) {
sideP = lineBreaker(qSides[side][0], qSides[side][1]);
allP.push(sideP);
}
return allP;
function lineBreaker(p1, p2) {
let lineP = [[...p1]];
for (let i = 1; i < midPs + 2; i++) {
lineP.push(getPoint(p1, p2, i / (midPs + 1)));
}
lineP.push([...p2]);
return lineP;
function getPoint(p1, p2, t) {
let newX = t * (p2[0] - p1[0]) + p1[0];
let newY = t * (p2[1] - p1[1]) + p1[1];
let point = [newX, newY];
return point;
}
}
}