const firstLen = 8; const nSegments = 16; let firstSegment = null; let frame = 0; function setup() { createCanvas(300, 300); firstSegment = new Segment(0, 0, firstLen, 0); let len = firstLen; for(let i=1, seg = firstSegment; i < nSegments; i++, seg=seg.child){ let next = new Segment( seg.end().x, seg.end().y, len, 0); seg.child = next; } } function draw() { background(0); frame = (frame+1); for(let i=0, seg = firstSegment; seg; i++, seg=seg.child){ let delay = i*PI/nSegments+PI/4; let coef = 3*PI/nSegments*sin(PI/256*frame-delay); seg.setHeading(coef); } translate(width/2, height/2); for(let i=0; i < 5; i++){ rotate(PI/2); for(let seg = firstSegment; seg; seg=seg.child) seg.draw(); } }