var T = (timeForCycle + timeForWait/2)/(timeForCycle + timeForWait);
var dT = 1 / (30 * (timeForCycle + timeForWait));
maxGonInside = floor(TWO_PI/( PI - interiorAngle));
drawPolygon(interiorAngle, 2, true);
for (let i = 3; i <= maxGonInside; i++) {
drawPolygon(PI*(i-2)/i, 1, false);
interiorAngle = timeToAngle(T);
function reflectScreen() {
for (let y = 0; y < height; y++) {
for (let x = 0; x < width/2; x++) {
var index = 4 * (x + y*width);
var reflectIndex = 4 * ((width-1 - x) + y*width);
pixels[index] = pixels[reflectIndex];
pixels[index+1] = pixels[reflectIndex+1];
pixels[index+2] = pixels[reflectIndex+2];
pixels[index+3] = pixels[reflectIndex+3];
function drawPolygon(iA, weight, isMain) {
translate(width/2, height-10);
if (T*(timeForCycle + timeForWait) > timeForCycle) {
vertex(map(timeToSpread(T), 0, 1, 2, sideLength/2), 0);
p = createVector(sideLength/2, 0);
segment = createVector(sideLength, 0);
segment.rotate(-(PI - iA));
while (p5.Vector.add(p, segment).y < p.y) {
segment.rotate(-(PI - iA));
function timeToAngle(t) {
if (t*(timeForCycle + timeForWait) < timeForCycle) {
t = t * (timeForCycle + timeForWait) / timeForCycle;
var n = map(t, 0, 1, minSides, maxSides);
function timeToSpread(t) {
t = map(t, timeForCycle/(timeForCycle+timeForWait), 1, 0, 1);
var spread = pow(2 * abs(t-0.5), waitFlatness);