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