// Un début de quelque chose qui pourrait être une extension, un jour, // pour tracer des tableaux de signes et/ou variations. // MAIS, il y a un grand MAIS : si je devais me lancer vraiment // là dedans... tout serait à repenser pour donner la souplesse // nécessaire à l'ajout de nouvelles possibilités. import fontsize; restricted bool cr=true; restricted bool decr=false; picture tabvar(string var="x", string fonct="f", string deriv="f'(x)", string[] lx, string[] ly, bool3 psv=default, real[] v={0,1}, bool affderivee=false, string[] ld={" "}, bool m=true, real x1=1.2, real x2=2.5, real y1=1, real y2=2, pen styletrait=1bp+black, pen stylefleche=styletrait) { picture pic; real fx(real x) {return 3/2*x1+x*x2;} real l=x1/20; string d=(m==true)?"$":""; int n=lx.length-1; while (ly.length0)?v.push(0):v.push(1); while (v.length-1) { draw(pic,(fx(i)-l,-y1+delta)--(fx(i)-l,-2*y1+delta-y2)^^(fx(i)+l,-y1+delta)--(fx(i)+l,-2*y1+delta-y2),styletrait); string[] lim; lim=split(ly[i],"VI"); int zu=1; if(i==0) zu=0; if(i!=0) { im.push(draw(pic,Label(d+((m==true)?replace(lim[0],"inf","\infty"):lim[0])+d,align=W),box,(fx(i),vn[i+decal]),invisible)); relier.push(false); } if(i!=n) { im.push(draw(pic,Label(d+((m==true)?replace(lim[1],"inf","\infty"):lim[1])+d,align=E),box,(fx(i),vn[i+decal+zu]),invisible)); relier.push(true); } if(i!=0&&i!=n) { ++decal; vn.push(vn[vn.length-2]); } } else { im.push(draw(pic,d+((m==true)?replace(ly[i],"inf","\infty"):ly[i])+d,box,(fx(i),vn[i+decal]),invisible)); relier.push(true); } } add(pic,new void(picture pic2, transform t) { for(int i=0; i