%%
verbatimtex
%&latex
\documentclass{article}
\usepackage[frenchb]{babel}
\usepackage[latin1]{inputenc}
\usepackage{amsmath,amssymb}
\begin{document}
etex
prologues:=2;
defaultfont:="cmmi10";
input geometrie31;
input constantes;
%papier millimétré
vardef millimetre suffix co =
 color coul;
 numeric hauteur, largeur ;
 path p[];
 %ligne horizontale
 p1:=(x.so*cm, 0)--(x.ne*cm, 0);
 %ligne verticale
 p2:=(0,y.so*cm)--(0,y.ne*cm);
 %choix de la couleur
 if str co ="" :
 coul:= orange
 else :
 coul:=co
 fi;
 %grille millimétrique
%christ pickup pencircle scaled 0.2;
 %lignes horizontales
%christ for i:=y.so step 0.1 until y.ne :
%christ draw p1 shifted (0,i*cm) withcolor coul;
%christ endfor;
%christ %lignes verticales
%christ for i:=x.so step 0.1 until x.ne :
%christ draw p2 shifted (i*cm,0) withcolor coul;
%christ endfor;
 %grille demi-centimétrique
 pickup pencircle scaled 0.5;
 %lignes horizontales
 for i:=y.so step 0.5 until y.ne:
 draw p1 shifted (0,i*cm) withcolor coul;
 endfor;
 %lignes verticales
 for i:=x.so step 0.5 until x.ne :
 draw p2 shifted (i*cm,0) withcolor coul;
 endfor;
 %grille centimétrique
 pickup pencircle scaled 0.5;%christ 0.7
 %lignes horizontales
 for i:=y.so step 1 until y.ne:
 draw p1 shifted (0,i*cm) withcolor coul;
 endfor;
 %lignes verticales
 for i:=x.so step 1 until x.ne :
 draw p2 shifted (i*cm,0) withcolor coul;
 endfor;
 %grille penta-centimétrique
 %lignes horizontales
 pickup pencircle scaled 0.5;%christ 1
 for i:=0 step -5 until y.so :
 draw p1 shifted (0,i*cm) withcolor coul;
 endfor;
 for i:=0 step 5 until y.ne :
 draw p1 shifted (0,i*cm) withcolor coul;
 endfor;
 %lignesverticales
 for i:=0 step -5 until x.so :
 draw p2 shifted (i*cm,0) withcolor coul;
 endfor;
 for i:=0 step 5 until x.ne :
 draw p2 shifted (i*cm,0) withcolor coul;
 endfor;
enddef;

vardef origine(expr p)=
  x.origine:=xpart(p);
  y.origine:=ypart(p);
enddef;

