summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/latex/PfCPavageAvecMotifImage.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCPavageAvecMotifImage.tex')
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCPavageAvecMotifImage.tex1040
1 files changed, 1040 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCPavageAvecMotifImage.tex b/macros/latex/contrib/profcollege/latex/PfCPavageAvecMotifImage.tex
new file mode 100644
index 0000000000..a7cfd4eeb6
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCPavageAvecMotifImage.tex
@@ -0,0 +1,1040 @@
+%%%
+% Pavage
+%%%
+\setKVdefault[Pavage]{%
+ Before=false,
+ Niveau=3,
+ Couleur=orange,
+ Backgrounds=false,
+ Numerotation=false,
+ Depart=0,
+ Complete=false,
+ After=false,
+ Demo=false,
+ Regulier=false,
+ Cote=1,
+ Lignes=4,
+ Colonnes=4,
+ SemiRegulier=false,
+ Reseau=false,
+ Basei={u*(0.75,0)},
+ Basej={u*(0,0.5)},
+ Periodique=false,
+ Image=false
+}%
+\defKV[Pavage]{Motif=\setKV[Pavage]{Before}}
+\defKV[Pavage]{Traces=\setKV[Pavage]{After}}
+\defKV[Pavage]{ArrierePlan=\setKV[Pavage]{Backgrounds}}
+
+\def\MPPavageBase{%
+ boolean Before,Numerote,Complete,Backgrounds,After,Demo;
+ Before=\useKV[Pavage]{Before};
+ After=\useKV[Pavage]{After};
+ Numerote=\useKV[Pavage]{Numerotation};
+ Complete=\useKV[Pavage]{Complete};
+ Backgrounds=\useKV[Pavage]{Backgrounds};
+ Demo=\useKV[Pavage]{Demo};
+ color ColPavage,ColArrierePlan;
+ ColPavage=\useKV[Pavage]{Couleur};
+ ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi;
+ Niveau=\useKV[Pavage]{Niveau};
+ Depart=\useKV[Pavage]{Depart};
+ vardef pavages(expr chemin,tour,coul)=
+ if Backgrounds:
+ fill CadrePavage withcolor ColArrierePlan;
+ trace CadrePavage;
+ fi;
+ save Base;
+ picture Base;
+ pair A,B,C,D;
+ A=u*(0,0);
+ B=u*(1,0);
+ C=u*(1,1);
+ D=u*(0,1);
+ path especes;
+ especes=chemin--rotation(chemin,B,-90)--reverse(rotation(symetrie(chemin,B,C),B,-90))--rotation(chemin,B,90)--cycle;
+ if tour=0:
+ Base=image(
+ trace chemin;
+ );
+ elseif tour=1:
+ Base=image(
+ fill especes withcolor coul;
+ trace especes;
+ A:=A shifted(u*(0,-1));
+ B:=B shifted(u*(1,-1));
+ C:=C shifted(u*(1,0));
+ );
+ elseif tour>=2:
+ Base=pavages(chemin,tour-1,coul);
+ Base:=image(
+ trace Base;
+ trace symetrie(Base,B,C);
+ trace rotation(symetrie(Base,B,C),B,-90);
+ trace rotation(Base,B,90);
+ A:=A shifted(u*(0,-(2**(tour-1))));
+ B:=B shifted(u*(2**(tour-1),-(2**(tour-1))));
+ C:=C shifted(u*(2**(tour-1),0));
+ );
+ fi;
+ Base
+enddef;
+%
+vardef pavagescar(expr chemin,tour,coul)=
+ save BaseCar;
+ picture BaseCar;
+ pair A,B,C,D;
+ A=u*(0,0);
+ B=u*(1,0);
+ C=u*(1,1);
+ D=u*(0,1);
+ if tour=0:
+ BaseCar=image(
+ trace chemin;
+ trace A--B--C--D--cycle dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris;
+ );
+ elseif tour=1:
+ BaseCar=image(
+ trace chemin;
+ drawoptions(dashed evenly);
+ trace rotation(chemin,B,-90);
+ trace reverse(rotation(symetrie(chemin,B,C),B,-90));
+ trace rotation(chemin,B,90);
+ drawoptions();
+ A:=A shifted(u*(0,-1));
+ B:=B shifted(u*(1,-1));
+ C:=C shifted(u*(1,0));
+ trace A--B--C--D--cycle dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris;
+ trace iso(A,D)--iso(B,C) dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris;
+ trace iso(A,B)--iso(C,D) dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris;
+ );
+ elseif tour>=2:
+ BaseCar=image(
+ trace pavages(chemin,tour-1,coul);
+ trace symetrie(pavages(chemin,tour-1,coul),B,C);%coul+0.5blanc
+ trace rotation(symetrie(pavages(chemin,tour-1,coul),B,C),B,-90);
+ trace rotation(pavages(chemin,tour-1,coul),B,90);
+ A:=A shifted(u*(0,-(2**(tour-1))));
+ B:=B shifted(u*(2**(tour-1),-(2**(tour-1))));
+ C:=C shifted(u*(2**(tour-1),0));
+ );
+ fi;
+ BaseCar
+ enddef;
+ %
+ vardef CadrePavage=
+ u*(0,1)--u*(0,-(2**Niveau-1))--u*(2**Niveau,-(2**Niveau-1))--u*(2**(Niveau),1)--cycle
+ enddef;
+ %
+ vardef Numerotation=
+ n:=Depart;
+ pair B;
+ B=u*(1,0);
+ if Complete:
+ for k=0 upto 2**(Niveau)-2:
+ for l=0 upto (2**(Niveau-1))-1:
+ n:=n+1;
+ if (k mod 2)=0:
+ label(TEX(decimal(n)),B+u*(2l,-k));
+ else:
+ if l<(2**(Niveau-1))-1:
+ label(TEX(decimal(n)),B+u*(2l+1,-k));
+ else:
+ n:=n-1;
+ fi;
+ fi;
+ endfor;
+ endfor;
+ else:
+ for k=0 upto (2**(Niveau-1))-1:
+ for l=0 upto (2**(Niveau-1))-1:
+ n:=n+1;
+ label(TEX(decimal(n)),B+2u*(l,-k));
+ endfor;
+ endfor;
+ fi;
+ enddef;
+ %
+ vardef NumerotationPDF=
+ n:=Depart;
+ pair B;
+ B=u*(1,0);
+ if Complete:
+ for k=0 upto 2**(Niveau)-2:
+ for l=0 upto (2**(Niveau-1))-1:
+ n:=n+1;
+ if (k mod 2)=0:
+ label(TEX(decimal(n)),B+u*(2l,-k));
+ else:
+ if l<(2**(Niveau-1))-1:
+ label(LATEX(decimal(n)),B+u*(2l+1,-k));
+ fi;
+ fi;
+ endfor;
+ endfor;
+ else:
+ for k=0 upto (2**(Niveau-1))-1:
+ for l=0 upto (2**(Niveau-1))-1:
+ n:=n+1;
+ label(LATEX(decimal(n)),B+2u*(l,-k));
+ endfor;
+ endfor;
+ fi;
+ enddef;
+ %
+ vardef PlacePointSupport=
+ n:=Depart;
+ pair K[],L[],M[],N[];
+ K[0]=u*(0,0);
+ M[0]=u*(1,1);
+ if Complete:
+ for k=0 upto 2**(Niveau)-2:
+ for l=0 upto (2**(Niveau-1))-1:
+ n:=n+1;
+ if (k mod 2)=0:
+ K[n]:=K0+u*(2l,-k);
+ M[n]:=M0+u*(2l,-k);
+ else:
+ if l<(2**(Niveau-1))-1:
+ K[n]:=K0+u*(2l+1,-k);
+ M[n]:=M0+u*(2l+1,-k);
+ else:
+ n:=n-1;
+ fi;
+ fi;
+ endfor;
+ endfor;
+ else:
+ for k=0 upto (2**(Niveau-1))-1:
+ for l=0 upto (2**(Niveau-1))-1:
+ n:=n+1;
+ K[n]=K[0]+2u*(l,-k);
+ M[n]=M[0]+2u*(l,-k);
+ endfor;
+ endfor;
+ fi;
+ enddef;
+ vardef EffectuerTraces=
+ \useKV[Pavage]{Traces}
+ enddef;
+}
+
+\def\MPReseauRegulier{
+ boolean Before,Numerote,Backgrounds,After;
+ Before=\useKV[Pavage]{Before};
+ After=\useKV[Pavage]{After};
+ Numerote=\useKV[Pavage]{Numerotation};
+ Backgrounds=\useKV[Pavage]{Backgrounds};
+ color ColPavage,ColArrierePlan;
+ ColPavage=\useKV[Pavage]{Couleur};
+ ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi;
+ Cote=\useKV[Pavage]{Cote};
+ Lignes=\useKV[Pavage]{Lignes};
+ Colonnes=\useKV[Pavage]{Colonnes};
+ Niveau=\useKV[Pavage]{Niveau};
+ Depart=\useKV[Pavage]{Depart};
+ pair A[];
+ A1=(0,0);
+ A2-A1=u*Cote*(1,0);
+ vardef PavageRegulier(expr Niv)=
+ picture Retour;
+ if Niv=3:
+ A3=rotation(A2,A1,60);
+ path TriBase,CadrePavage;
+ TriBase=polygone(A1,A2,A3);
+ CadrePavage=polygone(A1,Cote*cm*(Colonnes,0),Cote*cm*(Colonnes,0.5*sqrt(3)*Lignes),Cote*cm*(0,0.5*sqrt(3)*Lignes));
+ Retour=image(
+ fill CadrePavage withcolor ColPavage;
+ for k=0 upto Lignes:
+ for l=-1 upto Colonnes+1:
+ if k mod 2=0:
+ trace TriBase shifted (Cote*cm*(l,0.5*sqrt(3)*k));
+ else:
+ trace TriBase shifted (Cote*cm*(l+0.5,0.5*sqrt(3)*k));
+ fi;
+ endfor;
+ endfor;
+ clip currentpicture to CadrePavage;
+ trace CadrePavage withpen pencircle scaled 1.5;
+ );
+ elseif Niv=4:
+ A3=rotation(A1,A2,-90);
+ A4-A3=A1-A2;
+ path QuadriBase,CadrePavage;
+ QuadriBase=polygone(A1,A2,A3,A4);
+ CadrePavage=polygone(A1,Cote*cm*(Colonnes,0),Cote*cm*(Colonnes,Lignes),Cote*cm*(0,Lignes));
+ Retour=image(
+ fill CadrePavage withcolor ColPavage;
+ for k=0 upto Lignes-1:
+ for l=0 upto Colonnes-1:
+ trace QuadriBase shifted (Cote*cm*(l,k));
+ endfor;
+ endfor;
+ clip currentpicture to CadrePavage;
+ trace CadrePavage withpen pencircle scaled 1.5;
+ );
+ elseif Niv=6:
+ A3=rotation(A1,A2,-120);
+ A4=rotation(A2,A3,-120);
+ A5=rotation(A3,A4,-120);
+ A6=rotation(A4,A5,-120);
+ path HexaBase,CadrePavage;
+ HexaBase=polygone(A1,A2,A3,A4,A5,A6);
+ CadrePavage=polygone(Cote*cm*(1,0),Cote*cm*(3*Colonnes,0),Cote*cm*(3*Colonnes,sqrt(3)*(Lignes-1)),Cote*cm*(1,sqrt(3)*(Lignes-1)));
+ Retour=image(%
+ fill CadrePavage withcolor ColPavage;
+ for k=-1 upto 2*Lignes+1:
+ for l=-1 upto Colonnes+1:
+ if k mod 2=1:
+ trace HexaBase shifted (Cote*cm*(3*l,0.5*sqrt(3)*k));
+ else:
+ trace HexaBase shifted (Cote*cm*(1.5+3*l,sqrt(3)+0.5*sqrt(3)*k));
+ fi;
+ endfor;
+ endfor;
+ clip currentpicture to CadrePavage;
+ trace CadrePavage withpen pencircle scaled 1.5;
+ );
+ fi;
+ Retour
+ enddef;
+ %
+ vardef PlacePointSupport=
+ n:=Depart;
+ pair B;pair C;pair vdepla;
+ pair Hexa[],Hexb[],Hexc[],Hexd[],Hexe[],Hexf[];
+ pair Cara[],Carb[],Carc[],Card[];
+ pair Tria[],Trib[],Tric[];
+ if Niveau=3:
+ B=iso(A1,A2,A3);
+ C=symetrie(B,A2,A3);
+ for k=1 upto Lignes:
+ for l=1 upto 2*Colonnes-1:
+ n:=n+1;
+ if k mod 2=1:
+ nbv:=(k-1)*1.5;
+ if l mod 2=1:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3)+(C-B);
+ fi;
+ else:
+ nbv:=(k-1)*1.5+0.5;
+ if l mod 2=1:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(Cote*cm*((l-1) div 2),(nbv*Cote*cm*sqrt(3)/3))+(xpart(C-B),-ypart(C-B));
+ fi;
+ fi;
+ if (n mod 2)=0:
+ Tria[n]=rotation(A1,B,180) shifted vdepla;
+ Trib[n]=rotation(A2,B,180) shifted vdepla;
+ Tric[n]=rotation(A3,B,180) shifted vdepla;
+ else:
+ Tria[n]-A1=vdepla;
+ Trib[n]-A2=vdepla;
+ Tric[n]-A3=vdepla;
+ fi;
+ endfor;
+ endfor;
+ elseif Niveau=4:
+ B=iso(A1,A2,A3,A4);
+ for k=1 upto Lignes:
+ for l=1 upto Colonnes:
+ n:=n+1;
+ vdepla:=Cote*cm*((l-1),(k-1));
+ Cara[n]-A1=vdepla;
+ Carb[n]-A2=vdepla;
+ Carc[n]-A3=vdepla;
+ Card[n]-A4=vdepla;
+ endfor;
+ endfor;
+ elseif Niveau=6:
+ B=iso(A1,A2,A3,A4,A5,A6);
+ C=symetrie(B,A3,A4);
+ for k=1 upto Lignes-1:
+ for l=1 upto 2*Colonnes-1:
+ n:=n+1;
+ nbv:=(k-1)*3;
+ if l mod 2=1:
+ vdepla:=(1.5*Cote*cm*(l-1)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(1.5*Cote*cm*(l-2)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3)+(C-B);
+ fi;
+ if k=Lignes-1:
+ if l mod 2=1:
+ Hexa[n]-A1=vdepla;
+ Hexb[n]-A2=vdepla;
+ Hexc[n]-A3=vdepla;
+ Hexd[n]-A4=vdepla;
+ Hexe[n]-A5=vdepla;
+ Hexf[n]-A6=vdepla;
+ else:
+ n:=n-1;
+ fi;
+ else:
+ Hexa[n]-A1=vdepla;
+ Hexb[n]-A2=vdepla;
+ Hexc[n]-A3=vdepla;
+ Hexd[n]-A4=vdepla;
+ Hexe[n]-A5=vdepla;
+ Hexf[n]-A6=vdepla;
+ fi;
+ endfor;
+ endfor;
+ fi;
+ enddef;
+ %
+ vardef Numerotation=
+ n:=Depart;
+ pair B;pair C;pair vdepla;
+ if Niveau=3:
+ B=iso(A1,A2,A3);
+ C=symetrie(B,A2,A3);
+ for k=1 upto Lignes:
+ for l=1 upto 2*Colonnes-1:
+ n:=n+1;
+ if k mod 2=1:
+ nbv:=(k-1)*1.5;
+ if l mod 2=1:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3)+(C-B);
+ fi;
+ else:
+ nbv:=(k-1)*1.5+0.5;
+ if l mod 2=1:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(Cote*cm*((l-1) div 2),(nbv*Cote*cm*sqrt(3)/3))+(xpart(C-B),-ypart(C-B));
+ fi;
+ fi;
+ label(TEX(decimal(n)),B shifted vdepla);
+ endfor;
+ endfor;
+ elseif Niveau=4:
+ B=iso(A1,A2,A3,A4);
+ for k=1 upto Lignes:
+ for l=1 upto Colonnes:
+ n:=n+1;
+ vdepla:=Cote*cm*((l-1),(k-1));
+ label(TEX(decimal(n)),B shifted vdepla);
+ endfor;
+ endfor;
+ elseif Niveau=6:
+ B=iso(A1,A2,A3,A4,A5,A6);
+ C=symetrie(B,A3,A4);
+ for k=1 upto Lignes-1:
+ for l=1 upto 2*Colonnes-1:
+ n:=n+1;
+ nbv:=(k-1)*3;
+ if l mod 2=1:
+ vdepla:=(1.5*Cote*cm*(l-1)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(1.5*Cote*cm*(l-2)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3)+(C-B);
+ fi;
+ if k=Lignes-1:
+ if l mod 2=1:
+ label(TEX(decimal(n)),B shifted vdepla);
+ else:
+ n:=n-1;
+ fi;
+ else:
+ label(TEX(decimal(n)),B shifted vdepla);
+ fi;
+ endfor;
+ endfor;
+ fi;
+ enddef;
+ %
+ vardef NumerotationPDF=
+ n:=Depart;
+ pair B;pair C;pair vdepla;
+ if Niveau=3:
+ B=iso(A1,A2,A3);
+ C=symetrie(B,A2,A3);
+ for k=1 upto Lignes:
+ for l=1 upto 2*Colonnes-1:
+ n:=n+1;
+ if k mod 2=1:
+ nbv:=(k-1)*1.5;
+ if l mod 2=1:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3)+(C-B);
+ fi;
+ else:
+ nbv:=(k-1)*1.5+0.5;
+ if l mod 2=1:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(Cote*cm*((l-1) div 2),(nbv*Cote*cm*sqrt(3)/3))+(xpart(C-B),-ypart(C-B));
+ fi;
+ fi;
+ label(LATEX(decimal(n)),B shifted vdepla);
+ endfor;
+ endfor;
+ elseif Niveau=4:
+ B=iso(A1,A2,A3,A4);
+ for k=1 upto Lignes:
+ for l=1 upto Colonnes:
+ n:=n+1;
+ vdepla:=Cote*cm*((l-1),(k-1));
+ label(LATEX(decimal(n)),B shifted vdepla);
+ endfor;
+ endfor;
+ elseif Niveau=6:
+ B=iso(A1,A2,A3,A4,A5,A6);
+ C=symetrie(B,A3,A4);
+ for k=1 upto Lignes-1:
+ for l=1 upto 2*Colonnes-1:
+ n:=n+1;
+ nbv:=(k-1)*3;
+ if l mod 2=1:
+ vdepla:=(1.5*Cote*cm*(l-1)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(1.5*Cote*cm*(l-2)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3)+(C-B);
+ fi;
+ if k=Lignes-1:
+ if l mod 2=1:
+ label(LATEX(decimal(n)),B shifted vdepla);
+ else:
+ n:=n-1;
+ fi;
+ else:
+ label(LATEX(decimal(n)),B shifted vdepla);
+ fi;
+ endfor;
+ endfor;
+ fi;
+ enddef;
+ vardef EffectuerTraces=
+ \useKV[Pavage]{Traces}
+ enddef;
+}
+
+\def\MPReseauCode{%
+ boolean Before,Numerote,Backgrounds,After;
+ Before=\useKV[Pavage]{Before};
+ After=\useKV[Pavage]{After};
+ Numerote=\useKV[Pavage]{Numerotation};
+ Backgrounds=\useKV[Pavage]{Backgrounds};
+ color ColPavage,ColArrierePlan;
+ ColPavage=\useKV[Pavage]{Couleur};
+ ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi;
+ Cote=\useKV[Pavage]{Cote};
+ Lignes=\useKV[Pavage]{Lignes};
+ Colonnes=\useKV[Pavage]{Colonnes};
+ Niveau=\useKV[Pavage]{Niveau};
+ Depart=\useKV[Pavage]{Depart};
+ pair basei,basej;
+ basei=\useKV[Pavage]{Basei};
+ basej=\useKV[Pavage]{Basej};
+ vardef PavageReseau=
+ for k=0 upto Lignes-1:
+ for l=0 upto Colonnes -1:
+ trace Motif shifted (k*basei+l*basej);
+ endfor;
+ endfor;
+ enddef;
+ vardef Numerotation=
+ n:=0;
+ k:=0;
+ pair A[],B[];
+ A[0]=point(0) of Motif;
+ B[0]=A[0];
+ forever:
+ k:=k+1;
+ A[k]=point(k) of Motif;
+ B[0]:=B[0]+A[k];
+ exitif A[k]=A[0];
+ endfor;
+ B[0]:=B[0]/k;
+ for k=0 upto Lignes-1:
+ for l=0 upto Colonnes -1:
+ n:=n+1;
+ label(decimal(n),B[0] shifted(k*basei+l*basej));
+ endfor;
+ endfor;
+ enddef;
+ vardef PlacePointSupport=
+ pair M[][];
+ n:=0;
+ k:=0;
+ pair A[],B[];
+ A[0]=point(0) of Motif;
+ forever:
+ k:=k+1;
+ A[k]=point(k) of Motif;
+ B[0]:=B[0]+A[k];
+ exitif A[k]=A[0];
+ endfor;
+ B[0]:=B[0]/k;
+ NbSommet:=k;
+ for k=0 upto Lignes-1:
+ for l=0 upto Colonnes -1:
+ n:=n+1;
+ for m=1 upto NbSommet:
+ M[n][m]=A[m] shifted (k*basei+l*basej);
+ endfor;
+ endfor;
+ endfor;
+ enddef;
+ vardef EffectuerTraces=
+ \useKV[Pavage]{Traces}
+ enddef;
+}
+
+\def\MPPeriodiqueCode{%
+ boolean Before,Numerote,Backgrounds,After;
+ Before=\useKV[Pavage]{Before};
+ After=\useKV[Pavage]{After};
+ Numerote=\useKV[Pavage]{Numerotation};
+ Backgrounds=\useKV[Pavage]{Backgrounds};
+ color ColPavage,ColArrierePlan;
+ ColPavage=\useKV[Pavage]{Couleur};
+ ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi;
+ Cote=\useKV[Pavage]{Cote};
+ Lignes=\useKV[Pavage]{Lignes};
+ Colonnes=\useKV[Pavage]{Colonnes};
+ Niveau=\useKV[Pavage]{Niveau};
+ Depart=\useKV[Pavage]{Depart};
+ pair basei,basej;
+ vardef PavagePeriodique=
+ basei=iso(A1,A2)-iso(A1,A0);
+ basej=iso(A0,A3)-iso(A1,A0);
+ path CadrePavage;
+ pair Cpa[];
+ Cpa1=(0,ypart(-2*basej));
+ Cpa2=(xpart(2*Colonnes*basei),ypart(-2*basej));
+ Cpa3=(xpart(2*Colonnes*basei),ypart(2*Lignes*basej));
+ Cpa4=(0,ypart(2*Lignes*basej));
+ CadrePavage=Cpa1--Cpa2--Cpa3--Cpa4--cycle;
+ %drawarrow iso(A1,A0)--(iso(A1,A0)+basei);
+ %drawarrow iso(A1,A0)--(iso(A1,A0)+basej);
+ picture BlocContour,BlocPavage;
+ BlocContour=image(
+ for k=-Lignes upto Lignes+1:
+ for l=-1 upto Colonnes+1:
+ fill Motif shifted (2*l*basei+2*k*basej) withcolor ColPavage;
+ fill symetrie(Motif,iso(A1,A2)) shifted (2*l*basei+2*k*basej) withcolor ColPavage;
+ trace Motif shifted (2*l*basei+2*k*basej);
+ trace symetrie(Motif,iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+ endfor;
+ endfor;
+ drawoptions();
+ );
+ BlocPavage=image(
+ trace BlocContour;
+ %trace BlocContour shifted(4*basei+2*basej);
+ clip currentpicture to CadrePavage;
+ trace CadrePavage withpen pencircle scaled 2;
+ );
+ BlocPavage
+ enddef;
+ vardef Numerotation=
+ n:=-1;
+ pair ISO;
+ for k=-Lignes upto Lignes+1:
+ for l=-1 upto Colonnes+1:
+ n:=n+2;
+ ISO:=B[0] shifted (2*l*basei+2*k*basej);
+ if (xpart(ISO)>xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)<xpart(Cpa2-u*(0.2,0))) and (ypart(ISO)>ypart(Cpa1+u*(0.2,0))) and (ypart(ISO)<ypart(Cpa4-u*(0.2,0))):
+ label(decimal(n),ISO);
+ else:
+ n:=n-2;
+ fi;
+ endfor;
+ endfor;
+ %2eme tour
+ n:=-1;
+ for k=-Lignes upto Lignes+1:
+ for l=-1 upto Colonnes+1:
+ n:=n+2;
+ ISO:=symetrie(B[0],iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+ if (xpart(ISO)>xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)<xpart(Cpa2-u*(0.2,0))) and (ypart(ISO)>ypart(Cpa1+u*(0.2,0))) and (ypart(ISO)<ypart(Cpa4-u*(0.2,0))):
+ label(decimal(n+1),ISO);
+ else:
+ n:=n-2;
+ fi;
+ endfor;
+ endfor;
+ enddef;
+ vardef PlacePointSupport=
+ pair QuadA[],QuadB[],QuadC[],QuadD[];
+ n:=-1;
+ pair ISO;
+ for k=-Lignes upto Lignes+1:
+ for l=-1 upto Colonnes+1:
+ n:=n+2;
+ ISO:=B[0] shifted (2*l*basei+2*k*basej);
+ if (xpart(ISO)>xpart(Cpa1)) and (xpart(ISO)<xpart(Cpa2)) and (ypart(ISO)>ypart(Cpa1)) and (ypart(ISO)<ypart(Cpa4)):
+ QuadA[n]=A0 shifted (2*l*basei+2*k*basej);
+ QuadB[n]=A1 shifted (2*l*basei+2*k*basej);
+ QuadC[n]=A2 shifted (2*l*basei+2*k*basej);
+ QuadD[n]=A3 shifted (2*l*basei+2*k*basej);
+ else:
+ n:=n-2;
+ fi;
+ endfor;
+ endfor;
+ %2eme tour
+ n:=-1;
+ for k=-Lignes upto Lignes+1:
+ for l=-1 upto Colonnes+1:
+ n:=n+2;
+ ISO:=symetrie(B[0],iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+ if (xpart(ISO)>xpart(Cpa1+u*(0.1,0))) and (xpart(ISO)<xpart(Cpa2)) and (ypart(ISO)>ypart(Cpa1)) and (ypart(ISO)<ypart(Cpa4)):
+ QuadA[n+1]=symetrie(A0,iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+ QuadB[n+1]=symetrie(A1,iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+ QuadC[n+1]=symetrie(A2,iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+ QuadD[n+1]=symetrie(A3,iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+ else:
+ n:=n-2;
+ fi;
+ endfor;
+ endfor;
+ enddef;
+ vardef EffectuerTraces=
+ \useKV[Pavage]{Traces}
+ enddef;
+}
+
+\def\MPPavageImageCode{%
+ boolean Before,Numerote,Backgrounds,After;
+ Before=\useKV[Pavage]{Before};
+ After=\useKV[Pavage]{After};
+ Numerote=\useKV[Pavage]{Numerotation};
+ Backgrounds=\useKV[Pavage]{Backgrounds};
+ color ColPavage,ColArrierePlan;
+ ColPavage=\useKV[Pavage]{Couleur};
+ ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi;
+ Cote=\useKV[Pavage]{Cote};
+ Lignes=\useKV[Pavage]{Lignes};
+ Colonnes=\useKV[Pavage]{Colonnes};
+ Niveau=\useKV[Pavage]{Niveau};
+ Depart=\useKV[Pavage]{Depart};
+ pair basei,basej;
+ %basei=\useKV[Pavage]{Basei};
+ %basej=\useKV[Pavage]{Basej};
+ vardef PavageImage=
+ basei=(rotation(O2,O1,-120)-O4);
+ basej:=(rotation(O5,O1,-120)-O5);
+ path CadrePavage;
+ pair Cpa[];
+ Cpa1=(0,ypart(-2*basej));
+ Cpa2=(xpart(2*Colonnes*basei),ypart(-2*basej));
+ Cpa3=(xpart(2*Colonnes*basei),ypart(2*Lignes*basej));
+ Cpa4=(0,ypart(2*Lignes*basej));
+ CadrePavage=Cpa1--Cpa2--Cpa3--Cpa4--cycle;
+ %drawarrow iso(A1,A0)--(iso(A1,A0)+basei);
+ %drawarrow iso(A1,A0)--(iso(A1,A0)+basej);
+ picture BlocContour,BlocPavage;
+ BlocContour=image(
+ for k=0 upto Lignes:
+ for l=0 upto Colonnes:
+ %fill Motif shifted (l*basei+k*basej) withcolor Cornsilk;
+ trace Motif shifted (l*basei+k*basej);
+ endfor;
+ endfor;
+ drawoptions();
+ );
+ BlocPavage=image(
+ trace BlocContour;
+ %trace BlocContour shifted(4*basei+2*basej);
+ %clip currentpicture to CadrePavage;
+ %trace CadrePavage withpen pencircle scaled 2;
+ );
+ BlocPavage
+ enddef;
+% vardef Numerotation=
+% n:=-1;
+% pair ISO;
+% for k=-Lignes upto Lignes+1:
+% for l=-1 upto Colonnes+1:
+% n:=n+2;
+% ISO:=B[0] shifted (2*l*basei+2*k*basej);
+% if (xpart(ISO)>xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)<xpart(Cpa2-u*(0.2,0))) and (ypart(ISO)>ypart(Cpa1+u*(0.2,0))%) and (ypart(ISO)<ypart(Cpa4-u*(0.2,0))):
+% label(decimal(n),ISO);
+% else:
+% n:=n-2;
+% fi;
+% endfor;
+% endfor;
+% %2eme tour
+% n:=-1;
+% for k=-Lignes upto Lignes+1:
+% for l=-1 upto Colonnes+1:
+% n:=n+2;
+% ISO:=symetrie(B[0],iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+% if (xpart(ISO)>xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)<xpart(Cpa2-u*(0.2,0))) and (ypart(ISO)>ypart(Cpa1+u*(0.2,0))) and (ypart(ISO)<ypart(Cpa4-u*(0.2,0))):
+% label(decimal(n+1),ISO);
+% else:
+% n:=n-2;
+% fi;
+% endfor;
+% endfor;
+% enddef;
+% vardef PlacePointSupport=
+% pair QuadA[],QuadB[],QuadC[],QuadD[];
+% n:=-1;
+% pair ISO;
+% for k=-Lignes upto Lignes+1:
+% for l=-1 upto Colonnes+1:
+% n:=n+2;
+% ISO:=B[0] shifted (2*l*basei+2*k*basej);
+% if (xpart(ISO)>xpart(Cpa1)) and (xpart(ISO)<xpart(Cpa2)) and (ypart(ISO)>ypart(Cpa1)) and (ypart(ISO)<ypart(Cpa4)):
+% QuadA[n]=A0 shifted (2*l*basei+2*k*basej);
+% QuadB[n]=A1 shifted (2*l*basei+2*k*basej);
+% QuadC[n]=A2 shifted (2*l*basei+2*k*basej);
+% QuadD[n]=A3 shifted (2*l*basei+2*k*basej);
+% else:
+% n:=n-2;
+% fi;
+% endfor;
+% endfor;
+% %2eme tour
+% n:=-1;
+% for k=-Lignes upto Lignes+1:
+% for l=-1 upto Colonnes+1:
+% n:=n+2;
+% ISO:=symetrie(B[0],iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+% if (xpart(ISO)>xpart(Cpa1+u*(0.1,0))) and (xpart(ISO)<xpart(Cpa2)) and (ypart(ISO)>ypart(Cpa1)) and (ypart(ISO)<ypart(Cpa4)):
+% QuadA[n+1]=symetrie(A0,iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+% QuadB[n+1]=symetrie(A1,iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+% QuadC[n+1]=symetrie(A2,iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+% QuadD[n+1]=symetrie(A3,iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+% else:
+% n:=n-2;
+% fi;
+% endfor;
+% endfor;
+% enddef;
+ vardef EffectuerTraces=
+ \useKV[Pavage]{Traces}
+ enddef;
+}
+
+\def\MPPavageImage{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ \MPPavageImageCode
+ picture Motif;
+ if Before:
+ \PfCImagePavage
+ Motif=\useKV[Pavage]{Motif};
+ else:
+ picture BaseImage;
+ BaseImage=image(
+ trace fullsquare scaled 1cm;
+ );
+ Motif=BaseImage;
+ fi;
+ trace PavageImage;
+ if After:
+ EffectuerTraces;
+ fi;
+ \end{mplibcode}
+ \fi
+}
+
+\def\MPPeriodique{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ \MPPeriodiqueCode
+ path Motif;
+ if Before:
+ Motif=\useKV[Pavage]{Motif};
+ else:
+ Motif=(0,0)--u*(1,-2)--u*(2,0.5)--u*(0.75,1)--cycle;
+ fi;
+ pair A[],B[];
+ A[0]=point(0) of Motif;
+ B[0]=A[0];
+ k:=0;
+ forever:
+ k:=k+1;
+ A[k]=point(k) of Motif;
+ B[0]:=B[0]+A[k];
+ exitif A[k]=A[0];
+ endfor;
+ B[0]:=B[0]/k;
+ trace PavagePeriodique;
+ PlacePointSupport;
+ if Numerote:
+ Numerotation;
+ fi;
+ if After:
+ EffectuerTraces;
+ fi;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[\MPPeriodiqueCode]
+ path Motif;
+ if Before:
+ Motif=\useKV[Pavage]{Motif};
+ else:
+ Motif=(0,0)--u*(1,-2)--u*(2,0.5)--u*(0.75,1)--cycle;
+ fi;
+ pair A[],B[];
+ A[0]=point(0) of Motif;
+ B[0]=A[0];
+ k:=0;
+ forever:
+ k:=k+1;
+ A[k]=point(k) of Motif;
+ B[0]:=B[0]+A[k];
+ exitif A[k]=A[0];
+ endfor;
+ B[0]:=B[0]/k;
+ trace PavagePeriodique;
+ PlacePointSupport;
+ if Numerote:
+ Numerotation;
+ fi;
+ if After:
+ EffectuerTraces;
+ fi;
+ \end{mpost}
+ \fi
+}
+
+\def\MPReseau{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ \MPReseauCode
+ path Motif;
+ if Before:
+ Motif=\useKV[Pavage]{Motif};
+ else:
+ Motif=u*(0,0)--u*(0.75,0)--u*(1,0.5)--u*(0.25,0.5)--cycle;
+ fi;
+ PavageReseau;
+ PlacePointSupport;
+ if Numerote:
+ Numerotation;
+ fi;
+ if After:
+ EffectuerTraces;
+ fi;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={\MPReseauCode}]
+ path Motif;
+ if Before:
+ Motif=\useKV[Pavage]{Motif};
+ else:
+ Motif=u*(0,0)--u*(0.75,0)--u*(1,0.5)--u*(0.25,0.5)--cycle;
+ fi;
+ PavageReseau;
+ PlacePointSupport;
+ if Numerote:
+ Numerotation;
+ fi;
+ if After:
+ EffectuerTraces;
+ fi;
+ \end{mpost}
+ \fi
+}
+
+\def\MPRegulier{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ \MPReseauRegulier
+ trace PavageRegulier(Niveau);
+ PlacePointSupport;
+ if Numerote:
+ Numerotation;
+ fi;
+ if After:
+ EffectuerTraces;
+ fi;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={\MPReseauRegulier}]
+ trace PavageRegulier(Niveau);
+ PlacePointSupport;
+ if Numerote:
+ Numerotation;
+ fi;
+ if After:
+ EffectuerTraces;
+ fi;
+ \end{mpost}
+ \fi
+}%
+
+\def\MPPavage{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \MPPavageBase
+ path Motif;
+ if Before:
+ Motif=\useKV[Pavage]{Motif};
+ else:
+ Motif=u*(0,0)..u*(0.25,.1)..u*(0.5,0.7)..u*(1,1);
+ fi;
+ if Demo:
+ trace pavagescar(Motif,0,ColPavage);
+ else:
+ trace pavages(Motif,Niveau,ColPavage);
+ fi;
+ PlacePointSupport;
+ if Numerote:
+ Numerotation;
+ fi;
+ if After:
+ EffectuerTraces;
+ fi;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={\MPPavageBase}]
+ path Motif;
+ if Before:
+ Motif=\useKV[Pavage]{Motif};
+ else:
+ Motif=u*(0,0)..u*(0.25,.1)..u*(0.5,0.7)..u*(1,1);
+ fi;
+ trace pavages(Motif,Niveau,ColPavage);
+ PlacePointSupport;
+ if Numerote:
+ Numerotation;
+ fi;
+ if After:
+ EffectuerTraces;
+ fi;
+ \end{mpost}
+ \fi%
+}
+
+\NewDocumentCommand\Pavage{o}{%
+ \useKVdefault[Pavage]%
+ \setKV[Pavage]{#1}%
+ \ifboolKV[Pavage]{Regulier}{%
+ \MPRegulier%
+ }{%
+ \ifboolKV[Pavage]{SemiRegulier}{%
+ %
+ }{%
+ \ifboolKV[Pavage]{Reseau}{%
+ \MPReseau
+ }{%
+ \ifboolKV[Pavage]{Periodique}{%
+ \MPPeriodique%
+ }{%
+ \ifboolKV[Pavage]{Image}{%
+ \MPPavageImage%
+ }{%
+ \MPPavage%
+ }%
+ }%
+ }%
+ }%
+ }%
+}% \ No newline at end of file