1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
%%%
% Radar
%%%
\setKVdefault[ClesRadar]{Rayon=3cm,Reference=20,MoyenneClasse=false,Disciplines=false,Pas=5}
\newtoks\toklisteradara%pour la moyenne de l'\'el\`eve
\newtoks\toklisteradarb%pour la discipline
\newtoks\toklisteradarc%pour la moyenne de classe
\def\UpdateRadara#1/#2/#3\nil{\addtotok\toklisteradara{#1,}}
\def\UpdateRadarb#1/#2/#3\nil{\addtotok\toklisteradarb{"#2",}}
\def\UpdateRadarc#1/#2/#3\nil{\addtotok\toklisteradarc{#3,}}
\newcommand\MPRadar[6]{%
\ifluatex
\mplibforcehmode
\begin{mplibcode}
pair O;
O=(0,0);
path cc;
cc=cercles(O,#1);
%%etiquettage des disciplines
n:=0;%compter le nombre de disciplines
for p_=#2:
n:=n+1;
endfor;
for k=1 upto n:
N[k]=k*(360/n);
trace segment(O,pointarc(cc,N[k]));% dashed evenly;
endfor;
p:=0;
for p_=#2:
p:=p+1;
if (N[p]<90) or (N[p]=90):
label.urt(TEX(p_),1.025[O,pointarc(cc,N[p])]);
fi;
if ((N[p]>90) and (N[p]<180)) or (N[p]=180):
label.ulft(TEX(p_),1.025[O,pointarc(cc,N[p])]);
fi;
if (N[p]>180) and (N[p]<270):
label.llft(TEX(p_),1.025[O,pointarc(cc,N[p])]);
fi;
if (N[p]>270) or (N[p]=270):
label.lrt(TEX(p_),1.025[O,pointarc(cc,N[p])]);
fi;
endfor;
% trac\'e des pas:
pas=#4/#3;
for k=1 upto pas-1:
trace (k/pas)[O,pointarc(cc,N[1])] for l=2 upto n: --(k/pas)[O,pointarc(cc,N[l])] endfor
--cycle dashed evenly withcolor 0.5white;
endfor;
trace pointarc(cc,N[1]) for l=2 upto n: --pointarc(cc,N[l]) endfor
--cycle;
% etiquettage des pas
dotlabel.urt(TEX("\tiny"&decimal(#4)),pointarc(cc,0));
dotlabel.urt(TEX("\tiny"&decimal(#3)),(1/pas)[O,pointarc(cc,0)]);
% trac\'e des r\'esultats \'el\`eves
pair El[];
el=0;
for p_=#5:
el:=el+1;
El[el]=(p_/#4)[O,pointarc(cc,N[el])];
endfor;
trace El[1] for p=2 upto n:--El[p] endfor --cycle withpen
pencircle scaled 1.5 withcolor blue;
% trac\'e des r\'esultats classe
pair Cl[];
cl=0;
for p_=#6:
cl:=cl+1;
Cl[cl]=(p_/#4)[O,pointarc(cc,N[cl])];
endfor;
trace Cl[1] for p=2 upto n:--Cl[p] endfor --cycle withcolor rouge;
\end{mplibcode}
\else
\begin{mpost}
pair O;
O=(0,0);
path cc;
cc=cercles(O,#1);
%%etiquettage des disciplines
n:=0;%compter le nombre de disciplines
for p_=#2:
n:=n+1;
endfor;
for k=1 upto n:
N[k]=k*(360/n);
trace segment(O,pointarc(cc,N[k]));% dashed evenly;
endfor;
p:=0;
for p_=#2:
p:=p+1;
if (N[p]<90) or (N[p]=90):
label.urt(TEX(p_),1.025[O,pointarc(cc,N[p])]);
fi;
if ((N[p]>90) and (N[p]<180)) or (N[p]=180):
label.ulft(TEX(p_),1.025[O,pointarc(cc,N[p])]);
fi;
if (N[p]>180) and (N[p]<270):
label.llft(TEX(p_),1.025[O,pointarc(cc,N[p])]);
fi;
if (N[p]>270) or (N[p]=270):
label.lrt(TEX(p_),1.025[O,pointarc(cc,N[p])]);
fi;
endfor;
% trac\'e des pas:
pas=#4/#3;
for k=1 upto pas-1:
trace (k/pas)[O,pointarc(cc,N[1])] for l=2 upto n: --(k/pas)[O,pointarc(cc,N[l])] endfor
--cycle dashed evenly withcolor 0.5white;
endfor;
trace pointarc(cc,N[1]) for l=2 upto n: --pointarc(cc,N[l]) endfor
--cycle;
% etiquettage des pas
dotlabel.top(LATEX("\noexpand\tiny"&decimal(#4)&"") rotated -90,pointarc(cc,0));
dotlabel.urt(LATEX("\noexpand\tiny"&decimal(#3)&""),(1/pas)[O,pointarc(cc,0)]);
% trac\'e des r\'esultats \'el\`eves
pair El[];
el=0;
for p_=#5:
el:=el+1;
El[el]=(p_/#4)[O,pointarc(cc,N[el])];
endfor;
trace El[1] for p=2 upto n:--El[p] endfor --cycle withpen
pencircle scaled 1.5 withcolor blue;
% trac\'e des r\'esultats classe
pair Cl[];
cl=0;
for p_=#6:
cl:=cl+1;
Cl[cl]=(p_/#4)[O,pointarc(cc,N[cl])];
endfor;
trace Cl[1] for p=2 upto n:--Cl[p] endfor --cycle withcolor rouge;
\end{mpost}
\fi
}
\newcommand\Radar[2][]{%
% 1 les param\`etres
% 2 la r\'epartition des notes
\useKVdefault[ClesRadar]%
\setKV[ClesRadar]{#1}%
\ignoreemptyitems%
\setsepchar[*]{,}%
\readlist*\ListeRadar{#2}%
\toklisteradara{}%
\foreachitem\compteur\in\ListeRadar{\expandafter\UpdateRadara\compteur\nil}%
\ifboolKV[ClesRadar]{Disciplines}{}{%
\toklisteradarb{}%
\foreachitem\compteur\in\ListeRadar{\expandafter\UpdateRadarb\compteur\nil}%
}%
\ifboolKV[ClesRadar]{MoyenneClasse}{}{%
\toklisteradarc{}%
\foreachitem\compteur\in\ListeRadar{\expandafter\UpdateRadarc\compteur\nil}%
}%
\MPRadar{\useKV[ClesRadar]{Rayon}}{\the\toklisteradarb}{\useKV[ClesRadar]{Pas}}{\useKV[ClesRadar]{Reference}}{\the\toklisteradara}{\the\toklisteradarc}%
}%
|