let startWidthScale, lengthScale, rotOffset, m
m= min(windowWidth, windowHeight)
createCanvas(windowWidth, windowHeight);
for(let x=0; x<width+spacing; x+=spacing*2){
for(let y=0; y<height+spacing; y+=spacing){
snowFlake(x+spacing, y-(spacing*0.5), gs)
function snowFlake(x, y, size){
let initalLength=size*0.5
startWidthScale= random(0.008, 0.04)
lengthScale=random(0.35, 0.55)
rotOffset=random(-PI*0.1, PI*0.08)
for(let i=0; i<TAU; i+=inc){
let start= createVector(0, 0)
flakeFractal(start, initalLength)
function flakeFractal(startPos, length){
strokeWeight(length*0.01)
let startWidth= length*startWidthScale
triangle(startPos.x-startWidth, startPos.y, startPos.x+startWidth, startPos.y, startPos.x, startPos.y-length)
let pos= createVector(0, 0)
for(let i=addInc; i<length-addInc; i+=addInc){
let newLength= map(abs(i-length/2), length/2, 0, 0, length*lengthScale)
translate(startPos.x, startPos.y-i)
rotate(-QUARTER_PI+rotOffset)
flakeFractal(pos, newLength)
translate(startPos.x, startPos.y-i)
rotate(QUARTER_PI-rotOffset)
flakeFractal(pos, newLength)