vardef CourbeEnPolaires(suffix r)(expr ti,tf,n) =
     save fpas,t;
     fpas := (tf-ti)/n;
-    r(ti)*(cos(ti),sin(ti)) 
+    r(ti)*(cos(ti),sin(ti))
     for i=1 upto n: hide(t:=ti+i*fpas) .. r(t)*(cos(t),sin(t)) endfor
 enddef;
 
   endfor
   for i = 0 upto (repXmax - x)/px:
      for j = 0 upto (y - repYmin)/py:
-       drawarrow 
+       drawarrow
         (((0,0)--dx*unitvector((1,f(x+i*px,y-j*py))))
                  shifted (x+i*px,y-j*px)) gddEnPlace
                  withcolor couleur;
      endfor
      for j = 0 upto (repYmax - y)/py:
-       drawarrow 
+       drawarrow
         (((0,0)--dx*unitvector((1,f(x+i*px,y+j*py))))
                  shifted (x+i*px,y+j*py)) gddEnPlace
                  withcolor couleur;
   endfor
 enddef;
 
-endinput;
\ No newline at end of file
+
+%
+% Champs de vecteurs f R^2 -> R^2
+% ------------------------------------------------------------------------------
+vardef ChampVecteursDD(suffix f)(expr x,y,px,py,dx,couleur) =
+  for i = 0 upto (x - repXmin)/px:
+     for j = 0 upto (y - repYmin)/py:
+       drawarrow
+        (((0,0)--dx*unitvector(f(x-i*px,y-j*py)))
+                 shifted (x-i*px,y-j*py)) gddEnPlace
+                 withcolor couleur;
+     endfor
+     for j = 0 upto (repYmax - y)/py:
+       drawarrow
+        (((0,0)--dx*unitvector(f(x-i*px,y+j*py)))
+                 shifted (x-i*px,y+j*py)) gddEnPlace
+                 withcolor couleur;
+     endfor
+  endfor
+  for i = 0 upto (repXmax - x)/px:
+     for j = 0 upto (y - repYmin)/py:
+       drawarrow
+        (((0,0)--dx*unitvector(f(x+i*px,y-j*py)))
+                 shifted (x+i*px,y-j*px)) gddEnPlace
+                 withcolor couleur;
+     endfor
+     for j = 0 upto (repYmax - y)/py:
+       drawarrow
+        (((0,0)--dx*unitvector(f(x+i*px,y+j*py)))
+                 shifted (x+i*px,y+j*py)) gddEnPlace
+                 withcolor couleur;
+     endfor
+  endfor
+enddef;
+
+endinput;
 
 picture repSavePict;
 string  repSaveW;
 
+% x and y labels
+string gddXlabel;
+gddXlabel := "$x$";
+string gddYlabel;
+gddYlabel := "$y$";
+
 def Repere(expr l,h,ox,oy,ux,uy) =
   repLargeur := l; repHauteur := h;
   repOX := ox ; repOY := oy;
 def Axes =
     drawarrow ((repXmin,0)--(repXmax,0)) gddEnPlace;
     drawarrow ((0,repYmin)--(0,repYmax)) gddEnPlace;
-    label.lrt(TEX("$x$"),(repXmax,0) gddEnPlace);
-    label.ulft(TEX("$y$"),(0,repYmax) gddEnPlace);
+    label.lrt(TEX(gddXlabel),(repXmax,0) gddEnPlace);
+    label.ulft(TEX(gddYlabel),(0,repYmax) gddEnPlace);
 enddef;
 
 vardef Graduations  =
 %%% ----------------------------------------------------------------------------
 %%% CadreRepere
 %%% ----------------------------------------------------------------------------
-def CadreRepere = 
+def CadreRepere =
   (repXmin,repYmin)--(repXmin,repYmax)--(repXmax,repYmax)--(repXmax,repYmin)--cycle
 enddef;
 
-endinput
\ No newline at end of file
+endinput
 
 enddef;
 
 % Courbe -----------------------------------------------------------------------
-vardef Courbe (expr s) =
+vardef CourbeDat (expr s) =
     gddT[incr gddO] = "courbe"; gddS[gddO] = s; gddO
 enddef;
 
   elseif gddT[o] = "chemin":
     gddP[o]
   elseif gddT[o] = "courbe":
-    gddTraceCourbe (gddS[o] & ".dta")
+    %message "This is a debug message.";
+    gddTraceCourbe (gddS[o] & ".dat")
   fi
 enddef;
 
 
 
 def gddPointe(expr p) =
-  fill (fullcircle scaled gddTaillePoint) shifted (p gddEnPlace) 
+  fill (fullcircle scaled gddTaillePoint) shifted (p gddEnPlace)
     withcolor gddCouleurPoint;
   draw (fullcircle scaled gddTaillePoint) shifted (p gddEnPlace)
 enddef;
     label.@#(gddL[p] scaled gddTailleLabel,PointTOPair(p) gddEnPlace);
 enddef;
 
-vardef m_a_rque.@# expr p = 
+vardef m_a_rque.@# expr p =
     pointe(scantokens p);
     label.@#(lTEX(p),PointTOPair(scantokens p) gddEnPlace);
 enddef;
 %%% --------------------------------------------------------------------------
 def SigneOrtho(expr a,b,c,x) =
   (_point_(b) + x * unitvector(_point_(a)-_point_(b)))
-   -- (_point_(b) + x * unitvector(_point_(a) - _point_(b)) 
+   -- (_point_(b) + x * unitvector(_point_(a) - _point_(b))
    + x * unitvector(_point_(c) - _point_(b)))
    -- (_point_(b) + x * unitvector(_point_(c) - _point_(b)))
 enddef;
    gddEnPlace withpen pencircle scaled 1 withcolor white;
 enddef;
 
-endinput
\ No newline at end of file
+endinput