%graduation de l 'axe des x
vardef graduationx suffix inc =
  dotlabel.llft(btex $O$ etex,(x.origine*cm,y.origine*cm));
  label.top(btex \begin{minipage}{2cm}
    \begin{center}
    Valeurs\\ de $x$
    \end{center}
    \end{minipage}
    etex,(x.ne*cm-0.5cm,y.origine*cm));%Christ llft, pas de -0.5cm
  dotlabel.bot(btex 1 etex,z.origine*cm+(1*x.u,0));
  pickup pencircle scaled 1.5;%Christ 0.5
  drawarrow (x.so*cm,y.origine*cm)--(x.ne*cm,y.origine*cm);
  %label.lrt( btex $x'$ etex,(x.so*cm,y.origine*cm));
enddef;

%graduation de l 'axe des y
vardef graduationy suffix inc =
  label.lrt( btex Valeurs de ${\cal A}(x)$ etex,(x.origine*cm,y.ne*cm));
  dotlabel.lft(btex 1 etex,z.origine*cm+(0,1*y.u));
  pickup pencircle scaled 1.5;%Christ 0.5
  drawarrow (x.origine*cm,y.so*cm)--(x.origine*cm,y.ne*cm);
  %label.urt( btex $y'$ etex,(x.origine*cm,y.so*cm)) ;
enddef;
%Calcul des coordonnées des points
vardef courbe[](expr a,b,nb) suffix co =
 for i:=0 upto nb :
 x@[i]:=(a+i*(b-a)/nb);
 x:=x@[i];
 ordonnee@(i); % calcul de l'ordonnée du point d'indice i
 endfor ;
 Cb@:= (x@.0*x.u,y@.0*y.u)
 for i:=1 upto nb :
   ..(x@[i]*x.u,y@[i]*y.u)
 endfor;
 Cb@:=Cb@ shifted (z.origine*cm);
 if str co <>"" :
 draw Cb@ withcolor co
fi;
clip currentpicture to z.so*cm--(x.ne,y.so)*cm--z.ne*cm--(x.so,y.ne)*cm--cycle;
enddef;

vardef param[](expr a,b,nb) suffix co=
 for i:=0 upto nb :
 t@[i]:= (a+i*(b-a)/nb) ;
 coordonnees@(i);
 endfor;
 Cb@:= (x@.0*x.u,y@.0*y.u)
 for i:=1 upto nb :
 ..(x@[i]*x.u,y@[i]*y.u)
endfor;
Cb@:=Cb@ shifted (z.origine*cm);
if str co <>"" :
  draw Cb@ withcolor co
fi;
clip currentpicture to z.so*cm--(x.ne,y.so)*cm--z.ne*cm--(x.so,y.ne)*cm--cycle;
enddef;

vardef polaire[](expr a,b,nb) suffix co=
 for i:=0 upto nb :
 t@[i]:= (a+i*(b-a)/nb) ;
 coordpolaire@(i);
 endfor;
 Cb@:= (x@.0*x.u,y@.0*y.u)
 for i:=1 upto nb :
 ..(x@[i]*x.u,y@[i]*y.u)
endfor;
Cb@:=Cb@ shifted (z.origine*cm);
if str co <>"" :
  draw Cb@ withcolor co
fi;
clip currentpicture to z.so*cm--(x.ne,y.so)*cm--z.ne*cm--(x.so,y.ne)*cm--cycle;
enddef;
%etiquettage de la cour Cb@#
vardef labelise@#(expr a)(suffix pos) suffix co =
 numeric t;
 pair pt,tangent;
 color coul;
 if str co ="" :
 coul:= noir
 else :
 coul:=co
 fi;
 if str pos ="" :
 t:= 0.5*length Cb@#
 else :
 t:=pos*length Cb@#
 fi;
 pt:= point t of Cb@#;
 tangent:= unitvector(direction t of Cb@#);
 label(a rotated angle(tangent),pt+2mm*(tangent rotated 90)) withcolor coul;
enddef;
%Dessin de la tangente en cartésien
vardef tangente[](expr abscisse)=
  numeric t;
  pair pt,tangent;
  t=(((abscisse*x.u+x.origine*cm)-xpart(point 0 of Cb@))/(xpart(point (length Cb@) of Cb@)-xpart(point 0 of Cb@)))*length Cb@;
  pt:=point t of Cb@;
  tangent:=unitvector(direction t of Cb@);
  drawdblarrow (pt shifted (-25*tangent))--(pt shifted (25*tangent));
  draw cercle(pt,0.05*u);
enddef;

vardef sin(expr t) = sind(c*t) enddef;

vardef cos(expr t) = cosd(c*t) enddef;

vardef exp(expr t) = e**t enddef;

vardef papiermillimetre(expr m,n,p,q,r)(suffix s,t,col)=
  origine(m);
  x.u:=n*cm;
  y.u:=p*cm;
  z.so=q;
  z.ne=r;
  millimetre col;
  graduationx s;
  graduationy t;
enddef;
%Tracé
vardef ordonnee[](expr i) =
 numeric x;
 x:=x@[i];
 y@[i]:=
 % définition des fonctions dont on veut obtenir la courbe représentative.
 if @=1: x
 elseif @=2 : (x**2)+2*x-1
 elseif @=3 : x**3-2*x**2+x+1
 elseif @=4 : x**4
 elseif @=5 : 24-0.24*(x**2)
 elseif @=6 : x**5
 elseif @=7 : x**6
 elseif @=8 : 0.2/x
 elseif @=9 : 1/(10*x)
 elseif @=10: exp(x)
 fi
enddef;
% définition des courbes en paramétrique.
vardef coordonnees[](expr i) =
 numeric t;
 t:=t@[i];
 z@[i] =
 if @=11: ( 5*cos(t) , 5*sin(t))
 elseif @=12: (t**4,t)
 elseif @=13 :(t**3, t)
 elseif @=14 :( t**6, t)
 elseif @=15 : ( t**5, t)
 elseif @=16 :( t**7, t)
 elseif @=17 : (exp(t), t)
 elseif @=18 :((cos(t))**3 ,(sin(t))**3 )
 elseif @=19 :( , )
 elseif @=20 :( , )
 fi
enddef ;
%Définition des courbes en polaire.
vardef coordpolaire[](expr i)=
  numeric theta;
  theta:=t@[i];
  z@[i]=
  if @=21: ((1+cos(theta))*cos(theta),(1+cos(theta))*sin(theta))%Cardioïde
  elseif @22: ((cos(theta))**2,cos(theta)*sin(theta))
  fi
enddef;
beginfig(1);
  %papiermillimetre((6,6),2,2,(0,0),(12,12),1,1,orange);
  papiermillimetre((1,0.5),1,0.5,(0,0),(12,13),1,1,bleu);
  pickup pencircle scaled 0.5;
  courbe5(0,10,100)noir;
  %param17(0,5,100)noir;
  %polaire21(0,2*pi,100)violet;
  %tangente5(0);
  %tangente5(1);
endfig;
end
