picture repSavePict; string repSaveW; def Repere(expr l,h,ox,oy,ux,uy) = repLargeur := l; repHauteur := h; repOX := ox ; repOY := oy; repXmin := - ox / ux; repXmax := repXmin + l / ux; repYmin := - oy / uy; repYmax := repYmin + h / uy; repUX := ux; repUY := uy; repSaveW := gddW; gddW := "xscaled repUX yscaled repUY shifted (repOX,repOY) scaled gddU"; enddef; def Debut = repSavePict := currentpicture; currentpicture := nullpicture; enddef; def repClip = clip currentpicture to ((0,0)--(repLargeur,0)--(repLargeur,repHauteur)--(0,repHauteur)--cycle) scaled gddU; enddef; def repStroke (expr c) = draw ((0,0)--(repLargeur,0)--(repLargeur,repHauteur)--(0,repHauteur)--cycle) scaled gddU withcolor c; enddef; def Fin = repClip; addto repSavePict also currentpicture; currentpicture := repSavePict; gddW := repSaveW; enddef; 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); enddef; vardef Graduations = save xmin, xmax, ymin, ymax; xmin = floor(repXmin); xmax = floor(repXmax) + 1; ymin = floor(repYmin); ymax = floor(repYmax) + 1; SequenceTirets((xmin,0),(1,0),(0,-4),xmax-xmin+1); SequenceTirets((xmin+0.5,0),(1,0),(0,-2),xmax-xmin); SequenceTirets((0,ymin),(0,1),(-4,0),ymax-ymin+1); SequenceTirets((0,ymin+0.5),(0,1),(-2,0),ymax-ymin); enddef; def ClipRepere = extra_endfig := extra_endfig & "repClip;"; enddef; % % SequenceTirets % ------------------------------------------------------------------------------ vardef SequenceTirets(expr o,p,t,n) text a= save ot; pair ot; ot := o gddEnPlace; for i:=1 upto n: % tiret draw ot -- (ot shifted t) a; % avancement ot := (o + i*p) gddEnPlace; endfor enddef; vardef Unites(expr t) = if t=1: label.bot(TEX("$+1$"),(1,-(3/gddU/repUY)) gddEnPlace); label.ulft(TEX("$+1$"),(-(3/gddU/repUX),1) gddEnPlace); fi enddef; %%% ---------------------------------------------------------------------------- %%% Grille %%% ---------------------------------------------------------------------------- def GrilleRepere = save xmin, xmax, ymin, ymax; xmin = floor(repXmin); xmax = floor(repXmax) + 1; ymin = floor(repYmin); ymax = floor(repYmax) + 1; for i:=xmin upto xmax: draw ((i,ymin)--(i,ymax)) gddEnPlace; endfor; for i:=ymin upto ymax: draw ((xmin,i)--(xmax,i)) gddEnPlace; endfor; enddef; %%% ---------------------------------------------------------------------------- %%% CadreRepere %%% ---------------------------------------------------------------------------- def CadreRepere = (repXmin,repYmin)--(repXmin,repYmax)--(repXmax,repYmax)--(repXmax,repYmin)--cycle enddef; endinput