w = min(windowWidth, windowHeight)
createCanvas(windowWidth,windowHeight)
palette = random(palettes)
ctx = canvas.getContext('2d');
ctx.shadowColor = 'black';
function makeHexSpiral(mod) {
drawHexagon(currX, currY, 0);
for (n = 1; n < maxCellNum; n++) {
for (i = 0; i < n; i++) {
drawHexagon(currX, currY, offset + i);
for (i = 0; i < n - 1; i++) {
drawHexagon(currX, currY, offset + i);
for (i = 0; i < n; i++) {
drawHexagon(currX, currY, offset + i);
for (i = 0; i < n; i++) {
drawHexagon(currX, currY, offset + i);
for (i = 0; i < n; i++) {
drawHexagon(currX, currY, offset + i);
for (i = 0; i < n; i++) {
drawHexagon(currX, currY, offset + i);
for (i = 0; i < n; i++) {
drawHexagon(currX, currY, offset + i);
background(random(palette))
translate(windowWidth/2,windowHeight/2)
function drawHexagon(posX,posY,rad){
posY = (sqrt(3) / 2) * posY;
drawLeaf(posX,posY,spacing/1.75,rad)
function drawLeaf(posX,posY,rad,divs){
for(a = 0; a< TAU; a+=div){
x2 = rad*randRad*cos(a+div/2)
y2 = rad*randRad*sin(a+div/2)
for(nn = 1; nn<num+1; nn++){
interX1 = 0*rat + x1*(1-rat)
interY1 = 0*rat + y1*(1-rat)
interX2 = x2*(1-rat) + x3*rat
interY2 = y2*(1-rat) + y3*rat
ratprev = map(nn-1,0,num,0,1)
interX1prev = 0*ratprev + x1*(1-ratprev)
interY1prev = 0*ratprev + y1*(1-ratprev)
interX2prev = x2*(1-ratprev) + x3*ratprev
interY2prev = y2*(1-ratprev) + y3*ratprev
var gradient = ctx.createLinearGradient(interX1,interY1, interX2prev,interY2prev);
gradient.addColorStop(0, random(palette));
gradient.addColorStop(1, random(palette));
ctx.fillStyle = gradient;
ctx.moveTo(interX1,interY1)
ctx.lineTo(interX2,interY2)
ctx.lineTo(interX2prev,interY2prev)
ctx.lineTo(interX1prev,interY1prev)
interX3 = 0*rat + x3*(1-rat)
interY3 = 0*rat + y3*(1-rat)
interX4 = x1*rat + x2*(1-rat)
interY4 = y1*rat + y2*(1-rat)
interX3prev = 0*ratprev + x3*(1-ratprev)
interY3prev = 0*ratprev + y3*(1-ratprev)
interX4prev = x1*ratprev + x2*(1-ratprev)
interY4prev = y1*ratprev + y2*(1-ratprev)
var gradient = ctx.createLinearGradient(interX3,interY3, interX4prev,interY4prev);
gradient.addColorStop(0, random(palette));
gradient.addColorStop(1, random(palette));
ctx.fillStyle = gradient;
ctx.moveTo(interX3,interY3)
ctx.lineTo(interX4,interY4)
ctx.lineTo(interX4prev,interY4prev)
ctx.lineTo(interX3prev,interY3prev)
palettes = [['#492b7c', '#301551', '#ed8a0a', '#f6d912', '#fff29c'],
['#454d66', '#309975', '#58b368', '#dad873', '#efeeb4'],
['#492b7c', '#301551', '#ed8a0a', '#f6d912', '#fff29c','#454d66', '#309975', '#58b368', '#dad873', '#efeeb4'],
['#1f306e', '#553772', '#8f3b76', '#c7417b', '#f5487f'],
['#ff165d', '#ff9a00', '#f6f7d7', '#3ec1d3'],
['#1f306e', '#553772', '#8f3b76', '#c7417b', '#f5487f','#454d66', '#309975', '#58b368', '#dad873', '#efeeb4'],
["#dc060e", "#ffd400", "#0064b0", "#001a5b", "#ffffff"],
['#ff165d', '#ff9a00', '#f6f7d7', '#3ec1d3',"#dc060e", "#ffd400", "#0064b0", "#001a5b", "#ffffff",'#492b7c', '#301551', '#ed8a0a', '#f6d912', '#fff29c','#454d66', '#309975', '#58b368', '#dad873', '#efeeb4']
let halfImage = 4 * (width * d) * (height * d);
for (let ii = 0; ii < halfImage; ii += 4) {
grainAmount = random(-gA,gA)
pixels[ii] = pixels[ii]+gA;
pixels[ii + 1] = pixels[ii+1]+grainAmount;
pixels[ii + 2] = pixels[ii+2]+grainAmount;
pixels[ii + 3] = pixels[ii+3]+gA;