summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/latex/PfCReperage.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCReperage.tex')
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCReperage.tex2095
1 files changed, 2095 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCReperage.tex b/macros/latex/contrib/profcollege/latex/PfCReperage.tex
new file mode 100644
index 0000000000..347ed19498
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCReperage.tex
@@ -0,0 +1,2095 @@
+%%%
+% Reperage
+%%%
+\setKVdefault[ClesReperage]{Unitex=1,Pasx=1,Unitey=1,Pasy=1,Unitez=1,Pasz=1,DemiDroite=false,Droite=false,Plan=false,Trace=false,ListeSegment={},Espace=false,Sphere=false,AnglePhi=30,CouleurLa=white,CouleurLon=Tomato,AffichageNom=false,AffichageGrad=false,AffichageAbs=0,AffichageCoord=false,LectureCoord=false,ValeurUnitex=1,ValeurUnitey=1,ValeurOrigine=0,NomOrigine=O,EchelleEspace=50,CouleurCoord=black,Thermometre=false,Mercure=false,CouleurMercure=black,Celsius,Kelvin=false,Farenheit=false,ValeurMin=-4000,ValeurMax=4000,Etages=4,Code=false}
+\defKV[ClesReperage]{Traces=\setKV[ClesReperage]{Code}}
+% ValeurOrigine permet de faire des morceaux de demi-droite gradu\'ee en passant par droite :)
+
+\def\Updatetoksdroite#1/#2\nil{\addtotok\toklistepointdroite{#1,"#2",}}
+\def\Updatetoksdroite#1/#2\nil{\addtotok\toklistepointdroite{#1,"#2",}}
+\def\Updatetoksdemidroite#1/#2\nil{\addtotok\toklistenompointdemidroite{"#2",}}
+\def\Updatetoksrepere#1/#2/#3\nil{\addtotok\toklistepointrepere{#1,#2,"#3",}}
+\def\Updatetoksespace#1/#2/#3/#4\nil{\addtotok\toklistepointespace{#1,#2,#3,"#4",}}
+
+\newtoks\toklistepointrepere%
+\newtoks\toklistepointdroite%
+\newtoks\toklistepointdemidroite%
+\newtoks\toklistenompointdemidroite%
+\newtoks\toklistepointespace%
+
+% Pour construire le rep\`ere de l'espace
+\def\buildespace{%
+ \toklistepointespace{}%
+ \ifboolKV[ClesReperage]{Sphere}{%
+ \foreachitem\compteur\in\ListePointEspace{\expandafter\Updatetoksrepere\compteur\nil}%
+ \[\MPEspaceSphere{\the\toklistepointrepere}{\useKV[ClesReperage]{EchelleEspace}}\]
+ }{%
+ \foreachitem\compteur\in\ListePointEspace{\expandafter\Updatetoksespace\compteur\nil}%
+ \ifboolKV[ClesReperage]{AffichageNom}{%
+ \ifboolKV[ClesReperage]{AffichageCoord}{%
+ \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{3}{\useKV[ClesReperage]{EchelleEspace}}\]%
+ }{%
+ \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{2}{\useKV[ClesReperage]{EchelleEspace}}\]%
+ }%
+ }{%
+ \ifboolKV[ClesReperage]{AffichageCoord}{%
+ \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{1}{\useKV[ClesReperage]{EchelleEspace}}\]%
+ }{%
+ \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{0}{\useKV[ClesReperage]{EchelleEspace}}\]%
+ }%
+ }%
+ }%
+}%
+
+\def\MPEspaceSphere#1#2{%
+ \ifluatex
+ \begin{mplibcode}
+ typetrace:="3D";
+ typerepre:="persp";
+ anglephi:=\useKV[ClesReperage]{AnglePhi};
+ Initialisation(1500,anglephi,10,#2);
+ color O,A,B,C,D,Z,M[];
+ O=(0,0,0);
+ A=(cosd(anglephi+90),sind(anglephi+90),0);
+ B=(cosd(anglephi+180),sind(anglephi+180),0);
+ C=(1,0,0);
+ D=(0,1,0);
+ Z=(0,0,1);
+ trace cercles(O,A,O,A,Z) withcolor 0.7white;
+ path Equateur;
+ Equateur=cercles(O,C,O,C,D);
+ trace (subpath((0.25+anglephi/360)*length Equateur,(0.75+anglephi/360)*length Equateur) of Equateur) dashed evenly withcolor 0.7white;
+ trace (subpath((0.75+anglephi/360)*length Equateur,(1.25+anglephi/360)*length Equateur) of Equateur) withcolor 0.7white;
+ path greenwich;
+ greenwich=cercles(O,C,O,C,Z);
+ trace subpath(3*length greenwich/4,5*length greenwich/4) of greenwich withcolor 0.7white;
+ clip currentpicture to cercles(O,A,O,A,Z);
+ trace chemin(C,O,Z) dashed evenly withcolor 0.85white;
+ trace chemin(O,2[Z,O]) dashed evenly withcolor 0.85white;
+
+ vardef toto(text t)=
+ n:=1;
+ for p_=t:
+ if (n mod 3)=1:
+ k:=p_;
+ fi;
+ if (n mod 3)=2:
+ l:=p_;
+ fi;
+ if (n mod 3)=0:
+ M[n]=(cosd(k)*cosd(l),sind(k)*cosd(l),sind(l));
+ path Codageun,Codagedeux;
+ if k>0:
+ Codageun=cercles(O,1[O,C],O,1[O,C],D) cutafter chemin(O,(cosd(k),sind(k),0));
+ elseif k<0:
+ Codageun=cercles(O,1[O,C],O,1[O,C],D) cutbefore chemin(O,(cosd(k),sind(k),0));
+ fi;
+ if l>0:
+ Codagedeux=cercles(O,(cosd(k),sind(k),0),O,(cosd(k),sind(k),0),Z) cutafter chemin(O,M[n]);
+ elseif l<0:
+ Codagedeux=cercles(O,(cosd(k),sind(k),0),O,(cosd(k),sind(k),0),Z) cutbefore chemin(O,M[n]);
+ fi;
+ %%%% if l>0:
+ %%%fill Projette(O)--Projette((cosd(k),sind(k),0))--Codagedeux--cycle withcolor \useKV[ClesReperage]{CouleurLa};
+ %%%fill Projette(O)--Projette(C)--Codageun--cycle withcolor \useKV[ClesReperage]{CouleurLon};
+ %%%else:
+ %%%fill Projette(O)--Codagedeux--Projette((cosd(k),sind(k),0))--cycle withcolor \useKV[ClesReperage]{CouleurLa};
+ %%%fill Projette(O)--Codageun--Projette(C)--cycle withcolor \useKV[ClesReperage]{CouleurLon};
+ %%%fi;
+ if unknown Codageun: else: trace Codageun; fi;
+ if unknown Codagedeux: else: trace Codagedeux; fi;
+ if \useKV[ClesReperage]{AffichageCoord}:
+ picture CodageUn,CodageDeux;
+ CodageUn=image(
+ if k>0:
+ label.bot(TEX("\scriptsize\ang{"&decimal(k)&"} E"),(0,0));
+ else:
+ label.bot(TEX("\scriptsize\ang{"&decimal(abs(k))&"} O"),(0,0));
+ fi;
+ );
+ CodageDeux=image(
+ if k>0:
+ label.rt(TEX("\scriptsize\ang{"&decimal(l)&"} N"),(0,0));
+ else:
+ label.lft(TEX("\scriptsize\ang{"&decimal(abs(l))&"} S"),(0,0));
+ fi;
+ );
+ fill (polygone(llcorner CodageUn,lrcorner CodageUn,urcorner CodageUn,ulcorner CodageUn) shifted(point(0.5*length Codageun) of Codageun)) withcolor blanc;
+ trace CodageUn shifted (point(0.5*length Codageun) of Codageun);
+ fill (polygone(llcorner CodageDeux,lrcorner CodageDeux,urcorner CodageDeux,ulcorner CodageDeux) shifted(point(0.5*length Codagedeux) of Codagedeux)) withcolor blanc;
+ trace CodageDeux shifted (point(0.5*length Codagedeux) of Codagedeux);
+ fi;
+ trace chemin(O,(cosd(k),sind(k),0)) dashed withdots scaled 0.5;
+ trace chemin(O,M[n]) dashed withdots scaled 0.5;
+ trace chemin(O,C) dashed withdots scaled 0.5;
+ if \useKV[ClesReperage]{AffichageNom}:
+ if l>0:dotlabel.top(p_,Projette(M[n]));
+ else:
+ dotlabel.bot(p_,Projette(M[n]));
+ fi;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ enddef;
+ toto(#1);
+ label.llft(btex \tiny \ang{0} etex,Projette(C));
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={boolean AffichageCoord; AffichageCoord=\useKV[ClesReperage]{AffichageCoord}; boolean AffichageNom; AffichageNom=\useKV[ClesReperage]{AffichageNom};anglephi:=\useKV[ClesReperage]{AnglePhi};}]
+ typetrace:="3D";
+ typerepre:="persp";
+ Initialisation(1500,anglephi,10,#2);
+ color O,A,B,C,D,Z,M[];
+ O=(0,0,0);
+ A=(cosd(anglephi+90),sind(anglephi+90),0);
+ B=(cosd(anglephi+180),sind(anglephi+180),0);
+ C=(1,0,0);
+ D=(0,1,0);
+ Z=(0,0,1);
+ trace cercles(O,A,O,A,Z) withcolor 0.7white;
+ path Equateur;
+ Equateur=cercles(O,C,O,C,D);
+ trace (subpath((0.25+anglephi/360)*length Equateur,(0.75+anglephi/360)*length Equateur) of Equateur) dashed evenly withcolor 0.7white;
+ trace (subpath((0.75+anglephi/360)*length Equateur,(1.25+anglephi/360)*length Equateur) of Equateur) withcolor 0.7white;
+ path greenwich;
+ greenwich=cercles(O,C,O,C,Z);
+ trace subpath(3*length greenwich/4,5*length greenwich/4) of greenwich withcolor 0.7white;
+ clip currentpicture to cercles(O,A,O,A,Z);
+ trace chemin(C,O,Z) dashed evenly withcolor 0.85white;
+ trace chemin(O,2[Z,O]) dashed evenly withcolor 0.85white;
+
+ vardef toto(text t)=
+ n:=1;
+ for p_=t:
+ if (n mod 3)=1:
+ k:=p_;
+ fi;
+ if (n mod 3)=2:
+ l:=p_;
+ fi;
+ if (n mod 3)=0:
+ M[n]=(cosd(k)*cosd(l),sind(k)*cosd(l),sind(l));
+ path Codageun,Codagedeux;
+ if k>0:
+ Codageun=cercles(O,1[O,C],O,1[O,C],D) cutafter chemin(O,(cosd(k),sind(k),0));
+ elseif k<0:
+ Codageun=cercles(O,1[O,C],O,1[O,C],D) cutbefore chemin(O,(cosd(k),sind(k),0));
+ fi;
+ if l>0:
+ Codagedeux=cercles(O,(cosd(k),sind(k),0),O,(cosd(k),sind(k),0),Z) cutafter chemin(O,M[n]);
+ elseif k<0:
+ Codagedeux=cercles(O,(cosd(k),sind(k),0),O,(cosd(k),sind(k),0),Z) cutbefore chemin(O,M[n]);
+ fi;
+ %if l>0:
+ %fill Projette(O)--Projette((cosd(k),sind(k),0))--Codagedeux--cycle withcolor \useKV[ClesReperage]{CouleurLa};
+ %fill Projette(O)--Projette(C)--Codageun--cycle withcolor \useKV[ClesReperage]{CouleurLon};
+ %else:
+ %fill Projette(O)--Codagedeux--Projette((cosd(k),sind(k),0))--cycle withcolor \useKV[ClesReperage]{CouleurLa};
+ %fill Projette(O)--Codageun--Projette(C)--cycle withcolor \useKV[ClesReperage]{CouleurLon};
+ %fi;
+ if unknown Codageun: else: trace Codageun; fi;
+ if unknown Codagedeux: else: trace Codagedeux; fi;
+ if AffichageCoord:
+ picture CodageUn,CodageDeux;
+ CodageUn=image(
+ if k>0:
+ label.bot(LATEX("\noexpand\scriptsize\noexpand\ang{"&decimal(k)&"} E"),(0,0));
+ else:
+ label.bot(LATEX("\noexpand\scriptsize\noexpand\ang{"&decimal(abs(k))&"} O"),(0,0));
+ fi;
+ );
+ CodageDeux=image(
+ if k>0:
+ label.rt(LATEX("\noexpand\scriptsize\noexpand\ang{"&decimal(l)&"} N"),(0,0));
+ else:
+ label.lft(LATEX("\noexpand\scriptsize\noexpand\ang{"&decimal(abs(l))&"} S"),(0,0));
+ fi;
+ );
+ fill (polygone(llcorner CodageUn,lrcorner CodageUn,urcorner CodageUn,ulcorner CodageUn) shifted(point(0.5*length Codageun) of Codageun)) withcolor blanc;
+ trace CodageUn shifted (point(0.5*length Codageun) of Codageun);
+ fill (polygone(llcorner CodageDeux,lrcorner CodageDeux,urcorner CodageDeux,ulcorner CodageDeux) shifted(point(0.5*length Codagedeux) of Codagedeux)) withcolor blanc;
+ trace CodageDeux shifted (point(0.5*length Codagedeux) of Codagedeux);
+ fi;
+ trace chemin(O,(cosd(k),sind(k),0)) dashed withdots scaled 0.5;
+ trace chemin(O,M[n]) dashed withdots scaled 0.5;
+ trace chemin(O,C) dashed withdots scaled 0.5;
+ if AffichageNom:
+ if l>0:dotlabel.top(p_,Projette(M[n]));
+ else:
+ dotlabel.bot(p_,Projette(M[n]));
+ fi;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ enddef;
+ toto(#1);
+ label.llft(LATEX("\noexpand\tiny\noexpand\ang{0}"),Projette(C));
+ \end{mpost}
+ \fi
+}
+
+\def\MPEspacePave#1#2#3#4#5#6#7#8#9{%
+ \ifluatex
+ \begin{mplibcode}
+ typetrace:="3D";
+ typerepre:="persp";
+ Figure(-20u,-20u,20u,20u);
+ Initialisation(1500,30,20,abs(#9));
+ %marque_r:=marque_r/2;
+ marque_p:="plein";
+ color A,B,C,D,E,F,G,H,M[],N[];
+ draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
+ if #9>0:
+ drawarrow Projette(A)--Projette(1.5[D,A]);
+ drawarrow Projette(C)--Projette(1.5[D,C]);
+ drawarrow Projette(E)--Projette(1.5[D,E]);
+ label.top(btex $x$ etex,Projette(1.5[D,A]));
+ label.top(btex $y$ etex,Projette(1.5[D,C]));
+ label.top(btex $z$ etex,Projette(1.5[D,E]));
+ label.ulft(btex 1 etex,Projette((1/#2)[D,A]));
+ label.bot(btex 1 etex,Projette((1/#4)[D,C]));
+ label.lft(btex 1 etex,Projette((1/#6)[D,E]));
+ for k=1 upto (#2):
+ pointe((k/#2)[D,A]);
+ endfor;
+ for k=1 upto (#4):
+ pointe((k/#4)[D,C]);
+ endfor;
+ for k=1 upto (#6):
+ pointe((k/#6)[D,E]);
+ endfor;
+ else:
+ drawarrow Projette(D)--Projette(1.5[A,D]) dashed evenly;
+ drawarrow Projette(B)--Projette(1.5[A,B]);
+ drawarrow Projette(F)--Projette(1.5[A,F]);
+ label.lrt(btex $x$ etex,Projette(1.5[A,D]));
+ label.top(btex $y$ etex,Projette(1.5[A,B]));
+ label.top(btex $z$ etex,Projette(1.5[A,F]));
+ label.ulft(btex 1 etex,Projette((1/#2)[A,D]));
+ label.bot(btex 1 etex,Projette((1/#4)[A,B]));
+ label.lft(btex 1 etex,Projette((1/#6)[A,F]));
+ for k=1 upto (#2):
+ pointe((k/#2)[A,D]);
+ endfor;
+ for k=1 upto (#4):
+ pointe((k/#4)[A,B]);
+ endfor;
+ for k=1 upto (#6):
+ pointe((k/#6)[A,F]);
+ endfor;
+ fi;
+ vardef tata(text t)=
+ n:=1;%pour compter combien de points
+ k:=0;%pour garder l'abscisse
+ l:=0;%pour garder l'ordonn\'ee
+ m:=0;%pour garder l'altitude
+ if #8>0:
+ for p_=t:
+ if (n mod 4)=1:
+ k:=p_;
+ fi;
+ if (n mod 4)=2:
+ l:=p_;
+ fi;
+ if (n mod 4)=3:
+ m:=p_;
+ fi;
+ if (n mod 4)=0:
+ M[n]=(k/#2)[D,A]+(l/#4)*(C-D)+(m/#6)*(E-D);
+ N[n]=(k/#2)[D,A]+(l/#4)*(C-D);
+ if (#8>1):
+ label.top(TEX(p_),Projette(M[n]));
+ pointe(M[n]);
+ fi;
+ if (#8=1) or (#8=3) :
+ drawoptions(dashed evenly withcolor gris);
+ draw segment(M[n],(0,0,bluepart(M[n])));
+ draw segment(M[n],N[n]);
+ draw segment(N[n],(redpart(M[n]),0,0));
+ draw segment(N[n],(0,greenpart(M[n]),0));
+ drawoptions();
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ vardef toto(text t)=
+ n:=1;%pour compter combien de points
+ k:=0;%pour garder l'abscisse
+ l:=0;%pour garder l'ordonn\'ee
+ m:=0;%pour garder l'altitude
+ if #8>0:
+ for p_=t:
+ if (n mod 4)=1:
+ k:=p_;
+ fi;
+ if (n mod 4)=2:
+ l:=p_;
+ fi;
+ if (n mod 4)=3:
+ m:=p_;
+ fi;
+ if (n mod 4)=0:
+ % message("je suis ici : "&p_);
+ M[n]=(k/#2)[A,D]+(l/#4)*(B-A)+(m/#6)*(F-A);
+ N[n]=(k/#2)[A,D]+(l/#4)*(B-A);
+ if (#8>1):
+ label.top(TEX(p_),Projette(M[n]));
+ pointe(M[n]);
+ fi;
+ if (#8=1) or (#8=3) :
+ drawoptions(dashed evenly withcolor gris);
+ draw segment(M[n],A+(0,0,bluepart(M[n])));
+ draw segment(M[n],N[n]);
+ draw segment(N[n],A+(l/#4)*(B-A));
+ draw segment(N[n],A+(k/#2)*(D-A));
+ drawoptions();
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ if #9>0:
+ tata(#7);
+ else:
+ toto(#7);
+ fi;
+ draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
+ if \useKV[ClesReperage]{Code}:
+ \useKV[ClesReperage]{Traces}
+ fi;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfCGeometrie;}]
+ typetrace:="3D";
+ typerepre:="persp";
+ Figure(-20u,-20u,20u,20u);
+ Initialisation(1500,30,20,abs(#9));
+ %marque_r:=marque_r/2;
+ marque_p:="plein";
+ color A,B,C,D,E,F,G,H,M[],N[];
+ draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
+ if #9>0:
+ drawarrow Projette(A)--Projette(1.5[D,A]);
+ drawarrow Projette(C)--Projette(1.5[D,C]);
+ drawarrow Projette(E)--Projette(1.5[D,E]);
+ label.ulft(btex 1 etex,Projette((1/#2)[D,A]));
+ label.bot(btex 1 etex,Projette((1/#4)[D,C]));
+ label.lft(btex 1 etex,Projette((1/#6)[D,E]));
+ for k=1 upto (#2):
+ pointe((k/#2)[D,A]);
+ endfor;
+ for k=1 upto (#4):
+ pointe((k/#4)[D,C]);
+ endfor;
+ for k=1 upto (#6):
+ pointe((k/#6)[D,E]);
+ endfor;
+ else:
+ drawarrow Projette(D)--Projette(1.5[A,D]) dashed evenly;
+ drawarrow Projette(B)--Projette(1.5[A,B]);
+ drawarrow Projette(F)--Projette(1.5[A,F]);
+ label.ulft(btex 1 etex,Projette((1/#2)[A,D]));
+ label.bot(btex 1 etex,Projette((1/#4)[A,B]));
+ label.lft(btex 1 etex,Projette((1/#6)[A,F]));
+ for k=1 upto (#2):
+ pointe((k/#2)[A,D]);
+ endfor;
+ for k=1 upto (#4):
+ pointe((k/#4)[A,B]);
+ endfor;
+ for k=1 upto (#6):
+ pointe((k/#6)[A,F]);
+ endfor;
+ fi;
+ vardef tata(text t)=
+ n:=1;%pour compter combien de points
+ k:=0;%pour garder l'abscisse
+ l:=0;%pour garder l'ordonn\'ee
+ m:=0;%pour garder l'altitude
+ if #8>0:
+ for p_=t:
+ if (n mod 4)=1:
+ k:=p_;
+ fi;
+ if (n mod 4)=2:
+ l:=p_;
+ fi;
+ if (n mod 4)=3:
+ m:=p_;
+ fi;
+ if (n mod 4)=0:
+ M[n]=(k/#2)[D,A]+(l/#4)*(C-D)+(m/#6)*(E-D);
+ N[n]=(k/#2)[D,A]+(l/#4)*(C-D);
+ if (#8>1):
+ label.top(LATEX(p_),Projette(M[n]));
+ pointe(M[n]);
+ fi;
+ if (#8=1) or (#8=3) :
+ drawoptions(dashed evenly withcolor gris);
+ draw segment(M[n],(0,0,bluepart(M[n])));
+ draw segment(M[n],N[n]);
+ draw segment(N[n],(redpart(M[n]),0,0));
+ draw segment(N[n],(0,greenpart(M[n]),0));
+ drawoptions();
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ vardef toto(text t)=
+ n:=1;%pour compter combien de points
+ k:=0;%pour garder l'abscisse
+ l:=0;%pour garder l'ordonn\'ee
+ m:=0;%pour garder l'altitude
+ if #8>0:
+ for p_=t:
+ if (n mod 4)=1:
+ k:=p_;
+ fi;
+ if (n mod 4)=2:
+ l:=p_;
+ fi;
+ if (n mod 4)=3:
+ m:=p_;
+ fi;
+ if (n mod 4)=0:
+ % message("je suis ici : "&p_);
+ M[n]=(k/#2)[A,D]+(l/#4)*(B-A)+(m/#6)*(F-A);
+ N[n]=(k/#2)[A,D]+(l/#4)*(B-A);
+ if (#8>1):
+ label.top(LATEX(p_),Projette(M[n]));
+ pointe(M[n]);
+ fi;
+ if (#8=1) or (#8=3) :
+ drawoptions(dashed evenly withcolor gris);
+ draw segment(M[n],A+(0,0,bluepart(M[n])));
+ draw segment(M[n],N[n]);
+ draw segment(N[n],A+(l/#4)*(B-A));
+ draw segment(N[n],A+(k/#2)*(D-A));
+ drawoptions();
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ if #9>0:
+ tata(#7);
+ else:
+ toto(#7);
+ fi;
+ draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
+ \end{mpost}
+ \fi
+}%
+
+% Pour construire le rep\`ere du plan
+\def\buildreperenew{%
+ \toklistepointrepere{}%
+ \foreachitem\compteur\in\ListePointRepere{\expandafter\Updatetoksrepere\compteur\nil}%
+ \ifboolKV[ClesReperage]{Trace}{%
+ \[\MPPlanTrace{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\the\toklistepointrepere}{2}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurUnitey}}{\useKV[ClesReperage]{ListeSegment}}\]%
+ }{%
+ \xdef\AfficheNom{0}\ifboolKV[ClesReperage]{AffichageNom}{\ifboolKV[ClesReperage]{LectureCoord}{\xdef\AfficheNom{3}}{\xdef\AfficheNom{2}}}{\ifboolKV[ClesReperage]{LectureCoord}{\xdef\AfficheNom{1}}{}}%
+ \xdef\AfficheGrad{0}\ifboolKV[ClesReperage]{AffichageGrad}{\xdef\AfficheGrad{1}}{}%
+ \xdef\AfficheCoord{\useKV[ClesReperage]{AffichageAbs}}%
+ \MPPlannew{(\useKV[ClesReperage]{Unitex},\useKV[ClesReperage]{Pasx})}{(\useKV[ClesReperage]{Unitey},\useKV[ClesReperage]{Pasy})}{\the\toklistepointrepere}{\AfficheNom}{\AfficheCoord}{\AfficheGrad}{(\useKV[ClesReperage]{ValeurUnitex},\useKV[ClesReperage]{ValeurUnitey})}%
+ }%
+}
+
+\def\MPPlannew#1#2#3#4#5#6#7{%
+ %#1 : Unitex, pasx
+ %#2 : unitey, pasy
+ %#3 : liste de points
+ %#4 : Affichage nom + lecture graphique
+ %#5 : Affichage des (abscisses/ordonn\'ees)
+ %#6 : Graduation compl\`ete ?
+ %#7 : (unitex,unitey)
+ \ifluatex
+ \begin{mplibcode}
+ maxx:=-4000;
+ minx=4000;
+ unitex:=(xpart(#1))*cm;
+ pasx=ypart(#1);
+ unitpx:=unitex/pasx;
+ maxy:=-4000;
+ miny:=4000;
+ unitey:=(xpart(#2))*cm;
+ pasy:=ypart(#2);
+ unitpy:=unitey/pasy;
+ n:=1;
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 3)=1:
+ if p_>maxx:
+ maxx:=p_;
+ fi;
+ if p_<minx:
+ minx:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if p_>maxy:
+ maxy:=p_;
+ fi;
+ if p_<miny:
+ miny:=p_;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ maxx:=maxx+1;
+ minx:=minx-1;
+ if maxx<(ypart(#1)+1):
+ maxx:=ypart(#1)+1;
+ fi;
+ if minx>(-ypart(#1)-1):
+ minx:=-ypart(#1)-1;
+ fi;
+ maxy:=maxy+1;
+ miny:=miny-1;
+ if maxy<(ypart(#2)+1):
+ maxy:=ypart(#2)+1;
+ fi;
+ if miny>(-ypart(#2)-1):
+ miny:=-ypart(#2)-1;
+ fi;
+ enddef;
+ toto(#3);
+ Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy);
+ pair A,B,C,D,E;
+ A=(0,0);
+ B=(minx*unitpx,0);
+ C=(maxx*unitpx,0);
+ D=(0,miny*unitpy);
+ E=(0,maxy*unitpy);
+ for k=0 upto (maxx-minx):
+ draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris;
+ endfor;
+ for k=0 upto (maxy-miny):
+ draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris;
+ endfor;
+ drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0));
+ drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy));
+ % graduation compl\`ete ou pas ?
+ label.llft(btex \footnotesize 0 etex,A);
+ if #6>0:
+ for k=minx upto maxx:
+ if (xpart((k*unitex,0))>xpart(B+(-0.75*unitpx,0))) and (xpart((k*unitex,0))<xpart(C+(0.75*unitpx,0))):
+ if k<>0:
+ dotlabel.lrt(TEX("\footnotesize\num{"&decimal(k)&"}"),(k*unitex,0));
+ fi;
+ fi;
+ endfor;
+ for k=miny upto maxy:
+ if (ypart((0,k*unitey))>ypart(D+(0,-0.75*unitpy))) and (ypart((0,k*unitey))<ypart(E+(0,0.75*unitpy))):
+ if k<>0:
+ dotlabel.ulft(TEX("\footnotesize\num{"&decimal(k)&"}"),(0,k*unitey));
+ fi;
+ fi;
+ endfor;
+ else:
+ dotlabel.lrt(TEX("\footnotesize\num{"&decimal(xpart(#7))&"}"),(unitex,0));
+ dotlabel.ulft(TEX("\footnotesize\num{"&decimal(ypart(#7))&"}"),(0,unitey));
+ fi;
+ % apparition du nom des points ou pas
+ m_c:=m_c*3;
+ marque_p:="croix";
+ vardef tata(text t)=%on place les points
+ if #4>0:
+ n:=1;
+ k:=0;%pour retenir la coordonn\'ee en x
+ l:=0;%pour retenir la coordonn\'ee en y
+ for p_=t:
+ if (n mod 3)=1:
+ if numeric p_:
+ k:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if numeric p_:
+ l:=p_;
+ fi;
+ fi;
+ if (n mod 3)=0:
+ if #4>1:
+ if p_<>"":
+ if (k>0) and (l>0):
+ label.urt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l>0):
+ label.urt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l=0):
+ label.urt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l>0):
+ label.ulft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l<0):
+ label.llft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l<0):
+ label.llft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l=0):
+ label.llft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l<0):
+ label.lrt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ pointe((k*unitpx,l*unitpy));
+ fi;
+ fi;
+ if (#4=1) or (#4=3):
+ draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ if #5=2:
+ n:=1;
+ k:=0;%pour retenir la coordonn\'ee en x
+ l:=0;%pour retenir la coordonn\'ee en y
+ for p_=t:
+ if (n mod 3)=1:
+ if numeric p_:
+ k:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if numeric p_:
+ l:=p_;
+ fi;
+ fi;
+ if (n mod 3)=0:
+ if p_<>"":
+ if (k mod pasx)<>0:
+ label.lrt(TEX("\footnotesize$\frac{\num{"&decimal(k)&"}}{\num{"&decimal(pasx)&"}}$"),(k*unitpx,0));
+ else:
+ label.lrt(TEX("\footnotesize\num{\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0));
+ fi;
+ if (l mod pasy)<>0:
+ label.ulft(TEX("\footnotesize$\frac{\num{"&decimal(l)&"}}{\num{"&decimal(pasy)&"}}$"),(0,l*unitpy));
+ else:
+ label.ulft(TEX("\footnotesize\num{\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy));
+ fi;
+ pointe((k*unitpx,0),(0,l*unitpy));
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ elseif #5=1:
+ n:=1;
+ k:=0;%pour retenir la coordonn\'ee en x
+ l:=0;%pour retenir la coordonn\'ee en y
+ for p_=t:
+ if (n mod 3)=1:
+ if numeric p_:
+ k:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if numeric p_:
+ l:=p_;
+ fi;
+ fi;
+ if (n mod 3)=0:
+ if p_<>"":
+ label.lrt(TEX("\footnotesize\num{\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0));
+ label.ulft(TEX("\footnotesize\num{\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy));
+ pointe((k*unitpx,0),(0,l*unitpy));
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ tata(#3);
+ \end{mplibcode}
+ \else
+ \begin{mpost}
+ maxx:=-4000;
+ minx=4000;
+ unitex:=(xpart(#1))*cm;
+ pasx=ypart(#1);
+ unitpx:=unitex/pasx;
+ maxy:=-4000;
+ miny:=4000;
+ unitey:=(xpart(#2))*cm;
+ pasy:=ypart(#2);
+ unitpy:=unitey/pasy;
+ n:=1;
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 3)=1:
+ if p_>maxx:
+ maxx:=p_;
+ fi;
+ if p_<minx:
+ minx:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if p_>maxy:
+ maxy:=p_;
+ fi;
+ if p_<miny:
+ miny:=p_;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ maxx:=maxx+1;
+ minx:=minx-1;
+ if maxx<(ypart(#1)+1):
+ maxx:=ypart(#1)+1;
+ fi;
+ if minx>(-ypart(#1)-1):
+ minx:=-ypart(#1)-1;
+ fi;
+ maxy:=maxy+1;
+ miny:=miny-1;
+ if maxy<(ypart(#2)+1):
+ maxy:=ypart(#2)+1;
+ fi;
+ if miny>(-ypart(#2)-1):
+ miny:=-ypart(#2)-1;
+ fi;
+ enddef;
+ toto(#3);
+ Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy);
+ pair A,B,C,D,E;
+ A=(0,0);
+ B=(minx*unitpx,0);
+ C=(maxx*unitpx,0);
+ D=(0,miny*unitpy);
+ E=(0,maxy*unitpy);
+ for k=0 upto (maxx-minx):
+ draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris;
+ endfor;
+ for k=0 upto (maxy-miny):
+ draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris;
+ endfor;
+ drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0));
+ drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy));
+ % graduation compl\`ete ou pas ?
+ label.llft(btex \noexpand\footnotesize 0 etex,A);
+ if #6>0:
+ for k=minx upto maxx:
+ if (xpart((k*unitex,0))>xpart(B+(-0.75*unitpx,0))) and (xpart((k*unitex,0))<xpart(C+(0.75*unitpx,0))):
+ if k<>0:
+ dotlabel.lrt(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(k)&"}"),(k*unitex,0));
+ fi;
+ fi;
+ endfor;
+ for k=miny upto maxy:
+ if (ypart((0,k*unitey))>ypart(D+(0,-0.75*unitpy))) and (ypart((0,k*unitey))<ypart(E+(0,0.75*unitpy))):
+ if k<>0:
+ dotlabel.ulft(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(k)&"}"),(0,k*unitey));
+ fi;
+ fi;
+ endfor;
+ else:
+ dotlabel.lrt(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(xpart(#7))&"}"),(unitex,0));
+ dotlabel.ulft(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(ypart(#7))&"}"),(0,unitey));
+ fi;
+ % apparition du nom des points ou pas
+ m_c:=m_c*3;
+ marque_p:="croix";
+ vardef tata(text t)=%on place les points
+ if #4>0:
+ n:=1;
+ k:=0;%pour retenir la coordonn\'ee en x
+ l:=0;%pour retenir la coordonn\'ee en y
+ for p_=t:
+ if (n mod 3)=1:
+ if numeric p_:
+ k:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if numeric p_:
+ l:=p_;
+ fi;
+ fi;
+ if (n mod 3)=0:
+ if #4>1:
+ if p_<>"":
+ if (k>0) and (l>0):
+ label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l>0):
+ label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l=0):
+ label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l>0):
+ label.ulft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l<0):
+ label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l<0):
+ label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l=0):
+ label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l<0):
+ label.lrt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ pointe((k*unitpx,l*unitpy));
+ fi;
+ fi;
+ if (#4=1) or (#4=3):
+ draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ if #5=2:
+ n:=1;
+ k:=0;%pour retenir la coordonn\'ee en x
+ l:=0;%pour retenir la coordonn\'ee en y
+ for p_=t:
+ if (n mod 3)=1:
+ if numeric p_:
+ k:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if numeric p_:
+ l:=p_;
+ fi;
+ fi;
+ if (n mod 3)=0:
+ if p_<>"":
+ if (k mod pasx)<>0:
+ label.lrt(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{"&decimal(k)&"}}{\noexpand\num{"&decimal(pasx)&"}}$"),(k*unitpx,0));
+ else:
+ label.lrt(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0));
+ fi;
+ if (l mod pasy)<>0:
+ label.ulft(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{"&decimal(l)&"}}{\noexpand\num{"&decimal(pasy)&"}}$"),(0,l*unitpy));
+ else:
+ label.ulft(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy));
+ fi;
+ pointe((k*unitpx,0),(0,l*unitpy));
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ elseif #5=1:
+ n:=1;
+ k:=0;%pour retenir la coordonn\'ee en x
+ l:=0;%pour retenir la coordonn\'ee en y
+ for p_=t:
+ if (n mod 3)=1:
+ if numeric p_:
+ k:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if numeric p_:
+ l:=p_;
+ fi;
+ fi;
+ if (n mod 3)=0:
+ if p_<>"":
+ label.lrt(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0));
+ label.ulft(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy));
+ pointe((k*unitpx,0),(0,l*unitpy));
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ tata(#3);
+ \end{mpost}
+ \fi
+}
+
+\def\MPPlanTrace#1#2#3#4#5#6#7#8#9{%
+ \ifluatex
+ \begin{mplibcode}
+ maxx:=-4000;
+ minx=4000;
+ unitex:=#1*cm;
+ pasx=#2;
+ unitpx:=unitex/pasx;
+ maxy:=-4000;
+ miny:=4000;
+ unitey:=#3*cm;
+ pasy:=#4;
+ unitpy:=unitey/pasy;
+ n:=1;
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 3)=1:
+ if p_>maxx:
+ maxx:=p_;
+ fi;
+ if p_<minx:
+ minx:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if p_>maxy:
+ maxy:=p_;
+ fi;
+ if p_<miny:
+ miny:=p_;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ maxx:=maxx+1;
+ minx:=minx-1;
+ if maxx<(#2+1):
+ maxx:=#2+1;
+ fi;
+ if minx>(-#2-1):
+ minx:=-#2-1;
+ fi;
+ maxy:=maxy+1;
+ miny:=miny-1;
+ if maxy<(#4+1):
+ maxy:=#2+1;
+ fi;
+ if miny>(-#4-1):
+ miny:=-#4-1;
+ fi;
+ enddef;
+ toto(#5);
+ Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy);
+ pair A,B,C,D,E;
+ A=(0,0);
+ B=(minx*unitpx,0);
+ C=(maxx*unitpx,0);
+ D=(0,miny*unitpy);
+ E=(0,maxy*unitpy);
+ for k=0 upto (maxx-minx):
+ draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris;
+ endfor;
+ for k=0 upto (maxy-miny):
+ draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris;
+ endfor;
+ drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0));
+ drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy));
+ dotlabel.bot(TEX("\footnotesize\num{"&decimal(#7)&"}"),(unitex,0));
+ dotlabel.lft(TEX("\footnotesize\num{"&decimal(#8)&"}"),(0,unitey));
+ label.llft(btex 0 etex,A);
+ % apparition du nom des points ou pas
+ m_c:=m_c*3;
+ marque_p:="croix";
+ vardef tata(text t)=%on place les points
+ if #6>0:
+ n:=1;
+ k:=0;%pour retenir la coordonn\'ee en x
+ l:=0;%pour retenir la coordonn\'ee en y
+ for p_=t:
+ if (n mod 3)=1:
+ if numeric p_:
+ k:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if numeric p_:
+ l:=p_;
+ fi;
+ fi;
+ if (n mod 3)=0:
+ if #6>1:
+ if (k>0) and (l>0):
+ label.urt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l>0):
+ label.urt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l=0):
+ label.urt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l>0):
+ label.ulft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l<0):
+ label.llft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l<0):
+ label.llft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l=0):
+ label.llft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l<0):
+ label.lrt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ pointe((k*unitpx,l*unitpy));
+ fi;
+ if (#6=1) or (#6=3):
+ draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ vardef Tracage(text t)(text ls)=%on trace les segments
+ pair A[];
+ n:=0;%pour parcourir la liste
+ m:=0;%pour lister les points par leur nombre
+ for p_=t:
+ n:=n+1;
+ if (n mod 3)=1:
+ k:=p_;
+ fi;
+ if (n mod 3)=2:
+ l:=p_;
+ fi;
+ if (n mod 3)=0:
+ m:=m+1;
+ A[m]=(k*unitpx,l*unitpy);
+ fi;
+ endfor;
+ for p_=ls:
+ draw segment(A[p_ div 10],A[p_ mod 10]);
+ endfor;
+ enddef;
+ tata(#5);
+ Tracage(#5)(#9);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfCGeometrie;}]
+ maxx:=-4000;
+ minx=4000;
+ unitex:=#1*cm;
+ pasx=#2;
+ unitpx:=unitex/pasx;
+ maxy:=-4000;
+ miny:=4000;
+ unitey:=#3*cm;
+ pasy:=#4;
+ unitpy:=unitey/pasy;
+ n:=1;
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 3)=1:
+ if p_>maxx:
+ maxx:=p_;
+ fi;
+ if p_<minx:
+ minx:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if p_>maxy:
+ maxy:=p_;
+ fi;
+ if p_<miny:
+ miny:=p_;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ maxx:=maxx+1;
+ minx:=minx-1;
+ if maxx<(#2+1):
+ maxx:=#2+1;
+ fi;
+ if minx>(-#2-1):
+ minx:=-#2-1;
+ fi;
+ maxy:=maxy+1;
+ miny:=miny-1;
+ if maxy<(#4+1):
+ maxy:=#2+1;
+ fi;
+ if miny>(-#4-1):
+ miny:=-#4-1;
+ fi;
+ enddef;
+ toto(#5);
+ Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy);
+ pair A,B,C,D,E;
+ A=(0,0);
+ B=(minx*unitpx,0);
+ C=(maxx*unitpx,0);
+ D=(0,miny*unitpy);
+ E=(0,maxy*unitpy);
+ for k=0 upto (maxx-minx):
+ draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris;
+ endfor;
+ for k=0 upto (maxy-miny):
+ draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris;
+ endfor;
+ drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0));
+ drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy));
+ dotlabel.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#7)&"}"),(unitex,0));
+ dotlabel.lft(LATEX("\noexpand\footnotesize\num{"&decimal(#8)&"}"),(0,unitey));
+ label.llft(btex 0 etex,A);
+ % apparition du nom des points ou pas
+ m_c:=m_c*3;
+ marque_p:="croix";
+ vardef tata(text t)=%on place les points
+ if #6>0:
+ n:=1;
+ k:=0;%pour retenir la coordonn\'ee en x
+ l:=0;%pour retenir la coordonn\'ee en y
+ for p_=t:
+ if (n mod 3)=1:
+ if numeric p_:
+ k:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if numeric p_:
+ l:=p_;
+ fi;
+ fi;
+ if (n mod 3)=0:
+ if #6>1:
+ if (k>0) and (l>0):
+ label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l>0):
+ label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l=0):
+ label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l>0):
+ label.ulft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l<0):
+ label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l<0):
+ label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l=0):
+ label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l<0):
+ label.lrt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ pointe((k*unitpx,l*unitpy));
+ fi;
+ if (#6=1) or (#6=3):
+ draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ vardef Tracage(text t)(text ls)=%on trace les segments
+ pair A[];
+ n:=0;%pour parcourir la liste
+ m:=0;%pour lister les points par leur nombre
+ for p_=t:
+ n:=n+1;
+ if (n mod 3)=1:
+ k:=p_;
+ fi;
+ if (n mod 3)=2:
+ l:=p_;
+ fi;
+ if (n mod 3)=0:
+ m:=m+1;
+ A[m]=(k*unitpx,l*unitpy);
+ fi;
+ endfor;
+ for p_=ls:
+ draw segment(A[p_ div 10],A[p_ mod 10]);
+ endfor;
+ enddef;
+ tata(#5);
+ Tracage(#5)(#9);
+ \end{mpost}
+ \fi
+}
+
+\def\MPTouteDROITEGraduee#1#2{%
+ % #1 : liste des points \`a placer en pas. pour g\'erer le cas des rep\'erages fractionnaires
+ % #2 : liste des noms des points
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ maxx:=0;
+ minx:=4000;
+ unitex:=\useKV[ClesReperage]{Unitex}*cm;
+ pasx:=\useKV[ClesReperage]{Pasx};
+ unitp:=unitex/pasx;%unit\'e de d\'eplacement
+ ValeurUnitex:=\useKV[ClesReperage]{ValeurUnitex};
+ ValeurOrigine:=\useKV[ClesReperage]{ValeurOrigine};
+ AffichageGrad:=\AffichageGrad;
+ AffichageCoord:=\useKV[ClesReperage]{AffichageAbs};
+ AffichageNom:=\AffichageNom;
+ boolean DemiDroite;
+ DemiDroite=\useKV[ClesReperage]{DemiDroite};
+ numeric valeur[];
+ vardef titi(text t)=
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ valeur[n]=p_;
+ endfor;
+ enddef;
+ titi(#1);
+ % Détermination des abscisses maximale et minimale
+ for k=1 upto n:
+ if valeur[k]>maxx:
+ maxx:=valeur[k];
+ fi;
+ if valeur[k]<minx:
+ minx:=valeur[k];
+ fi;
+ endfor;
+ maxx:=maxx+(pasx div 2);
+ minx:=minx-(pasx div 2);
+ if maxx<(pasx+1):
+ maxx:=2*pasx-1;
+ fi;
+ if minx>(-pasx-1):
+ minx:=-2*pasx-1;
+ fi;
+ if minx<\useKV[ClesReperage]{ValeurMin}:
+ minx:=\useKV[ClesReperage]{ValeurMin};
+ fi;
+ if maxx>\useKV[ClesReperage]{ValeurMax}:
+ maxx:=\useKV[ClesReperage]{ValeurMax};
+ fi;
+ if DemiDroite:
+ minx:=0;
+ fi;
+ % -----
+ pair A,B,C;
+ A=(0,0);
+ B=unitp*(maxx,0);
+ C=unitp*(minx,0);
+ % On trace la droite
+ if DemiDroite:
+ drawarrow C--(B+unitp*(0.75,0));
+ else:
+ drawarrow (C+unitp*(-0.75,0))--(B+unitp*(0.75,0));
+ fi;
+ % marquage secondaire
+ marque_s:=marque_s/3;
+% labeloffset:=labeloffset*2;
+ if ((maxx-minx) mod 2)=0:
+ for k=(minx+1) step 2 until (maxx-1):
+ draw marquedemidroite(C,B);
+ draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+ endfor;
+ else:
+ for k=(minx) step 2 until (maxx-1):
+ draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+ endfor;
+ fi;
+ % marquage primaire
+ marque_s:=marque_s*3;
+ for k=0 step pasx until (maxx-pasx):
+ draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+ endfor;
+ for k=0 step -pasx until (minx+pasx):
+ draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
+ endfor;
+ % marquage des points
+ m_c:=m_c*3;
+ marque_p:="croix";
+ labeloffset:=labeloffset*3;
+ label.bot(TEX("\footnotesize\num{"&decimal(ValeurUnitex)&"}"),unitex*(1,0));
+ label.bot(TEX("\footnotesize\num{"&decimal(ValeurOrigine)&"}"),A);
+ if AffichageGrad>0:
+ for k=((minx+(minx mod pasx)) div pasx) upto (maxx div pasx):
+ if (k<0) or (k>1):
+ label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
+ fi;
+ endfor;
+ fi;
+ vardef tata(text t)=%on place les points
+ if AffichageNom>0:
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ if substring(1,2) of p_="*":
+ label.top(TEX(substring(2,length p_) of p_),unitp*(valeur[n],0));
+ else:
+ label.top(TEX(p_),unitp*(valeur[n],0));
+ fi;
+ if p_<>"":
+ pointe(unitp*(valeur[n],0));
+ fi;
+ endfor;
+ fi;
+ % On ajoute une paramétrisation possible à chaque point.
+ if AffichageCoord>0:
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ if substring(1,2) of p_="*":
+ ACoord:=scantokens(substring(0,1) of p_);
+ if ACoord=3:
+ drawarrow ((unitp*valeur[n],-7mm))--((unitp*valeur[n],-3mm));
+ label.bot(btex \hbox to2em{\dotfill} etex,((unitp*valeur[n],-8mm)));
+ pointe(unitp*(valeur[n]-ValeurOrigine,0));
+ elseif ACoord=2:
+ if ((ValeurUnitex*valeur[n]) mod pasx)<>0:
+ label.bot(TEX("\footnotesize$\frac{\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(valeur[n],0));
+ else:
+ label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+ fi;
+ pointe(unitp*(valeur[n],0));
+ elseif ACoord=1:
+ label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+ pointe(unitp*(valeur[n],0));
+ fi;
+ else:
+ if AffichageCoord=3:
+ if p_<>"":
+ drawarrow ((unitp*valeur[n],-7mm))--((unitp*valeur[n],-3mm));
+ label.bot(btex \hbox to2em{\dotfill} etex,((unitp*valeur[n],-8mm)));
+ pointe(unitp*(valeur[n],0));
+ fi;
+ elseif AffichageCoord=2:
+ if p_<>"":
+ if ((ValeurUnitex*valeur[n]) mod pasx)<>0:
+ label.bot(TEX("\footnotesize$\frac{\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(valeur[n],0));
+ else:
+ label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+ fi;
+ pointe(unitp*(valeur[n],0));
+ fi;
+ elseif AffichageCoord=1:
+ if p_<>"":
+ label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+ pointe(unitp*(valeur[n],0));
+ fi;
+ fi;
+ fi;
+ endfor;
+ fi;
+ enddef;
+ %%%
+ tata(#2);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={unitex:=\useKV[ClesReperage]{Unitex}*cm; pasx:=\useKV[ClesReperage]{Pasx}; unitp:=unitex/pasx; ValeurUnitex:=\useKV[ClesReperage]{ValeurUnitex}; ValeurOrigine:=\useKV[ClesReperage]{ValeurOrigine}; AffichageGrad:=\AffichageGrad; AffichageCoord:=\useKV[ClesReperage]{AffichageAbs}; AffichageNom:=\AffichageNom; ValeurMin=\useKV[ClesReperage]{ValeurMin}; ValeurMax=\useKV[ClesReperage]{ValeurMax};boolean DemiDroite;DemiDroite=\useKV[ClesReperage]{DemiDroite}}]
+ maxx:=0;
+ minx:=4000;
+ numeric valeur[];
+ vardef titi(text t)=
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ valeur[n]=p_;
+ endfor;
+ enddef;
+ titi(#1);
+ % Détermination des abscisses maximale et minimale
+ for k=1 upto n:
+ if valeur[k]>maxx:
+ maxx:=valeur[k];
+ fi;
+ if valeur[k]<minx:
+ minx:=valeur[k];
+ fi;
+ endfor;
+ maxx:=maxx+(pasx div 2);
+ minx:=minx-(pasx div 2);
+ if maxx<(pasx+1):
+ maxx:=2*pasx-1;
+ fi;
+ if minx>(-pasx-1):
+ minx:=-2*pasx-1;
+ fi;
+ if minx<ValeurMin:
+ minx:=ValeurMin;
+ fi;
+ if maxx>ValeurMax:
+ maxx:=ValeurMax;
+ fi;
+ if DemiDroite:
+ minx:=0;
+ fi;
+ % -----
+ pair A,B,C;
+ A=(0,0);
+ B=unitp*(maxx,0);
+ C=unitp*(minx,0);
+ % On trace la demi-droite
+ if DemiDroite:
+ drawarrow C--(B+unitp*(0.75,0));
+ else:
+ drawarrow (C+unitp*(-0.75,0))--(B+unitp*(0.75,0));
+ fi;
+ % marquage secondaire
+ marque_s:=marque_s/3;
+ %labeloffset:=labeloffset*2;
+ if ((maxx-minx) mod 2)=0:
+ for k=(minx+1) step 2 until (maxx-1):
+ draw marquedemidroite(C,B);
+ draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+ endfor;
+ else:
+ for k=(minx) step 2 until (maxx-1):
+ draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+ endfor;
+ fi;
+ % marquage primaire
+ marque_s:=marque_s*3;
+ for k=0 step pasx until (maxx-pasx):
+ draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+ endfor;
+ for k=0 step -pasx until (minx+pasx):
+ draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
+ endfor;
+ % marquage des points
+ m_c:=m_c*3;
+ marque_p:="croix";
+ labeloffset:=labeloffset*3;
+ label.bot(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(ValeurUnitex)&"}"),unitex*(1,0));
+ label.bot(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(ValeurOrigine)&"}"),A);
+ if AffichageGrad>0:
+ for k=((minx+(minx mod pasx)) div pasx) upto (maxx div pasx):
+ if (k<0) or (k>1):
+ label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
+ fi;
+ endfor;
+ fi;
+ vardef tata(text t)=%on place les points
+ if AffichageNom>0:
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ if substring(1,2) of p_="*":
+ label.top(LATEX(substring(2,length p_) of p_),unitp*(valeur[n],0));
+ else:
+ label.top(LATEX(p_),unitp*(valeur[n],0));
+ fi;
+ if p_<>"":
+ pointe(unitp*(valeur[n],0));
+ fi;
+ endfor;
+ fi;
+ if AffichageCoord>0:
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ if substring(1,2) of p_="*":
+ ACoord:=scantokens(substring(0,1) of p_);
+ if ACoord=3:
+ drawarrow (unitp*(valeur[n],-1))--(unitp*(valeur[n],-0.3));
+ label.bot(btex \noexpand\hbox to2em{\noexpand\dotfill} etex,(unitp*(valeur[n],-1)));
+ pointe(unitp*(valeur[n]-ValeurOrigine,0));
+ elseif ACoord=2:
+ if ((ValeurUnitex*valeur[n]) mod pasx)<>0:
+ label.bot(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{\noexpand\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"}}}{\noexpand\num{"&decimal(pasx)&"}}$"),unitp*(valeur[n],0));
+ else:
+ label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+ fi;
+ pointe(unitp*(valeur[n],0));
+ elseif ACoord=1:
+ label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+ pointe(unitp*(valeur[n],0));
+ fi;
+ else:
+ if AffichageCoord=3:
+ if p_<>"":
+ drawarrow (unitp*(valeur[n],-1))--(unitp*(valeur[n],-0.3));
+ label.bot(btex \noexpand\hbox to2em{\noexpand\dotfill} etex,(unitp*(valeur[n],-1)));
+ pointe(unitp*(valeur[n],0));
+ fi;
+ elseif AffichageCoord=2:
+ if p_<>"":
+ if ((ValeurUnitex*valeur[n]) mod pasx)<>0:
+ label.bot(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{\noexpand\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"}}}{\noexpand\num{"&decimal(pasx)&"}}$"),unitp*(valeur[n],0));
+ else:
+ label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+ fi;
+ pointe(unitp*(valeur[n],0));
+ fi;
+ elseif AffichageCoord=1:
+ if p_<>"":
+ label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+ pointe(unitp*(valeur[n],0));
+ fi;
+ fi;
+ fi;
+ endfor;
+ fi;
+ enddef;
+ %%%
+ tata(#2);
+ \end{mpost}
+ \fi
+}%
+
+\def\MPThermo#1#2{%
+ % #1 : liste des points \`a placer en pas. pour g\'erer le cas des rep\'erages fractionnaires
+ % #2 : liste des noms des points
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ maxx:=0;
+ minx:=4000;
+ unitex:=\useKV[ClesReperage]{Unitex}*cm;
+ pasx:=\useKV[ClesReperage]{Pasx};
+ unitp:=unitex/pasx;%unit\'e de d\'eplacement
+ ValeurUnitex:=\useKV[ClesReperage]{ValeurUnitex};
+ ValeurOrigine:=\useKV[ClesReperage]{ValeurOrigine};
+ AffichageGrad:=\AffichageGrad;
+ AffichageCoord:=\useKV[ClesReperage]{AffichageAbs};
+ AffichageNom:=\AffichageNom;
+ boolean Kelvin,Farenheit;
+ Kelvin=\useKV[ClesReperage]{Kelvin};
+ Farenheit=\useKV[ClesReperage]{Farenheit};
+ color ColMercure;
+ ColMercure:=\useKV[ClesReperage]{CouleurMercure};
+ boolean Mercure;
+ Mercure=\useKV[ClesReperage]{Mercure};
+ numeric valeur[];
+ vardef titi(text t)=
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ valeur[n]=p_;
+ endfor;
+ enddef;
+ titi(#1);
+ % Détermination des abscisses maximale et minimale
+ for k=1 upto n:
+ if valeur[k]>maxx:
+ maxx:=valeur[k];
+ fi;
+ if valeur[k]<minx:
+ minx:=valeur[k];
+ fi;
+ endfor;
+ maxx:=maxx+(pasx div 2);
+ minx:=minx-(pasx div 2);
+ if maxx<(pasx+1):
+ maxx:=2*pasx-1;
+ fi;
+ if minx>(-pasx-1):
+ minx:=-2*pasx-1;
+ fi;
+ if Kelvin:
+ minx:=0;
+ fi;
+ % -----
+ pair A,B,C;
+ A=(0,0);
+ B=unitp*(0,maxx);
+ C=unitp*(0,minx);
+ % On trace la demi-droite
+ draw ((C+unitp*(0,-0.75))--(B+unitp*(0,0.75)));
+ % marquage secondaire
+ marque_s:=marque_s/3;
+ if pasx<11:
+ labeloffset:=labeloffset*2;
+ if ((maxx-minx) mod 2)=0:
+ for k=(minx+1) step 2 until (maxx-1):
+ draw marquedemidroite(C,B);
+ draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+ endfor;
+ else:
+ for k=(minx) step 2 until (maxx-1):
+ draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+ endfor;
+ fi;
+ fi;
+ % marquage primaire
+ marque_s:=marque_s*3;
+ for k=0 step pasx until (maxx-pasx):
+ draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+ endfor;
+ for k=0 step -pasx until (minx+pasx):
+ draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
+ endfor;
+ % marquage des points
+ m_c:=m_c*3;
+ marque_p:="croix";
+ labeloffset:=labeloffset*2;
+ if Kelvin:
+ label.lft(TEX("\footnotesize\Temp[K]{"&decimal(ValeurUnitex)&"}"),unitex*(0,1));
+ label.lft(TEX("\footnotesize\Temp[K]{"&decimal(ValeurOrigine)&"}"),A);
+ elseif Farenheit:
+ label.lft(TEX("\footnotesize\Temp[F]{"&decimal(ValeurUnitex)&"}"),unitex*(0,1));
+ label.lft(TEX("\footnotesize\Temp[F]{"&decimal(ValeurOrigine)&"}"),A);
+ else:
+ label.lft(TEX("\footnotesize\Temp{"&decimal(ValeurUnitex)&"}"),unitex*(0,1));
+ label.lft(TEX("\footnotesize\Temp{"&decimal(ValeurOrigine)&"}"),A);
+ fi;
+ if AffichageGrad>0:
+ for k=((minx+(minx mod pasx)) div pasx) upto (maxx div pasx):
+ if (k<0) or (k>1):
+ if Kelvin:
+ label.lft(TEX("\footnotesize\Temp[K]{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(0,k));%%%
+ elseif Farenheit:
+ label.lft(TEX("\footnotesize\Temp[F]{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(0,k));%%%
+ else:
+ label.lft(TEX("\footnotesize\Temp{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(0,k));%%%
+ fi;
+ fi;
+ endfor;
+ fi;
+
+ vardef Thermo(expr nbt)=
+ pair Tc[];
+ Tc[0]=(5mm,unitp*(minx-1));
+ path cc[];
+ cc1=cercles(Tc[0],2.5mm);
+ Tc1=pointarc(cc1,75);
+ Tc4=pointarc(cc1,105);
+ Tc2=(xpart(Tc1),ypart(B+unitp*(0,0.75)));
+ Tc3=(xpart(Tc4),ypart(B+unitp*(0,0.75)));
+ Tc5=(xpart(Tc1),ypart(unitp*(0,valeur[1])));
+ Tc6=(xpart(Tc4),ypart(unitp*(0,valeur[1])));
+ path temp;
+ temp=Tc1--Tc5--Tc6--Tc4--arccercle(Tc4,Tc1,Tc0)--cycle;
+ if nbt>0:
+ fill temp withcolor ColMercure;
+ trace Tc5--Tc6;
+ fi;
+ trace arccercle(Tc4,Tc1,Tc0);
+ trace Tc1--Tc2--arccercle(Tc2,Tc3,iso(Tc2,Tc3))--Tc4;
+ enddef;
+
+ if Mercure:Thermo(1) else : Thermo(0) fi;
+
+ vardef tata(text t)=%on place les points
+ if AffichageNom>0:
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ label.rt(TEX(p_),unitp*(0,valeur[n]));
+ if p_<>"":
+ pointe(unitp*(0,valeur[n]));
+ fi;
+ endfor;
+ fi;
+ if AffichageCoord=3:
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ if p_<>"":
+ drawarrow (unitp*(-1,valeur[n]))--(unitp*(-0.3,valeur[n]));
+ label.rt(btex \hbox to2em{\dotfill} etex,(unitp*(-1,valeur[n])));
+ pointe(unitp*(0,valeur[n]-ValeurOrigine));
+ fi;
+ endfor;
+ elseif AffichageCoord=2:
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ if p_<>"":
+ if ((ValeurUnitex*valeur[n]) mod pasx)<>0:
+ label.rt(TEX("\footnotesize$\frac{\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(0,valeur[n]));
+ else:
+ label.rt(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(0,valeur[n]));
+ fi;
+ pointe(unitp*(0,valeur[n]-ValeurOrigine));
+ fi;
+ endfor;
+ elseif AffichageCoord=1:
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ if p_<>"":
+ if Kelvin:
+ label.rt(TEX("\footnotesize\Temp[K]{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),(5mm,unitp*valeur[n]));
+ elseif Farenheit:
+ label.rt(TEX("\footnotesize\Temp[F]{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),(5mm,unitp*valeur[n]));
+ else:
+ label.rt(TEX("\footnotesize\Temp{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),(5mm,unitp*valeur[n]));
+ fi;
+ pointe(unitp*(0,valeur[n]));
+ draw (unitp*(0,valeur[n]))--(7.5mm,unitp*valeur[n]) dashed evenly;
+ fi;
+ endfor;
+ fi;
+ enddef;
+ %%%
+ tata(#2);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={unitex:=\useKV[ClesReperage]{Unitex}*cm;
+ pasx:=\useKV[ClesReperage]{Pasx};
+ unitp:=unitex/pasx;%unit\'e de d\'eplacement
+ ValeurUnitex:=\useKV[ClesReperage]{ValeurUnitex};
+ ValeurOrigine:=\useKV[ClesReperage]{ValeurOrigine};
+ AffichageGrad:=\AffichageGrad;
+ AffichageCoord:=\useKV[ClesReperage]{AffichageAbs};
+ AffichageNom:=\AffichageNom;
+ boolean Kelvin,Farenheit;
+ Kelvin=\useKV[ClesReperage]{Kelvin};
+ Farenheit=\useKV[ClesReperage]{Farenheit};
+ color ColMercure;
+ ColMercure:=\useKV[ClesReperage]{CouleurMercure};
+ boolean Mercure;
+ Mercure=\useKV[ClesReperage]{Mercure};}]
+ maxx:=0;
+ minx:=4000;
+ numeric valeur[];
+ vardef titi(text t)=
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ valeur[n]=p_;
+ endfor;
+ enddef;
+ titi(#1);
+ % Détermination des abscisses maximale et minimale
+ for k=1 upto n:
+ if valeur[k]>maxx:
+ maxx:=valeur[k];
+ fi;
+ if valeur[k]<minx:
+ minx:=valeur[k];
+ fi;
+ endfor;
+ maxx:=maxx+(pasx div 2);
+ minx:=minx-(pasx div 2);
+ if maxx<(pasx+1):
+ maxx:=2*pasx-1;
+ fi;
+ if minx>(-pasx-1):
+ minx:=-2*pasx-1;
+ fi;
+ if Kelvin:
+ minx:=0;
+ fi;
+ % -----
+ pair A,B,C;
+ A=(0,0);
+ B=unitp*(0,maxx);
+ C=unitp*(0,minx);
+ % On trace la demi-droite
+ draw (C+unitp*(0,-0.75))--(B+unitp*(0,0.75));
+ % marquage secondaire
+ marque_s:=marque_s/3;
+ if pasx<11:
+ labeloffset:=labeloffset*2;
+ if ((maxx-minx) mod 2)=0:
+ for k=(minx+1) step 2 until (maxx-1):
+ draw marquedemidroite(C,B);
+ draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+ endfor;
+ else:
+ for k=(minx) step 2 until (maxx-1):
+ draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+ endfor;
+ fi;
+ fi;
+ % marquage primaire
+ marque_s:=marque_s*3;
+ for k=0 step pasx until (maxx-pasx):
+ draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+ endfor;
+ for k=0 step -pasx until (minx+pasx):
+ draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
+ endfor;
+ % marquage des points
+ m_c:=m_c*3;
+ marque_p:="croix";
+ labeloffset:=labeloffset*2;
+ if Kelvin:
+ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{"&decimal(ValeurUnitex)&"}{\kelvin}"),unitex*(0,1));
+ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{"&decimal(ValeurOrigine)&"}{\kelvin}"),A);
+ elseif Farenheit:
+ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{"&decimal(ValeurUnitex)&"}{\farenheit}"),unitex*(0,1));
+ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{"&decimal(ValeurOrigine)&"}{\farenheit}"),A);
+ else:
+ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{"&decimal(ValeurUnitex)&"}{\celsius}"),unitex*(0,1));
+ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{"&decimal(ValeurOrigine)&"}{\celsius}"),A);
+ fi;
+ if AffichageGrad>0:
+ for k=((minx+(minx mod pasx)) div pasx) upto (maxx div pasx):
+ if (k<0) or (k>1):
+ if Kelvin:
+ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}{\kelvin}"),unitex*(0,k));%%%
+ elseif Farenheit:
+label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}{\farenheit}"),unitex*(0,k));%%%
+ else:
+label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}{\celsius}"),unitex*(0,k));%%%
+ fi;
+ fi;
+ endfor;
+ fi;
+
+ vardef Thermo(expr nbt)=
+ pair Tc[];
+ Tc[0]=(5mm,unitp*(minx-1));
+ path cc[];
+ cc1=cercles(Tc[0],2.5mm);
+ Tc1=pointarc(cc1,75);
+ Tc4=pointarc(cc1,105);
+ Tc2=(xpart(Tc1),ypart(B+unitp*(0,0.75)));
+ Tc3=(xpart(Tc4),ypart(B+unitp*(0,0.75)));
+ Tc5=(xpart(Tc1),ypart(unitp*(0,valeur[1])));
+ Tc6=(xpart(Tc4),ypart(unitp*(0,valeur[1])));
+ path temp;
+ temp=Tc1--Tc5--Tc6--Tc4--arccercle(Tc4,Tc1,Tc0)--cycle;
+ if nbt>0:
+ fill temp withcolor ColMercure;
+ trace Tc5--Tc6;
+ fi;
+ trace arccercle(Tc4,Tc1,Tc0);
+ trace Tc1--Tc2--arccercle(Tc2,Tc3,iso(Tc2,Tc3))--Tc4;
+ enddef;
+
+ if Mercure:Thermo(1) else : Thermo(0) fi;
+
+ vardef tata(text t)=%on place les points
+ if AffichageNom>0:
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ label.rt(LATEX(p_),unitp*(0,valeur[n]));
+ if p_<>"":
+ pointe(unitp*(0,valeur[n]));
+ fi;
+ endfor;
+ fi;
+ if AffichageCoord=3:
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ if p_<>"":
+ drawarrow (unitp*(-1,valeur[n]))--(unitp*(-0.3,valeur[n]));
+ label.rt(\btex \hbox to2em{\dotfill} etex,(unitp*(-1,valeur[n])));
+ pointe(unitp*(0,valeur[n]-ValeurOrigine));
+ fi;
+ endfor;
+ elseif AffichageCoord=2:
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ if p_<>"":
+ if ((ValeurUnitex*valeur[n]) mod pasx)<>0:
+ label.rt(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{\noexpand\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(0,valeur[n]));
+ else:
+ label.rt(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(0,valeur[n]));
+ fi;
+ pointe(unitp*(0,valeur[n]-ValeurOrigine));
+ fi;
+ endfor;
+ elseif AffichageCoord=1:
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ if p_<>"":
+ if Kelvin:
+ label.rt(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}{\kelvin}"),(5mm,unitp*valeur[n]));
+ elseif Farenheit:
+ label.rt(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}{\farenheit}"),(5mm,unitp*valeur[n]));
+ else:
+ label.rt(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}{\celsius}"),(5mm,unitp*valeur[n]));
+ fi;
+ pointe(unitp*(0,valeur[n]));
+ draw (unitp*(0,valeur[n]))--(7.5mm,unitp*valeur[n]) dashed evenly;
+ fi;
+ endfor;
+ fi;
+ enddef;
+ %%%
+ tata(#2);
+ \end{mpost}
+ \fi
+}
+
+\def\MPNewDROITEGradueeMulti#1#2{%
+ % #1 : liste des points \`a placer en pas. pour g\'erer le cas des rep\'erages fractionnaires
+ % #2 : liste des noms des points
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ maxx:=0;
+ minx:=4000;
+ unitex:=\useKV[ClesReperage]{Unitex}*cm;
+ pasx:=\useKV[ClesReperage]{Pasx};
+ unitp:=unitex/pasx;%unit\'e de d\'eplacement
+ ValeurUnitex:=\useKV[ClesReperage]{ValeurUnitex};
+ ValeurOrigine:=\useKV[ClesReperage]{ValeurOrigine};
+ AffichageGrad:=\AffichageGrad;
+ AffichageCoord:=\useKV[ClesReperage]{AffichageAbs};
+ AffichageNom:=\AffichageNom;
+ numeric valeur[];
+ vardef titi(text t)=
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ valeur[n]=p_;
+ endfor;
+ enddef;
+ titi(#1);
+ % Détermination des abscisses maximale et minimale
+ for k=1 upto n:
+ if valeur[k]>maxx:
+ maxx:=valeur[k];
+ fi;
+ if valeur[k]<minx:
+ minx:=valeur[k];
+ fi;
+ endfor;
+ maxx:=maxx+(pasx div 2);
+ minx:=minx-(pasx div 2);
+ if maxx<(pasx+1):
+ maxx:=2*pasx-1;
+ fi;
+ if minx>(-pasx-1):
+ minx:=-2*pasx-1;
+ fi;
+ if minx<\useKV[ClesReperage]{ValeurMin}:
+ minx:=\useKV[ClesReperage]{ValeurMin};
+ fi;
+ if maxx>\useKV[ClesReperage]{ValeurMax}:
+ maxx:=\useKV[ClesReperage]{ValeurMax};
+ fi;
+% % -----
+ pair A[],B[],C[];
+ for l=0 upto (\useKV[ClesReperage]{Etages}-1):
+ A[l]=(0,-l*cm);
+ B[l]=unitp*(maxx,0)+(0,-l*cm);
+ C[l]=unitp*(minx,0)+(0,-l*cm);
+ % On trace la demi-droite
+ drawarrow (C[l]+unitp*(-0.75,0))--(B[l]+unitp*(0.75,0));
+ % marquage secondaire
+ marque_s:=marque_s/3;
+ if ((maxx-minx) mod 2)=0:
+ for k=(minx+1) step 2 until (maxx-1):
+ draw marquedemidroite(C[l],B[l]);
+ draw marquesegment((k/maxx)[A[l],B[l]],((k+1)/maxx)[A[l],B[l]]);
+ endfor;
+ else:
+ for k=(minx) step 2 until (maxx-1):
+ draw marquesegment((k/maxx)[A[l],B[l]],((k+1)/maxx)[A[l],B[l]]);
+ endfor;
+ fi;
+ % marquage primaire
+ marque_s:=marque_s*3;
+ for k=0 step pasx until (maxx-pasx):
+ draw marquesegment((k/maxx)[A[l],B[l]],((k+pasx)/maxx)[A[l],B[l]]);
+ endfor;
+ for k=0 step -pasx until (minx+pasx):
+ draw marquesegment((k/maxx)[A[l],B[l]],((k-pasx)/maxx)[A[l],B[l]]);
+ endfor;
+ endfor;
+ % On trace les zoom
+ for k=0 upto (\useKV[ClesReperage]{Etages}-2):
+ lp:=floor(1+uniformdeviate(8));
+ draw (lp/10)[A[k],B[k]]--A[k+1] dashed evenly scaled 0.5 withcolor 0.5white;
+ draw ((lp+1)/10)[A[k],B[k]]--B[k+1] dashed evenly scaled 0.5 withcolor 0.5white;
+ endfor;
+ % Labelisation
+ m_c:=m_c*3;
+ marque_p:="croix";
+ labeloffset:=labeloffset*2;
+ label.top(TEX("\footnotesize\num{"&decimal(ValeurUnitex)&"}"),unitex*(1,0));
+ label.top(TEX("\footnotesize\num{"&decimal(ValeurOrigine)&"}"),A[0]);
+ if AffichageGrad>0:
+ for k=((minx+(minx mod pasx)) div pasx) upto (maxx div pasx):
+ if (k<0) or (k>1):
+ label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
+ fi;
+ endfor;
+ fi;
+ labeloffset:=labeloffset/2;
+ vardef tata(text t)=%on place les points
+ if AffichageNom>0:
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ label.top(TEX(p_),unitp*(valeur[n],0)+(0,(-\useKV[ClesReperage]{Etages}+1)*cm));
+ pointe(unitp*(valeur[n],0));
+ endfor;
+ fi;
+ if AffichageCoord=3:
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ if p_<>"":
+ drawarrow (unitp*(valeur[n],-1)+(0,(-\useKV[ClesReperage]{Etages}+1)*cm))--(unitp*(valeur[n],-0.3)+(0,(-\useKV[ClesReperage]{Etages}+1)*cm));
+ label.bot(btex \hbox to4em{\dotfill} etex,(unitp*(valeur[n],-1))+(0,(-\useKV[ClesReperage]{Etages}+0.5)*cm));
+ %pointe(unitp*(valeur[n],0));
+ fi;
+ endfor;
+ fi;
+ enddef;
+ %%%
+ tata(#2);
+ \end{mplibcode}
+ \fi
+}
+
+% Pour construire les droite/demi-droite gradu\'ee
+\def\builddemidroitenew{%
+ \toklistepointdroite{}%
+ \toklistenompointdemidroite{}%
+ \xdef\AffichageNom{0}\ifboolKV[ClesReperage]{AffichageNom}{\xdef\AffichageNom{1}}{}
+ \xdef\AffichageCoord{\useKV[ClesReperage]{AffichageAbs}}
+ \xdef\AffichageGrad{0}\ifboolKV[ClesReperage]{AffichageGrad}{\xdef\AffichageGrad{1}}{}
+ \ifboolKV[ClesReperage]{Thermometre}{%
+ \foreachitem\compteur\in\ListePointDroite{\expandafter\Updatetoksdemidroite\compteur\nil}%
+ \xdef\Listedesvaleursaplacersurlademidroite{}%
+ \foreachitem\compteur\in\ListePointDroite{\xdef\Listedesvaleursaplacersurlademidroite{\Listedesvaleursaplacersurlademidroite,\ListePointDroite[\compteurcnt,1]}}%
+ % \Listedesvaleursaplacersurlademidroite%
+ \MPThermo{\Listedesvaleursaplacersurlademidroite}{\the\toklistenompointdemidroite}%
+ }{%
+ \xdef\Listedesvaleursaplacersurlademidroite{}%
+ \foreachitem\compteur\in\ListePointDroite{\expandafter\Updatetoksdemidroite\compteur\nil}%
+ \foreachitem\compteur\in\ListePointDroite{\xdef\Listedesvaleursaplacersurlademidroite{\Listedesvaleursaplacersurlademidroite,\ListePointDroite[\compteurcnt,1]}}%
+ \MPTouteDROITEGraduee{\Listedesvaleursaplacersurlademidroite}{\the\toklistenompointdemidroite}%
+ }%
+}%
+
+\NewDocumentCommand\Reperage{o m}{%
+ \useKVdefault[ClesReperage]%
+ \setKV[ClesReperage]{#1}%
+ \ifboolKV[ClesReperage]{Espace}{%
+ \setKV[ClesReperage]{Unitex=2,Unitey=2.5,Unitez=1.5}%
+ \ifboolKV[ClesReperage]{Sphere}{\setKV[ClesReperage]{EchelleEspace=75}}{}%
+ \setKV[ClesReperage]{#1}%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListePointEspace{#2}%
+ \buildespace%
+ }{\ifboolKV[ClesReperage]{Plan}{%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListePointRepere{#2}%
+ \buildreperenew%
+ }{%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListePointDroite{#2}%
+ \builddemidroitenew%
+ }%
+ }%
+}%
+
+\NewDocumentCommand\ReperageMulti{o m}{%
+ \useKVdefault[ClesReperage]%
+ \setKV[ClesReperage]{#1}%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListePointDroite{#2}%
+ \toklistepointdroite{}%
+ \toklistenompointdemidroite{}%
+ \xdef\AffichageNom{0}\ifboolKV[ClesReperage]{AffichageNom}{\xdef\AffichageNom{1}}{}
+ \xdef\AffichageCoord{\useKV[ClesReperage]{AffichageAbs}}
+ \xdef\AffichageGrad{0}\ifboolKV[ClesReperage]{AffichageGrad}{\xdef\AffichageGrad{1}}{}
+ \foreachitem\compteur\in\ListePointDroite{\expandafter\Updatetoksdemidroite\compteur\nil}%
+ \xdef\Listedesvaleursaplacersurlademidroite{}%
+ \foreachitem\compteur\in\ListePointDroite{\xdef\Listedesvaleursaplacersurlademidroite{\Listedesvaleursaplacersurlademidroite,\ListePointDroite[\compteurcnt,1]}}%
+ \MPNewDROITEGradueeMulti{\Listedesvaleursaplacersurlademidroite}{\the\toklistenompointdemidroite}%
+ \setsepchar{,}%
+}% \ No newline at end of file