memoscan
← all memos

Memo 0x31a42a1c…68a2d2 on Ethereum

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; } } }