1pair coilpoint(real lambda, real r, real t) 2{ 3 return (2.0*lambda*t+r*cos(t),r*sin(t)); 4} 5 6guide coil(guide g=nullpath, real lambda, real r, real a, real b, int n) 7{ 8 real width=(b-a)/n; 9 for(int i=0; i <= n; ++i) { 10 real t=a+width*i; 11 g=g..coilpoint(lambda,r,t); 12 } 13 return g; 14} 15 16void drawspring(real x, string label) { 17 real r=8; 18 real t1=-pi; 19 real t2=10*pi; 20 real lambda=(t2-t1+x)/(t2-t1); 21 pair b=coilpoint(lambda,r,t1); 22 pair c=coilpoint(lambda,r,t2); 23 pair a=b-20; 24 pair d=c+20; 25 26 draw(a--b,BeginBar(2*barsize())); 27 draw(c--d); 28 draw(coil(lambda,r,t1,t2,100)); 29 dot(d); 30 31 pair h=20*I; 32 draw(label,a-h--d-h,red,Arrow,Bars,PenMargin); 33} 34