constbgCol="#447abd";constgCol="#a2c2e8";constnGrid=20;letw;letgSpace;functionsetup(){w=max(400,min(windowWidth,windowHeight)*0.9);gSpace=(w/nGrid)*0.95;describe("dynkin diagrams on a blueprint");createCanvas(w,w);rectMode(CENTER);d=w;angleMode(DEGREES);textSize(16);m=7;s=[];s=pisanoPeriod(m);g=(w-2*gSpace)/2/300;}functiondraw(){background(bgCol);translate(w/2,w/2);drawGrid();t=frameCount/3;stroke(255);strokeWeight(3);noFill();n1=12;for(leti=1;i<=n1;i++){push();rotate((360/n1)*i+t+100*sin((t*i)/10));circle(-gSpace*7,0,gSpace*2);circle(-gSpace*3,0,gSpace*2);circle(gSpace*7,0,gSpace*2);circle(gSpace*3,0,gSpace*2);drawingContext.setLineDash([gSpace,0]);line(-gSpace*6,0,-gSpace*4,0);line(gSpace*6,0,gSpace*4,0);drawingContext.setLineDash([gSpace/12,gSpace/2]);line(-gSpace*2,0,gSpace*2,0);pop();}fill(255,255,255,20);noStroke();fill(gCol);text("lie",-w/2+10,w/2-5);}functionpisanoPeriod(m){if(m<=0)return[];if(m===1)return[0];letsequence=[];leta=0;letb=1;do{sequence.push(a);letc=(a+b)%m;a=b;b=c;}while(!(a===0&&b===1)||sequence.length<2);returnsequence;}functiondrawGrid(){stroke(gCol);strokeWeight(0.3);for(leti=1;i<=nGrid;i++){for(letj=1;j<=nGrid;j++){line(-w/2+gSpace*i,-w/2+gSpace,-w/2+gSpace*i,w/2-gSpace);line(-w/2+gSpace,-w/2+gSpace*i,w/2-gSpace,-w/2+gSpace*i);}}noFill();strokeWeight(3);rect(0,0,w-2*gSpace);}