401e36a6f7820c293b92fc114704494c29226f22
[mp-gdd.git] / gdd-rep.mp
1 picture repSavePict;
2 string  repSaveW;
3
4 % x and y labels
5 string gddXlabel;
6 gddXlabel := "$x$";
7 string gddYlabel;
8 gddYlabel := "$y$";
9
10 def Repere(expr l,h,ox,oy,ux,uy) =
11   repLargeur := l; repHauteur := h;
12   repOX := ox ; repOY := oy;
13   repXmin := - ox / ux; repXmax := repXmin + l / ux;
14   repYmin := - oy / uy; repYmax := repYmin + h / uy;
15   repUX := ux; repUY := uy;
16   repSaveW := gddW;
17   gddW  := "xscaled repUX yscaled repUY shifted (repOX,repOY) scaled gddU";
18 enddef;
19
20 def Debut =
21   repSavePict := currentpicture; currentpicture := nullpicture;
22 enddef;
23
24 def repClip =
25   clip currentpicture to
26    ((0,0)--(repLargeur,0)--(repLargeur,repHauteur)--(0,repHauteur)--cycle)
27    scaled gddU;
28 enddef;
29
30 def repStroke (expr c) =
31   draw ((0,0)--(repLargeur,0)--(repLargeur,repHauteur)--(0,repHauteur)--cycle)
32     scaled gddU withcolor c;
33 enddef;
34
35 def Fin =
36     repClip; addto repSavePict also currentpicture; currentpicture := repSavePict;
37     gddW := repSaveW;
38 enddef;
39
40 def Axes =
41     drawarrow ((repXmin,0)--(repXmax,0)) gddEnPlace;
42     drawarrow ((0,repYmin)--(0,repYmax)) gddEnPlace;
43     label.lrt(TEX(gddXlabel),(repXmax,0) gddEnPlace);
44     label.ulft(TEX(gddYlabel),(0,repYmax) gddEnPlace);
45 enddef;
46
47 vardef Graduations  =
48     save xmin, xmax, ymin, ymax;
49     xmin = floor(repXmin); xmax = floor(repXmax) + 1;
50     ymin = floor(repYmin); ymax = floor(repYmax) + 1;
51     SequenceTirets((xmin,0),(1,0),(0,-4),xmax-xmin+1);
52     SequenceTirets((xmin+0.5,0),(1,0),(0,-2),xmax-xmin);
53     SequenceTirets((0,ymin),(0,1),(-4,0),ymax-ymin+1);
54     SequenceTirets((0,ymin+0.5),(0,1),(-2,0),ymax-ymin);
55 enddef;
56
57 def ClipRepere =
58     extra_endfig := extra_endfig & "repClip;";
59 enddef;
60
61 %
62 % SequenceTirets
63 % ------------------------------------------------------------------------------
64 vardef SequenceTirets(expr o,p,t,n) text a=
65   save ot; pair ot; ot := o gddEnPlace;
66   for i:=1 upto n:
67     % tiret
68     draw ot -- (ot shifted t) a;
69     % avancement
70     ot := (o + i*p) gddEnPlace;
71   endfor
72 enddef;
73
74 vardef Unites(expr t) =
75   if t=1:
76     label.bot(TEX("$+1$"),(1,-(3/gddU/repUY)) gddEnPlace);
77     label.ulft(TEX("$+1$"),(-(3/gddU/repUX),1) gddEnPlace);
78   fi
79 enddef;
80
81 %%% ----------------------------------------------------------------------------
82 %%% Grille
83 %%% ----------------------------------------------------------------------------
84
85 def GrilleRepere =
86   save xmin, xmax, ymin, ymax;
87   xmin = floor(repXmin); xmax = floor(repXmax) + 1;
88   ymin = floor(repYmin); ymax = floor(repYmax) + 1;
89   for i:=xmin upto xmax:
90     draw ((i,ymin)--(i,ymax)) gddEnPlace;
91   endfor;
92   for i:=ymin upto ymax:
93     draw ((xmin,i)--(xmax,i)) gddEnPlace;
94   endfor;
95 enddef;
96
97 %%% ----------------------------------------------------------------------------
98 %%% CadreRepere
99 %%% ----------------------------------------------------------------------------
100 def CadreRepere =
101   (repXmin,repYmin)--(repXmin,repYmax)--(repXmax,repYmax)--(repXmax,repYmin)--cycle
102 enddef;
103
104 endinput

Licence Creative Commons Les fichiers de Syracuse sont mis à disposition (sauf mention contraire) selon les termes de la
Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.