const COLOR_VARIATION = 0.005;
const COUNTOUR_REGULARITY = 1;
var colors = ["#b4368f", "#33151e", "#434f83", "#ef99dc", "#421430"];
createCanvas(windowWidth, windowHeight);
colors = colors.map(c => color(c));
var cPct = (noise(frameCount*COLOR_VARIATION)+1)%1;
var c = lerpColors(cPct, colors);
c.setAlpha(max(100-frameCount/3, 10));
var radius = frameCount*100/(frameCount+200);
var time = frameCount / 300;
for (var i = 0; i <= SEGMENTS; i++) {
let angle = pct * TWO_PI + HALF_PI;
let cosAngle = cos(angle)*COUNTOUR_REGULARITY;
let sinAngle = sin(angle)*COUNTOUR_REGULARITY;
let noiseValue = noise(sinAngle, cosAngle, frameCount/100) * 4;
var r = (1-pow(abs(sin(pct*PI*PETALS)),CLUSTERING) + 0.5) * radius * noiseValue;
var p = pointForIndex(pct+0.25, centerX, centerY, time, frameCount/10, 0.5, r);
function pointForIndex(pct, x, y, time, intensity, NOISE_SCALE, INNER_RADIUS) {
let angle = pct * TWO_PI;
let cosAngle = cos(angle);
let sinAngle = sin(angle);
let noiseValue = noise(NOISE_SCALE * cosAngle + NOISE_SCALE, NOISE_SCALE * sinAngle + NOISE_SCALE, time);
let radius = INNER_RADIUS + intensity * (noiseValue-0.2);
x: radius * cosAngle + x,
function lerpColors(t, colors)
let i = Math.floor(t*(colors.length-1));
if(i < 0) return colors[0];
if(i >= colors.length-1) return colors[colors.length-1];
let percent = (t - i / (colors.length-1)) * (colors.length-1);
colors[i]._getRed() + percent*(colors[i+1]._getRed()-colors[i]._getRed()),
colors[i]._getGreen() + percent*(colors[i+1]._getGreen()-colors[i]._getGreen()),
colors[i]._getBlue() + percent*(colors[i+1]._getBlue()-colors[i]._getBlue())