% chain.tex :%\begin{filecontents*}{chainofrings.asy}struct chainOfRings{int n; // number of ringsreal w;pair origin;pen[] clrA={deepgreen,deepblue};pen[] clrB={white,lightyellow,palered};guide qring;real Rscaled(int);real rscaled(int);real eps;void drawHalf(int i,real Rt,real rt, pair p,real phi){qring=rotate(phi)*(arc((0,0),Rt,-eps,90+eps)--reverse(arc((0,0),rt,-eps,90+eps))--cycle);radialshade(shift(p)*qring,clrA[i%clrA.length], p, (Rt+rt)*0.382,clrB[i%clrB.length], p, (Rt+rt)*0.618);radialshade(shift(p)*rotate(180)*qring,clrA[i%clrA.length], p, (Rt+rt)*0.382,clrB[i%clrB.length], p, (Rt+rt)*0.618);}void drawChain(){pair p;real Rt,rt,dh;p=origin; Rt=Rscaled(0); rt=rscaled(0);for(int i=0;irt && rt>0 && w>0);p+=(0,-(dh+Rt-w));}p=origin; Rt=Rscaled(0); rt=rscaled(0);for(int i=0;irt && rt>0 && w>0);p+=(0,-(dh+Rt-w));}}void operator init(pair origin=(0,0),int n=3,real Rscaled(int),real rscaled(int),pen[] clrA={gray(0.5),gray(0.7)}
Source: TeX.SE