Chains of Rings

Chains of rings

% chain.tex :
%
\begin{filecontents*}{chainofrings.asy}
struct chainOfRings{
int n; // number of rings
real 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)}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Source: TeX.SE

Author: g.kov (License)