texlive[76163] Master/texmf-dist: profcollege (27aug25)
commits+karl at tug.org
commits+karl at tug.org
Wed Aug 27 22:13:06 CEST 2025
Revision: 76163
https://tug.org/svn/texlive?view=revision&revision=76163
Author: karl
Date: 2025-08-27 22:13:06 +0200 (Wed, 27 Aug 2025)
Log Message:
-----------
profcollege (27aug25)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/profcollege/profcollege-doc.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/profcollege-doc.zip
trunk/Master/texmf-dist/metapost/profcollege/PfCConstantes.mp
trunk/Master/texmf-dist/metapost/profcollege/PfCEngrenages.mp
trunk/Master/texmf-dist/metapost/profcollege/PfCGeometrie.mp
trunk/Master/texmf-dist/metapost/profcollege/PfCMosaique.mp
trunk/Master/texmf-dist/metapost/profcollege/PfCObjets.mp
trunk/Master/texmf-dist/metapost/profcollege/PfCSolid.mp
trunk/Master/texmf-dist/tex/latex/profcollege/PfCAireSimple.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCBalance.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCBandeNumerique.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculsFractions.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCCritere.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCDefiTables.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCDistributivite.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcrireunQCM.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcritureUnites.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCJeton.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCKakuro.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCKenKen.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCModeleBarre.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCodes.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCNotionFonction.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCOpCroisees.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCPatronPaves.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCPattern.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCPourcentage.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCPythagore.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCReperage.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterFraction.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterTableur.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCSimplifierFraction.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCSolides.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCStatistiques.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCTortueBase.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCUrneProba.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCVueCubes.tex
trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty
Added Paths:
-----------
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece10c.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece1c.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece1e.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece20c.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece2c.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece2e.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece50c.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece5c.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul10c.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul1c.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul1e.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul20c.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul2c.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul2e.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul50c.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul5c.pdf
trunk/Master/texmf-dist/doc/latex/profcollege/README.md
trunk/Master/texmf-dist/metapost/profcollege/PfCMondegood.mp
trunk/Master/texmf-dist/metapost/profcollege/PfCMonstre.mp
trunk/Master/texmf-dist/metapost/profcollege/PfCPattern.mp
trunk/Master/texmf-dist/metapost/profcollege/PfCPeople.mp
trunk/Master/texmf-dist/metapost/profcollege/PfCScrabble.mp
trunk/Master/texmf-dist/tex/latex/profcollege/PfCBoiteADix.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCIteration.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCMonnaieEuro.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCMulEthiopie.tex
trunk/Master/texmf-dist/tex/latex/profcollege/PfCSystemeImage.tex
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece10c.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece10c.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece10c.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece10c.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece10c.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece1c.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece1c.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece1c.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece1c.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece1c.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece1e.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece1e.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece1e.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece1e.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece1e.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece20c.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece20c.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece20c.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece20c.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece20c.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece2c.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece2c.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece2c.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece2c.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece2c.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece2e.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece2e.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece2e.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece2e.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece2e.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece50c.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece50c.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece50c.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece50c.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece50c.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece5c.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece5c.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece5c.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece5c.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPiece5c.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul10c.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul10c.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul10c.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul10c.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul10c.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul1c.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul1c.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul1c.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul1c.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul1c.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul1e.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul1e.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul1e.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul1e.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul1e.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul20c.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul20c.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul20c.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul20c.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul20c.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul2c.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul2c.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul2c.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul2c.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul2c.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul2e.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul2e.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul2e.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul2e.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul2e.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul50c.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul50c.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul50c.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul50c.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul50c.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul5c.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul5c.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul5c.pdf 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul5c.pdf 2025-08-27 20:13:06 UTC (rev 76163)
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/PfCPieceCoul5c.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/profcollege/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profcollege/README.md (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/profcollege/README.md 2025-08-27 20:13:06 UTC (rev 76163)
@@ -0,0 +1,3 @@
+# ProfCollegeMP
+
+Dépôt pour les packages MetaPost de ProfCollege.
\ No newline at end of file
Property changes on: trunk/Master/texmf-dist/doc/latex/profcollege/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/profcollege/profcollege-doc.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/profcollege/profcollege-doc.zip
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/metapost/profcollege/PfCConstantes.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCConstantes.mp 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCConstantes.mp 2025-08-27 20:13:06 UTC (rev 76163)
@@ -4,7 +4,7 @@
pi:=3.141592654;
e:=2.718281828;
c:=57.29578; % conversion d'un radian en degres
-color rouge,vert,bleu,jaune,noir,blanc,orange,rose,violet,ciel,cielfonce,orangevif,gris;
+color rouge,vert,bleu,jaune,noir,blanc,orange,rose,violet,ciel,cielfonce,orangevif,gris,marron;
rouge=(1,0,0);
bleu=(0,0,1);
noir=(0,0,0);
@@ -18,7 +18,7 @@
vert=(0,1,0);
jaune=rouge+vert;
gris=0.8*white;
-
+marron=(.545,.27,.075);
%coloriage et lumière
vardef Hsv(expr CC)=%CC couleur donnée en hsv d'après http://en.wikipedia.org/wiki/HSL_color_space
save $;
Modified: trunk/Master/texmf-dist/metapost/profcollege/PfCEngrenages.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCEngrenages.mp 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCEngrenages.mp 2025-08-27 20:13:06 UTC (rev 76163)
@@ -39,34 +39,49 @@
cercleb=cercles(OPfC,0.5*Db);
cerclepied=cercles(OPfC,0.5*Dpied);
path dd,daction,dsupport[],dperp[],dsymetrie,darret;
+ if Db<Dpied:
+ _tfig:=2000*u;
+ fi;
dd=demidroite(OPfC,OPfC+(0,1));
APfC=dd intersectionpoint cerclep;
- BPfC=dd intersectionpoint cercleb;
path profil;
- profil=(symetrie(rotation(Developpante(0.5*Db/(u)),OPfC,90),OPfC,(0,1)) cutafter cerclee);%0.5*Dp*cosd(Alpha));
- %CPfC=dd intersectionpoint cerclepied;
+ profil=(symetrie(rotation(Developpante(0.5*Db/(u)),OPfC,90),OPfC,(0,1)) cutbefore cerclepied cutafter cerclee);
ReleveAngle:=90-angle(profil intersectionpoint cerclep);
dsymetrie=rotation(dd,OPfC,-(360/(4*Z)+ReleveAngle));
darret=rotation(dd,OPfC,(360/(4*Z)-ReleveAngle));
- pair D;
+ pair D,E;
D=profil intersectionpoint cerclee;
+ E=symetrie(D,point(0) of dsymetrie,point(1) of dsymetrie);
path Profil;
- Profil=(reverse(cerclepied) cutbefore darret cutafter dd)--profil--(reverse(cerclee) cutbefore demidroite(OPfC,D) cutafter dsymetrie);
- Profil:=Profil--symetrie(reverse(Profil),OPfC,rotation((0,1),OPfC,-(360/(4*Z)+ReleveAngle)));
+ if Db<Dpied:
+ Profil=arccercle(E,D,OPfC)--reverse(profil)--(cerclepied cutbefore darret cutafter dd);
+ Profil:=reverse(symetrie(Profil,OPfC,rotation((0,1),OPfC,-(360/(4*Z)+ReleveAngle))))--Profil;
+ else:
+ Profil=(reverse(cerclepied) cutbefore darret cutafter dd)--profil--(reverse(cerclee) cutbefore demidroite(OPfC,D) cutafter dsymetrie);
+ Profil:=Profil--symetrie(reverse(Profil),OPfC,rotation((0,1),OPfC,-(360/(4*Z)+ReleveAngle)));
+ fi;
path ProfilGene;
+ coefrot:=-1;
+ if Db<Dpied:
+ coefrot:=1;
+ fi;
ProfilGene=Profil
for k=1 upto Z-1:
- --rotation(Profil,OPfC,-k*(360/Z))
+ --rotation(Profil,OPfC,coefrot*k*(360/Z))
endfor
--cycle;
$=image(
fill ProfilGene withcolor CouleurEngrenage;
- trace ProfilGene;
+ trace ProfilGene withpen pencircle scaled 0.25;
fill cercles(OPfC,1u) withcolor blanc;
trace cercles(OPfC,1u);
fill cercles(OPfC,0.85u) withcolor 0.5white;
trace cercles(OPfC,0.85u);
- fill rotation((cercles(OPfC,0.25u) shifted (dd intersectionpoint cerclepied)),OPfC,-(360/(4*Z)+ReleveAngle));
+ if Db<Dpied:
+ fill rotation((cercles(OPfC,0.25u) shifted (dd intersectionpoint cercleb)),OPfC,-(360/(4*Z)+ReleveAngle));
+ else:
+ fill rotation((cercles(OPfC,0.25u) shifted (dd intersectionpoint cerclepied)),OPfC,-(360/(4*Z)+ReleveAngle));
+ fi;
);
$:=rotation($,OPfC,-90+(360/(4*Z)+ReleveAngle)) shifted Cc;
$
Modified: trunk/Master/texmf-dist/metapost/profcollege/PfCGeometrie.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCGeometrie.mp 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCGeometrie.mp 2025-08-27 20:13:06 UTC (rev 76163)
@@ -2203,6 +2203,30 @@
$
enddef;
+vardef papierisometriqueu=
+ save $;
+ orig:=false;
+ x.u:=(sqrt(3)/2)*u;
+ y.u:=u;
+ picture $;
+ $=image(
+ path p[];
+ %triangle haut
+ p1:=(x.so*u,1u)--((x.so*u,0) rotatedabout((x.so*u,1u),60))--(x.so*u,0);
+ %triangle bas
+ p2:=((x.so*u,1u)--((x.so*u,0) rotatedabout((x.so*u,1u),-60))--(x.so*u,0)) shifted (((sqrt3)/2)*u,0);
+ %grille horizontale1
+ pickup pencircle scaled 0.5;
+ for i:=0 step 2 until (xpart(retrouvecoord(z.ne*u))-xpart(retrouvecoord(z.so*u))):
+ for j:=0 upto (ypart(retrouvecoord(z.ne*u))-ypart(retrouvecoord(z.so*u))-1):
+ draw p1 shifted (i*((sqrt3)/2)*u,j*u);
+ draw p2 shifted ((i+1)*((sqrt3)/2)*u,j*u);
+ endfor
+ endfor;
+ );
+ $
+enddef;
+
vardef papierhexagonal=
save $;
picture $;
@@ -2226,4 +2250,27 @@
$
enddef;
+vardef papierhexagonalu=
+ save $;
+ picture $;
+ orig:=false;
+ path hexa;
+ %hexagone de départ
+ hexa:=z.so*u--(x.so*u+1u,y.so*u)--(z.so*u rotatedabout((x.so*u+1u,y.so*u),-120))--((x.so*u+1u,y.so*u) rotatedabout((z.so*u rotatedabout((x.so*u+1u,y.so*u),-120)),-120))--((z.so*u rotatedabout((x.so*u+1u,y.so*u),-120)) rotatedabout(((x.so*u+1u,y.so*u) rotatedabout((z.so*u rotatedabout((x.so*u+1u,y.so*u),-120)),-120)),-120))--(((x.so*u+1u,y.so*u) rotatedabout((z.so*u rotatedabout((x.so*u+1u,y.so*u),-120)),-120)) rotatedabout(((z.so*u rotatedabout((x.so*u+1u,y.so*u),-120)) rotatedabout(((x.so*u+1u,y.so*u) rotatedabout((z.so*u rotatedabout((x.so*u+1u,y.so*u),-120)),-120)),-120)),-120))--cycle;
+ $=image(
+ pair centrehexa;
+ centrehexa=1/2[z.so*u,((x.so*u+1u,y.so*u) rotatedabout((z.so*u rotatedabout((x.so*u+1u,y.so*u),-120)),-120))];
+ pickup pencircle scaled 0.5;
+ numeric etag;
+ etag=floor((abs(y.ne*u-y.so*u))/((sqrt(3)/2)*u));
+ for i:=0 step 3 until (abs(x.ne*u-x.so*u)/1u):
+ for j:=0 step 2 until etag:
+ draw hexa shifted ((i+0.5)*u,j*((sqrt 3)/2)*u);
+ draw hexa shifted ((i+2)*u,(j+1)*((sqrt 3)/2)*u);
+ endfor
+ endfor;
+ );
+ $
+enddef;
+
endinput;
Added: trunk/Master/texmf-dist/metapost/profcollege/PfCMondegood.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCMondegood.mp (rev 0)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCMondegood.mp 2025-08-27 20:13:06 UTC (rev 76163)
@@ -0,0 +1,1553 @@
+%Package mp-geographie
+%Auteur:Christophe Poulain
+%Version 0.62
+%16/02/2010
+
+input marith;
+input sarith;
+%input LATEX;
+
+pi:=3.141592654;
+c:=57.29578; % conversion d'un radian en degr\xE9s
+
+color _T[],rouge,vert,bleu,jaune,noir,blanc,orange,rose,violet,ciel,cielfonce,orangevif,gris,tan,payscolor;
+
+rouge=(1,0,0);
+bleu=(0,0,1);
+noir=(0,0,0);
+blanc=(1,1,1);
+orange=(1,0.5,0);
+violet=(1,0,1);
+rose=(1,0.7,0.7);
+cielfonce=(0.25,0.75,1);
+ciel=(0,1,1);
+orangevif=(1,0.25,0.1);
+vert=(0,1,0);
+jaune=(1,1,0);
+gris=0.8*white;
+
+tan=(0.824,0.705,0.55);
+payscolor=tan;
+
+vardef flamme=reverse(2mm*(0.5,1){dir90}..2mm*(0.75,1.5)..{dir90}2mm*(1,2))--2mm*(0.5,1){dir=-90}..2mm*(1,0.5)..{dir=90}2mm*(1.5,1)--((2mm*(0.5,1){dir90}..2mm*(0.75,1.5)..{dir90}2mm*(1,2)) reflectedabout (2mm*(1,0),2mm*(1,0)+2mm*(0,1)))--cycle
+enddef;
+
+%Les marques
+
+string marque_p;
+marque_p := "non";
+marque_r := 20;
+
+def MarquePoint(expr p)=
+ if marque_p = "creux":
+ if color p:
+ fill fullcircle scaled (marque_r/5) shifted (Projgeo(p)) withcolor white;
+ draw fullcircle scaled (marque_r/5) shifted (Projgeo(p));
+ else:
+ fill fullcircle scaled (marque_r/5) shifted (p) withcolor white;
+ draw fullcircle scaled (marque_r/5) shifted (p);
+ fi;
+ fi;
+enddef;
+
+vardef pointe(text t) =
+ for p_ = t: if (pair p_) or (color p_): MarquePoint(p_); fi endfor;
+enddef;
+
+%D\xE9finition pour la feuille
+
+path feuillet;
+numeric _tfig,_nfig;
+_nfig:=0;
+u:=1cm;
+
+def feuille(expr xa,ya,xb,yb) =
+ numeric Xa,Ya;
+ Xa=xa;
+ Ya=ya;
+ feuillet := (xa,ya)--(xa,yb)--(xb,yb)--(xb,ya)--cycle;
+ extra_endfig := "clip currentpicture to feuillet;" & extra_endfig;
+enddef;
+
+def figureespace(expr xa,ya,xb,yb) =
+ _nfig:=_nfig+1;
+ beginfig(_nfig);
+ feuille(xa,ya,xb,yb);
+enddef;
+
+def finespace=
+endfig;
+enddef;
+
+def figure(expr xa,ya,xb,yb)=figureespace(xa,ya,xb,yb)
+enddef;
+
+def fin=finespace
+enddef;
+
+%definitions math\xE9matiques
+vardef cercles(text t)=
+ save Cer;
+ save n;
+ n:=0;
+ for p_=t:
+ if color p_:
+ n:=n+1;
+ _T[n]:=p_;
+ fi;
+ endfor;
+ path Cer;
+ color ptcer[];
+ for k=0 step 5 until 360 :
+ ptcer[k div 5]-_T[1]=Distance(_T[1],_T[2])*((_T[4]-_T[3])*cosd(k)/Distance(_T[3],_T[4])+(_T[5]-_T[3])*sind(k)/Distance(_T[3],_T[5]));
+ endfor;
+ Cer=Projgeo(ptcer0)
+ for k=0 step 5 until 360 :
+ ..Projgeo(ptcer[k div 5])
+ endfor
+ ..cycle;
+ Cer
+enddef;
+
+vardef arcsind(expr x)=%en degr\xE9 ici :)
+ angle((sqrt(1-x**2),x))
+enddef;
+
+vardef tand(expr x)=sind(x)/cosd(x)%
+enddef;
+
+vardef cotand(expr x)=cosd(x)/sind(x)%
+enddef;
+
+vardef ln(expr t)=mlog(t)/256%
+enddef;
+
+%repr\xE9sentation param\xE9trique de la sph\xE8re terrestre.
+vardef FX(expr t,v)=rayon*cosd(c*t)*cosd(c*v)
+enddef;
+
+vardef FY(expr t,v)=rayon*cosd(c*t)*sind(c*v)
+enddef;
+
+vardef FZ(expr t,v)=rayon*sind(c*t)
+enddef;
+
+%Param\xE8tres et macros de repr\xE9sentation
+vardef Initialisation(expr r,t,p,d)=
+ Rho:=r;
+ Theta:=t;
+ Phi:=p;
+ DE:=d;
+ Aux1:=sind(Theta);
+ Aux2:=sind(Phi);
+ Aux3:=cosd(Theta);
+ Aux4:=cosd(Phi);
+ Aux5:=Aux3*Aux2;
+ Aux6:=Aux1*Aux2;
+ Aux7:=Aux3*Aux4;
+ Aux8:=Aux1*Aux4;
+enddef;
+
+vardef Oeil=(Rho*Aux7,Rho*Aux8,Rho*Aux2)
+enddef;
+
+vardef Vision(expr num)=
+ save bb;
+ color bb;
+ bb=(redpart(Oeil-Sommet[num]),greenpart(Oeil-Sommet[num]),bluepart(Oeil-Sommet[num]));
+ bb
+enddef;
+
+vardef Normal(expr vecun,vecde,vectr)=
+ save aa;
+ color aa;
+ P1:=redpart(vecde-vecun);
+ P2:=greenpart(vecde-vecun);
+ P3:=bluepart(vecde-vecun);
+ Q1:=redpart(vectr-vecun);
+ Q2:=greenpart(vectr-vecun);
+ Q3:=bluepart(vectr-vecun);
+ aa=(P2*Q3-Q2*P3,P3*Q1-Q3*P1,P1*Q2-Q1*P2);
+ aa
+enddef;
+
+vardef ProduitScalaire(expr wec,mor)=
+ redpart(wec)*redpart(mor)+greenpart(wec)*greenpart(mor)+bluepart(wec)*bluepart(mor)
+enddef;
+
+vardef Distance(expr aa,bb)=%Entre deux points
+ sqrt((redpart(bb)-redpart(aa))*(redpart(bb)-redpart(aa))+(greenpart(bb)-greenpart(aa))*(greenpart(bb)-greenpart(aa))+(bluepart(bb)-bluepart(aa))*(bluepart(bb)-bluepart(aa)))
+enddef;
+
+vardef MaillageS=
+ path Maillage[];
+ color CentMaillage[];
+ %numeric Vmin,Vmax;
+ %total:=0;
+ for k=Udebut step 0.5*pasU until (Ufin):
+ for l=Vdebut step pasV until (Vfin):
+ Maillage[100*k+l]=Projgeo((FX(k,l),FY(k,l),FZ(k,l)))--Projgeo((FX(k,l+pasV),FY(k,l+pasV),FZ(k,l+pasV)))--Projgeo((FX(k+pasU,l+pasV),FY(k+pasU,l+pasV),FZ(k+pasU,l+pasV)))--Projgeo((FX(k+pasU,l),FY(k+pasU,l),FZ(k+pasU,l)))--cycle;
+ if ProduitScalaire(1/2[(FX(k,l),FY(k,l),FZ(k,l)),(FX(k+pasU,l+pasV),FY(k+pasU,l+pasV),FZ(k+pasU,l+pasV))]-pte3,Oeil-pte3)>0:
+ %total:=total+1;
+ %if total=1:
+ % Vmin:=l;
+ %fi;
+ draw Maillage[100*k+l];
+ fi;
+ endfor;
+ endfor;
+ %drawoptions();
+ %for k=(Udebut+pasU) step pasU until (Ufin-pasU):
+ % if abs(round(k*c))<100:
+ % label.urt(TEX(""&decimal(round(k*c))&""),Projgeo(rayon*(cosd(round(k*c))*cosd(Theta),cosd(round(k*c))*sind(Theta),sind(round(k*c)))))
+ % fi;
+ %endfor;
+ %Vmax:=0;
+ %Vmax:=Vmin+2*((Theta/c)-Vmin);
+ %label.top(TEX(""&decimal(round(Vmin*c))&"") rotated angle(Projgeo(rayon*(cosd(phim+10)*cosd(round(Vmin*c)),cosd(phim+10)*sind(round(Vmin*c)),sind(phim+10)))-Projgeo(rayon*(cosd(phim)*cosd(round(Vmin*c)),cosd(phim)*sind(round(Vmin*c)),sind(phim)))),Projgeo(rayon*(cosd(phim)*cosd(round(Vmin*c)),cosd(phim)*sind(round(Vmin*c)),sind(phim))));
+ %label.top(TEX(""&decimal(round(Theta))&"") rotated angle(Projgeo(rayon*(cosd(phim+10)*cosd(round(Theta)),cosd(phim+10)*sind(round(Theta)),sind(phim+10)))-Projgeo(rayon*(cosd(phim)*cosd(round(Theta)),cosd(phim)*sind(round(Theta)),sind(phim)))),Projgeo(rayon*(cosd(phim)*cosd(round(Theta)),cosd(phim)*sind(round(Theta)),sind(phim))));
+ %label.top(TEX(""&decimal(round(Vmax*c))&"") rotated angle(Projgeo(rayon*(cosd(phim+10)*cosd(round(Vmax*c)),cosd(phim+10)*sind(round(Vmax*c)),sind(phim+10)))-Projgeo(rayon*(cosd(phim)*cosd(round(Vmax*c)),cosd(phim)*sind(round(Vmax*c)),sind(phim)))),Projgeo(rayon*(cosd(phim)*cosd(round(Vmax*c)),cosd(phim)*sind(round(Vmax*c)),sind(phim))));
+enddef;
+
+vardef InitialiseMaillage(expr ud,uf,up,vd,vf,vp)=
+ Udebut:=ud;
+ Ufin:=uf;
+ pasU:=up;
+ Vdebut:=vd;
+ Vfin:=vf;
+ pasV:=vp;
+enddef;
+
+vardef MaillageSphere=
+ InitialiseMaillage(((phim div 10)+1)*pi/18,((phip div 10)-1)*pi/18,pi/18,-pi,pi,pi/36);
+ MaillageS;
+enddef;
+
+boolean maille;
+maille=false;
+
+vardef ParaMeri(expr lonn,latt)=%longitude et latitude en degr\xE9s%Parall\xE8le et m\xE9ridien particulier pour une repr\xE9sentation 3d.
+ maille:=true;
+ latpar:=latt;
+ lonpar:=lonn;
+enddef;
+
+vardef Maille=
+ InitialiseMaillage(((phim div 10)+1)*pi/18,((phip div 10)-1)*pi/18,pi/36,-pi,pi,pi/72);
+ path SMaillage[];picture Smaille;
+ drawoptions(withpen pencircle scaled 2bp withcolor orangevif);
+ for l=Vdebut step pasV until (Vfin+pasV):
+ SMaillage[100*latpar+l]=Projgeo((FX(latpar/c,l),FY(latpar/c,l),FZ(latpar/c,l)))--Projgeo((FX(latpar/c,l+pasV),FY(latpar/c,l+pasV),FZ(latpar/c,l+pasV)));
+ if ProduitScalaire(1/2[(FX(latpar/c,l),FY(latpar/c,l),FZ(latpar/c,l)),(FX(latpar/c,l+pasV),FY(latpar/c,l+pasV),FZ(latpar/c,l+pasV))]-pte3,Oeil-pte3)>0:
+ draw SMaillage[100*latpar+l];
+ fi;
+ endfor;
+ for k=Udebut step pasU until (Ufin+pasU):
+ SMaillage[k+100*lonpar]:=Projgeo((FX(k,lonpar/c),FY(k,lonpar/c),FZ(k,lonpar/c)))--Projgeo((FX(k+pasU,lonpar/c),FY(k+pasU,lonpar/c),FZ(k+pasU,lonpar/c)));
+ if ProduitScalaire(1/2[(FX(k,lonpar/c),FY(k,lonpar/c),FZ(k,lonpar/c)),(FX(k+pasU,lonpar/c),FY(k+pasU,lonpar/c),FZ(k+pasU,lonpar/c))]-pte3,Oeil-pte3)>0:
+ draw SMaillage[k+100*lonpar];
+ fi;
+ endfor;
+ drawoptions();
+ %);
+enddef;
+
+vardef Projgeo(expr X)=
+ pair $;
+ numeric Xobs,Yobs,Zobs,XProj,YProj;
+ Xobs = -redpart(X)*Aux1 + greenpart(X)*Aux3;
+ Yobs = -redpart(X)*Aux5 - greenpart(X)*Aux6 + bluepart(X)*Aux4;
+ Zobs = -redpart(X)*Aux7 - greenpart(X)*Aux8 - bluepart(X)*Aux2 + Rho;
+ XProj = DE*Xobs/Zobs;
+ YProj = DE*Yobs/Zobs;
+ $=(XProj,YProj);
+ $
+enddef;
+
+%D\xE9but du package
+numeric nbpts,nblec,nbcapitales;
+
+vardef lecture(expr nomfichier,fond)=
+ color Coord[],Pays[];
+ numeric ll;
+ ll:=0;
+ nbpts:=scantokens readfrom nomfichier;
+ for k=1 upto (nbpts div 3):
+ pair latlon;
+ latlon=((scantokens readfrom nomfichier)+(scantokens readfrom nomfichier)+(scantokens readfrom nomfichier))/3;
+ Coord[k]=rayon*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+ if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
+ if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
+ ll:=ll+1;
+ Pays[k]=Coord[k];
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ endfor;
+ closefrom nomfichier;
+ path pays;
+ if ll>0:
+ pays=Projgeo(Pays[1])
+ for l=2 upto (nbpts div 3):
+ --Projgeo(Pays[l])
+ endfor;
+ if noncolore=true:
+ fill pays--cycle withcolor payscolor;
+ else:
+ fill pays--cycle withcolor fond;
+ fi;
+ draw pays;
+ clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
+ fi;
+enddef;
+
+string nomfichiermul,NomFichier;
+
+vardef Lectureiles=
+ nomfichiermul:=arborescence&"iles.dat";
+ nblec:=scantokens readfrom nomfichiermul;
+ for p=1 upto nblec:
+ color Coord[],fond,Pays[];
+ numeric ll;
+ ll:=0;
+ nbpts:=scantokens readfrom nomfichiermul;
+ fond=scantokens readfrom nomfichiermul;
+ for k=1 upto nbpts:
+ pair latlon;
+ latlon=scantokens readfrom nomfichiermul;
+ Coord[k]=rayon*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+ if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
+ if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
+ ll:=ll+1;
+ Pays[k]=Coord[k];
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ endfor;
+ path pays;
+ if ll>0:
+ pays=Projgeo(Pays[1])
+ for l=2 upto nbpts:
+ --Projgeo(Pays[l])
+ endfor;
+ if noncolore=true:
+ fill pays--cycle withcolor payscolor;
+ else:
+ fill pays--cycle withcolor fond;
+ fi;
+ draw pays;
+ clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
+ fi;
+ endfor;
+ closefrom nomfichiermul;
+enddef;
+
+vardef Lecturelacs=
+ nomfichiermul:=arborescence&"lacs.dat";
+ nblec:=scantokens readfrom nomfichiermul;
+ for p=1 upto nblec:
+ color Coord[],Pays[];
+ numeric ll;
+ ll:=0;
+ nbpts:=scantokens readfrom nomfichiermul;
+ for k=1 upto nbpts:
+ pair latlon;
+ latlon=scantokens readfrom nomfichiermul;
+ Coord[k]=rayon*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+ if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
+ if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
+ ll:=ll+1;
+ Pays[k]=Coord[k];
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ endfor;
+ path pays;
+ if ll>0:
+ pays=Projgeo(Pays[1])
+ for l=2 upto nbpts:
+ --Projgeo(Pays[l])
+ endfor;
+ fill pays--cycle withcolor couleurfleuve;
+ draw pays;
+ clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
+ fi;
+ endfor;
+ closefrom nomfichiermul;
+enddef;
+
+vardef Lecturelacssup=
+ nomfichiermul:=arborescence&"lacssup.dat";
+ nblec:=scantokens readfrom nomfichiermul;
+ for p=1 upto nblec:
+ color Coord[],Pays[];
+ numeric ll;
+ ll:=0;
+ nbpts:=scantokens readfrom nomfichiermul;
+ for k=1 upto nbpts:
+ pair latlon;
+ latlon=scantokens readfrom nomfichiermul;
+ Coord[k]=rayon*(cosd(xpart(latlon))*cosd(ypart(latlon)),cosd(xpart(latlon))*sind(ypart(latlon)),sind(xpart(latlon)));
+ if ((xpart(latlon)>phim) and (xpart(latlon)<phip)):
+ if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
+ ll:=ll+1;
+ Pays[k]=Coord[k];
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ endfor;
+ path pays;
+ if ll>0:
+ pays=Projgeo(Pays[1])
+ for l=2 upto nbpts:
+ --Projgeo(Pays[l])
+ endfor;
+ fill pays--cycle withcolor couleurfleuve;
+ draw pays;
+ clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
+ fi;
+ endfor;
+ closefrom nomfichiermul;
+enddef;
+
+vardef Lecturevolcans=
+ drawoptions(withcolor orange);
+ nomfichiermul:=arborescence&"volcans.dat";
+ nblec:=scantokens readfrom nomfichiermul;
+ show nblec;
+ for p=1 upto nblec:
+ color Coord[],Pays[];
+ pair latlon;
+ latlon=scantokens readfrom nomfichiermul;
+ Coord[p]=rayon*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+ if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
+ if ProduitScalaire(Coord[p]-pte3,Oeil-pte3)>0:
+ Pays[p]=Coord[p];
+ fill flamme shifted Projgeo(Pays[p]) withcolor 1/2[orange,jaune];
+ %else:
+% Pays[k]=2*Coord[k];
+ fi;
+% else:
+% Pays[k]=2*Coord[k];
+ fi;
+ endfor;
+closefrom nomfichiermul;
+drawoptions();
+enddef;
+
+vardef Lecturerivieres=
+ nomfichiermul:=arborescence&"rivieres.dat";
+ nblec:=scantokens readfrom nomfichiermul;
+ for p=1 upto nblec:
+ color Coord[],fond,Pays[];
+ numeric ll;
+ ll:=0;
+ nbpts:=scantokens readfrom nomfichiermul;
+ for k=1 upto nbpts:
+ pair latlon;
+ latlon=scantokens readfrom nomfichiermul;
+ Coord[k]=rayon*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+ if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
+ if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
+ ll:=ll+1;
+ Pays[k]=Coord[k];
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ endfor;
+ path pays;
+ if ll>0:
+ pays=Projgeo(Pays[1])
+ for l=2 upto nbpts:
+ --Projgeo(Pays[l])
+ endfor;
+ draw pays withcolor couleurfleuve;
+ clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
+ fi;
+ endfor;
+ closefrom nomfichiermul;
+enddef;
+
+vardef Lecturerivieressup=
+ nomfichiermul:=arborescence&"fleuveseurope.dat";
+ nblec:=scantokens readfrom nomfichiermul;
+ for p=1 upto nblec:
+ color Coord[],fond,Pays[];
+ numeric ll;
+ ll:=0;
+ nbpts:=scantokens readfrom nomfichiermul;
+ for k=1 upto nbpts:
+ pair latlon;
+ latlon=scantokens readfrom nomfichiermul;
+ Coord[k]=rayon*(cosd(xpart(latlon))*cosd(ypart(latlon)),cosd(xpart(latlon))*sind(ypart(latlon)),sind(xpart(latlon)));
+ if ((xpart(latlon)>phim) and (xpart(latlon)<phip)):
+ if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
+ ll:=ll+1;
+ Pays[k]=Coord[k];
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ endfor;
+ path pays;
+ if ll>0:
+ pays=Projgeo(Pays[1])
+ for l=2 upto nbpts:
+ --Projgeo(Pays[l])
+ endfor;
+ draw pays withcolor couleurfleuve;
+ clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
+ fi;
+ endfor;
+ closefrom nomfichiermul;
+enddef;
+
+vardef Lecturecapitales=
+ marque_p:="creux";
+ nomfichiermul:=arborescence&"capitales.dat";
+ nbcapitales:=scantokens readfrom nomfichiermul;
+ for p=1 upto nbcapitales:
+ color Coord[];
+ pair latlon;
+ picture Nom;
+ string p_;
+ p_=scantokens readfrom nomfichiermul;
+ latlon=scantokens readfrom nomfichiermul;
+ Coord[p]=rayon*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+ Nom=image(
+ label.top(TEX(""&p_&""),Projgeo(Coord[p]));
+ );
+ if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
+ if ProduitScalaire(Coord[p]-pte3,Oeil-pte3)>0:
+ pointe(Coord[p]);
+ %draw Nom;
+ fi;
+ fi;
+ endfor;
+ closefrom nomfichiermul;
+ marque_p:="non";
+enddef;
+
+vardef Lecture(expr Nomfichier)=
+ NomFichier:=arborescence&Nomfichier;
+ nblec:=scantokens readfrom NomFichier;
+ for w=1 upto nblec:
+ if projection="non":
+ lecture(scantokens readfrom NomFichier);
+ else:
+ lecturep(scantokens readfrom NomFichier);
+ fi;
+ endfor;
+ closefrom NomFichier;
+enddef;
+
+%Pour les projections
+string projection;
+projection:="non";
+
+vardef zoom(expr nbzoom)=
+ if projection="mercator":
+ xunit:=nbzoom;
+ yunit:=nbzoom*2*cm;
+ elseif projection="cylindrique":
+ xunit:=2.5*nbzoom;
+ yunit:=nbzoom*10*cm;
+ elseif projection="simple":
+ xunit:=nbzoom*0.5*mm;
+ yunit:=nbzoom*0.5*mm;
+ elseif projection="bonne":
+ xunit:=nbzoom*4*cm;
+ yunit:=xunit;
+ fi;
+enddef;
+
+vardef mercatorc(expr aa,bb)=
+ (xunit*(bb-theta),yunit*(ln(abs(tand(45+(aa/2))))-ln(abs(tand(45+(phi/2))))))
+enddef;
+
+vardef coniquec(expr aa,bb,pc)=
+ abscon:=5*cm*(cosd(aa)*sind(bb*sind(pc)))/(sind(pc)*cosd(aa-pc));
+ ordcon:=5*cm*(cosd(aa)*cosd(bb*sind(pc)))/(sind(pc)*cosd(aa-pc));
+ (abscon,ordcon)
+enddef;
+
+vardef cylindriquec(expr aa,bb)=
+ (xunit*(bb-theta),yunit*(sind(aa)-sind(phi)))
+enddef;
+
+vardef simplec(expr aa,bb)=
+ (xunit*(bb-theta),yunit*(aa-phi))
+enddef;
+
+vardef bonnec(expr aaa,bbb)=
+ save tt;
+ pair tt;
+ rho:=cotand(phi)+(phi-aaa)/c;
+ %E:=(((bbb-theta)/c)*cosd(aaa))/rho;
+ E:=(((bbb-theta)/c)/rho)*cosd(aaa);
+ tt=xunit*(rho*sind(E*c),cotand(phi)-rho*cosd(E*c));
+ tt
+enddef;
+
+vardef lecturep(expr nomfichier,fond)=
+ pair Coord[];
+ nbpts:=scantokens readfrom nomfichier;
+ numeric ll;
+ ll=0;
+ for k=1 upto nbpts:
+ pair latlon;
+ latlon=scantokens readfrom nomfichier;
+ if projection="mercator":
+ Coord[k]=mercatorc(xpart(latlon/60),ypart(latlon/60))
+ elseif projection="winkel":
+ Coord[k]=winkelc(xpart(latlon/60),ypart(latlon/60))
+ elseif projection="cylindrique":
+ Coord[k]=cylindriquec(xpart(latlon/60),ypart(latlon/60));
+ elseif projection="simple":
+ Coord[k]=simplec(xpart(latlon/60),ypart(latlon/60));
+ elseif projection="bonne":
+ Coord[k]=bonnec(xpart(latlon/60),ypart(latlon/60));
+ elseif projection="coniqueh":
+ if (xpart(latlon)>0) or (xpart(latlon)=0):
+ ll:=ll+1;
+ Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),45);
+ fi;
+ elseif projection="coniqueb":
+ if (xpart(latlon)<0):
+ ll:=ll+1;
+ Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),-45);
+ fi;
+ fi;
+ endfor;
+ closefrom nomfichier;
+ path pays;
+ if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+ ll:=nbpts
+ fi;
+ if ll>0:
+ pays=Coord[1]
+ for l=4 step 3 until ll:%upto ll:
+ --Coord[l]
+ endfor;
+ if noncolore=true:
+ fill pays--cycle withcolor payscolor;
+ else:
+ fill pays--cycle withcolor fond;
+ fi;
+ draw pays;
+ fi;
+ %label.top(decimal(nbpts),(0,0));
+enddef;
+
+vardef Lectureilesp=
+ if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+ nomfichiermul:=arborescence&"Ile.dat";
+ else:
+ nomfichiermul:=arborescence&"iles.dat";
+ fi;
+ nblec:=scantokens readfrom nomfichiermul;
+ if projection="bonne":
+ nblec:=nblec-1
+ fi;
+ for p=1 upto nblec:
+ pair Coord[];color fond;
+ nbpts:=scantokens readfrom nomfichiermul;
+ fond=scantokens readfrom nomfichiermul;
+ numeric ll;
+ ll=0;
+ for k=1 upto nbpts:
+ pair latlon;
+ latlon=scantokens readfrom nomfichiermul;
+ if projection="mercator":
+ Coord[k]=mercatorc(xpart(latlon/60),ypart(latlon/60))
+ elseif projection="winkel":
+ Coord[k]=winkelc(xpart(latlon/60),ypart(latlon/60))
+ elseif projection="simple":
+ Coord[k]=simplec(xpart(latlon/60),ypart(latlon/60));
+ elseif projection="cylindrique":
+ Coord[k]=cylindriquec(xpart(latlon/60),ypart(latlon/60));
+ elseif projection="bonne":
+ Coord[k]=bonnec(xpart(latlon/60),ypart(latlon/60));
+ elseif projection="coniqueh":
+ if (xpart(latlon)>0) or (xpart(latlon)=0):
+ ll:=ll+1;
+ Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),45)
+ fi;
+ elseif projection="coniqueb":
+ if (xpart(latlon)<0):
+ ll:=ll+1;
+ Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),-45);
+ fi;
+ fi;
+ endfor;
+ path pays;
+ if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+ ll:=nbpts
+ fi;
+ if ll>0:
+ pays=Coord[1]
+ for l=2 upto ll:
+ --Coord[l]
+ endfor;
+ if noncolore=true:
+ fill pays--cycle withcolor payscolor;
+ else:
+ fill pays--cycle withcolor fond;
+ fi;
+ draw pays;
+ fi;
+ endfor;
+ closefrom nomfichiermul;
+ if (projection="mercator")or (projection="cylindrique") or (projection="simple"):
+ clip currentpicture to feuillet;
+ fi;
+ if projection="bonne":
+ lecturep(arborescence&"polesud.dat",blanc);
+ clip currentpicture to (bonnec(-90,-180) for k=-89 upto 90:..bonnec(k,-180) endfor)..reverse(bonnec(-90,180) for k=-89 upto 90:..bonnec(k,180) endfor)..cycle;
+ fi;
+enddef;
+
+%14/05/2017
+boolean ecriturevilles;
+ecriturevilles:=true;
+%14/05/2017
+
+vardef Lecturevillesp(expr nompays)=
+ nomfichiermul:=arborescence&"villes"&nompays&".dat";
+ nblec:=scantokens readfrom nomfichiermul;
+ drawoptions(withcolor (0.15,0.15,0.15));
+ for p=1 upto nblec:
+ pair Coord[],latlon;string p_;
+ latlon=scantokens readfrom nomfichiermul;
+ p_=scantokens readfrom nomfichiermul;
+ if projection="mercator":
+ Coord[p]=mercatorc(ypart(latlon),xpart(latlon));
+ elseif projection="simple":
+ Coord[p]=simplec(ypart(latlon),xpart(latlon));
+ elseif projection="cylindrique":
+ Coord[p]=cylindriquec(ypart(latlon),xpart(latlon));
+ elseif projection="bonne":
+ Coord[p]=bonnec(ypart(latlon),xpart(latlon));
+ fi;
+ if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+ if ecriturevilles=true:
+ dotlabel.scantokens readfrom nomfichiermul(TEX(""&p_&""),Coord[p]);
+ else:
+ dotlabel.scantokens readfrom nomfichiermul("",Coord[p]);
+ fi;
+ fi;
+ endfor;
+ drawoptions();
+ closefrom nomfichiermul;
+enddef;
+
+%16/02/2010
+
+vardef Lecturevilles(expr nomfich)=
+marque_p:="creux";
+ nomfichiermul:=nomfich&".dat";
+ nbcapitales:=scantokens readfrom nomfichiermul;
+ for p=1 upto nbcapitales:
+ color Coord[];
+ pair latlon;
+ picture Nom;
+ string p_;
+ p_=scantokens readfrom nomfichiermul;
+ latlon=scantokens readfrom nomfichiermul;
+ Coord[p]=rayon*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+ Nom=image(
+ label.scantokens readfrom nomfichiermul(TEX(""&p_&""),Projgeo(Coord[p]));
+ );
+ if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
+ if ProduitScalaire(Coord[p]-pte3,Oeil-pte3)>0:
+ pointe(Coord[p]);
+ draw Nom;
+ fi;
+ fi;
+ endfor;
+ closefrom nomfichiermul;
+ marque_p:="non";
+enddef;
+%
+
+
+vardef Lecturelacsp=
+ nomfichiermul:=arborescence&"lacs.dat";
+ nblec:=scantokens readfrom nomfichiermul;
+ for p=1 upto nblec:
+ pair Coord[];
+ nbpts:=scantokens readfrom nomfichiermul;
+ numeric ll;
+ ll=0;
+ for k=1 upto nbpts:
+ pair latlon;
+ latlon=scantokens readfrom nomfichiermul;
+ if projection="mercator":
+ Coord[k]=mercatorc(xpart(latlon/60),ypart(latlon/60));
+ elseif projection="simple":
+ Coord[k]=simplec(xpart(latlon/60),ypart(latlon/60));
+ elseif projection="cylindrique":
+ Coord[k]=cylindriquec(xpart(latlon/60),ypart(latlon/60));
+ elseif projection="bonne":
+ Coord[k]=bonnec(xpart(latlon/60),ypart(latlon/60));
+ elseif projection="coniqueh":
+ if (xpart(latlon)>0) or (xpart(latlon)=0):
+ ll:=ll+1;
+ Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),45);
+ fi;
+ elseif projection="coniqueb":
+ if (xpart(latlon)<0):
+ ll:=ll+1;
+ Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),-45);
+ fi;
+ fi;
+ endfor;
+ path lac;
+ if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+ ll:=nbpts
+ fi;
+ if ll>0:
+ lac=Coord[1]
+ for l=2 upto ll:
+ --Coord[l]
+ endfor;
+ fill lac--cycle withcolor couleurfleuve;
+ draw lac;
+ fi;
+ endfor;
+ closefrom nomfichiermul;
+enddef;
+
+vardef Lecturelacspsup=
+ nomfichiermul:=arborescence&"lacssup.dat";
+ nblec:=scantokens readfrom nomfichiermul;
+ for p=1 upto nblec:
+ pair Coord[];
+ nbpts:=scantokens readfrom nomfichiermul;
+ numeric ll;
+ ll=0;
+ for k=1 upto nbpts:
+ pair latlon;
+ latlon=scantokens readfrom nomfichiermul;
+ if projection="mercator":
+ Coord[k]=mercatorc(xpart(latlon),ypart(latlon));
+ elseif projection="simple":
+ Coord[k]=simplec(xpart(latlon),ypart(latlon));
+ elseif projection="cylindrique":
+ Coord[k]=cylindriquec(xpart(latlon),ypart(latlon));
+ elseif projection="bonne":
+ Coord[k]=bonnec(xpart(latlon),ypart(latlon));
+ elseif projection="coniqueh":
+ if (xpart(latlon)>0) or (xpart(latlon)=0):
+ ll:=ll+1;
+ Coord[ll]=coniquec(xpart(latlon),ypart(latlon),45);
+ fi;
+ elseif projection="coniqueb":
+ if (xpart(latlon)<0):
+ ll:=ll+1;
+ Coord[ll]=coniquec(xpart(latlon),ypart(latlon),-45);
+ fi;
+ fi;
+ endfor;
+ path lac;
+ if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+ ll:=nbpts
+ fi;
+ if ll>0:
+ lac=Coord[1]
+ for l=2 upto ll:
+ --Coord[l]
+ endfor;
+ fill lac--cycle withcolor couleurfleuve;
+ draw lac;
+ fi;
+ endfor;
+ closefrom nomfichiermul;
+enddef;
+
+vardef Lecturerivieresp=
+ nomfichiermul:=arborescence&"rivieres.dat";
+ nblec:=scantokens readfrom nomfichiermul;
+ for p=1 upto nblec:
+ pair Coord[];
+ nbpts:=scantokens readfrom nomfichiermul;
+ numeric ll;
+ ll:=0;
+ for k=1 upto nbpts:
+ pair latlon;
+ latlon=scantokens readfrom nomfichiermul;
+ if projection="mercator":
+ Coord[k]=mercatorc(xpart(latlon/60),ypart(latlon/60));
+ elseif projection="simple":
+ Coord[k]=simplec(xpart(latlon/60),ypart(latlon/60));
+ elseif projection="cylindrique":
+ Coord[k]=cylindriquec(xpart(latlon/60),ypart(latlon/60));
+ elseif projection="bonne":
+ Coord[k]=bonnec(xpart(latlon/60),ypart(latlon/60));
+ elseif projection="coniqueh":
+ if (xpart(latlon)>0) or (xpart(latlon)=0):
+ ll:=ll+1;
+ Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),45);
+ fi;
+ elseif projection="coniqueb":
+ if (xpart(latlon)<0):
+ ll:=ll+1;
+ Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),-45);
+ fi;
+ fi;
+ endfor;
+ path riv;
+ if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+ ll:=nbpts;
+ fi;
+ if ll>0:
+ riv=Coord[1]
+ for l=2 upto ll:
+ --Coord[l]
+ endfor;
+ draw riv withcolor couleurfleuve;
+ fi;
+ endfor;
+ closefrom nomfichiermul;
+enddef;
+
+vardef Lecturerivierespsup=
+ nomfichiermul:=arborescence&"fleuveseurope.dat";
+ nblec:=scantokens readfrom nomfichiermul;
+ for p=1 upto nblec:
+ pair Coord[];
+ nbpts:=scantokens readfrom nomfichiermul;
+ numeric ll;
+ ll:=0;
+ for k=1 upto nbpts:
+ pair latlon;
+ latlon=scantokens readfrom nomfichiermul;
+ if projection="mercator":
+ Coord[k]=mercatorc(xpart(latlon),ypart(latlon));
+ elseif projection="simple":
+ Coord[k]=simplec(xpart(latlon),ypart(latlon));
+ elseif projection="cylindrique":
+ Coord[k]=cylindriquec(xpart(latlon),ypart(latlon));
+ elseif projection="bonne":
+ Coord[k]=bonnec(xpart(latlon),ypart(latlon));
+ elseif projection="coniqueh":
+ if (xpart(latlon)>0) or (xpart(latlon)=0):
+ ll:=ll+1;
+ Coord[ll]=coniquec(xpart(latlon),ypart(latlon),45);
+ fi;
+ elseif projection="coniqueb":
+ if (xpart(latlon)<0):
+ ll:=ll+1;
+ Coord[ll]=coniquec(xpart(latlon),ypart(latlon),-45);
+ fi;
+ fi;
+ endfor;
+ path riv;
+ if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+ ll:=nbpts;
+ fi;
+ if ll>0:
+ riv=Coord[1]
+ for l=2 upto ll:
+ --Coord[l]
+ endfor;
+ draw riv withcolor couleurfleuve;
+ fi;
+ endfor;
+ closefrom nomfichiermul;
+enddef;
+
+vardef Lecturecapitalesp=
+ marque_p:="creux";
+ nomfichiermul:=arborescence&"capitales.dat";
+ nbcapitales:=scantokens readfrom nomfichiermul;
+ for p=1 upto nbcapitales:
+ pair Coord[],latlon;
+ string p_;
+ p_=scantokens readfrom nomfichiermul;
+ latlon=scantokens readfrom nomfichiermul;
+ ll:=0;
+ if projection="mercator":
+ Coord[p]=mercatorc(xpart(latlon/60),ypart(latlon/60));
+ ll:=1;
+ elseif projection="simple":
+ Coord[p]=simplec(xpart(latlon/60),ypart(latlon/60));
+ ll:=1;
+ elseif projection="cylindrique":
+ Coord[p]=cylindriquec(xpart(latlon/60),ypart(latlon/60));
+ ll:=1;
+ elseif projection="bonne":
+ Coord[p]=bonnec(xpart(latlon/60),ypart(latlon/60));
+ ll:=1;
+ elseif projection="coniqueh":
+ if (xpart(latlon)>0) or (xpart(latlon)=0):
+ ll:=1;
+ Coord[p]=coniquec(xpart(latlon/60),ypart(latlon/60),45);
+ fi;
+ elseif projection="coniqueb":
+ if (xpart(latlon)<0):
+ ll:=1;
+ Coord[p]=coniquec(xpart(latlon/60),ypart(latlon/60),-45);
+ fi;
+ fi;
+ if ll>0:
+ drawoptions(withcolor rouge);
+ pointe(Coord[p]);
+ drawoptions();
+ if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+ label.top(TEX(""&p_&""),Coord[p]);
+ fi;
+ fi;
+ endfor;
+ closefrom nomfichiermul;
+ marque_p:="non";
+enddef;
+
+vardef MeridienParallele=
+ if (projection="mercator") or (projection="cylindrique") or (projection="simple"):
+ pair Coord[];
+ for k=-85 step 5 until 85:
+ for j=-180 step 10 until 180:
+ if projection="mercator":
+ Coord[100*k+j]=mercatorc(k,j);
+ elseif projection="simple":
+ Coord[100*k+j]=simplec(k,j);
+ elseif projection="cylindrique":
+ Coord[100*k+j]=cylindriquec(k,j);
+ fi;
+ endfor;
+ endfor;
+ for k=-85 step 5 until 85:
+ draw Coord[100*k-180]
+ for j=-170 step 10 until 180:
+ --Coord[100*k+j]
+ endfor;
+ endfor;
+ pair Coord[];
+ for k=-180 step 10 until 180:
+ for j=-85 step 5 until 85:
+ if projection="mercator":
+ Coord[0.001*k+10*j]=mercatorc(j,k);
+ elseif projection="simple":
+ Coord[0.001*k+10*j]=simplec(j,k);
+ elseif projection="cylindrique":
+ Coord[0.001*k+10*j]=cylindriquec(j,k);
+ fi;
+ endfor;
+ endfor;
+ for k=-180 step 10 until 180:
+ draw Coord[0.001*k-10*80]
+ for j=-85 step 5 until 85:
+ --Coord[0.001*k+10*j]
+ endfor;
+ endfor;
+ elseif projection="bonne":
+ pair Coord[][];
+ for k=-90 step 10 until 90:
+ for j=-180 step 10 until 180:
+ Coord[k][j]=bonnec(k,j);
+ endfor;
+ endfor;
+ for k=-90 step 10 until 90:
+ draw Coord[k][-180]
+ for j=-170 step 10 until 180:
+ --Coord[k][j]
+ endfor;
+ endfor;
+ pair Coord[][];
+ for k=-170 step 10 until 170:
+ for j=-90 step 10 until 90:
+ Coord[k][j]=bonnec(j,k);
+ endfor;
+ endfor;
+ for k=-170 step 10 until 170:
+ draw Coord[k][-90]
+ for j=-80 step 10 until 90:
+ ..Coord[k][j]
+ endfor;
+ endfor;
+ elseif projection="coniqueh":
+ pair Coord[];
+ for k=-180 step 10 until 180:
+ for j=0 step 10 until 90:
+ Coord[100*k+j]=coniquec(j,k,45);
+ endfor;
+ endfor;
+ for k=-180 step 10 until 180:
+ draw Coord[100*k]
+ for j=10 step 10 until 90:
+ --Coord[100*k+j]
+ endfor;
+ endfor;
+ pair Coord[];
+ for k=0 step 10 until 90:
+ for j=-180 step 10 until 180:
+ Coord[0.001*k+10*j]=coniquec(k,j,45);
+ endfor;
+ endfor;
+ for k=0 step 10 until 90:
+ draw Coord[0.001*k-10*180]
+ for j=-170 step 10 until 180:
+ --Coord[0.001*k+10*j]
+ endfor;
+ endfor;
+ clip currentpicture to coniquec(90,0,45)--(Coord[-10*180]
+ for j=-170 step 10 until 180:
+ --Coord[10*j]
+ endfor)--cycle;
+ elseif projection="coniqueb":
+ pair Coord[];
+ for k=-180 step 10 until 180:
+ for j=-90 step 10 until 0:
+ Coord[100*k+j]=coniquec(j,k,-45);
+ endfor;
+ endfor;
+ for k=-180 step 10 until 180:
+ draw Coord[100*k-90]
+ for j=-80 step 10 until 0:
+ --Coord[100*k+j]
+ endfor;
+ endfor;
+ pair Coord[];
+ for k=-90 step 10 until 0:
+ for j=-180 step 10 until 180:
+ Coord[0.001*k+10*j]=coniquec(k,j,-45);
+ endfor;
+ endfor;
+ for k=-90 step 10 until 0:
+ draw Coord[0.001*k-10*180]
+ for j=-170 step 10 until 180:
+ --Coord[0.001*k+10*j]
+ endfor;
+ endfor;
+ clip currentpicture to coniquec(-90,0,-45)--(Coord[-10*180]
+ for j=-170 step 10 until 180:
+ --Coord[10*j]
+ endfor)--cycle;
+ fi;
+enddef;
+
+boolean Echelle;
+Echelle=false;
+
+vardef echelle(expr Th,Ph,long)=%long en km.
+ %Echelle:=true;
+ theta:=Th;
+ phi:=Ph;
+ Long:=long;
+ zoom(1);
+ numeric $;
+ if projection="bonne":
+ $=(cm*pi*cosd(Ph)/36)/(long*abs(bonnec(Ph,Th)-bonnec(Ph,Th+5)))*6340;
+ elseif projection="mercator":
+ $=(cm*pi*cosd(Ph)*6340/36)/(long*abs(mercatorc(Ph,Th)-mercatorc(Ph,Th+5)));
+ elseif projection="simple":
+ $=(cm*pi*cosd(Ph)*6340/36)/(long*abs(simplec(Ph,Th)-simplec(Ph,Th+5)));
+ elseif projection="cylindrique":
+ $=(cm*pi*cosd(Ph)*6340/36)/(long*abs(cylindriquec(Ph,Th)-cylindriquec(Ph,Th+5)));
+ fi;
+ $
+enddef;
+
+boolean Amsud,Amnord,Amcentrale,Caraibes,Asie,Europe,Afrique,All;
+
+Amsud:=false;
+Amnord:=false;
+Amcentrale:=false;
+Caraibes:=false;
+Asie:=false;
+Europe:=false;
+Afrique:=false;
+All:=true;
+
+vardef Projection(expr TH,PH,Zoom)=
+ theta:=TH;
+ phi:=PH;
+ zoom(Zoom);
+ if projection="bonne":
+ fill (bonnec(-90,-180) for k=-85 step 5 until 90:..bonnec(k,-180) endfor)..reverse(bonnec(-90,180) for k=-85 step 5 until 90:..bonnec(k,180) endfor)..cycle withcolor couleurfond;
+ fi;
+ if All=true:
+ Lecture("Cameriquesud.dat");
+ Lecture("Ccaraibes.dat");
+ Lecture("Cameriquecentrale.dat");
+ Lecture("Cameriquenord.dat");
+ Lecture("Casia.dat");
+ Lecture("Ceurope.dat");
+ Lecture("Cafrique.dat");
+ else:
+ if Amsud=true:
+ Lecture("Cameriquesud.dat");
+ fi;
+ if Amnord=true:
+ Lecture("Cameriquenord.dat");
+ fi;
+ if Amcentrale=true:
+ Lecture("Cameriquecentrale.dat");
+ fi;
+ if Caraibes=true:
+ Lecture("Ccaraibes.dat");
+ fi;
+ if Asie=true:
+ if projection="bonne":
+ Lecture("Casie.dat");
+ else:
+ Lecture("Casia.dat");
+ fi;
+ fi;
+ if Europe=true:
+ Lecture("Ceurope.dat");
+ fi;
+ if Afrique=true:
+ Lecture("Cafrique.dat");
+ fi;
+ fi;
+ if lacs=true:
+ Lecturelacsp;
+ Lecturelacspsup;
+ fi;
+ Lectureilesp;
+ if capitales=true:
+ Lecturecapitalesp;
+ fi;
+ if fleuves=true:
+ Lecturerivieresp;
+ Lecturerivierespsup;
+ fi;
+ if maillage=true:
+ drawoptions(withcolor gris);
+ MeridienParallele;
+ drawoptions();
+ fi;
+ if Echelle=true:
+ draw ((Xa,Ya)+u*(1,1))--((Xa,Ya)+u*(2,1));
+ labeloffset:=labeloffset*1.5;
+ label.top(btex 0 etex,(Xa,Ya)+u*(1,1));
+ label.top(TEX(""&decimal(Long)&"~km"),(Xa,Ya)+u*(2,1));
+ labeloffset:=labeloffset/1.5;
+ draw ((Xa,Ya)+u*(1,1.1))--((Xa,Ya)+u*(1,0.9));
+ draw (((Xa,Ya)+u*(1,1.1))--((Xa,Ya)+u*(1,0.9))) shifted(u*(1,0));
+ fi;
+enddef;
+
+vardef Simple(expr TH,PH,Zoom)=
+ projection:="simple";
+ theta:=TH;
+ phi:=PH;
+ zoom(Zoom);
+ Lecture("Cameriquesud.dat");
+ Lecture("Ccaraibes.dat");
+ Lecture("Cameriquecentrale.dat");
+ Lecture("Cameriquenord.dat");
+ Lecture("Casia.dat");
+ Lecture("Ceurope.dat");
+ Lecture("Cafrique.dat");
+ if lacs=true:
+ Lecturelacsp;
+ Lecturelacspsup;
+ fi;
+ Lectureilesp;
+ if capitales=true:
+ Lecturecapitalesp;
+ fi;
+ if fleuves=true:
+ Lecturerivieresp;
+ fi;
+ if maillage=true:
+ MeridienParallele
+ fi;
+enddef;
+
+vardef Mercator(expr TH,PH,Zoom)=
+ projection:="mercator";
+ theta:=TH;
+ phi:=PH;
+ zoom(Zoom);
+ Lecture("Cameriquesud.dat");
+ Lecture("Ccaraibes.dat");
+ Lecture("Cameriquecentrale.dat");
+ Lecture("Cameriquenord.dat");
+ Lecture("Casia.dat");
+ Lecture("Ceurope.dat");
+ Lecture("Cafrique.dat");
+ if lacs=true:
+ Lecturelacsp;
+ Lecturelacspsup;
+ fi;
+ Lectureilesp;
+ if capitales=true:
+ Lecturecapitalesp;
+ fi;
+ if fleuves=true:
+ Lecturerivieresp;
+ fi;
+ if maillage=true:
+ MeridienParallele
+ fi;
+enddef;
+
+vardef Cylindrique(expr TH,PH,Zoom)=
+ projection:="cylindrique";
+ theta:=TH;
+ phi:=PH;
+ zoom(Zoom);
+ Lecture("Cameriquesud.dat");
+ Lecture("Ccaraibes.dat");
+ Lecture("Cameriquecentrale.dat");
+ Lecture("Cameriquenord.dat");
+ Lecture("Casia.dat");
+ Lecture("Ceurope.dat");
+ Lecture("Cafrique.dat");
+ if lacs=true:
+ Lecturelacsp;
+ Lecturelacspsup;
+ fi;
+ Lectureilesp;
+ if capitales=true:
+ Lecturecapitalesp;
+ fi;
+ if fleuves=true:
+ Lecturerivieresp;
+ fi;
+ if maillage=true:
+ MeridienParallele
+ fi;
+enddef;
+
+vardef Bonne(expr TH,PH,Zoom)=
+ projection:="bonne";
+ theta:=TH;
+ phi:=PH;
+ zoom(Zoom);
+ fill (bonnec(-90,-180) for k=-85 step 5 until 90:..bonnec(k,-180) endfor)..reverse(bonnec(-90,180) for k=-85 step 5 until 90:..bonnec(k,180) endfor)..cycle withcolor couleurfond;
+ Lecture("Cameriquesud.dat");
+ Lecture("Ccaraibes.dat");
+ Lecture("Cameriquecentrale.dat");
+ Lecture("Cameriquenord.dat");
+ Lecture("Casie.dat");
+ Lecture("Ceurope.dat");
+ Lecture("Cafrique.dat");
+ if lacs=true:
+ Lecturelacsp;
+ Lecturelacspsup;
+ fi;
+ Lectureilesp;
+ if capitales=true:
+ Lecturecapitalesp;
+ fi;
+ if fleuves=true:
+ Lecturerivieresp;
+ fi;
+ if maillage=true:
+ drawoptions(withcolor gris);
+ MeridienParallele;
+ drawoptions();
+ fi;
+ draw (bonnec(-90,-180) for k=-85 step 5 until 90:..bonnec(k,-180) endfor)..reverse(bonnec(-90,180) for k=-85 step 5 until 90:..bonnec(k,180) endfor)..cycle;
+enddef;
+
+vardef ConiqueH=
+ projection:="coniqueh";
+ Lecture("Cameriquesud.dat");
+ Lecture("Ccaraibes.dat");
+ Lecture("Cameriquecentrale.dat");
+ Lecture("Cameriquenord.dat");
+ Lecture("Casie.dat");
+ Lecture("Ceurope.dat");
+ Lecture("Cafrique.dat");
+ if lacs=true:
+ Lecturelacsp;
+ Lecturelacspsup;
+ fi;
+ Lectureilesp;
+ if capitales=true:
+ Lecturecapitalesp;
+ fi;
+ if fleuves=true:
+ Lecturerivieresp;
+ Lecturerivierespsup;
+ fi;
+ drawoptions(withcolor gris);
+ MeridienParallele;
+ drawoptions();
+enddef;
+
+vardef ConiqueB=
+ projection:="coniqueb";
+ Lecture("Cameriquesud.dat");
+ Lecture("Ccaraibes.dat");
+ Lecture("Cameriquecentrale.dat");
+ Lecture("Cameriquenord.dat");
+ Lecture("Casie.dat");
+ Lecture("Ceurope.dat");
+ Lecture("Cafrique.dat");
+ if lacs=true:
+ Lecturelacsp;
+ Lecturelacspsup;
+ fi;
+ Lectureilesp;
+ if capitales=true:
+ Lecturecapitalesp;
+ fi;
+ if fleuves=true:
+ Lecturerivieresp;
+ Lecturerivierespsup;
+ fi;
+ drawoptions(withcolor gris);
+ MeridienParallele;
+ drawoptions();
+enddef;
+
+%%%%%%%
+
+rayon:=2;
+
+boolean fleuves,lacs,capitales,noncolore,maillage,volcans;
+fleuves=true;
+lacs=true;
+capitales=true;
+noncolore=false;
+maillage=false;
+volcans=false;
+
+color couleurfond,couleurmaillage,couleurfleuve;
+couleurfond:=ciel;
+couleurmaillage:=gris;
+couleurfleuve:=cielfonce;
+
+vardef Mappemonde(expr longobs,latobs)=
+ projection:="non";
+ %figureespace(-100u,-100u,100u,100u);
+ Initialisation(5,longobs,latobs,distanceecran);
+ numeric phim,phip,phii;%phi moins -- phi plus - phi interm\xE9diaire
+ phim=Phi+arcsind(rayon/Rho)-90;
+ phip=Phi+90-arcsind(rayon/Rho);
+ color pte[];
+ pte1=rayon*(cosd(phim)*cosd(Theta),cosd(phim)*sind(Theta),sind(phim));
+ pte2=rayon*(cosd(phip)*cosd(Theta),cosd(phip)*sind(Theta),sind(phip));
+ pte3=1/2[pte1,pte2];
+ pte4-pte3=Normal((0,0,0),pte1,pte2);
+ if (Phi>90):
+ phip:=180-phip;
+ phii:=180-phim;
+ phim:=phip;
+ phip:=phii;
+ fi;
+ if (Phi<-90):
+ phip:=-180-phip;
+ phii:=-180-phim;
+ phim:=phip;
+ phip:=phii;
+ fi;
+ fill cercles(pte3,pte1,pte3,pte1,pte4) withcolor couleurfond;
+ Lecture("Cameriquesud.dat");
+ Lecture("Ccaraibes.dat");
+ Lecture("Cameriquecentrale.dat");
+ Lecture("Cameriquenord.dat");
+ Lecture("Casie.dat");
+ Lecture("Ceurope.dat");
+ Lecture("Cafrique.dat");
+ if volcans=true:
+ Lecturevolcans;
+ fi;
+ if lacs=true:
+ Lecturelacs;
+ Lecturelacssup;
+ fi;
+ Lectureiles;
+ if capitales=true:
+ Lecturecapitales;
+ fi;
+ if fleuves=true:
+ Lecturerivieres;
+ %Lecturerivieressup;
+ fi;
+ if maillage=true:
+ drawoptions(withcolor couleurmaillage);
+ MaillageSphere;
+ drawoptions();
+ fi;
+ if maille=true:
+ Maille;
+ fi;
+ draw cercles(pte3,pte1,pte3,pte1,pte4);
+ %finespace;
+enddef;
+
+vardef mappemonde(expr longobs,latobs)=
+ projection:="non";
+ %figureespace(-100u,-100u,100u,100u);
+ Initialisation(5,longobs,latobs,distanceecran);
+ numeric phim,phip,phii;%phi moins -- phi plus - phi interm\xE9diaire
+ phim=Phi+arcsind(rayon/Rho)-90;
+ phip=Phi+90-arcsind(rayon/Rho);
+ color pte[];
+ pte1=rayon*(cosd(phim)*cosd(Theta),cosd(phim)*sind(Theta),sind(phim));
+ pte2=rayon*(cosd(phip)*cosd(Theta),cosd(phip)*sind(Theta),sind(phip));
+ pte3=1/2[pte1,pte2];
+ pte4-pte3=Normal((0,0,0),pte1,pte2);
+ if (Phi>90):
+ phip:=180-phip;
+ phii:=180-phim;
+ phim:=phip;
+ phip:=phii;
+ fi;
+ if (Phi<-90):
+ phip:=-180-phip;
+ phii:=-180-phim;
+ phim:=phip;
+ phip:=phii;
+ fi;
+ fill cercles(pte3,pte1,pte3,pte1,pte4) withcolor couleurfond;
+ Lecture("Cameriquesud.dat");
+ Lecture("Ccaraibes.dat");
+ Lecture("Cameriquecentrale.dat");
+ Lecture("Cameriquenord.dat");
+ Lecture("Casie.dat");
+ Lecture("Ceurope.dat");
+ Lecture("Cafrique.dat");
+ if volcans=true:
+ Lecturevolcans;
+ fi;
+ if lacs=true:
+ Lecturelacs;
+ Lecturelacssup;
+ fi;
+ Lectureiles;
+ if capitales=true:
+ Lecturecapitales;
+ fi;
+ if fleuves=true:
+ Lecturerivieres;
+ %Lecturerivieressup;
+ fi;
+ if maillage=true:
+ drawoptions(withcolor couleurmaillage);
+ MaillageSphere;
+ drawoptions();
+ fi;
+ if maille=true:
+ Maille;
+ fi;
+ draw cercles(pte3,pte1,pte3,pte1,pte4);
+% finespace;
+enddef;
+
+endinput;
Property changes on: trunk/Master/texmf-dist/metapost/profcollege/PfCMondegood.mp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/metapost/profcollege/PfCMonstre.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCMonstre.mp (rev 0)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCMonstre.mp 2025-08-27 20:13:06 UTC (rev 76163)
@@ -0,0 +1,323 @@
+boolean Couleurs;
+Couleurs=false;
+
+%Style cartoon
+pickup pencircle xscaled 2bp yscaled 0.25bp rotated 60;
+
+% Définitions des points d'accroche
+pair Or[],P[],Ja[],Br[],Bo,Ne,Ye,Ch,Pap,Cr,Mo,Ce;
+P1=(0,0);
+P2-P1=u*(5,0);
+P3-P2=u*(0,6.75);
+P4-P3=P1-P2;
+Ja1=1/4[P1,P2];
+Ja2=3/4[P1,P2];
+Br1=2/5[P1,P4];
+Br2=2/5[P2,P3];
+Or1=3.5/5[P1,P4];
+Or2=3.5/5[P2,P3];
+Ch=1/2[P4,P3];
+Ye=4/5[1/2[P1,P2],1/2[P3,P4]];
+Ne=1/2[1/2[P1,P2],1/2[P3,P4]];
+Mo=2/5[1/2[P1,P2],1/2[P3,P4]];
+Bo=1/5[1/2[P1,P2],1/2[P3,P4]];
+Pap=1/2[P1,P2];
+Cr=Pap;
+
+vardef Corps(expr nb)=
+ save $;
+ path $;
+ path RetiensCorps[];
+ RetiensCorps1=(0,0.125){dir-50}..{dir50}(0.5,0.125){dir-50}..{dir50}(1,0.125){dir-50}..{dir50}(1.5,0.125){dir-50}..{dir50}(2,0.125){dir-50}..{dir50}(2.5,0.125){dir160}..{dir90}(2.5,1.5)..{dir180}(1.25,2.25){dir180}..{dir-90}(0,1.5){dir-90}..{dir-160}cycle;
+ RetiensCorps1:=RetiensCorps1 xscaled 2u yscaled 3u;
+%
+ RetiensCorps2=(0,0)--(2.5,0){dir70}..{dir120}(2.5,1.5)--(2.25,1.25)--(2,1.75)--(1.75,1.5)--(1.25,2.25)--(0.75,1.5)--(0.5,1.75)--(0.25,1.25)--(0,1.5){dir-120}..{dir-70}cycle;
+ RetiensCorps2:=RetiensCorps2 xscaled 2u yscaled 3u;
+%
+ RetiensCorps3=(fullcircle scaled 2.5) shifted(1.25,1.25);
+%
+ RetiensCorps6=(0,0)--(2.5,0){dir70}..{dir120}(1.25,2.25){dir-120}..{dir-70}cycle;
+ RetiensCorps7=RetiensCorps6 scaled 0.9;
+ RetiensCorps8=RetiensCorps7 shifted(center RetiensCorps6-center RetiensCorps7);
+ pair MC[],NC[];
+ nbche:=20;
+ for k=0 upto nbche:
+ MC[k]=point(k*length RetiensCorps6/nbche) of RetiensCorps6;
+ NC[k]=point(k*length RetiensCorps8/nbche) of RetiensCorps8;
+ endfor;
+ RetiensCorps4=MC[0]{dir(angle(NC0-MC0)-5+uniformdeviate(10))} for k=0 upto nbche-1:..NC[k]{dir(angle(MC[k+1]-NC[k])-10+uniformdeviate(20))}..MC[k+1]{dir(angle(NC[k+1]-MC[k+1])-5+uniformdeviate(10))} endfor..cycle;
+ RetiensCorps4:=RetiensCorps4 xscaled 2u yscaled 3u;
+ RetiensCorps9=(fullcircle scaled (0.9*2.5)) shifted(1.25,1.25);
+ for k=0 upto 360:
+ MC[k]:=pointarc(RetiensCorps3,k);
+ NC[k]:=pointarc(RetiensCorps9,k);
+ endfor;
+ RetiensCorps51=NC[0]{dir90}..NC[5]{dir(angle(MC[10]-NC[5]))}--MC[5]{dir90}%
+ ..{dir180}NC[20]{dir(angle(MC[25]-NC[20]))}..MC[25]{dir115}%
+ ..{dir180}NC[45]{dir(angle(MC[50]-NC[45]))}..MC[50]{dir140}%
+ ..{dir180}NC[75]{dir(angle(MC[80]-NC[75]))}..MC[70]{dir160}%
+ ..MC[85]..NC[90];
+ RetiensCorps5=RetiensCorps51..(symetrie(reverse RetiensCorps51,center RetiensCorps3,center RetiensCorps3+(0,1)))..symetrie(RetiensCorps51,center RetiensCorps3)..symetrie(reverse RetiensCorps51,center RetiensCorps3,center RetiensCorps3+(1,0))..cycle;
+ RetiensCorps5:=RetiensCorps5 xscaled 2u yscaled ((6.75/2.5)*u);
+ $=RetiensCorps[nb];
+ $
+enddef;
+%%%%%%%%%%%%%
+% Yeux
+%%%%%%%%%%%%%
+vardef Yeux(expr nb)=
+ save $;
+ picture $;
+ picture RetiensYeux[];
+ RetiensYeux1=image(%
+ path cyeux,pupille;
+ cyeux=(fullcircle xscaled 0.9 yscaled 1.25) rotated -10;
+ pupille=0.1*(cosd(0),sind(0)) for k=1 upto 14:..(0.02+0.03*(k+1)-0.01*k)*(cosd(90*k),sind(90*k)) endfor;
+ fill (cyeux scaled u) withcolor white;
+ fill symetrie(cyeux scaled u,pointarc(cyeux scaled u,10)+(0,-u),pointarc(cyeux scaled u,10)+(0,u)) withcolor white;
+ trace cyeux scaled u;
+ trace pupille scaled u;
+ trace symetrie(cyeux scaled u,pointarc(cyeux scaled u,10)+(0,-u),pointarc(cyeux scaled u,10)+(0,u));
+ trace symetrie(pupille scaled u,pointarc(cyeux scaled u,10)+(0,-u),pointarc(cyeux scaled u,10)+(0,u));
+ );
+ RetiensYeux2=image(%
+ path cyeux,pupille;
+ cyeux=(fullcircle xscaled 0.9 yscaled 1.25);
+ pupille=fullcircle scaled 0.2;
+ fill rotation(cyeux scaled u,(0,0),-90) shifted(0.8u,-0.1u) withcolor white;
+ trace rotation(cyeux scaled u,(0,0),-90) shifted(0.8u,-0.1u);
+ fill rotation((pupille scaled u) shifted(pointarc(cyeux scaled u,-30)+(-0.1u,0)),(0,0),-90) shifted(0.8u,-0.1u);
+ fill (cyeux scaled u) withcolor white;
+ trace cyeux scaled u;
+ fill (pupille scaled u) shifted(pointarc(cyeux scaled u,0)+(-0.1u,0));
+ pair M[];
+ M1=pointarc(cyeux scaled u,75)+(0,0.05u);
+ M2=pointarc(cyeux scaled u,110)+0.5*sqrt(2)*(-0.05u,0.05u);
+ fill M1{dir150}..{dir-120}M2{dir90}..{dir-90}M1--cycle;
+ fill symetrie((M1{dir150}..{dir-120}M2{dir90}..{dir-90}M1--cycle),pointarc(cyeux scaled u,0),pointarc(cyeux scaled u,0)+(0,1)) shifted(0,-0.2u);
+ );
+ RetiensYeux3=image(%
+ path cyeux,pupille;
+ cyeux=(fullcircle xscaled 0.9 yscaled 1.25) rotated 30;
+ pupille=fullcircle scaled 0.25 shifted(0.2,0.2);
+ fill (cyeux scaled u) withcolor white;
+ fill symetrie(cyeux scaled u,pointarc(cyeux scaled u,-30)+(0,-u),pointarc(cyeux scaled u,-30)+(0,u)) withcolor white;
+ fill (cercles((0.5,0.5),0.25) scaled u) withcolor white;
+ trace cyeux scaled u;
+ fill pupille scaled u;
+ trace symetrie(cyeux scaled u,pointarc(cyeux scaled u,-30)+(0,-u),pointarc(cyeux scaled u,-30)+(0,u));
+ fill symetrie(pupille scaled u,pointarc(cyeux scaled u,-30)+(0,-u),pointarc(cyeux scaled u,-30)+(0,u));
+ trace cercles((0.5,0.5),0.25) scaled u;
+ fill (cercles((0.5,0.5),0.1) shifted(-0.1,0)) scaled u ;
+ );
+ RetiensYeux4=image(%
+ path cyeux,pupille;
+ trace (fullcircle xscaled 0.9 yscaled 1.25) scaled u withcolor CoulCorps;
+ cyeux=(fullcircle xscaled 1.1 yscaled 1.5) rotated 90;
+ pupille=fullcircle scaled 0.75;
+ fill (cyeux scaled u) withcolor white;
+ trace cyeux scaled u;
+ fill pupille scaled u;
+ );
+ RetiensYeux5=image(%
+ path cyeux,pupille;
+ cyeux=(fullcircle xscaled 0.9 yscaled 1.25);
+ pupille=fullcircle scaled 0.25;
+ fill (cyeux scaled u) withcolor white;
+ fill symetrie(cyeux scaled u,pointarc(cyeux scaled u,0)+(0,-u),pointarc(cyeux scaled u,0)+(0,u)) withcolor white;
+ fill ((subpath(0.05*length (cyeux scaled u),0.45*length (cyeux scaled u)) of (cyeux scaled u)){dir 30}..(point(0.05*length (cyeux scaled u)) of (cyeux scaled u))--cycle);
+ fill symetrie(((subpath(0.05*length (cyeux scaled u),0.45*length (cyeux scaled u)) of (cyeux scaled u)){dir 30}..(point(0.05*length (cyeux scaled u)) of (cyeux scaled u))--cycle),pointarc(cyeux scaled u,0)+(0,-u),pointarc(cyeux scaled u,0)+(0,u));
+ trace cyeux scaled u;
+ fill (pupille shifted (0,0.25)) scaled u;
+ trace symetrie(cyeux scaled u,pointarc(cyeux scaled u,0)+(0,-u),pointarc(cyeux scaled u,0)+(0,u));
+ fill symetrie(pupille scaled u,pointarc(cyeux scaled u,0)+(0,-u),pointarc(cyeux scaled u,0)+(0,u));
+ );
+ $=RetiensYeux[nb];
+ $
+enddef;
+%%%%%%
+%Bouche
+%%%%%%
+vardef Bouche(expr nb)=
+ save $;
+ picture $;
+ picture RetiensBouche[];
+ RetiensBouche1=image(
+ path contourbouche;
+ contourbouche=(0,0){dir-30}..{dir30}(0.5u,0){dir30}..{dir0}(1.5u,0.5u)..{dir-90}(2u,0){dir-90}..{dir120}(1.5u,-0.3u)..{dir180}(0.5u,0);
+ if Couleurs:
+ fill (0.5u,0){dir30}..{dir0}(1.5u,0.5u)..{dir-90}(2u,0){dir-90}..{dir120}(1.5u,-0.3u)..{dir180}(0.5u,0)--cycle withcolor white;
+ fi;
+ trace contourbouche;
+ trace (0.5u,0){dir10}..{dir-10}(2u,0);
+ trace (point(0.35*length contourbouche) of contourbouche){dir-80}..(point(0.875*length contourbouche) of contourbouche);
+ trace (point(0.45*length contourbouche) of contourbouche){dir-80}..(point(0.775*length contourbouche) of contourbouche);
+ );
+ RetiensBouche2=image(
+ path contourbouche,jointure,levreh,levreb;
+ contourbouche=(0,0){dir90}..(0.1u,0.35u){dir0}..(u,0.25u)..(1.5u,0.4u)..(1.9u,0.35u){dir-80}..(2u,0){dir-90}..(1.9u,-0.35u)..(1.5u,-0.4u)..(u,-0.25u)..(0.1u,-0.35u)..cycle;
+ jointure=(0,0){dir90}..(0.1u,0u){dir0}..(u,-0.1u)..(1.5u,0.05u)..(1.9u,0){dir-80}..(2u,0);
+ if Couleurs:
+ fill contourbouche withcolor white;
+ fi;
+ trace contourbouche;
+ trace jointure;
+ levreh=subpath(0,length contourbouche/2) of contourbouche;
+ levreb=subpath(length contourbouche/2,length contourbouche) of contourbouche;
+ pair tt[],ss[];
+ for k=1 upto 5:
+ tt[k]=point((k/6)*length jointure) of jointure;
+ ss[k]=point((1/8+k/7)*length jointure) of jointure;
+ trace tt[k]..(perpendiculaire((0,0),(2u,0),tt[k]) intersectionpoint levreh);
+ trace ss[k]..(perpendiculaire((0,0),(2u,0),ss[k]) intersectionpoint levreb);
+ endfor;
+ path carrieh[],carrieb[];
+ carrieh[4]=buildcycle(perpendiculaire((0,0),(2u,0),tt[4]),levreh,reverse(perpendiculaire((0,0),(2u,0),tt[5])),reverse(jointure));
+ fill carrieh4;
+ carrieh[2]=buildcycle(perpendiculaire((0,0),(2u,0),tt[1]),levreh,reverse(perpendiculaire((0,0),(2u,0),tt[2])),reverse(jointure));
+ fill carrieh2;
+ carrieb[2]=buildcycle(jointure,perpendiculaire((0,0),(2u,0),ss[3]),levreb,reverse(perpendiculaire((0,0),(2u,0),ss[2])));
+ fill carrieb2;
+ );
+ RetiensBouche3=image(
+ path contourbouche,jointure,levreh,levreb;
+ contourbouche=(0,0.75u){dir-60}..{dir0}(u,0.75u){dir0}..{dir60}(2u,0.75u){dir-110}..{dir180}(u,-0.15u){dir180}..{dir110}(0,0.75u)--cycle;
+ fill contourbouche;
+ levreh=subpath(0,2) of contourbouche;
+ levreb=subpath(2,length contourbouche) of contourbouche;
+ pair M[];
+ M1=point(0.1*length levreh) of levreh;
+ M2=point(0.15*length levreh) of levreh;
+ fill ((subpath(0.1*length levreh,0.15*length levreh) of levreh)--(iso(M1,M2)+(0,-0.1u))--cycle) withcolor white;
+ M3=point(0.25*length levreh) of levreh;
+ M4=point(0.325*length levreh) of levreh;
+ fill ((subpath(0.25*length levreh,0.325*length levreh) of levreh)--(iso(M3,M4)+(0,-0.2u))--cycle) withcolor white;
+ M5=point(0.45*length levreh) of levreh;
+ M6=point(0.55*length levreh) of levreh;
+ fill ((subpath(0.45*length levreh,0.55*length levreh) of levreh)--(iso(M5,M6)+(0,-0.35u))--cycle) withcolor white;
+ M7=point(0.675*length levreh) of levreh;
+ M8=point(0.75*length levreh) of levreh;
+ fill ((subpath(0.675*length levreh,0.75*length levreh) of levreh)--(iso(M7,M8)+(0,-0.2u))--cycle) withcolor white;
+ M10=point(0.875*length levreh) of levreh;
+ M11=point(0.925*length levreh) of levreh;
+ fill ((subpath(0.875*length levreh,0.925*length levreh) of levreh)--(iso(M10,M11)+(0,-0.1u))--cycle) withcolor white;
+%%%%%%%%%%%%%
+ M1:=point(0.1*length levreb) of levreb;
+ M2:=point(0.15*length levreb) of levreb;
+ fill ((subpath(0.1*length levreb,0.15*length levreb) of levreb)--(iso(M1,M2)+(0,0.15u))--cycle) withcolor white;
+ M3:=point(0.2*length levreb) of levreb;
+ M4:=point(0.3*length levreb) of levreb;
+ fill ((subpath(0.2*length levreb,0.3*length levreb) of levreb)--(iso(M3,M4)+(0,0.2u))--cycle) withcolor white;
+ M5:=point(0.35*length levreb) of levreb;
+ M6:=point(0.45*length levreb) of levreb;
+ fill ((subpath(0.35*length levreb,0.45*length levreb) of levreb)--(iso(M5,M6)+(0,0.2u))--cycle) withcolor white;
+ M7:=point(0.5*length levreb) of levreb;
+ M8:=point(0.55*length levreb) of levreb;
+ fill ((subpath(0.5*length levreb,0.55*length levreb) of levreb)--(iso(M7,M8)+(0,0.1u))--cycle) withcolor white;
+ trace contourbouche;
+ );
+ RetiensBouche4=image(
+ path contourbouche,jointure,levreh,levreb;
+ pair M[];
+ M0=(0,0);
+ M1=(2u,0.5u);
+ contourbouche=(0,0)--(2u,0.5u)--(1.25u,-0.2u)--cycle;
+ fill contourbouche;
+ trace (0,-0.2u)--(0,0.2u);
+ trace (2u,0.3u)--(2u,0.7u);
+ M2=6.5/10[M0,M1];
+ M3=8.5/10[M0,M1];
+ M4=(0.5*(6.5+8.5)/10)[M0,M1];
+ M5=2.9[M4,rotation(M3,M4,-90)];
+ trace contourbouche;
+ fill M2{dir-80}..{dir0}M5{dir60}..M3--cycle withcolor white;
+ trace M2{dir-80}..{dir0}M5{dir60}..M3--cycle;
+ trace M4--(7/10)[M4,M5];
+ );
+ RetiensBouche5=image(
+ path contourbouche,jointure,levreh,levreb;
+ contourbouche=(0,0.5u){dir60}..{dir0}(0.25u,0)..(0.6u,0.2u)..(1.2u,-0.2u)..{dir-10}(2u,0);
+ trace (-0.05u,0.55u)--(0.05u,0.45u);
+ trace (1.95u,-0.05u)--(2.05u,0.05u);
+ trace contourbouche;
+ );
+ $=RetiensBouche[nb];
+ $
+enddef;
+%%%%
+% Nez
+%%%%
+vardef Nez(expr nb)=
+ save $;
+ picture $;
+ picture RetiensNez[];
+ RetiensNez1=image(
+ trace (0,0.2u){dir-120}..{dir0}(0.25u,0);
+ trace (0.25u,0.1u){dir-90}..{dir60}(1.7u,0.2u);
+ trace (1.7u,0.2u){dir-110}..{dir100}(2u,0.2u);
+ );
+ RetiensNez2=image(
+ trace (0.1u,0.5u){dir-100}..{dir-10}(0,0){dir-10}..(u,0.2u)..(2u,0){dir0}..{dir100}(1.9u,0.5u);
+ );
+ RetiensNez3=image(
+ if Couleurs:
+ fill (0,0){dir90}..{dir-10}(u,0.25u){dir10}..{dir-90}(2u,0){dir-90}..{dir170}(u,-0.25u){dir-170}..{dir90}cycle withcolor white;
+ fi;
+ trace (0,0){dir90}..{dir-10}(u,0.25u){dir10}..{dir-90}(2u,0){dir-90}..{dir170}(u,-0.25u){dir-170}..{dir90}cycle;
+ fill (fullcircle xscaled 0.1u yscaled 0.2u) shifted(0.5u,0);
+ fill (fullcircle xscaled 0.1u yscaled 0.2u) shifted(1.5u,0);
+ );
+ RetiensNez4=image(
+ pair M[];
+ M0=(0,0);
+ M1=(0.5u,0);
+ M2=2[iso(M0,M1),rotation(M1,M0,60)];
+ fill M0{dir-10}..{dir10}M1..{dir120}M2{dir-120}..{dir-10}cycle;
+ );
+ RetiensNez5=image(
+ pair M[];
+ M0=(0,0);
+ M1=(0.5u,0);
+ M2=(1.5u,0);
+ M3=(2u,0);
+ path contournez;
+ contournez=M1{dir100}..{dir-100}M2{dir-160}..{dir160}cycle;
+ fill contournez withcolor white;
+ fill buildcycle(subpath(0,0.5*length contournez) of contournez,(point(0.15*length contournez) of contournez){dir0}..{dir-90}(u,-0.5u),contournez);
+ fill symetrie(buildcycle(subpath(0,0.5*length contournez) of contournez,(point(0.15*length contournez) of contournez){dir0}..{dir-90}(u,-0.5u),contournez),(u,0),(u,0.5));
+ trace contournez;
+ );
+ $=RetiensNez[nb];
+ $
+enddef;
+%%%%%
+%Oreilles
+%%%%%
+vardef Oreille(expr nb)=
+ save $;
+ picture $;
+ picture RetiensOreille[];
+ RetiensOreille1=image(
+ draw (0,0){dir150}..{dir60}(-0.2u,1.5u){dir-100}..(u,0.5u);
+ );
+ RetiensOreille2=image(
+ draw (0,0){dir180}..{dir-120}(-u,-0.25u){dir180}..{dir0}(-u,0.5u){dir-60}..{dir0}(u,0.25u);
+ draw (-u,-0.25u){dir120}..{dir60}(-u,0.5u);
+ );
+ RetiensOreille3=image(
+ draw (0,0)--(-u,0)--(-u,u){dir-90}..{dir90}(-0.5u,u)--(-0.5u,0.5u)--(u,0.5u);
+ );
+ RetiensOreille4=image(
+ path coinor;
+ coinor=(0,0){dir60}..{dir90}(-0.5u,1.5u){dir-60}..{dir0}(u,u);
+ fill (subpath(0.3*length coinor,0.7*length coinor) of coinor)--cycle;
+ trace coinor;
+ );
+ RetiensOreille5=image(
+ path coinor;
+ coinor=(0,0)--(-0.5u,1u)--(0,1.5u)--(-0.25u,u)--(u,0.5u);
+ trace coinor;
+ );
+ $=RetiensOreille[nb];
+ $
+enddef;
Property changes on: trunk/Master/texmf-dist/metapost/profcollege/PfCMonstre.mp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/metapost/profcollege/PfCMosaique.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCMosaique.mp 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCMosaique.mp 2025-08-27 20:13:06 UTC (rev 76163)
@@ -3,7 +3,7 @@
path Bc[];
picture MosaiqueUn[];
-for k=1 upto 8:
+%for k=1 upto 8:
A1=u*(0,0);
A3-A1=u*(1,0);
A2=iso(A1,A3);
@@ -13,7 +13,7 @@
A6=iso(A5,A7);
A8=iso(A7,A1);
O=iso(A1,A5);
-endfor;
+%endfor;
A9=A1;
@@ -224,7 +224,7 @@
path Bc[];
picture MosaiqueDeux[];
-for k=1 upto 8:
+%for k=1 upto 8:
A1=u*(0,0);
A3-A1=u*(1,0);
A2=iso(A1,A3);
@@ -234,7 +234,7 @@
A6=iso(A5,A7);
A8=iso(A7,A1);
O=iso(A1,A5);
-endfor;
+%endfor;
A9=A1;
@@ -444,3 +444,145 @@
endfor;
endfor;
endfor;
+
+%Troisieme ensemble de mosaique
+pair A[],O;
+path Bc[];
+picture MosaiqueTrois[];
+
+A1=u*(0,0);
+A3-A1=u*(1,0);
+A2=iso(A1,A3);
+A5=rotation(A1,A3,-90);
+A4=iso(A3,A5);
+A7-A5=A1-A3;
+A6=iso(A5,A7);
+A8=iso(A7,A1);
+O=iso(A1,A5);
+
+A9=A1;
+
+Bc[0]=polygone(A[1],A[2],A[8]);
+Bc[1]=polygone(A[8],A[2],O);
+Bc[2]=polygone(A[4],A[2],O);
+Bc[3]=polygone(A[3],A[2],A[4]);
+Bc[4]=polygone(A[5],A[4],A[6]);
+Bc[5]=polygone(A[4],A[6],O);
+Bc[6]=polygone(A[6],A[8],O);
+Bc[7]=polygone(A[6],A[7],A[8]);
+
+for p=0 upto 255:
+ depart:=p;
+ MosaiqueTrois[p]=image(%
+ for k=7 downto 0:
+ reste:=depart mod 2;
+ if reste=1:
+ remplis Bc[7-k];
+ fi;
+ depart:=depart div 2;
+ endfor;
+ drawoptions(withcolor gris);
+ trace polygone(A2,A4,A6,A8);
+ trace segment(A8,A4);
+ trace segment(A6,A2);
+ drawoptions();
+ trace polygone(A1,A3,A5,A7) withcolor 0.5white;
+ );
+endfor;
+
+vardef BinaireDecimalInv(expr nbbin)=
+ save $; numeric $,lg;
+ lg=length nbbin;
+ $=0;
+ for k=0 upto lg-1:
+ $:=$+scantokens(substring(k,k+1) of nbbin)*(2**k);
+ endfor;
+ $
+enddef;
+
+%Quatrieme ensemble de mosaïque : Type 1 en binaire
+vardef MosaiqueQuatre(expr p)=
+ save $; picture $;
+ pair A[],O;
+ path Bc[];
+ %
+ A1=u*(0,0);
+ A3-A1=u*(1,0);
+ A2=iso(A1,A3);
+ A5=rotation(A1,A3,-90);
+ A4=iso(A3,A5);
+ A7-A5=A1-A3;
+ A6=iso(A5,A7);
+ A8=iso(A7,A1);
+ O=iso(A1,A5);
+
+ A9=A1;
+ %
+ for k=1 upto 8:
+ Bc[k-1]=polygone(A[k],A[k+1],O);
+ endfor;
+ depart:=BinaireDecimalInv(p);
+ $=image(%
+ for k=7 downto 0:
+ reste:=depart mod 2;
+ if reste=1:
+ remplis Bc[7-k];
+ fi;
+ depart:=depart div 2;
+ endfor;
+ drawoptions(withcolor gris);
+ trace polygone(A2,A4,A6,A8);
+ trace segment(A8,A4);
+ trace segment(A6,A2);
+ drawoptions();
+ trace polygone(A1,A3,A5,A7) withcolor 0.5white;
+ );
+ $
+enddef;
+
+%Cinquième ensemble de mosaique : type 2 en binaire.
+vardef MosaiqueCinq(expr p)=
+ save $; picture $;
+ %
+ pair A[],O;
+ path Bc[];
+
+ A1=u*(0,0);
+ A3-A1=u*(1,0);
+ A2=iso(A1,A3);
+ A5=rotation(A1,A3,-90);
+ A4=iso(A3,A5);
+ A7-A5=A1-A3;
+ A6=iso(A5,A7);
+ A8=iso(A7,A1);
+ O=iso(A1,A5);
+
+ A9=A1;
+
+ Bc[0]=polygone(A[1],A[2],A[8]);
+ Bc[1]=polygone(A[8],A[2],O);
+ Bc[2]=polygone(A[4],A[2],O);
+ Bc[3]=polygone(A[3],A[2],A[4]);
+ Bc[4]=polygone(A[5],A[4],A[6]);
+ Bc[5]=polygone(A[4],A[6],O);
+ Bc[6]=polygone(A[6],A[8],O);
+ Bc[7]=polygone(A[6],A[7],A[8]);
+ %
+ depart:=BinaireDecimalInv(p);
+ $=image(%
+ for k=7 downto 0:
+ reste:=depart mod 2;
+ if reste=1:
+ remplis Bc[7-k];
+ fi;
+ depart:=depart div 2;
+ endfor;
+ drawoptions(withcolor gris);
+ trace polygone(A2,A4,A6,A8);
+ trace segment(A8,A4);
+ trace segment(A6,A2);
+ drawoptions();
+ trace polygone(A1,A3,A5,A7) withcolor 0.5white;
+ );
+ $
+enddef;
Modified: trunk/Master/texmf-dist/metapost/profcollege/PfCObjets.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCObjets.mp 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCObjets.mp 2025-08-27 20:13:06 UTC (rev 76163)
@@ -11,6 +11,7 @@
color OTFc[][][];%pour m\xE9moriser les diff\xE9rents sommets de chaque objet;
color OTFc[][].iso;
color coul[][];%pour memoriser la couleur de chacune des faces de l'objet;
+color coulfaceX,coulfaceY,coulfaceZ;%pour colorer les faces parall\xE8les aux plans avec la m\xEAme couleur.
color Outcolor[],Incolor[];%Permet de g\xE9rer la gestion des couleurs d'un objet lors d'un d\xE9placement de cet objet
boolean Vue[][];
@@ -710,6 +711,61 @@
endfor;
enddef;
+vardef DessineFusionTroisCouleurs=
+ save _fusion;
+ picture _fusion;
+ tapj:=0;
+ color Fc[][];color cou[];
+ for l=1 upto nbobj:
+ for k=0 upto apj[l]:
+ cpt[tapj]:=tapj;
+ Fc[tapj].nb:=OTFc[l][k].nb;
+ for p=1 upto Fc[tapj].nb:
+ Fc[tapj][p]:=OTFc[l][k][p];
+ endfor;
+ Fc[tapj].iso:=OTFc[l][k].iso;
+ if ProduitScalaire((1,0,0),Normal(Fc[tapj].iso,Fc[tapj][1],Fc[tapj][2]))<>0:
+ cou[tapj]:=coulfaceX;
+ else:
+ if ProduitScalaire((0,1,0),Normal(Fc[tapj].iso,Fc[tapj][1],Fc[tapj][2]))<>0:
+ cou[tapj]:=coulfaceY;
+ else:
+ cou[tapj]:=coulfaceZ;
+ fi;
+ fi;
+ ALT[tapj]:=ALT[l][k];
+ Vue[tapj]:=Vue[l][k];
+ if Ferme[l]:
+ if Vue[tapj]=false:
+ tapj:=tapj-1;
+ fi;
+ fi;
+ tapj:=tapj+1;
+ endfor;
+ endfor;
+ tapj:=tapj-1;
+ QS(0,tapj);
+ for k=0 upto tapj:
+ fill for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor cou[cpt[k]];
+ if traits:
+ draw for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withpen pencircle scaled0.25bp;
+ %add by cp 22/08/2011
+ else:
+ draw for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor cou[cpt[k]];
+% %fin add
+ fi;
+ endfor;
+enddef;
+
vardef Objettore[](expr Rn,rn)=
Outcolor.@:=outcolor;
Incolor.@:=incolor;
Added: trunk/Master/texmf-dist/metapost/profcollege/PfCPattern.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCPattern.mp (rev 0)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCPattern.mp 2025-08-27 20:13:06 UTC (rev 76163)
@@ -0,0 +1,242 @@
+input PfCSolid;
+
+ecartcube=5pt;
+
+vardef fakecube=
+ save $;picture $;
+ $=image(
+ fill polygone((0,0),u*(1,0),u*(1,1),u*(0,1)) withcolor CouleurFond;
+ fill polygone(u*(1,0),u*(1,1),u*(1,1)+u*sqrt(2)*0.25*(1,1),u*(1,0)+u*sqrt(2)*0.25*(1,1)) withcolor CouleurFond;
+ fill polygone(u*(0,1),u*(1,1),u*(1,1)+u*sqrt(2)*0.25*(1,1),u*(0,1)+u*sqrt(2)*0.25*(1,1)) withcolor CouleurFond;
+ trace polygone((0,0),u*(1,0),u*(1,1),u*(0,1));
+ trace polygone(u*(1,0),u*(1,1),u*(1,1)+u*sqrt(2)*0.25*(1,1),u*(1,0)+u*sqrt(2)*0.25*(1,1));
+ trace polygone(u*(0,1),u*(1,1),u*(1,1)+u*sqrt(2)*0.25*(1,1),u*(0,1)+u*sqrt(2)*0.25*(1,1));
+ );
+ larg:=(abs(lrcorner $ - llcorner $)+ecartcube);
+ haut:=(abs(urcorner $ - lrcorner $)+ecartcube);
+ $:=$ shifted(llcorner $-center $);
+ $
+enddef;
+
+vardef bouchon=
+ save $;picture $;
+ $=image(
+ path ccbase,ccbaseh;
+ ccbase=cercles(u*(0.5,0),0.5u) yscaled 0.25;
+ ccbaseh=ccbase shifted(u*(0,0.25));
+ fill (point(0) of ccbase)--(point(0) of ccbaseh)--(subpath(0,length ccbaseh/2) of ccbaseh)--(subpath(length ccbase/2,length ccbase) of ccbase)--cycle withcolor CouleurFond;
+ trace (point(length ccbaseh/2) of ccbaseh)--(subpath(length ccbase/2,length ccbase) of ccbase)--(point(0) of ccbaseh);
+ trace ccbaseh;
+ );
+ larg:=(abs(lrcorner $ - llcorner $)+ecartcube);
+ haut:=(abs(urcorner $ - lrcorner $)+ecartcube);
+ $:=$ shifted(llcorner $-center $);
+ $
+enddef;
+
+vardef cubeespace=
+ typerepre:="proj";
+ save $;picture $;
+ picture PourLarg;
+ intensite:=1.5;
+ Ferme[0]:=false;
+ outcolor:=LightSteelBlue;
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=true;
+ %
+ PourLarg=image(%
+ Initialisation(5,10,20,25);
+ Objetcube1("a=0.25");
+ AffichageObjet1;
+ );
+ larg:=(abs(lrcorner PourLarg - llcorner PourLarg)+2pt);
+ haut:=(abs(urcorner PourLarg - lrcorner PourLarg)+2pt);
+ $=PourLarg;
+ $
+enddef;
+
+vardef carre=
+ save $;picture $;
+ $=image(
+ fill ((unitsquare scaled u) shifted (-0.5u,-0.5u)) withcolor CouleurFond;
+ trace (unitsquare scaled u) shifted (-0.5u,-0.5u);
+ );
+ $
+enddef;
+
+vardef kappla=
+ save $;picture $;
+ $=image(
+ fill ((unitsquare xscaled u yscaled 0.25u) shifted(-0.5u,-0.125u)) withcolor CouleurFond;
+ trace (unitsquare xscaled u yscaled 0.25u) shifted(-0.5u,-0.125u);
+ );
+ $
+enddef;
+
+vardef rectangleh=
+ save $;picture $;
+ %haut:=0.5u;
+ $=image(
+ fill ((unitsquare xscaled u yscaled 0.5u) shifted(-0.5u,-0.25u)) withcolor CouleurFond;
+ trace (unitsquare xscaled u yscaled 0.5u) shifted(-0.5u,-0.25u);
+ );
+ $
+enddef;
+
+vardef rectanglev=
+ save $;picture $;
+ %larg:=0.5u;
+ $=image(
+ fill ((unitsquare xscaled 0.5u yscaled u) shifted(-0.25u,-0.5u)) withcolor CouleurFond;
+ trace (unitsquare xscaled 0.5u yscaled u) shifted(-0.25u,-0.5u);
+ );
+ $
+enddef;
+
+vardef carrecroix=
+ save $;picture $;
+ path CarreCroix;
+ CarreCroix=(unitsquare scaled u) shifted(-0.5u,-0.5u);
+ $=image(
+ fill CarreCroix withcolor CouleurFond;
+ trace CarreCroix;
+ trace 0.75[point(0) of CarreCroix,point(2) of CarreCroix]--0.75[point(2) of CarreCroix,point(0) of CarreCroix];
+ trace 0.75[point(1) of CarreCroix,point(3) of CarreCroix]--0.75[point(3) of CarreCroix,point(1) of CarreCroix];
+ );
+ $
+enddef;
+
+vardef carrearrondi=
+ save $;picture $;
+ path CarreArrondi,CarreArrondiA;
+ CarreArrondi=(unitsquare scaled u) shifted(-0.5u,-0.5u);
+ CarreArrondiA=0.1[point(0) of CarreArrondi,point(1) of CarreArrondi]--0.90[point(0) of CarreArrondi,point(1) of CarreArrondi]{dir0}..{dir90}(0.1[point(1) of CarreArrondi,point(2) of CarreArrondi])--0.90[point(1) of CarreArrondi,point(2) of CarreArrondi]{dir90}..{dir180}(0.1[point(2) of CarreArrondi,point(3) of CarreArrondi])--0.90[point(2) of CarreArrondi,point(3) of CarreArrondi]{dir180}..{dir990}(0.1[point(3) of CarreArrondi,point(0) of CarreArrondi])--0.90[point(3) of CarreArrondi,point(0) of CarreArrondi]{dir-90}..cycle;
+ $=image(%
+ fill CarreArrondiA withcolor CouleurFond;
+ trace CarreArrondiA;
+ );
+ $
+enddef;
+
+vardef disque=
+ save $;picture $;
+ $=image(
+ fill cercles((0,0),0.5u) withcolor CouleurFond;
+ trace cercles((0,0),0.5u);
+ );
+ $
+enddef;
+
+vardef diamant=
+ save $;picture $;
+ $=image(
+ %trace rotation(carre scaled(sqrt(2)/2),(0,0),45);
+ fill rotation((unitsquare scaled (u*sqrt(2)/2)) shifted ((0.5*sqrt(2))*(-0.5u,-0.5u)),(0,0),45) withcolor CouleurFond;
+ trace rotation((unitsquare scaled (u*sqrt(2)/2)) shifted ((0.5*sqrt(2))*(-0.5u,-0.5u)),(0,0),45);
+ );
+ $
+enddef;
+
+vardef pentagone=
+ save $; picture $;
+ path Pentagonecc,Pentagonecd;
+ Pentagonecc=cercles((0,0),0.5u);
+ Pentagonecd=pointarc(Pentagonecc,18) for t=1 upto 5:--pointarc(Pentagonecc,18+t*72) endfor--cycle;
+ $=image(
+ fill Pentagonecd withcolor CouleurFond;
+ trace Pentagonecd;
+ );
+ $
+enddef;
+
+vardef etoile=
+ save $; picture $;
+ path Etoilecc;
+ Etoilecc=cercles((0,0),0.5u);
+ pair Etoilept[];
+ for k=0 step 2 until 8:
+ Etoilept[k]=pointarc(Etoilecc,18+(k div 2)*72);
+ endfor;
+ Etoilept[1]=chemin(Etoilept[0],Etoilept[4]) intersectionpoint chemin(Etoilept[2],Etoilept[8]);
+ Etoilept[3]=chemin(Etoilept[0],Etoilept[4]) intersectionpoint chemin(Etoilept[2],Etoilept[6]);
+ Etoilept[5]=chemin(Etoilept[2],Etoilept[6]) intersectionpoint chemin(Etoilept[4],Etoilept[8]);
+ Etoilept[7]=chemin(Etoilept[0],Etoilept[6]) intersectionpoint chemin(Etoilept[4],Etoilept[8]);
+ Etoilept[9]=chemin(Etoilept[0],Etoilept[6]) intersectionpoint chemin(Etoilept[2],Etoilept[8]);
+ path EtoileFin;
+ EtoileFin=Etoilept[0] for k=1 upto 9:--Etoilept[k] endfor -- cycle;
+ $=image(
+ fill EtoileFin withcolor CouleurFond;
+ trace EtoileFin;
+ );
+ $
+enddef;
+
+vardef hexagone=
+ save $; picture $;
+ path Hexagonecc,Hexagonecd;
+ Hexagonecc=cercles((0,0),0.5u);
+ Hexagonecd=pointarc(Hexagonecc,30) for t=1 upto 6:--pointarc(Hexagonecc,30+t*60) endfor--cycle;
+ $=image(
+ fill Hexagonecd withcolor CouleurFond;
+ trace Hexagonecd;
+ );
+ $
+enddef;
+
+vardef hexagonea=
+ save $; picture $;
+ path Hexagonecc,Hexagonecd;
+ Hexagonecc=cercles((0,0),0.5u);
+ Hexagonecd=pointarc(Hexagonecc,-60) for t=1 upto 6:--pointarc(Hexagonecc,-60+t*60) endfor--cycle;
+ $=image(
+ fill Hexagonecd withcolor CouleurFond;
+ trace Hexagonecd;
+ );
+ $
+enddef;
+
+vardef demihexagonea=
+ save $; picture $;
+ path Hexagonecc,Hexagonecd;
+ Hexagonecc=cercles((0,0),0.5u);
+ Hexagonecd=pointarc(Hexagonecc,-60) for t=1 upto 3:--pointarc(Hexagonecc,-60-t*60) endfor--cycle;
+ $=image(
+ fill Hexagonecd withcolor CouleurFond;
+ trace Hexagonecd;
+ );
+ $
+enddef;
+
+vardef equilateral=
+ save $; picture $;
+ path Equilateralcc,Equilateralcd;
+ Equilateralcc=cercles((0,0),0.5u);
+ Equilateralcd=pointarc(Equilateralcc,-30) for t=1 upto 3:--pointarc(Equilateralcc,-30+t*120) endfor--cycle;
+ $=image(
+ fill Equilateralcd withcolor CouleurFond;
+ trace Equilateralcd;
+ );
+ $
+enddef;
+
+vardef boussole=
+ save $; picture $;
+ path Boussolecc,Boussolecd;
+ Boussolecc=cercles((0,0),0.5u);
+ Boussolecd=0.9[(0,0),pointarc(Boussolecc,0)] for t=1 upto 4:--0.33[(0,0),pointarc(Boussolecc,(t-1)*90+22.5)]--0.66[(0,0),pointarc(Boussolecc,(t-1)*90+45)]--0.33[(0,0),pointarc(Boussolecc,(t-1)*90+67.5)]--0.9[(0,0),pointarc(Boussolecc,t*90)] endfor--cycle;
+ $=image(
+ fill Boussolecd withcolor CouleurFond;
+ trace Boussolecd;
+ );
+ $
+enddef;
+
+vardef dot=
+ save $;
+ picture $;
+ $=image(fill fullcircle scaled 2mm withcolor CouleurFond; trace fullcircle scaled 2mm;);
+ $
+enddef;
+
+endinput;
Property changes on: trunk/Master/texmf-dist/metapost/profcollege/PfCPattern.mp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/metapost/profcollege/PfCPeople.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCPeople.mp (rev 0)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCPeople.mp 2025-08-27 20:13:06 UTC (rev 76163)
@@ -0,0 +1,229 @@
+picture skin[];
+
+nbhair=6;
+
+path hair[], shirt, undershirt, shirthigh,undershirthigh,rayure,laniere;
+
+hair1=pointarc(tete,150)..(pointarc(tete,150)+u*((0.4+uniformdeviate(0.2))*0.7,-0.05+uniformdeviate(0.1)))..pointarc(tete,40+uniformdeviate(20))..arccercle(pointarc(tete,60),pointarc(tete,150),center tete)--cycle;
+%2
+hair2=pointarc(tete,180){dir70}..{dir-70}(pointarc(tete,90)+u*(0,-0.5+uniformdeviate(0.15))){dir70}..{dir-70}pointarc(tete,0)..arccercle(pointarc(tete,0),pointarc(tete,180),center tete)--cycle;
+%3
+hair3=pointarc(tete,180-uniformdeviate(10)){dir(60+uniformdeviate(10))}..{dir(-60-uniformdeviate(10))}pointarc(tete,uniformdeviate(10))..arccercle(pointarc(tete,10),pointarc(tete,180),center tete)--cycle;
+%4
+hair4=pointarc(tete,180-uniformdeviate(10)){dir85}..(pointarc(tete,150)+u*(0.1,0))--(pointarc(tete,150)+u*(0.1+0.1*uniformdeviate(1),-0.1+0.1*uniformdeviate(1)))--(pointarc(tete,150)+u*(0.3+0.1*uniformdeviate(1),0.1*uniformdeviate(1)))--(pointarc(tete,150)+u*(0.5+0.1*uniformdeviate(1),-0.1+0.1*uniformdeviate(1)))--(pointarc(tete,150)+u*(0.7+0.1*uniformdeviate(1),0.1*uniformdeviate(1)))--(pointarc(tete,150)+u*(0.8+0.1*uniformdeviate(1),-0.1+0.1*uniformdeviate(1)))..{dir-90}pointarc(tete,uniformdeviate(10))..arccercle(pointarc(tete,10),pointarc(tete,170),center tete)--cycle;
+%
+hair5=pointarc(tete,180-uniformdeviate(10)){dir85}..{dir90}(pointarc(tete,85+uniformdeviate(10))+u*(0,-0.1-uniformdeviate(0.3))){dir-90}..{dir-90}pointarc(tete,uniformdeviate(10))..arccercle(pointarc(tete,10),pointarc(tete,170),center tete)--cycle;
+%
+hair6:=pointarc(tete,180-uniformdeviate(10)){dir85}..{dir0}(pointarc(tete,120)+u*(0,-0.2)){dir-10}..{dir10}(pointarc(tete,60)+u*(0,-0.2)){dir0}..{dir-85}arccercle(pointarc(tete,10),pointarc(tete,170),center tete)--cycle;
+%
+skin1=image(
+ fill corps withcolor ColCorps;
+trace corps;
+fill tete withcolor ColCorps;
+trace tete;
+if typehair<nbhair+1:
+fill hair[typehair] withcolor ColCheveu;
+trace hair[typehair];
+fi;
+shirthigh=pointarc(corps,55){dir-150}..{dir150}pointarc(corps,125);
+shirt=shirthigh..arccercle(pointarc(corps,125),pointarc(corps,55),center corps)--cycle;
+fill shirt withcolor ColShirt;
+trace shirt;
+);
+%%%%%%%%%%%%%%%%%%%%%
+skin2=image(
+ fill corps withcolor ColCorps;
+trace corps;
+fill tete withcolor ColCorps;
+trace tete;
+if typehair<nbhair+1:
+fill hair[typehair] withcolor ColCheveu;
+trace hair[typehair];
+fi;
+shirthigh:=pointarc(corps,55){dir-150}..{dir150}pointarc(corps,125);
+shirt:=shirthigh..arccercle(pointarc(corps,125),pointarc(corps,55),center corps)--cycle;
+fill shirt withcolor ColShirt;
+trace shirt;
+ undershirthigh:=shirthigh cutbefore chemin((point(0.25*length shirthigh) of shirthigh),(point(0.25*length shirthigh) of shirthigh)) cutafter chemin((point(0.75*length shirthigh) of shirthigh),(point(0.75*length shirthigh) of shirthigh));
+ undershirt:=(point(0.25*length shirthigh) of shirthigh){dir-90}..{dir-90}(center corps){dir90}..{dir90}(point(0.75*length shirthigh) of shirthigh)--reverse(undershirthigh)--cycle;
+ fill undershirt withcolor ColSShirt;
+ trace undershirt;
+);
+%%%%%%%%%%%%%%%%%%%%%%%
+skin3=image(
+ fill corps withcolor ColCorps;
+trace corps;
+fill tete withcolor ColCorps;
+trace tete;
+if typehair<nbhair+1:
+fill hair[typehair] withcolor ColCheveu;
+trace hair[typehair];
+fi;
+shirthigh:=pointarc(corps,55){dir-150}..{dir150}pointarc(corps,125);
+shirt:=shirthigh..arccercle(pointarc(corps,125),pointarc(corps,55),center corps)--cycle;
+fill shirt withcolor ColShirt;
+trace shirt;
+rayure=(shirt cutbefore ((center corps--pointarc(corps,150))) cutafter ((center corps--pointarc(corps,160)))){dir-30}..{dir30}pointarc(corps,20)--(shirt cutbefore ((center corps--pointarc(corps,30))) cutafter ((center corps--pointarc(corps,30)))){dir-150}..{dir150}pointarc(corps,150)--cycle;
+fill rayure withcolor ColSShirt;
+ trace rayure;
+);
+%%%%%%%%%%%%%%%%%%%%%%%
+pair lanierea,laniereb;
+skin4=image(
+ fill corps withcolor ColCorps;
+trace corps;
+shirthigh:=pointarc(corps,45){dir-150}..{dir150}pointarc(corps,135);
+shirt:=shirthigh..arccercle(pointarc(corps,135),pointarc(corps,45),center corps)--cycle;
+fill shirt withcolor ColShirt;
+trace shirt;
+rayure:=(shirt cutbefore ((center corps--pointarc(corps,135))) cutafter ((center corps--pointarc(corps,155)))){dir-30}..{dir30}pointarc(corps,25)--(shirt cutbefore ((center corps--pointarc(corps,25))) cutafter ((center corps--pointarc(corps,45)))){dir-150}..{dir150}pointarc(corps,135)--cycle;
+fill rayure withcolor ColSShirt;
+trace rayure;
+lanierea=pointarc(corps,110);
+laniereb=pointarc(corps,125);
+laniere=arccercle(lanierea,laniereb,center corps)--(laniereb+u*(0,-0.75))--(laniereb+u*(0.1,-0.85))--(laniereb+u*(0.2,-0.75))--lanierea--cycle;
+fill laniere withcolor 0.15[ColShirt,black];
+trace laniere;
+fill cercles(laniereb+u*(0.1,-0.75),0.025u) withcolor ColBouton;
+fill symetrie(laniere,center corps,center tete) withcolor 0.15[ColShirt,black];
+trace symetrie(laniere,center corps,center tete);
+fill symetrie(cercles(laniereb+u*(0.1,-0.75),0.025u),center corps,center tete) withcolor ColBouton;
+fill tete withcolor ColCorps;
+trace tete;
+if typehair<nbhair+1:
+fill hair[typehair] withcolor ColCheveu;
+trace hair[typehair];
+fi;
+);
+%%%%%%%%%%%%%%%%%%%%%%%
+skin5=image(
+ fill corps withcolor ColCorps;
+trace corps;
+shirthigh:=pointarc(corps,75){dir-150}..{dir150}pointarc(corps,105);
+shirt:=shirthigh..arccercle(pointarc(corps,105),pointarc(corps,75),center corps)--cycle;
+fill shirt withcolor ColShirt;
+trace shirt;
+path fermeture;
+fermeture=(point(0.5*length shirthigh) of shirthigh)--center corps;
+trace fermeture;
+for k=1 step 2 until 9:
+ fill cercles((point(0.1*k*length fermeture) of fermeture) shifted(u*(0.05,0)),0.025u) withcolor ColBouton;
+endfor;
+fill tete withcolor ColCorps;
+trace tete;
+if typehair<nbhair+1:
+fill hair[typehair] withcolor ColCheveu;
+trace hair[typehair];
+fi;
+);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+skin6=image(
+ fill corps withcolor ColCorps;
+trace corps;
+shirthigh:=pointarc(corps,75){dir-150}..{dir150}pointarc(corps,105);
+shirt:=shirthigh..arccercle(pointarc(corps,105),pointarc(corps,75),center corps)--cycle;
+fill shirt withcolor ColShirt;
+trace shirt;
+path doublure;
+doublure=arccercle(pointarc(corps,110),pointarc(corps,120),center corps)--(pointarc(corps,120)+u*(-0.1,-0.2))--(pointarc(corps,120)+u*(0.05,-0.25))--(pointarc(corps,120)+u*(0,-0.3))--(point(6) of corps){dir90}..{dir90}cycle;
+fill symetrie((point(6) of corps){dir90}..{dir90}pointarc(corps,110),center corps,center tete)--arccercle(pointarc(corps,70),pointarc(corps,110),center corps)--reverse((point(6) of corps){dir90}..{dir90}pointarc(corps,110))--cycle withcolor ColSShirt;
+trace doublure;
+trace symetrie(doublure,center corps,center tete);
+fill tete withcolor ColCorps;
+trace tete;
+if typehair<nbhair+1:
+fill hair[typehair] withcolor ColCheveu;
+ trace hair[typehair];
+ fi;
+ );
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+skin7=image(
+ fill corps withcolor ColCorps;
+trace corps;
+shirthigh:=pointarc(corps,75){dir-150}..{dir150}pointarc(corps,105);
+shirt:=shirthigh..arccercle(pointarc(corps,105),pointarc(corps,75),center corps)--cycle;
+fill shirt withcolor ColShirt;
+ trace shirt;
+ fill (center corps+u*(0,0.5))--arccercle(pointarc(corps,70),pointarc(corps,110),center corps)--cycle withcolor ColCorps;
+path col;
+col=arccercle(pointarc(corps,110),pointarc(corps,120),center corps)--(pointarc(corps,120)+u*(-0.1,-0.2))--(pointarc(corps,120)+u*(-0.15,-0.25))--(pointarc(corps,120)+u*(0.15,-0.2))--(center corps+u*(0,0.5))--cycle;
+trace col;
+trace symetrie(col,center corps,center tete);
+fill tete withcolor ColCorps;
+trace tete;
+if typehair<nbhair+1:
+fill hair[typehair] withcolor ColCheveu;
+ trace hair[typehair];
+ fi;
+ );
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+skin8=image(
+ fill corps withcolor ColCorps;
+ trace corps;
+ shirthigh:=pointarc(corps,75){dir-150}..{dir150}pointarc(corps,105);
+ shirt:=arccercle(pointarc(corps,120),pointarc(corps,60),center corps)--reverse((center corps+u*(0,-0.15)){dir85}..{dir90}pointarc(corps,60))--reverse(pointarc(corps,120){dir-90}..{dir-85}(center corps+u*(0,-0.15)))--cycle;
+ path col;
+ col=pointarc(corps,120){dir-90}..{dir-85}(center corps+u*(0,-0.15)){dir85}..{dir90}pointarc(corps,60)--cycle;
+ fill col withcolor ColSShirt;
+ trace col;
+ path noeud,cravate;
+ noeud=pointarc(tete,265)--(pointarc(tete,265)+u*(-0.02,-0.1))--(pointarc(tete,275)+u*(0.02,-0.1))--pointarc(tete,275)--cycle;
+ fill noeud withcolor ColCravate;
+ cravate=(pointarc(tete,265)+u*(-0.02,-0.1))--(pointarc(tete,265)+u*(-0.1,-0.15))--(pointarc(tete,265)+u*(-0.05,-1))--(pointarc(tete,275)+u*(0.05,-1))--(pointarc(tete,275)+u*(0.1,-0.15))--(pointarc(tete,275)+u*(0.02,-0.1))--cycle;
+ fill cravate withcolor ColCravate;
+ trace noeud;
+ trace cravate;
+ fill shirt withcolor ColShirt;
+ trace shirt;
+ fill tete withcolor ColCorps;
+ trace tete;
+ if typehair<nbhair+1:
+ fill hair[typehair] withcolor ColCheveu;
+ trace hair[typehair];
+ fi;
+ );
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+skin9=image(
+ fill tete withcolor ColCorps;
+ trace arccercle(pointarc(tete,330),pointarc(tete,210),center tete);
+ path menton;
+ menton=arccercle(pointarc(tete,210),pointarc(tete,330),center tete){dir-170}..{dir170}cycle;
+ fill corps withcolor ColShirt;
+ fill menton withcolor ColShirt;
+ trace corps cutafter arccercle(pointarc(tete,270),pointarc(tete,0),center tete);
+ trace corps cutbefore arccercle(pointarc(tete,180),pointarc(tete,270),center tete);
+ trace menton cutafter arccercle(pointarc(corps,110),pointarc(corps,180),center corps);
+ trace menton cutbefore arccercle(pointarc(corps,0),pointarc(corps,70),center corps);
+ trace ((center tete--center Etiquette) cutbefore (pointarc(tete,330){dir-170}..{dir170}pointarc(tete,210)) cutafter Etiquette) withpen pensquare scaled 1.5;
+ trace ((center tete--center Etiquette) cutbefore (pointarc(tete,330){dir-170}..{dir170}pointarc(tete,210)) cutafter Etiquette) withpen pensquare scaled 1.05 withcolor white;
+ path bonnet;
+ bonnet=pointarc(tete,10)--(xpart(pointarc(tete,10)),ypart(pointarc(tete,30)))--pointarc(tete,30)--arccercle(pointarc(tete,30),pointarc(tete,150),center tete)--(xpart(pointarc(tete,170)),ypart(pointarc(tete,150)))--pointarc(tete,170)--cycle;
+ fill bonnet withcolor 0.5[white,ColBonnet];
+ trace (xpart(pointarc(tete,10)),ypart(pointarc(tete,30)))--(xpart(pointarc(tete,170)),ypart(pointarc(tete,150)));
+ trace bonnet;
+);
+%%%%%%%%%%%%%%%%%%%%%%%
+skin10=image(
+ fill corps withcolor ColCorps;
+ trace corps;
+ shirthigh:=pointarc(corps,75){dir-150}..{dir150}pointarc(corps,105);
+ shirt:=shirthigh..arccercle(pointarc(corps,105),pointarc(corps,75),center corps)--cycle;
+ fill shirt withcolor ColShirt;
+ trace shirt;
+ path fermeture;
+ fermeture=pointarc(corps,120)--(xpart(pointarc(corps,120)),ypart(center corps));
+ trace fermeture;
+ for k=1 step 2 until 9:
+ fill cercles((point(0.1*k*length fermeture) of fermeture) shifted(u*(0.05,0)),0.025u) withcolor ColBouton;
+ endfor;
+ path poche;
+ poche=(center corps+u*(0.25,0.2))..(center corps+u*(0.45,0.2)){dir60}..(center corps+u*(0.5,0.45))--(center corps+u*(0.2,0.45))..{dir-60}cycle;
+ trace poche;
+ trace (center corps+u*(0.5,0.425))--(center corps+u*(0.5,0.425));
+fill tete withcolor ColCorps;
+trace tete;
+if typehair<nbhair+1:
+fill hair[typehair] withcolor ColCheveu;
+trace hair[typehair];
+fi;
+);
Property changes on: trunk/Master/texmf-dist/metapost/profcollege/PfCPeople.mp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/metapost/profcollege/PfCScrabble.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCScrabble.mp (rev 0)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCScrabble.mp 2025-08-27 20:13:06 UTC (rev 76163)
@@ -0,0 +1,343 @@
+primarydef p ! k=((100-k)/100)[p,white] enddef;
+
+def Place expr o =
+ if path o: draw o else: draw o fi
+enddef;
+
+string AlphabetComplet;
+AlphabetComplet="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzàéèùç!?:()[],;.+-=*/ 0123456789";
+
+n:=0;
+
+for p_=1,3,3,2,1,4,2,4,1,8,10,1,1,1,1,3,8,1,1,1,1,4,10,10,10,10,1,3,3,2,1,4,2,4,1,8,10,1,1,1,1,3,8,1,1,1,1,4,10,10,10,10,1,1,1,1,3:
+ Points[n]=p_;
+ n:=n+1;
+endfor;
+
+color CouleurJeton;
+CouleurJeton=Yellow!40;
+
+Gap=0;
+
+boolean NonNumerote;
+NonNumerote=false;
+
+path JetonSC;
+JetonSC=((0.05[point(0) of unitsquare,point(1) of unitsquare])
+ --(0.95[point(0) of unitsquare,point(1) of unitsquare]){dir0}..{dir90}(0.05[point(1) of unitsquare,point(2) of unitsquare])
+ --(0.95[point(1) of unitsquare,point(2) of unitsquare]){dir90}..{dir180}(0.05[point(2) of unitsquare,point(3) of unitsquare])
+ --(0.95[point(2) of unitsquare,point(3) of unitsquare]){dir180}..{dir-90}(0.05[point(3) of unitsquare,point(4) of unitsquare])
+ --(0.95[point(3) of unitsquare,point(4) of unitsquare]){dir-90}..{dir0}cycle) scaled u;
+
+picture BaseDeformation,BaseDeformationa;
+BaseDeformation=image(label(TEX("M"),(0,0)));
+BaseDeformationa=image(label(TEX("\footnotesize 8"),(0,0)));
+coefmise=0.6*u*sqrt(2)/abs(urcorner BaseDeformation-llcorner BaseDeformation);
+coefmisea=0.15*u*sqrt(2)/abs(urcorner BaseDeformationa-llcorner BaseDeformationa);
+
+vardef DessineJeton(expr lettre,position)=
+ save $;
+ picture $;
+ picture ALettre,ANombre;
+ if position<57:
+ ALettre=image(
+ if lettre="à":
+ label(TEX("\sffamily\bfseries A"),(0,0));
+ elseif lettre="é":
+ label(TEX("\sffamily\bfseries E"),(0,0));
+ elseif lettre="è":
+ label(TEX("\sffamily\bfseries E"),(0,0));
+ elseif lettre="ù":
+ label(TEX("\sffamily\bfseries U"),(0,0));
+ elseif lettre="ç":
+ label(TEX("\sffamily\bfseries C"),(0,0));
+ else:
+ label(TEX("\sffamily\bfseries \MakeUppercase{"&lettre&"}"),(0,0));
+ fi;
+ );
+ ANombre=image(
+ label(TEX("\sffamily\bfseries\scriptsize "&decimal(Points[position])),(0,0));
+ );
+ elseif position<82:
+ ALettre=image(
+ if lettre="*":
+ label(TEX("\sffamily\bfseries $\times$"),(0,0));
+ elseif lettre="+":
+ label(TEX("\sffamily\bfseries$+$"),(0,0));
+ elseif lettre="-":
+ label(TEX("\sffamily\bfseries$-$"),(0,0));
+ elseif lettre="=":
+ label(TEX("\sffamily\bfseries$=$"),(0,0));
+ else:
+ label(TEX("\sffamily\bfseries "&lettre),(0,0));
+ fi;
+ );
+ fi;
+ $=image(
+ fill JetonSC withcolor if print:0.8white else:CouleurJeton fi;
+ trace JetonSC;
+ if position<57:
+ trace (ALettre scaled (coefmise)) shifted center JetonSC;
+ if NonNumerote=false:trace (ANombre scaled (coefmisea)) shifted (lrcorner JetonSC+u*(-0.15,0.15)-center ANombre) fi;
+ elseif position<82:
+ trace (ALettre scaled (coefmise)) shifted center JetonSC;
+ fi;
+ );
+ $
+enddef;
+
+vardef DessineJetonRapide(expr position)=
+ save $;
+ picture $;
+ picture ALettre;
+ ALettre=image(%
+ label(TEX("\sffamily\bfseries "&substring(position,position+1) of AlphabetComplet),(0,0));
+ );
+ $=image(
+ fill JetonSC withcolor if print:0.8white else:CouleurJeton fi;
+ trace JetonSC;
+ trace (ALettre scaled (coefmise)) shifted center JetonSC;
+ );
+ $
+enddef;
+
+vardef Scrabble(expr mot)=
+ save $;
+ picture $;
+ string Lettre;
+ boolean Trouve;
+ Trouve=false;
+ $=image(
+ longmot:=mpliblength mot;
+ for k=0 upto longmot-1:
+ Lettre:=mplibsubstring(k,k+1) of mot;
+ pos:=-1;
+ forever: exitif Trouve;
+ pos:=pos+1;
+ if Lettre=mplibsubstring(pos,pos+1) of AlphabetComplet:
+ Trouve:=true;
+ fi;
+ endfor;
+ if pos=81:
+ Trouve:=true;
+ else:
+ trace DessineJeton(Lettre,pos) shifted(k*(u*(1+Gap),0));
+ Trouve:=false;
+ fi;
+ endfor;
+ );
+ $
+enddef;
+
+vardef Scrabbleh(expr mot,casea,caseb)=
+ save $;
+ picture $;
+ string Lettre;
+ boolean Trouve;
+
+ Trouve=false;
+ $=image(
+ longmot:=length mot;
+ if Restreint:
+ Casea:=casea-Ligne;
+ Caseb:=caseb-Colonne;
+ else:
+ Casea:=casea;
+ Caseb:=caseb;
+ fi;
+ for k=0 upto longmot-1:
+ Lettre:=substring(k,k+1) of mot;
+ pos:=-1;
+ forever: exitif Trouve;
+ pos:=pos+1;
+ if Lettre=substring(pos,pos+1) of AlphabetComplet:
+ Trouve:=true;
+ fi;
+ endfor;
+ trace DessineJeton(Lettre,pos) shifted(k*(u*(1+Gap),0)+(center Case[Casea+Ligne][Caseb+Colonne]-u*(0.5,0.5)));
+ Trouve:=false;
+ endfor;
+ );
+ $
+enddef;
+
+vardef Scrabblev(expr mot,casea,caseb)=
+ save $;
+ picture $;
+ string Lettre;
+ boolean Trouve;
+ Trouve=false;
+ $=image(
+ longmot:=length mot;
+ if Restreint:
+ Casea:=casea-Ligne;
+ Caseb:=caseb-Colonne;
+ else:
+ Casea:=casea;
+ Caseb:=caseb;
+ fi;
+ for k=0 upto longmot-1:
+ Lettre:=substring(k,k+1) of mot;
+ pos:=-1;
+ forever: exitif Trouve;
+ pos:=pos+1;
+ if Lettre=substring(pos,pos+1) of AlphabetComplet:
+ Trouve:=true;
+ fi;
+ endfor;
+ trace DessineJeton(Lettre,pos) shifted(k*(0,-u*(1+Gap))+(center Case[Casea+Ligne][Caseb+Colonne]-u*(0.5,0.5)));
+ Trouve:=false;
+ endfor;
+ );
+ $
+enddef;
+
+vardef Melange(expr total)=
+ numeric a[],b[];
+ for k=1 upto total:
+ a[k]=k;
+ endfor;
+ for k=total downto 1:
+ ll:=ceiling(uniformdeviate(k));
+ b[total-k+1]=a[ll];
+ for p=ll+1 upto k:
+ a[p-1]:=a[p];
+ endfor;
+ endfor;
+enddef;
+
+vardef Tirage(expr mot)=
+ save $;
+ picture $;
+ string Lettre;
+ boolean Trouve;
+ Trouve=false;
+ $=image(
+ longmot:=length mot;
+ Melange(longmot);
+ for k=0 upto longmot-1:
+ Lettre:=substring(b[k+1]-1,b[k+1]) of mot;
+ pos:=-1;
+ forever: exitif Trouve;
+ pos:=pos+1;
+ if Lettre=substring(pos,pos+1) of AlphabetComplet:
+ Trouve:=true;
+ fi;
+ endfor;
+ trace DessineJeton(Lettre,pos) shifted(k*(u*(1+Gap),0));
+ Trouve:=false;
+ endfor;
+ );
+ $
+enddef;
+
+path BaseCase,BaseCaseL;
+BaseCase=unitsquare scaled u;
+BaseCaseL=unitsquare scaled 0.9u;
+
+color CouleurMarque[];
+CouleurMarque[6]=red!40;
+CouleurMarque[4]=Pink!40;
+CouleurMarque[3]=blue!40;
+CouleurMarque[2]=LightSteelBlue!40;
+CouleurMarque[0]=LightGreen;
+
+vardef CaseSc(expr aa)=
+ save $;
+ picture $;
+ $=image(
+ fill BaseCase shifted (aa-(center BaseCase)) withcolor if print:0.95white else: LightGreen fi;
+ trace BaseCase shifted (aa-(center BaseCase)) withcolor if print:black else: Green!50 fi;
+ );
+ $
+enddef;
+
+picture TexteScore[];
+TexteScore[6]=image(label(TEX("\begin{tabular}{c}Mot\\Triple\end{tabular}"),(0,0)););
+TexteScore[4]=image(label(TEX("\begin{tabular}{c}Mot\\Double\end{tabular}"),(0,0)););
+TexteScore[3]=image(label(TEX("\begin{tabular}{c}Lettre\\Triple\end{tabular}"),(0,0)););
+TexteScore[2]=image(label(TEX("\begin{tabular}{c}Lettre\\Double\end{tabular}"),(0,0)););
+
+vardef MarqueSc(expr bb,aa)=
+ save $;
+ picture $;
+ $=image(
+ fill rotation(BaseCaseL,center BaseCaseL,45) shifted (aa-(center BaseCaseL)) withcolor if print:0.8white else: CouleurMarque[bb] fi;
+ trace rotation(BaseCaseL,center BaseCaseL,45) shifted (aa-(center BaseCaseL)) ;
+ fill BaseCase shifted (aa-(center BaseCase)) withcolor if print:(1-bb/16)*white else:CouleurMarque[bb] fi;
+ trace BaseCase shifted (aa-(center BaseCase));
+ if bb>0:
+ trace (TexteScore[bb] scaled (0.3coefmise)) shifted aa;
+ fi;
+ );
+ $
+enddef;
+
+vardef Grille(text t)=
+ save $;
+ picture $;
+ picture Case[][],Marque[][];
+ $=image(
+ NumCase:=0;
+ for p_=t:
+ Case[1+(NumCase div 8)][1+(NumCase mod 8)]:=CaseSc((u*(NumCase mod 8),-u*(NumCase div 8)));
+ trace Case[1+(NumCase div 8)][1+(NumCase mod 8)];
+ NumCase:=NumCase+1;
+ endfor;
+ NumCase:=0;
+ for p_=t:
+ if p_>0:
+ Marque[1+(NumCase div 8)][1+(NumCase mod 8)]:=MarqueSc(p_,(u*(NumCase mod 8),-u*(NumCase div 8)));
+ trace Marque[1+(NumCase div 8)][1+(NumCase mod 8)];
+ else:
+ Marque[1+(NumCase div 8)][1+(NumCase mod 8)]:=nullpicture;
+ fi;
+ NumCase:=NumCase+1;
+ endfor;
+ );
+ $
+enddef;
+
+vardef GrilleCompleteMP(text t)=
+ save $;
+ picture $;
+ picture Case[][],Marque[][];
+ $=image(
+ NumCase:=0;
+ for p_=t:
+ Case[1+(NumCase div 15)][1+(NumCase mod 15)]:=CaseSc((u*(NumCase mod 15),-u*(NumCase div 15)));
+ trace Case[1+(NumCase div 15)][1+(NumCase mod 15)];
+ NumCase:=NumCase+1;
+ endfor;
+ NumCase:=0;
+ for p_=t:
+ if p_>0:
+ Marque[1+(NumCase div 15)][1+(NumCase mod 15)]:=MarqueSc(p_,(u*(NumCase mod 15),-u*(NumCase div 15)));
+ trace Marque[1+(NumCase div 15)][1+(NumCase mod 15)];
+ else:
+ Marque[1+(NumCase div 15)][1+(NumCase mod 15)]:=nullpicture;
+ fi;
+ NumCase:=NumCase+1;
+ endfor;
+ );
+ $
+enddef;
+
+picture GrilleComplete;
+GrilleComplete=GrilleCompleteMP(%
+ 6,0,0,2,0,0,0,6,0,0,0,2,0,0,6,%
+ 0,4,0,0,0,3,0,0,0,3,0,0,0,4,0,%
+ 0,0,4,0,0,0,2,0,2,0,0,0,4,0,0,%
+ 2,0,0,4,0,0,0,2,0,0,0,4,0,0,2,%
+ 0,0,0,0,4,0,0,0,0,0,4,0,0,0,0,%
+ 0,3,0,0,0,3,0,0,0,3,0,0,0,3,0,%
+ 0,0,2,0,0,0,2,0,2,0,0,0,2,0,0,%
+ 6,0,0,2,0,0,0,4,0,0,0,2,0,0,6,
+ 0,0,2,0,0,0,2,0,2,0,0,0,2,0,0,%
+ 0,3,0,0,0,3,0,0,0,3,0,0,0,3,0,%
+ 0,0,0,0,4,0,0,0,0,0,4,0,0,0,0,%
+ 2,0,0,4,0,0,0,2,0,0,0,4,0,0,2,%
+ 0,0,4,0,0,0,2,0,2,0,0,0,4,0,0,%
+ 0,4,0,0,0,3,0,0,0,3,0,0,0,4,0,%
+ 6,0,0,2,0,0,0,6,0,0,0,2,0,0,6%
+ );
Property changes on: trunk/Master/texmf-dist/metapost/profcollege/PfCScrabble.mp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/metapost/profcollege/PfCSolid.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCSolid.mp 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCSolid.mp 2025-08-27 20:13:06 UTC (rev 76163)
@@ -103,34 +103,34 @@
lum:=1;
%Coordonn\xE9es dans le rep\xE8re Oeil
-vardef GCoord(expr NN)=
- (-Xpart(NN)*Aux1+Ypart(NN)*Aux3,-Xpart(NN)*Aux5-Ypart(NN)*Aux6+Zpart(NN)*Aux4,-Xpart(NN)*Aux7-Ypart(NN)*Aux8-Zpart(NN)*Aux2+Rho)
+vardef GCoord(expr N)=
+ (-Xpart(N)*Aux1+Ypart(N)*Aux3,-Xpart(N)*Aux5-Ypart(N)*Aux6+Zpart(N)*Aux4,-Xpart(N)*Aux7-Ypart(N)*Aux8-Zpart(N)*Aux2+Rho)
enddef;
-vardef GCoordcabinet(expr NN)=
- (-(Xpart(NN)*sind(30)*0.5)*Aux1+Ypart(NN)*cosd(30)*Aux3,-(Xpart(NN)*cosd(30)*0.5)*Aux5-Ypart(NN)*Aux6+Zpart(NN)*Aux4,-Xpart(NN)*Aux7-Ypart(NN)*Aux8-Zpart(NN)*Aux2+Rho)
+vardef GCoordcabinet(expr N)=
+ (-(Xpart(N)*sind(30)*0.5)*Aux1+Ypart(N)*cosd(30)*Aux3,-(Xpart(N)*cosd(30)*0.5)*Aux5-Ypart(N)*Aux6+Zpart(N)*Aux4,-Xpart(N)*Aux7-Ypart(N)*Aux8-Zpart(N)*Aux2+Rho)
enddef;
unit:=1;%pour les mises \xE0 l'\xE9chelle :) Merci pst-solides3d
-vardef Projette(expr MM)=
+vardef Projette(expr M)=
if typerepre="proj":
- ((Xpart(GCoord(MM)),Ypart(GCoord(MM)))/Zpart(GCoord(MM)))*DE*10%
+ ((Xpart(GCoord(M)),Ypart(GCoord(M)))/Zpart(GCoord(M)))*DE*10%
elseif typerepre="persp":
- (Xpart(GCoord(MM)),Ypart(GCoord(MM)))*unit*DE
+ (Xpart(GCoord(M)),Ypart(GCoord(M)))*unit*DE
elseif typerepre="cabinet":
-% (0.5*cosd(30)*Xpart(GCoord(MM)),0.75*sind(30)*Ypart(GCoord(MM)))*unit*DE
-% (Xpart(MM)+0.5*cosd(30)*Zpart(MM),Ypart(MM)+0.5*sind(30)*Zpart(MM))*20
-% (Xpart(MM)+0.5*cosd(30)*Ypart(MM),Zpart(MM)+0.5*sind(30)*Ypart(MM))*20
-% (Ypart(MM)+0.5*cosd(30)*Xpart(MM),Zpart(MM)+0.5*sind(30)*Xpart(MM))*20%Good avec Theta=-20/Phi=-10
- %(Ypart(GCoord(MM))+0.5*cosd(-30)*Xpart(GCoord(MM)),Zpart(GCoord(MM))+0.5*sind(-30)*Xpart(GCoord(MM)))*20%Good avec Theta=-20/Phi=-10
-% (Xpart(GCoord(MM))*cosd(90-30),Ypart(GCoord(MM))*sind(90-30)*0.5)*DE%\xE0 garder peut-\xEAtre ?
-% (Xpart(GCoordcabinet(MM)),Ypart(GCoordcabinet(MM)))*DE%<-last good :)
- ((Xpart(GCoordcabinet(MM)),Ypart(GCoordcabinet(MM)))/Zpart(GCoordcabinet(MM)))*DE
- %(Zpart(GCoord(MM))+0.5*cosd(-30)*Ypart(GCoord(MM)),Xpart(GCoord(MM))+0.5*sind(-30)*Ypart(GCoord(MM)))*20
-% (0.5*cosd(45)*Xpart(GCoord(MM)),0.5*sind(45)*Ypart(GCoord(MM)))*unit*DE
-% (Xpart(GCoord(MM)),Ypart(GCoord(MM)))*unit*DE
- %(Xpart(GCoord(MM)),Ypart(GCoord(MM)))*10
+% (0.5*cosd(30)*Xpart(GCoord(M)),0.75*sind(30)*Ypart(GCoord(M)))*unit*DE
+% (Xpart(M)+0.5*cosd(30)*Zpart(M),Ypart(M)+0.5*sind(30)*Zpart(M))*20
+% (Xpart(M)+0.5*cosd(30)*Ypart(M),Zpart(M)+0.5*sind(30)*Ypart(M))*20
+% (Ypart(M)+0.5*cosd(30)*Xpart(M),Zpart(M)+0.5*sind(30)*Xpart(M))*20%Good avec Theta=-20/Phi=-10
+ %(Ypart(GCoord(M))+0.5*cosd(-30)*Xpart(GCoord(M)),Zpart(GCoord(M))+0.5*sind(-30)*Xpart(GCoord(M)))*20%Good avec Theta=-20/Phi=-10
+% (Xpart(GCoord(M))*cosd(90-30),Ypart(GCoord(M))*sind(90-30)*0.5)*DE%\xE0 garder peut-\xEAtre ?
+% (Xpart(GCoordcabinet(M)),Ypart(GCoordcabinet(M)))*DE%<-last good :)
+ ((Xpart(GCoordcabinet(M)),Ypart(GCoordcabinet(M)))/Zpart(GCoordcabinet(M)))*DE
+ %(Zpart(GCoord(M))+0.5*cosd(-30)*Ypart(GCoord(M)),Xpart(GCoord(M))+0.5*sind(-30)*Ypart(GCoord(M)))*20
+% (0.5*cosd(45)*Xpart(GCoord(M)),0.5*sind(45)*Ypart(GCoord(M)))*unit*DE
+% (Xpart(GCoord(M)),Ypart(GCoord(M)))*unit*DE
+ %(Xpart(GCoord(M)),Ypart(GCoord(M)))*10
fi
enddef;
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCAireSimple.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCAireSimple.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCAireSimple.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -31,19 +31,19 @@
for l=1 upto LargQuad:
if Impossible[k][l]=true:
if Impossible[k-1][l]=false:
- draw subpath(0,1) of (BriqueBase shifted (PasQuad*(l-1,k-1))) withpen pencircle scaled 1.25;
+ draw subpath(0,1) of (BriqueBase shifted (PasQuad*(l-1,k-1))) withpen pencircle scaled 2;
peri:=peri+1;
fi;
if Impossible[k][l-1]=false:
- draw subpath(3,4) of (BriqueBase shifted (PasQuad*(l-1,k-1))) withpen pencircle scaled 1.25;
+ draw subpath(3,4) of (BriqueBase shifted (PasQuad*(l-1,k-1))) withpen pencircle scaled 2;
peri:=peri+1;
fi;
if Impossible[k+1][l]=false:
- draw subpath(2,3) of (BriqueBase shifted (PasQuad*(l-1,k-1))) withpen pencircle scaled 1.25;
+ draw subpath(2,3) of (BriqueBase shifted (PasQuad*(l-1,k-1))) withpen pencircle scaled 2;
peri:=peri+1;
fi;
if Impossible[k][l+1]=false:
- draw subpath(1,2) of (BriqueBase shifted (PasQuad*(l-1,k-1))) withpen pencircle scaled 1.25;
+ draw subpath(1,2) of (BriqueBase shifted (PasQuad*(l-1,k-1))) withpen pencircle scaled 2;
peri:=peri+1;
fi;
fi;
@@ -152,7 +152,7 @@
color CouleurAire;%
CouleurAire=\useKV[ClesAireSimple]{CouleurAire};
%
- boolean Trou,Triangle,AireTriangle,Graines,SIS;
+ boolean Trou,Triangle,AireTriangle,Graines,SIS,SansAire,SansLongueur;
SIS=\useKV[ClesAireSimple]{SIS};
Graines=\useKV[ClesAireSimple]{Graines};
if Graines:
@@ -159,6 +159,8 @@
randomseed:=\useKV[ClesAireSimple]{Graine};
fi;
Trou=\useKV[ClesAireSimple]{Trou};
+ SansAire=\useKV[ClesAireSimple]{SansAire};
+ SansLongueur=\useKV[ClesAireSimple]{SansLongueur};
Triangle=\useKV[ClesAireSimple]{Triangle};
AireTriangle=\useKV[ClesAireSimple]{AireTriangle};
HautQuad=\useKV[ClesAireSimple]{HautQuad};
@@ -244,6 +246,7 @@
fi;
drawoptions();
if Trou=false:
+ if SansLongueur=false:
trace segment(B+PasQuad*(0,1),B+PasQuad*(1,1));
marque_s:=marque_s/3;
trace marquesegment(B+PasQuad*(0,1),B+PasQuad*(1,1));
@@ -251,20 +254,23 @@
label.top(TEX("\useKV[ClesAireSimple]{SIl}"),B+PasQuad*(0.5,1));
else:
label.bot(TEX("1 u.$\ell$."),B+PasQuad*(0.5,1));
+ fi;
+ fi;
+ fi;
+ if SansAire=false:
+ if AireTriangle:
+ fill polygone(B+PasQuad*(0,2),B+PasQuad*(1,2),B+PasQuad*(0,3)) withcolor PfCdblue;
+ trace polygone(B+PasQuad*(0,2),B+PasQuad*(1,2),B+PasQuad*(0,3));
+ else:
+ fill polygone(B+PasQuad*(0,2),B+PasQuad*(#3,2),B+PasQuad*(#3,2+#4),B+PasQuad*(0,2+#4)) withcolor PfCdblue;
+ trace polygone(B+PasQuad*(0,2),B+PasQuad*(#3,2),B+PasQuad*(#3,2+#4),B+PasQuad*(0,2+#4));
fi;
- fi;
- if AireTriangle:
- fill polygone(B+PasQuad*(0,2),B+PasQuad*(1,2),B+PasQuad*(0,3)) withcolor PfCdblue;
- trace polygone(B+PasQuad*(0,2),B+PasQuad*(1,2),B+PasQuad*(0,3));
- else:
- fill polygone(B+PasQuad*(0,2),B+PasQuad*(#3,2),B+PasQuad*(#3,2+#4),B+PasQuad*(0,2+#4)) withcolor PfCdblue;
- trace polygone(B+PasQuad*(0,2),B+PasQuad*(#3,2),B+PasQuad*(#3,2+#4),B+PasQuad*(0,2+#4));
- fi;
- if SIS:
- label.top(TEX("\useKV[ClesAireSimple]{SI}"),B+PasQuad*(0.5*#3,2+#4));
- else:
- label.top(TEX("1 u.a."),B+PasQuad*(0.5*#3,2+#4));
- fi;
+ if SIS:
+ label.top(TEX("\useKV[ClesAireSimple]{SI}"),B+PasQuad*(0.5*#3,2+#4));
+ else:
+ label.top(TEX("1 u.a."),B+PasQuad*(0.5*#3,2+#4));
+ fi;
+ fi;
trace Toto;
RetrouvePolygone;
if Trou=false:
@@ -426,9 +432,11 @@
color CouleurAire;%,CouleurUniteAire;
CouleurAire=\useKV[ClesAireSimple]{CouleurAire};
%
- boolean Trou,Triangle,AireTriangle,Graines,SIS;
+ boolean Trou,Triangle,AireTriangle,Graines,SIS,SansAire,SansLongueur;
SIS=\useKV[ClesAireSimple]{SIS};
Graines=\useKV[ClesAireSimple]{Graines};
+ SansAire=\useKV[ClesAireSimple]{SansAire};
+ SansLongueur=\useKV[ClesAireSimple]{SansLongueur};
if Graines:
randomseed:=\useKV[ClesAireSimple]{Graine};
fi;
@@ -516,6 +524,7 @@
fi;
drawoptions();
if Trou=false:
+ if SansLongueur=false:
trace segment(B+PasQuady*(0,1),B+(PasQuadx,PasQuady));
trace segment(B+(PasQuadx,2*PasQuady),B+(PasQuadx,PasQuady));
marque_s:=marque_s/3;
@@ -526,8 +535,10 @@
else:
label.bot(TEX("1 u.$\ell$."),B+(PasQuadx*0.5,PasQuady));
label.rt(TEX("1 u.$v$."),B+(PasQuadx,PasQuady*1.5));
- fi;
+ fi;
+ fi;
fi;
+ if SansAire=false:
if AireTriangle:
fill polygone(B+PasQuady*(0,3),B+(PasQuadx,3*PasQuady),B+PasQuady*(0,4)) withcolor PfCdblue;
trace polygone(B+PasQuady*(0,3),B+(PasQuadx,3*PasQuady),B+PasQuady*(0,4));
@@ -540,6 +551,7 @@
else:
label.top(TEX("1 u.a."),B+(PasQuadx*0.5*#3,PasQuady*(3+#4)));
fi;
+ fi;
RetrouvePolygone;
if Trou=false:
write decimal(periu) to "PfCPerimetre.tex";
@@ -564,45 +576,45 @@
if (l mod 2)=0:
if k=1:
periu:=periu+1;
- trace subpath(0,1) of (Case2 shifted(5mm*(l div 2,k))) withpen pencircle scaled 1.1;
+ trace subpath(0,1) of (Case2 shifted(5mm*(l div 2,k))) withpen pencircle scaled 2;
fi;
% même ligne, colonne avant
if Impossible[k][l-1]=false:
periv:=periv+1;
- trace subpath(2,3) of (Case2 shifted(5mm*(l div 2,k))) withpen pencircle scaled 1.1;
+ trace subpath(2,3) of (Case2 shifted(5mm*(l div 2,k))) withpen pencircle scaled 2;
fi;
% même ligne, colonne après
if Impossible[k][l+1]=false:
periu:=periu+1;
- trace subpath(1,2) of (Case2 shifted(5mm*(l div 2,k))) withpen pencircle scaled 1.1;
+ trace subpath(1,2) of (Case2 shifted(5mm*(l div 2,k))) withpen pencircle scaled 2;
fi;
% ligne précédente, colonne précédente
if Impossible[k-1][l-1]=false:
periu:=periu+1;
- trace subpath(0,1) of (Case2 shifted(5mm*(l div 2,k))) withpen pencircle scaled 1.1;
+ trace subpath(0,1) of (Case2 shifted(5mm*(l div 2,k))) withpen pencircle scaled 2;
fi;
else:
if l=1:
periu:=periu+1;
- trace subpath(2,3) of (Case1 shifted(5mm*((l+1) div 2,k))) withpen pencircle scaled 1.1;
+ trace subpath(2,3) of (Case1 shifted(5mm*((l+1) div 2,k))) withpen pencircle scaled 2;
fi;
if k=HautQuad:
periu:=periu+1;
- trace subpath(1,2) of (Case1 shifted(5mm*((l+1) div 2,k))) withpen pencircle scaled 1.1;
+ trace subpath(1,2) of (Case1 shifted(5mm*((l+1) div 2,k))) withpen pencircle scaled 2;
fi;
if Impossible[k][l-1]=false:
periu:=periu+1;
- trace subpath(2,3) of (Case1 shifted(5mm*((l+1) div 2,k))) withpen pencircle scaled 1.1;
+ trace subpath(2,3) of (Case1 shifted(5mm*((l+1) div 2,k))) withpen pencircle scaled 2;
fi;
% même ligne, colonne après
if Impossible[k][l+1]=false:
periv:=periv+1;
- trace subpath(0,1) of (Case1 shifted(5mm*((l+1) div 2,k))) withpen pencircle scaled 1.1;
+ trace subpath(0,1) of (Case1 shifted(5mm*((l+1) div 2,k))) withpen pencircle scaled 2;
fi;
% ligne suivante, colonne suivante
if Impossible[k+1][l+1]=false:
periu:=periu+1;
- trace subpath(1,2) of (Case1 shifted(5mm*((l+1) div 2,k))) withpen pencircle scaled 1.1;
+ trace subpath(1,2) of (Case1 shifted(5mm*((l+1) div 2,k))) withpen pencircle scaled 2;
fi;
fi;
fi;
@@ -750,9 +762,11 @@
color CouleurAire;
CouleurAire=\useKV[ClesAireSimple]{CouleurAire};
%
- boolean Trou,Triangle,AireTriangle,Graines,AireCarre,SIS;
+ boolean Trou,Triangle,AireTriangle,Graines,AireCarre,SIS,SansAire,SansLongueur;
SIS=\useKV[ClesAireSimple]{SIS};
Graines=\useKV[ClesAireSimple]{Graines};
+ SansAire=\useKV[ClesAireSimple]{SansAire};
+ SansLongueur=\useKV[ClesAireSimple]{SansLongueur};
if Graines:
randomseed:=\useKV[ClesAireSimple]{Graine};
fi;
@@ -838,6 +852,7 @@
k:=k+1;
endfor;
drawoptions();
+ if SansAire=false:
if AireCarre:
fill polygone(B+5mm*(0,2),B+5mm*(#3,2),B+5mm*(#3,2+#4),B+5mm*(0,2+#4)) withcolor PfCdblue;
trace polygone(B+5mm*(0,2),B+5mm*(#3,2),B+5mm*(#3,2+#4),B+5mm*(0,2+#4));
@@ -844,11 +859,17 @@
else:
fill polygone(B+5mm*(0,2),B+5mm*(1,2),B+5mm*(1,3)) withcolor PfCdblue;
trace polygone(B+5mm*(0,2),B+5mm*(1,2),B+5mm*(1,3));
+ fi;
fi;
if SIS:
+ if SansAire=false:
label.top(TEX("\useKV[ClesAireSimple]{SI}"),B+5mm*(0.5*#3,2+#4));
+ fi;
else:
+ if SansAire=false:
label.top(TEX("1 u.a."),B+5mm*(0.5*#3,2+#4));
+ fi;
+ if SansLongueur=false:
trace segment(B+5mm*(0,1),B+5mm*(1,1));
trace segment(B+5mm*(2,1),B+5mm*(3,2));
marque_s:=marque_s/3;
@@ -856,6 +877,7 @@
trace marquesegment(B+5mm*(2,1),B+5mm*(3,2));
label.bot(TEX("1 u."),B+5mm*(0.5,1));
label.ulft(TEX("1 v."),B+5mm*(2.5,1.5));
+ fi;
fi;
RetrouvePolygone;
write decimal(periu) to "PfCPerimetre.tex";
@@ -889,7 +911,7 @@
if Impossible[k-1][l]=false:
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),5mm*(l div 2+0.5,k));
periu:=periu+1;
- trace (subpath(0,1) of Case2) shifted(5mm*(l div 2,k));
+ trace (subpath(0,1) of Case2) shifted(5mm*(l div 2,k)) withpen pencircle scaled 2;
fi;
%if Impossible[k+1][l]=false:
%label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),5mm*(l div 2+0.5,k));
@@ -899,12 +921,12 @@
if Impossible[k][l-1]=false:
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),5mm*(l div 2+0.5,k));
periv:=periv+1;
- trace (subpath(2,3) of Case2) shifted(5mm*(l div 2,k));
+ trace (subpath(2,3) of Case2) shifted(5mm*(l div 2,k)) withpen pencircle scaled 2;
fi;
if Impossible[k][l+1]=false:
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),5mm*(l div 2+0.5,k));
periv:=periv+1;
- trace (subpath(1,2) of Case2) shifted(5mm*(l div 2,k));
+ trace (subpath(1,2) of Case2) shifted(5mm*(l div 2,k)) withpen pencircle scaled 2;
fi;
else:
if Impossible[k-1][l]=false:
@@ -915,18 +937,18 @@
if Impossible[k+1][l]=false:
%label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),5mm*(l div 2+0.5,k));
periu:=periu+1;
- trace (subpath(2,3) of Case1) shifted(5mm*(l div 2+0.5,k));
+ trace (subpath(2,3) of Case1) shifted(5mm*(l div 2+0.5,k)) withpen pencircle scaled 2;
% rien à tracer car on est sur la pointe de Case2
fi;
if Impossible[k][l-1]=false:
periv:=periv+1;
%label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),5mm*(l div 2+0.5,k));
- trace (subpath(0,1) of Case1) shifted(5mm*(l div 2+0.5,k));
+ trace (subpath(0,1) of Case1) shifted(5mm*(l div 2+0.5,k)) withpen pencircle scaled 2;
fi;
if Impossible[k][l+1]=false:
periv:=periv+1;
%label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),5mm*(l div 2+0.5,k));
- trace (subpath(1,2) of Case1) shifted(5mm*(l div 2+0.5,k));
+ trace (subpath(1,2) of Case1) shifted(5mm*(l div 2+0.5,k)) withpen pencircle scaled 2;
fi;
fi;
else:
@@ -939,23 +961,23 @@
if Impossible[k+1][l]=false:
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),5mm*(l div 2+0.5,k));
periu:=periu+1;
- trace (subpath(2,3) of Case1) shifted(5mm*(l div 2,k));
+ trace (subpath(2,3) of Case1) shifted(5mm*(l div 2,k)) withpen pencircle scaled 2;
fi;
if Impossible[k][l-1]=false:
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),5mm*(l div 2+0.5,k));
periv:=periv+1;
- trace (subpath(0,1) of Case1) shifted(5mm*(l div 2,k));
+ trace (subpath(0,1) of Case1) shifted(5mm*(l div 2,k)) withpen pencircle scaled 2;
fi;
if Impossible[k][l+1]=false:
periv:=periv+1;
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),5mm*(l div 2+0.5,k));
- trace (subpath(1,2) of Case1) shifted(5mm*(l div 2,k));
+ trace (subpath(1,2) of Case1) shifted(5mm*(l div 2,k)) withpen pencircle scaled 2;
fi;
else:
if Impossible[k-1][l]=false:
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),5mm*(l div 2+1,k));
periu:=periu+1;
- trace (subpath(0,1) of Case2) shifted(5mm*(l div 2+0.5,k));
+ trace (subpath(0,1) of Case2) shifted(5mm*(l div 2+0.5,k)) withpen pencircle scaled 2;
fi;
if Impossible[k+1][l]=false:
%label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),5mm*(l div 2+0.5,k));
@@ -965,12 +987,12 @@
if Impossible[k][l-1]=false:
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),5mm*(l div 2+1,k));
periv:=periv+1;
- trace (subpath(2,3) of Case2) shifted(5mm*(l div 2+0.5,k));
+ trace (subpath(2,3) of Case2) shifted(5mm*(l div 2+0.5,k)) withpen pencircle scaled 2;
fi;
if Impossible[k][l+1]=false:
periv:=periv+1;
%label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),5mm*(l div 2+1,k));
- trace (subpath(1,2) of Case2) shifted(5mm*(l div 2+0.5,k));
+ trace (subpath(1,2) of Case2) shifted(5mm*(l div 2+0.5,k)) withpen pencircle scaled 2;
fi;
fi;
%
@@ -1178,9 +1200,11 @@
color CouleurAire;
CouleurAire=\useKV[ClesAireSimple]{CouleurAire};
%
- boolean Trou,Triangle,AireTriangle,Graines,AireCarre,SIS;
+ boolean Trou,Triangle,AireTriangle,Graines,AireCarre,SIS,SansAire,SansLongueur;
SIS=\useKV[ClesAireSimple]{SIS};
Graines=\useKV[ClesAireSimple]{Graines};
+ SansAire=\useKV[ClesAireSimple]{SansAire};
+ SansLongueur=\useKV[ClesAireSimple]{SansLongueur};
if Graines:
randomseed:=\useKV[ClesAireSimple]{Graine};
fi;
@@ -1265,11 +1289,14 @@
marque_s:=marque_s/3;
if (colonnemax mod 2)=0:
if (lignemax mod 2)=0:
+ if SansAire=false:
fill Case2 shifted (5mm*((colonnemax div 2)+2,lignemax)) withcolor NavyBlue;
trace Case2 shifted (5mm*((colonnemax div 2)+2,lignemax));
labeloffset:=labeloffset*3;
label.top(TEX("1 u.a"),(center Case2) shifted (5mm*((colonnemax div 2)+2,lignemax)));
labeloffset:=labeloffset/3;
+ fi;
+ if SansLongueur=false:
trace segment((0,0),(5mm,0)) shifted (5mm*((colonnemax div 2)+4,lignemax)) withpen pencircle scaled 1.025;
trace marquesegment((0,0),(5mm,0)) shifted (5mm*((colonnemax div 2)+4,lignemax)) withpen pencircle scaled 1.025;
label.bot(TEX("$u$"),(2.5mm,0) shifted (5mm*((colonnemax div 2)+4,lignemax)));
@@ -1277,12 +1304,16 @@
trace segment((0,0),(2.5mm,5mm)) shifted (5mm*((colonnemax div 2)+6,lignemax)) withpen pencircle scaled 1.025;
trace marquesegment((0,0),(2.5mm,5mm)) shifted (5mm*((colonnemax div 2)+6,lignemax)) withpen pencircle scaled 1.025;
label.lrt(TEX("$v$"),(1.25mm,2.5mm) shifted (5mm*((colonnemax div 2)+6,lignemax)));
+ fi;
else:
+ if SansAire=false:
fill Case1 shifted (5mm*((colonnemax div 2)+2,lignemax)) withcolor NavyBlue;
trace Case1 shifted (5mm*((colonnemax div 2)+2,lignemax));
labeloffset:=labeloffset*3;
label.top(TEX("1 u.a"),(center Case1) shifted (5mm*((colonnemax div 2)+2,lignemax)));
labeloffset:=labeloffset/3;
+ fi;
+ if SansLongueur=false:
trace segment((0,0),(5mm,0)) shifted (5mm*((colonnemax div 2)+3.5,lignemax)) withpen pencircle scaled 1.025;
trace marquesegment((0,0),(5mm,0)) shifted (5mm*((colonnemax div 2)+3.5,lignemax)) withpen pencircle scaled 1.025;
label.bot(TEX("$u$"),(2.5mm,0) shifted (5mm*((colonnemax div 2)+3.5,lignemax)));
@@ -1290,14 +1321,18 @@
trace segment((0,0),(2.5mm,5mm)) shifted (5mm*((colonnemax div 2)+5.5,lignemax)) withpen pencircle scaled 1.025;
trace marquesegment((0,0),(2.5mm,5mm)) shifted (5mm*((colonnemax div 2)+5.5,lignemax)) withpen pencircle scaled 1.025;
label.lrt(TEX("$v$"),(1.25mm,2.5mm) shifted (5mm*((colonnemax div 2)+5.5,lignemax)));
+ fi;
fi;
else:
if (lignemax mod 2)=0:
+ if SansAire=false:
fill Case1 shifted (5mm*((colonnemax div 2)+2+0.5,lignemax)) withcolor NavyBlue;
trace Case1 shifted (5mm*((colonnemax div 2)+2+0.5,lignemax));
labeloffset:=labeloffset*3;
label.top(TEX("1 u.a"),(center Case1) shifted (5mm*((colonnemax div 2)+2+0.5,lignemax)));
labeloffset:=labeloffset/3;
+ fi;
+ if SansLongueur=false:
trace segment((0,0),(5mm,0)) shifted (5mm*((colonnemax div 2)+4,lignemax)) withpen pencircle scaled 1.025;
trace marquesegment((0,0),(5mm,0)) shifted (5mm*((colonnemax div 2)+4,lignemax)) withpen pencircle scaled 1.025;
label.bot(TEX("$u$"),(2.5mm,0) shifted (5mm*((colonnemax div 2)+4,lignemax)));
@@ -1305,12 +1340,16 @@
trace segment((0,0),(2.5mm,5mm)) shifted (5mm*((colonnemax div 2)+6,lignemax)) withpen pencircle scaled 1.025;
trace marquesegment((0,0),(2.5mm,5mm)) shifted (5mm*((colonnemax div 2)+6,lignemax)) withpen pencircle scaled 1.025;
label.lrt(TEX("$v$"),(1.25mm,2.5mm) shifted (5mm*((colonnemax div 2)+6,lignemax)));
+ fi;
else:
-fill Case2 shifted (5mm*((colonnemax div 2)+2+0.5,lignemax)) withcolor NavyBlue;
-trace Case2 shifted (5mm*((colonnemax div 2)+2+0.5,lignemax));
+ if SansAire=false:
+ fill Case2 shifted (5mm*((colonnemax div 2)+2+0.5,lignemax)) withcolor NavyBlue;
+ trace Case2 shifted (5mm*((colonnemax div 2)+2+0.5,lignemax));
labeloffset:=labeloffset*3;
label.top(TEX("1 u.a"),(center Case2) shifted (5mm*((colonnemax div 2)+2+0.5,lignemax)));
labeloffset:=labeloffset/3;
+ fi;
+ if SansLongueur=false:
trace segment((0,0),(5mm,0)) shifted (5mm*((colonnemax div 2)+4+0.5,lignemax)) withpen pencircle scaled 1.025;
trace marquesegment((0,0),(5mm,0)) shifted (5mm*((colonnemax div 2)+4+0.5,lignemax)) withpen pencircle scaled 1.025;
label.bot(TEX("$u$"),(2.5mm,0) shifted (5mm*((colonnemax div 2)+4+0.5,lignemax)));
@@ -1318,6 +1357,7 @@
trace segment((0,0),(2.5mm,5mm)) shifted (5mm*((colonnemax div 2)+4+2.5,lignemax)) withpen pencircle scaled 1.025;
trace marquesegment((0,0),(2.5mm,5mm)) shifted (5mm*((colonnemax div 2)+4+2.5,lignemax)) withpen pencircle scaled 1.025;
label.lrt(TEX("$v$"),(1.25mm,2.5mm) shifted (5mm*((colonnemax div 2)+4+2.5,lignemax)));
+ fi;
fi;
fi;
);
@@ -1372,7 +1412,7 @@
if Impossible[k-1][l]=false:
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),PasQuad*(l div 2+0.5,k));
periu:=periu+1;
- trace (subpath(0,1) of Case2) shifted(PasQuad*(l div 2,echelleequi*k));
+ trace (subpath(0,1) of Case2) shifted(PasQuad*(l div 2,echelleequi*k)) withpen pencircle scaled 2;
fi;
%if Impossible[k+1][l]=false:
%label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),PasQuad*(l div 2+0.5,k));
@@ -1382,12 +1422,12 @@
if Impossible[k][l-1]=false:
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),PasQuad*(l div 2+0.5,k));
periv:=periv+1;
- trace (subpath(2,3) of Case2) shifted(PasQuad*(l div 2,echelleequi*k));
+ trace (subpath(2,3) of Case2) shifted(PasQuad*(l div 2,echelleequi*k)) withpen pencircle scaled 2;
fi;
if Impossible[k][l+1]=false:
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),PasQuad*(l div 2+0.5,k));
periv:=periv+1;
- trace (subpath(1,2) of Case2) shifted(PasQuad*(l div 2,echelleequi*k));
+ trace (subpath(1,2) of Case2) shifted(PasQuad*(l div 2,echelleequi*k)) withpen pencircle scaled 2;
fi;
else:
if Impossible[k-1][l]=false:
@@ -1398,18 +1438,18 @@
if Impossible[k+1][l]=false:
%label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),PasQuad*(l div 2+0.5,k));
periu:=periu+1;
- trace (subpath(2,3) of Case1) shifted(PasQuad*(l div 2+0.5,echelleequi*k));
+ trace (subpath(2,3) of Case1) shifted(PasQuad*(l div 2+0.5,echelleequi*k)) withpen pencircle scaled 2;
% rien à tracer car on est sur la pointe de Case2
fi;
if Impossible[k][l-1]=false:
periv:=periv+1;
%label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),PasQuad*(l div 2+0.5,k));
- trace (subpath(0,1) of Case1) shifted(PasQuad*(l div 2+0.5,echelleequi*k));
+ trace (subpath(0,1) of Case1) shifted(PasQuad*(l div 2+0.5,echelleequi*k)) withpen pencircle scaled 2;
fi;
if Impossible[k][l+1]=false:
periv:=periv+1;
%label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),PasQuad*(l div 2+0.5,k));
- trace (subpath(1,2) of Case1) shifted(PasQuad*(l div 2+0.5,echelleequi*k));
+ trace (subpath(1,2) of Case1) shifted(PasQuad*(l div 2+0.5,echelleequi*k)) withpen pencircle scaled 2;
fi;
fi;
else:
@@ -1422,23 +1462,23 @@
if Impossible[k+1][l]=false:
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),PasQuad*(l div 2+0.5,k));
periu:=periu+1;
- trace (subpath(2,3) of Case1) shifted(PasQuad*(l div 2,echelleequi*k));
+ trace (subpath(2,3) of Case1) shifted(PasQuad*(l div 2,echelleequi*k)) withpen pencircle scaled 2;
fi;
if Impossible[k][l-1]=false:
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),PasQuad*(l div 2+0.5,k));
periv:=periv+1;
- trace (subpath(0,1) of Case1) shifted(PasQuad*(l div 2,echelleequi*k));
+ trace (subpath(0,1) of Case1) shifted(PasQuad*(l div 2,echelleequi*k)) withpen pencircle scaled 2;
fi;
if Impossible[k][l+1]=false:
periv:=periv+1;
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),PasQuad*(l div 2+0.5,k));
- trace (subpath(1,2) of Case1) shifted(PasQuad*(l div 2,echelleequi*k));
+ trace (subpath(1,2) of Case1) shifted(PasQuad*(l div 2,echelleequi*k)) withpen pencircle scaled 2;
fi;
else:
if Impossible[k-1][l]=false:
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),PasQuad*(l div 2+1,k));
periu:=periu+1;
- trace (subpath(0,1) of Case2) shifted(PasQuad*(l div 2+0.5,echelleequi*k));
+ trace (subpath(0,1) of Case2) shifted(PasQuad*(l div 2+0.5,echelleequi*k)) withpen pencircle scaled 2;
fi;
if Impossible[k+1][l]=false:
%label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),PasQuad*(l div 2+0.5,k));
@@ -1448,15 +1488,14 @@
if Impossible[k][l-1]=false:
% label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),PasQuad*(l div 2+1,k));
periv:=periv+1;
- trace (subpath(2,3) of Case2) shifted(PasQuad*(l div 2+0.5,echelleequi*k));
+ trace (subpath(2,3) of Case2) shifted(PasQuad*(l div 2+0.5,echelleequi*k)) withpen pencircle scaled 2;
fi;
if Impossible[k][l+1]=false:
periv:=periv+1;
%label(TEX("\tiny"&decimal(k)&"--"&decimal(l)),PasQuad*(l div 2+1,k));
- trace (subpath(1,2) of Case2) shifted(PasQuad*(l div 2+0.5,echelleequi*k));
+ trace (subpath(1,2) of Case2) shifted(PasQuad*(l div 2+0.5,echelleequi*k)) withpen pencircle scaled 2;
fi;
fi;
- %
fi;
fi;
endfor;
@@ -1661,9 +1700,11 @@
color CouleurAire;
CouleurAire=\useKV[ClesAireSimple]{CouleurAire};
%
- boolean Trou,Triangle,AireTriangle,Graines,AireCarre,SIS;
+ boolean Trou,Triangle,AireTriangle,Graines,AireCarre,SIS,SansAire,SansLongueur;
SIS=\useKV[ClesAireSimple]{SIS};
Graines=\useKV[ClesAireSimple]{Graines};
+ SansAire=\useKV[ClesAireSimple]{SansAire};
+ SansLongueur=\useKV[ClesAireSimple]{SansLongueur};
if Graines:
randomseed:=\useKV[ClesAireSimple]{Graine};
fi;
@@ -1747,51 +1788,67 @@
marque_s:=marque_s/3;
if (colonnemax mod 2)=0:
if (lignemax mod 2)=0:
+ if SansAire=false:
fill Case2 shifted (PasQuad*((colonnemax div 2)+2,echelleequi*lignemax)) withcolor NavyBlue;
trace Case2 shifted (PasQuad*((colonnemax div 2)+2,echelleequi*lignemax));
%labeloffset:=labeloffset*3;
- label.top(TEX("1 u.a"),1/2[point(0) of Case2,point(1) of Case2] shifted (PasQuad*((colonnemax div 2)+2,echelleequi*lignemax)));
- %labeloffset:=labeloffset/3;
+ label.bot(TEX("1 u.a"),1/2[point(0) of Case2,point(1) of Case2] shifted (PasQuad*((colonnemax div 2)+2,echelleequi*lignemax)));
+ % labeloffset:=labeloffset/3;
+ fi;
+ if SansLongueur=false:
trace Case2 shifted (PasQuad*((colonnemax div 2)+4,echelleequi*lignemax));
marque_s:=marque_s/3;
trace Codelongueur(point 0 of Case2,point 1 of Case2,point 1 of Case2,point 2 of Case2,point 2 of Case2,point 3 of Case2,2) shifted (PasQuad*((colonnemax div 2)+4,echelleequi*lignemax));
marque_s:=marque_s*3;
- label.bot(TEX("$u$"),(0.5*PasQuad,0) shifted (PasQuad*((colonnemax div 2)+4,echelleequi*lignemax)));
+ label.bot(TEX("u.$\ell$"),(0.5*PasQuad,0) shifted (PasQuad*((colonnemax div 2)+4,echelleequi*lignemax)));
+ fi;
else:
+ if SansAire=false:
fill Case1 shifted (PasQuad*((colonnemax div 2)+2,echelleequi*lignemax)) withcolor NavyBlue;
trace Case1 shifted (PasQuad*((colonnemax div 2)+2,echelleequi*lignemax));
%labeloffset:=labeloffset*3;
label.top(TEX("1 u.a"),1/2[point(2) of Case1,point(0) of Case1] shifted (PasQuad*((colonnemax div 2)+2,echelleequi*lignemax)));
- %labeloffset:=labeloffset/3;
+ % labeloffset:=labeloffset/3;
+ fi;
+ if SansLongueur=false:
trace Case2 shifted (PasQuad*((colonnemax div 2)+3.5,echelleequi*lignemax));
marque_s:=marque_s/3;
trace Codelongueur(point 0 of Case2,point 1 of Case2,point 1 of Case2,point 2 of Case2,point 2 of Case2,point 3 of Case2,2) shifted (PasQuad*((colonnemax div 2)+3.5,echelleequi*lignemax));
marque_s:=marque_s*3;
- label.bot(TEX("$u$"),(0.5*PasQuad,0) shifted (PasQuad*((colonnemax div 2)+3.5,echelleequi*lignemax)));
+ label.bot(TEX("u.$\ell$"),(0.5*PasQuad,0) shifted (PasQuad*((colonnemax div 2)+3.5,echelleequi*lignemax)));
+ fi;
fi;
else:
if (lignemax mod 2)=0:
+ if SansAire=false:
fill Case1 shifted (PasQuad*((colonnemax div 2)+2+0.5,echelleequi*lignemax)) withcolor NavyBlue;
trace Case1 shifted (PasQuad*((colonnemax div 2)+2+0.5,echelleequi*lignemax));
% labeloffset:=labeloffset*3;
label.top(TEX("1 u.a"),1/2[point(0) of Case1,point(2) of Case1] shifted (PasQuad*((colonnemax div 2)+2+0.5,echelleequi*lignemax)));
-% labeloffset:=labeloffset/3;
+ % labeloffset:=labeloffset/3;
+ fi;
+ if SansLongueur=false:
trace Case2 shifted (PasQuad*((colonnemax div 2)+4,echelleequi*lignemax));
marque_s:=marque_s/3;
trace Codelongueur(point 0 of Case2,point 1 of Case2,point 1 of Case2,point 2 of Case2,point 2 of Case2,point 3 of Case2,2) shifted (PasQuad*((colonnemax div 2)+4,echelleequi*lignemax));
marque_s:=marque_s*3;
- label.bot(TEX("$u$"),(0.5*PasQuad,0) shifted (PasQuad*((colonnemax div 2)+4,echelleequi*lignemax)));
+ label.bot(TEX("u.$\ell$"),(0.5*PasQuad,0) shifted (PasQuad*((colonnemax div 2)+4,echelleequi*lignemax)));
+ fi;
else:
- fill Case2 shifted (PasQuad*((colonnemax div 2)+2+0.5,echelleequi*lignemax)) withcolor NavyBlue;
- trace Case2 shifted (PasQuad*((colonnemax div 2)+2+0.5,echelleequi*lignemax));
- %labeloffset:=labeloffset*3;
- label.top(TEX("1 u.a"),1/2[point(0) of Case2,point(1) of Case2] shifted (PasQuad*((colonnemax div 2)+2+0.5,echelleequi*lignemax)));
- %labeloffset:=labeloffset/3;
+ if SansAire=false:
+ fill Case2 shifted (PasQuad*((colonnemax div 2)+2+0.5,echelleequi*lignemax)) withcolor NavyBlue;
+ trace Case2 shifted (PasQuad*((colonnemax div 2)+2+0.5,echelleequi*lignemax));
+ % labeloffset:=labeloffset*3;
+ label.bot(TEX("1 u.a"),1/2[point(0) of Case2,point(1) of Case2] shifted (PasQuad*((colonnemax div 2)+2+0.5,echelleequi*lignemax)));
+ % labeloffset:=labeloffset/3;
+ fi;
+ if SansLongueur=false:
trace Case2 shifted (PasQuad*((colonnemax div 2)+4.5,echelleequi*lignemax));
marque_s:=marque_s/3;
trace Codelongueur(point 0 of Case2,point 1 of Case2,point 1 of Case2,point 2 of Case2,point 2 of Case2,point 3 of Case2,2) shifted (PasQuad*((colonnemax div 2)+4.5,echelleequi*lignemax));
marque_s:=marque_s*3;
- label.bot(TEX("$u$"),(0.5*PasQuad,0) shifted (PasQuad*((colonnemax div 2)+4+0.5,echelleequi*lignemax)));
+ label.bot(TEX("u.$\ell$"),(0.5*PasQuad,0) shifted (PasQuad*((colonnemax div 2)+4+0.5,echelleequi*lignemax)));
+ fi;
fi;
fi;
);
@@ -1817,7 +1874,7 @@
\fi
}%
-\setKVdefault[ClesAireSimple]{Trou=false,UniteAire=1x1,HautQuad=15,LargQuad=15,CouleurAire=LightSteelBlue,SansLegende=false,PasQuad=5mm,Tentatives=10,Triangle=false,AireTriangle=false,PolyRec=false,PolyTri=false,PolyTriIso=false,PolyTriEqui=false,Graines=false,AireCarre=false,SIS=false,PasQuadx=8mm,PasQuady=6mm,Graine={},SI={},SIl={}}%
+\setKVdefault[ClesAireSimple]{Trou=false,UniteAire=1x1,HautQuad=15,LargQuad=15,CouleurAire=LightSteelBlue,SansLegende=false,SansAire=false,SansLongueur=false,PasQuad=5mm,Tentatives=10,Triangle=false,AireTriangle=false,PolyRec=false,PolyTri=false,PolyTriIso=false,PolyTriEqui=false,Graines=false,AireCarre=false,SIS=false,PasQuadx=8mm,PasQuady=6mm,Graine={},SI={},SIl={}}%
\defKV[ClesAireSimple]{%
Graine=\ifempty{#1}{}{\setKV[ClesAireSimple]{Graines}},%
SI=\ifempty{#1}{}{\setKV[ClesAireSimple]{SIS}},%
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCBalance.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCBalance.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCBalance.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -10,8 +10,7 @@
\def\UpdatetoksPlateauGauche#1\nil{\addtotok\tokPlateauGauche{#1,}}%
\def\UpdatetoksPlateauDroit#1\nil{\addtotok\tokPlateauDroit{#1,}}%
%
-\setKVdefault[Balance]{Inf=false,Sup=false,Masse=false,Codes=false,Traces={}}%
-\defKV[Balance]{Traces=\ifempty{#1}{}{\setKV[Balance]{Codes}}}%
+\setKVdefault[Balance]{Inf=false,Sup=false,Masse=false,Codes=false,Traces={},Ecarth=0}%
%
\NewDocumentCommand\Balance{omm}{%
\tokPlateauGauche{}%
@@ -35,11 +34,8 @@
\ifluatex
\mplibforcehmode
\begin{mplibcode}
- boolean Codes;
- Codes=\useKV[Balance]{Codes};
- if Codes:
- \useKV[Balance]{Traces};
- fi;
+ ecarth=\useKV[Balance]{Ecarth};
+ \ifemptyKV[Balance]{Traces}{}{\useKV[Balance]{Traces};}
%
vardef Poids=
save poids;
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCBandeNumerique.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCBandeNumerique.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCBandeNumerique.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -18,7 +18,7 @@
\NewDocumentCommand\BandeNumerique{o}{%
\useKVdefault[BandeNum]%
\setKV[BandeNum]{#1}%
- \ifPfCPfMScratchDys\relax\setKV[BandeNum]{Dys}\fi
+ \ifPfCPfMScratchDys\relax\setKV[BandeNum]{Dys}\fi%
\xdef\PfCBandeNumElementsAv{\useKV[BandeNum]{Elements}}%
\setsepchar{,}\ignoreemptyitems%
\readlist*\ListeBandeNumElmts{\PfCBandeNumElementsAv}%
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCBoiteADix.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCBoiteADix.tex (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCBoiteADix.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -0,0 +1,92 @@
+%%%
+% Boite à dix
+%%%
+\def\filedateBoiteADix{2025/08/24}%
+\def\fileversionBoiteADix{0.1}%
+\message{-- \filedateBoiteADix\space v\fileversionBoiteADix}%
+%
+\makeatletter
+\setKVdefault[BoiteDix]{Couleur=black,CouleurComplement={},Echelle=0.5,Vertical=false}
+
+\NewDocumentCommand\BoiteADix{om}{%
+ \useKVdefault[BoiteDix]%
+ \setKV[BoiteDix]{#1}%
+ \ifx\bla#1\bla%
+ \PfM at BuildBoiteDix{0}%
+ \else
+ \PfM at BuildBoiteDix{#2}%
+ \fi
+}%
+
+\NewDocumentCommand\PfM at BuildBoiteDix{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}
+ u:=\useKV[BoiteDix]{Echelle}*1cm;
+ %
+ path base,disqueh[],disquev[];
+ base=fullcircle scaled u;
+ %
+ color CouleurFond,CouleurComp;
+ CouleurFond=\useKV[BoiteDix]{Couleur};
+ \ifemptyKV[BoiteDix]{CouleurComplement}{CouleurComp=white}{CouleurComp=\useKV[BoiteDix]{CouleurComplement}};%
+ %
+ nb:=0;
+ for k=0 upto 1:
+ for l=0 upto 4:
+ nb:=nb+1;
+ disqueh[nb]=base shifted(1.2*u*(l,-k));
+ disquev[nb]=base shifted(1.2*u*(k,-l));
+ endfor;
+ endfor;
+ %
+ vardef BoiteDixHorizontale(expr AA)=
+ save BDix;
+ picture BDix;
+ BDix=image(
+ for k=1 upto AA:
+ fill disqueh[k] withcolor CouleurFond;
+ trace disqueh[k];
+ endfor;
+ for k=AA+1 upto 10:
+ fill disqueh[k] withcolor CouleurComp;
+ trace disqueh[k];
+ endfor;
+ trace u*(-0.7,0.7)--u*(5.5,0.7)--u*(5.5,-1.9)--u*(-0.7,-1.9)--cycle;
+ );
+ BDix
+ enddef;
+ %
+ vardef BoiteDixVerticale(expr AA)=
+ save BDixV;
+ picture BDixV;
+ BDixV=image(
+ for k=1 upto AA:
+ fill disquev[k] withcolor CouleurFond;
+ trace disquev[k];
+ endfor;
+ for k=AA+1 upto 10:
+ fill disquev[k] withcolor CouleurComp;
+ trace disquev[k];
+ endfor;
+ trace u*(-0.7,0.7)--u*(1.9,0.7)--u*(1.9,-5.5)--u*(-0.7,-5.5)--cycle;
+ );
+ BDixV
+ enddef;
+ quotient:=#1 div 10;
+ reste:=#1 mod 10;
+ if \useKV[BoiteDix]{Vertical}:
+ for k=1 upto quotient:
+ trace BoiteDixVerticale(10) shifted (k*u*(2.8,0));
+ endfor;
+ trace BoiteDixVerticale(reste) shifted ((quotient+1)*u*(2.8,0));
+ else:
+ for k=1 upto quotient:
+ trace BoiteDixHorizontale(10) shifted (k*u*(0,-2.8));
+ endfor;
+ trace BoiteDixHorizontale(reste) shifted ((quotient+1)*u*(0,-2.8));
+ fi;
+ \end{mplibcode}%
+ \fi%
+}%
+\makeatother
\ No newline at end of file
Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCBoiteADix.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculsFractions.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculsFractions.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculsFractions.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -1,8 +1,8 @@
%%%
% Calculs fractions
%
-\def\filedateCalculsFractions{2025/05/26}%
-\def\fileversionCalculsFractions{0.1a}%
+\def\filedateCalculsFractions{2025/08/23}%
+\def\fileversionCalculsFractions{0.1b}%
\message{-- \filedateCalculsFractions\space v\fileversionCalculsFractions}%
%
\setKVdefault[CalculsFractions]{Couleurs=false,Negatif=false,Seul=false,Couleur={}}%
@@ -73,10 +73,16 @@
\xdef\PfCDeuxiemeMul{\fpeval{\ListeFractions[1,2]/\the\pgcd}}%
\xdef\PfCAddNumFin{\fpeval{(\ListeFractions[1,1])*(\PfCPremierMul)\PfCFractionOp(\ListeFractions[2,1])*(\PfCDeuxiemeMul)}}%
\xdef\PfCAddDenoFin{\fpeval{(\ListeFractions[1,2])*(\PfCPremierMul)}}%
- \PGCD{\fpeval{abs(\PfCAddNumFin)}}{\fpeval{abs(\PfCAddDenoFin)}}\xdef\PfCAddPgcd{\the\pgcd}%
- \xdef\PfCAddNumSimp{\fpeval{\PfCAddNumFin/\PfCAddPgcd}}%
- \xdef\PfCAddDenoSimp{\fpeval{\PfCAddDenoFin/\PfCAddPgcd}}%
- \xdef\PfCAddSumSimp{\PfCAddNumSimp/\PfCAddDenoSimp}%
+ \ifnum\PfCAddNumFin=0\relax
+ \xdef\PfCAddNumSimp{0}%
+ \xdef\PfCAddDenoSimp{\PfCAddDenoFin}%
+ \xdef\PfCAddSumSimp{0}%
+ \else%
+ \PGCD{\fpeval{abs(\PfCAddNumFin)}}{\fpeval{abs(\PfCAddDenoFin)}}\xdef\PfCAddPgcd{\the\pgcd}%
+ \xdef\PfCAddNumSimp{\fpeval{\PfCAddNumFin/\PfCAddPgcd}}%
+ \xdef\PfCAddDenoSimp{\fpeval{\PfCAddDenoFin/\PfCAddPgcd}}%
+ \xdef\PfCAddSumSimp{\PfCAddNumSimp/\PfCAddDenoSimp}%
+ \fi
\IfValueT{#6}{\xdef#6{\PfCAddSumSimp}}%
\ifboolKV[CalculsFractions]{Seul}{}{%
% Partie affichage
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCritere.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCCritere.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCCritere.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -1,132 +1,140 @@
%%%
% Criteres de divisibilite
%%%
-\def\filedateCritere{2024/08/04}%
-\def\fileversionCritere{0.1}%
+\def\filedateCritere{2025/07/13}%
+\def\fileversionCritere{0.1a}%
\message{-- \filedateCritere\space v\fileversionCritere}%
%
\setKVdefault[Critere]{Div=2,Remarque=false,All=false,RemarqueAll=false}
+\makeatletter
\NewDocumentCommand\Critere{om}{%
\useKVdefault[Critere]%
\setKV[Critere]{#1}%
- \xdef\PfCListeARetenirCriteres{}%
+ \edef\PfC at ListeARetenirCriteres{}%
\ifboolKV[Critere]{All}{%
\begin{itemize}
- \item \CritereDeux{#2}%
- \item \CritereTrois{#2}
- \item \CritereQuatre{#2}
- \item \CritereCinq{#2}
- \item \CritereNeuf{#2}
- \item \CritereDix{#2}
+ \item \PfC at CritereDeux{#2}%
+ \item \PfC at CritereTrois{#2}
+ \item \PfC at CritereQuatre{#2}
+ \item \PfC at CritereCinq{#2}
+ \item \PfC at CritereNeuf{#2}
+ \item \PfC at CritereDix{#2}
\end{itemize}
- \ifx\bla\PfCListeARetenirCriteres\bla%
+ \ifx\bla\PfC at ListeARetenirCriteres\bla%
\else
\setsepchar{,}\ignoreemptyitems%
- \readlist*\PfCAfficheDivCriteres{\PfCListeARetenirCriteres}%
+ \readlist*\PfC at AfficheDivCriteres{\PfC at ListeARetenirCriteres}%
\reademptyitems%
- \xdef\PfCNumListe{}%
- En appliquant les critères de divisibilité connus, \num{#2} est donc divisible par \num{\PfCAfficheDivCriteres[1]}%
- \xintifboolexpr{\PfCAfficheDivCritereslen>1}{\xintFor* ##1 in{\xintSeq{2}{\PfCAfficheDivCritereslen}}\do{%
- \xintifForLast{ et }{ ; }\num{\PfCAfficheDivCriteres[##1]}%
+ \edef\PfC at NumListe{}%
+ En appliquant les critères de divisibilité connus, \num{#2} est donc divisible par \num{\PfC at AfficheDivCriteres[1]}%
+ \xintifboolexpr{\PfC at AfficheDivCritereslen>1}{\xintFor* ##1 in{\xintSeq{2}{\PfC at AfficheDivCritereslen}}\do{%
+ \xintifForLast{ et }{ ; }\num{\PfC at AfficheDivCriteres[##1]}%
}%
}{}.%
\ifboolKV[Critere]{RemarqueAll}{\\\textbf{Remarque} : La liste des diviseurs de \num{#2} est \ListeDiviseur{#2}.}{}%
\fi%
}{%
- \IfStrEqCase{\useKV[Critere]{Div}}{%
- {2}{\CritereDeux{#2}}%
- {3}{\CritereTrois{#2}}%
- {4}{\CritereQuatre{#2}}%
- {5}{\CritereCinq{#2}}%
- {9}{\CritereNeuf{#2}}%
- {10}{\CritereDix{#2}}%
- }%
+ \edef\PfC at ListeDesCriteresATesterAv{\useKV[Critere]{Div}}%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\PfC at ListeDesCriteresATester{\PfC at ListeDesCriteresATesterAv}%
+ \reademptyitems%
+ \foreachitem\PfC at DivTest\in\PfC at ListeDesCriteresATester{%
+ \IfStrEqCase{\PfC at DivTest}{%
+ {2}{\PfC at CritereDeux{#2}}%
+ {3}{\PfC at CritereTrois{#2}}%
+ {4}{\PfC at CritereQuatre{#2}}%
+ {5}{\PfC at CritereCinq{#2}}%
+ {9}{\PfC at CritereNeuf{#2}}%
+ {10}{\PfC at CritereDix{#2}}%
+ }\par%
+ }%
}%
}%
-\NewDocumentCommand\CritereDeux{m}{%
- \StrRight{#1}{1}[\PfCCriDeuxUnite]%
- Le chiffre des unités de \num{#1} est \num{\PfCCriDeuxUnite}. Donc \num{#1} %
- \modulo{\PfCCriDeuxUnite}{2}%
+\NewDocumentCommand\PfC at CritereDeux{m}{%
+ \StrRight{#1}{1}[\PfC at CriDeuxUnite]%
+ Le chiffre des unités de \num{#1} est \num{\PfC at CriDeuxUnite}. Donc \num{#1} %
+ \modulo{\PfC at CriDeuxUnite}{2}%
\ifnum\remainder=0\relax%
est divisible par 2.%
\ifboolKV[Critere]{Remarque}{\\\textbf{Remarque} : $\num{#1}=\num{\fpeval{#1/2}}\times2$.}{}%
- \xdef\PfCListeARetenirCriteres{\PfCListeARetenirCriteres,2}%
+ \edef\PfC at ListeARetenirCriteres{\PfC at ListeARetenirCriteres,2}%
\else%
n'est pas divisible par 2.%
\fi%
}%
-\NewDocumentCommand\CritereTrois{m}{%
+\NewDocumentCommand\PfC at CritereTrois{m}{%
La somme des chiffres de \num{#1} est \PfCSommeChiffres{#1}. Comme \num{\PfCSMSomme} %
\modulo{\PfCSMSomme}{3}%
\ifnum\remainder=0\relax%
est divisible par 3, alors \num{#1} est aussi divisible par 3.%
\ifboolKV[Critere]{Remarque}{\\\textbf{Remarque} : $\num{#1}=\num{\fpeval{#1/3}}\times3$.}{}%
- \xdef\PfCListeARetenirCriteres{\PfCListeARetenirCriteres,3}%
+ \edef\PfC at ListeARetenirCriteres{\PfC at ListeARetenirCriteres,3}%
\else%
n'est pas divisible par 3, alors \num{#1} n'est pas divisible par 3.%
\fi%
}%
-\NewDocumentCommand\CritereQuatre{m}{%
+\NewDocumentCommand\PfC at CritereQuatre{m}{%
\ifnum#1<100%
\quotient{#1}{4}%
\modulo{#1}{4}%
\ifnum\remainder=0\relax
Comme $\num{#1}=\num{\the\intquotient}\times4$ alors \num{#1} est divisible par 4.
- \xdef\PfCListeARetenirCriteres{\PfCListeARetenirCriteres,4}%
+ \edef\PfC at ListeARetenirCriteres{\PfC at ListeARetenirCriteres,4}%
\else
Comme $\num{#1}=\num{\the\intquotient}\times4+\num{\the\remainder}$ alors \num{#1} n'est pas divisible par 4.
\fi
\else
- \StrRight{#1}{2}[\PfCCriQuatreUnite]%
- \num{#1} se termine par \num{\PfCCriQuatreUnite}. %
- \modulo{\PfCCriQuatreUnite}{4}%
+ \StrRight{#1}{2}[\PfC at CriQuatreUnite]%
+ \num{#1} se termine par \num{\PfC at CriQuatreUnite}. %
+ \modulo{\PfC at CriQuatreUnite}{4}%
\ifnum\remainder=0\relax%
- Comme \num{\PfCCriQuatreUnite} est divisible par 4, alors \num{#1} est divisible par 4.%
+ Comme \num{\PfC at CriQuatreUnite} est divisible par 4, alors \num{#1} est divisible par 4.%
\ifboolKV[Critere]{Remarque}{\\\textbf{Remarque} : $\num{#1}=\num{\fpeval{#1/4}}\times4$.}{}%
- \xdef\PfCListeARetenirCriteres{\PfCListeARetenirCriteres,4}%
+ \edef\PfC at ListeARetenirCriteres{\PfC at ListeARetenirCriteres,4}%
\else%
- Comme \num{\PfCCriQuatreUnite} n'est pas divisible par 4, alors \num{#1} n'est pas divisible par 4.%
+ Comme \num{\PfC at CriQuatreUnite} n'est pas divisible par 4, alors \num{#1} n'est pas divisible par 4.%
\fi%
\fi
}%
-\NewDocumentCommand\CritereCinq{m}{%
- \StrRight{#1}{1}[\PfCCriCinqUnite]%
- Le chiffre des unités de \num{#1} est \num{\PfCCriCinqUnite}. Donc \num{#1} %
- \modulo{\PfCCriCinqUnite}{5}%
+\NewDocumentCommand\PfC at CritereCinq{m}{%
+ \StrRight{#1}{1}[\PfC at CriCinqUnite]%
+ Le chiffre des unités de \num{#1} est \num{\PfC at CriCinqUnite}. Donc \num{#1} %
+ \modulo{\PfC at CriCinqUnite}{5}%
\ifnum\remainder=0\relax%
est divisible par 5.%
\ifboolKV[Critere]{Remarque}{\\\textbf{Remarque} : $\num{#1}=\num{\fpeval{#1/5}}\times5$.}{}%
- \xdef\PfCListeARetenirCriteres{\PfCListeARetenirCriteres,5}%
+ \edef\PfC at ListeARetenirCriteres{\PfC at ListeARetenirCriteres,5}%
\else%
n'est pas divisible par 5.%
\fi%
}%
-\NewDocumentCommand\CritereNeuf{m}{%
+\NewDocumentCommand\PfC at CritereNeuf{m}{%
La somme des chiffres de \num{#1} est \PfCSommeChiffres{#1}. Comme \num{\PfCSMSomme} %
\modulo{\PfCSMSomme}{9}%
\ifnum\remainder=0\relax%
est divisible par 9, alors \num{#1} est aussi divisible par 9.%
\ifboolKV[Critere]{Remarque}{\\\textbf{Remarque} : $\num{#1}=\num{\fpeval{#1/9}}\times9$.}{}%
- \xdef\PfCListeARetenirCriteres{\PfCListeARetenirCriteres,9}%
+ \edef\PfC at ListeARetenirCriteres{\PfC at ListeARetenirCriteres,9}%
\else%
n'est pas divisible par 9, alors \num{#1} n'est pas divisible par 9.%
\fi%
}%
-\NewDocumentCommand\CritereDix{m}{%
- \StrRight{#1}{1}[\PfCCriDixUnite]%
- Le chiffre des unités de \num{#1} est \num{\PfCCriDixUnite}. Donc \num{#1} %
- \ifnum\PfCCriDixUnite=0\relax
+\NewDocumentCommand\PfC at CritereDix{m}{%
+ \StrRight{#1}{1}[\PfC at CriDixUnite]%
+ Le chiffre des unités de \num{#1} est \num{\PfC at CriDixUnite}. Donc \num{#1} %
+ \ifnum\PfC at CriDixUnite=0\relax
est divisible par 10.%
\ifboolKV[Critere]{Remarque}{\\\textbf{Remarque} : $\num{#1}=\num{\fpeval{#1/10}}\times10$.}{}%
- \xdef\PfCListeARetenirCriteres{\PfCListeARetenirCriteres,10}%
+ \edef\PfC at ListeARetenirCriteres{\PfC at ListeARetenirCriteres,10}%
\else%
n'est pas divisible par 10.%
\fi%
-}%
\ No newline at end of file
+}%
+\makeatother
\ No newline at end of file
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDefiTables.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCDefiTables.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCDefiTables.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -9,7 +9,9 @@
\newcounter{PfCNbDefiTableRestore}%
\setcounter{PfCNbDefiTable}{0}%
-\setKVdefault[DefiTable]{Solution=false,Math=false,LargeurT=5mm,Graines=false,Creation=false,ValeurMin=1,ValeurMax=10,Restreint=false,Stretch=1,Restores=false,Graine={},Restore={}}%
+\newlength{\PfCDefiTableLargTab}
+
+\setKVdefault[DefiTable]{Solution=false,Math=false,Largeur=1em,LargeurT=5mm,Graines=false,Creation=false,ValeurMin=1,ValeurMax=10,Restreint=false,Stretch=1,Restores=false,Graine={},Restore={}}%
\defKV[DefiTable]{%
Graine=\ifempty{#1}{}{\setKV[DefiTable]{Graines}},%
Restore=\ifempty{#1}{}{\setKV[DefiTable]{Restores}}%
@@ -144,6 +146,7 @@
}%
\NewDocumentCommand\BuildTabDefiTable{m}{%
+ \setlength{\PfCDefiTableLargTab}{\useKV[DefiTable]{Largeur}}%
\setcounter{PfCNbDefiTableRestore}{#1}%
\ifcsname ListeFinaleDesCaracteresRetenusDansOrdre\Roman{PfCNbDefiTableRestore}\endcsname
\xdef\PfCFooRetiens{\csname ListeFinaleDesCaracteresRetenusDansOrdre\Roman{PfCNbDefiTableRestore}\endcsname}%
@@ -150,7 +153,7 @@
\setsepchar[*]{/}\ignoreemptyitems%
\readlist*\ListeAAfficherOrdre{\PfCFooRetiens}%
\reademptyitems%
- \begin{tabular}{|>{\columncolor{gray!15}\rule[-1.375\tabcolsep]{0pt}{1em+2.125\tabcolsep}\centering\arraybackslash}m{1em}|*{10}{>{\rule[-1.375\tabcolsep]{0pt}{1em+2.125\tabcolsep}\centering\arraybackslash}m{1em}|}}
+ \begin{tabular}{|>{\columncolor{gray!15}\rule[-1.375\tabcolsep]{0pt}{\PfCDefiTableLargTab+2.125\tabcolsep}\centering\arraybackslash}m{\PfCDefiTableLargTab}|*{10}{>{\rule[-1.375\tabcolsep]{0pt}{\PfCDefiTableLargTab+2.125\tabcolsep}\centering\arraybackslash}m{\PfCDefiTableLargTab}|}}
\hline
\rowcolor{gray!15}$\times$&\xintFor* ##1 in {\xintSeq {1}{10}}\do{%
\xintifForFirst{}{&}##1%
@@ -163,7 +166,7 @@
\end{tabular}%
\else
\xdef\PfCFooSauvToutTab{}%
- \begin{tabular}{|>{\columncolor{gray!15}\rule[-1.375\tabcolsep]{0pt}{1em+2.125\tabcolsep}\centering\arraybackslash}m{1em}|*{10}{>{\rule[-1.375\tabcolsep]{0pt}{1em+2.125\tabcolsep}\centering\arraybackslash}m{1em}|}}
+ \begin{tabular}{|>{\columncolor{gray!15}\rule[-1.375\tabcolsep]{0pt}{\PfCDefiTableLargTab+2.125\tabcolsep}\centering\arraybackslash}m{\PfCDefiTableLargTab}|*{10}{>{\rule[-1.375\tabcolsep]{0pt}{\PfCDefiTableLargTab+2.125\tabcolsep}\centering\arraybackslash}m{\PfCDefiTableLargTab}|}}
\hline
\rowcolor{gray!15}$\times$&\xintFor* ##1 in {\xintSeq {1}{10}}\do{%
\xintifForFirst{}{&}##1%
@@ -292,7 +295,7 @@
}{%
\setsepchar[*]{§* }%
\readlist*\ListeDefiTableCode{#2}%
- \begin{NiceTabular}{>{\columncolor{gray!15}}{c}*{10}{c}}[hvlines,color-inside]
+ \begin{NiceTabular}{>{\columncolor{gray!15}}{c}*{10}{c}}[hvlines]%,color-inside]
\rowcolor{gray!15}$\times$&\xintFor* ##1 in {\xintSeq {1}{10}}\do{%
\xintifForFirst{}{&}##1}
\\
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDistributivite.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCDistributivite.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCDistributivite.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -17,22 +17,22 @@
\draw[-stealth,out=50,in=140,DCFlechesh!50,transform canvas={yshift=2pt}] (Distri-0.north) to (Distri-3.north);
\draw[-stealth,out=-50,in=-140,DCFlechesb,transform canvas={yshift=-2pt}] (Distri-1.south) to (Distri-2.south);
\draw[-stealth,out=-50,in=-140,DCFlechesb!50,transform canvas={yshift=-2pt}] (Distri-1.south) to (Distri-3.south);
- \end{tikzpicture}
-}
+ \end{tikzpicture}%
+}%
\newcommand\DrawArrowSimple[1]{%
\begin{tikzpicture}[overlay,remember picture]
\draw[-stealth,out=50,in=140,DCFlechesh,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-2.north);
\draw[-stealth,out=50,in=140,DCFlechesh!50,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-3.north);
- \end{tikzpicture}
-}
+ \end{tikzpicture}%
+}%
\newcommand\DrawArrowSimpleRenverse[1]{%
\begin{tikzpicture}[overlay,remember picture]
\draw[-stealth,out=140,in=50,DCFlechesh,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-0.north);
\draw[-stealth,out=140,in=50,DCFlechesh!50,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-1.north);
- \end{tikzpicture}
-}
+ \end{tikzpicture}%
+}%
\newcounter{NbDistri}%
\setcounter{NbDistri}{0}%
@@ -45,9 +45,9 @@
\defKV[ClesDistributivite]{CouleurReduction=\ifempty{#1}{}{\colorlet{DCReduction}{#1}\setKV[ClesDistributivite]{Reduction}}}%
%
\newcommand\Tuile[4]{%
- \ifluatex
- \mplibforcehmode
- \begin{mplibcode}
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
boolean Vide,Reperes,Print;
Vide=\useKV[ClesDistributivite]{Vide};
Reperes=\useKV[ClesDistributivite]{Reperes};
@@ -262,8 +262,8 @@
endfor;
fi;
fi;
- \end{mplibcode}
- \else
+ \end{mplibcode}%
+ \else%
\begin{mpost}[mpsettings={boolean Vide,Print; Vide=\useKV[ClesDistributivite]{Vide}; Print=\useKV[ClesDistributivite]{Impression};}]
pair _CoinTuilev;
_CoinTuilev=(0,0);
@@ -431,8 +431,8 @@
fi;
fi;
\end{mpost}
- \fi
-}
+ \fi%
+}%
\NewDocumentCommand\Affichage{sommm}{%
\setKV[ClesDistributivite]{#2}%On lit les arguments optionnels
@@ -539,14 +539,14 @@
\num{\fpeval{#2+#3}}^2=(\num{#2}+\num{#3})^2=\num{#2}^2+2\times\num{#2}\times\num{#3}+\num{#3}^2=\num{\fpeval{#2*#2}}+\num{\fpeval{2*#2*#3}}+\num{\fpeval{#3*#3}}=\num{\fpeval{(#2+#3)**2}}
}{%
\num{\fpeval{#2+#3}}^2=(\num{#2}\num{#3})^2=\num{#2}^2-2\times\num{#2}\times\num{\fpeval{-#3}}+\num{\fpeval{-#3}}^2=\num{\fpeval{#2*#2}}-\num{\fpeval{2*#2*abs(#3)}}+\num{\fpeval{#3*#3}}=\num{\fpeval{(#2-abs(#3))**2}}
- }
- \else
+ }%
+ \else%
\num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}=(\num{#2}+\num{#3})\times(\num{#4}\num{#5})=\num{#2}^2-\num{#3}^2=\num{\fpeval{#2*#2}}-\num{\fpeval{#3*#3}}=\num{\fpeval{(#2+#3)*(#2-#3)}}
\fi%
}{%
\xintifboolexpr{\useKV[ClesDistributivite]{Etape}==1}{%
\ifx\bla#4\bla(\Affichage{0}{#2}{#3})^2\else(\Affichage{0}{#2}{#3})(\Affichage{0}{#4}{#5})\fi%
- }{}
+ }{}%
\xintifboolexpr{\useKV[ClesDistributivite]{Etape}==2}{\ifx\bla#4\bla\xintifboolexpr{#3>0}{\xintifboolexpr{#2==1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2==1}{}{)}^2+2\times\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{#3}+\num{#3}^2}{\xintifboolexpr{#2==1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2==1}{}{)}^2-2\times\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{\fpeval{0-#3}}+\num{\fpeval{0-#3}}^2}\else\xintifboolexpr{#2==1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2==1}{}{)}^2-\num{#3}^2\fi}{}
\xintifboolexpr{\useKV[ClesDistributivite]{Etape}==3}{%
\xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
@@ -624,13 +624,17 @@
% Etape 1
\xintifboolexpr{\useKV[ClesDistributivite]{Etape}==1}{%
%cpt=\theNbCalculDistri%
- \xintifboolexpr{#2==0}{%
- }{\xintifboolexpr{#3==0}{}{(}}\Tikzmark{\Affichage[#1]{0}{#2}{0}}%
+ \xintifboolexpr{#2==0}{}{\xintifboolexpr{#3==0}{}{(}}\Tikzmark{\Affichage[#1]{0}{#2}{0}}%
\ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}\mathcolor{black}{}}{}%
- \xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#3)}}}%
+ %A
+ \xintifboolexpr{#3>0}{
+ \xintifboolexpr{#2==0}{}{+}
+ }{
+ \xintifboolexpr{#3<0}{\xintifboolexpr{#2==0}{{-}}{-}}{}
+ }\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#3)}}}%B%
\ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}\mathcolor{black}{}}{}%
- \xintifboolexpr{#2==0}{}{\xintifboolexpr{#3==0}{}{)}}%
- %
+ \xintifboolexpr{#2==0}{}{\xintifboolexpr{#3==0}{}{)}}%
+ %
\ifboolKV[ClesDistributivite]{AideMul}{\times}{}%on aide dans le cas double
\xdef\Multi{\fpeval{#4*#5}}%affichage auto si (a+b)xk
%
@@ -651,7 +655,7 @@
\DrawArrow%
}%
}{}\setcounter{NbDistri}{0}%
- }{}
+ }{}%
% Etape 2
\xintifboolexpr{\useKV[ClesDistributivite]{Etape}==2}{%
%cpt=\theNbCalculDistri%
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcrireunQCM.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcrireunQCM.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcrireunQCM.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -207,7 +207,7 @@
\xdef\ListeNom{\useKV[ClesQCM]{Noms}}%
\setsepchar[*]{/}%
\readlist*\ListeNomsMul{\ListeNom}%
- \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+ \begin{longtable}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
\cline{2-\NBcases}%
\multicolumn{1}{c|}{}%
\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
@@ -222,7 +222,7 @@
}\\
}%
\hline%
- \end{tabular}%
+ \end{longtable}%
\renewcommand{\arraystretch}{1}%
}{%
\ifboolKV[ClesQCM]{VF}{%
@@ -230,7 +230,7 @@
\setlength{\PfCLargeurQCM}{\useKV[ClesQCM]{Largeur}}%
\setlength{\LargeurQCM}{\linewidth-6\tabcolsep-2\PfCLargeurQCM-4\arrayrulewidth}%
\xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
- \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+ \begin{longtable}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
\cline{2-\NBcases}%
\multicolumn{1}{c|}{}&\useKV[ClesQCM]{NomV}&\useKV[ClesQCM]{NomF}\\
\hline%
@@ -241,7 +241,7 @@
}\\
}%
\hline%
- \end{tabular}
+ \end{longtable}
}{%
\ifboolKV[ClesQCM]{ACompleter}{%
\xdef\PfCTotalCases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
@@ -250,7 +250,7 @@
}%
\setlength{\LargeurQCM}{\fpeval{(\linewidth-2*\tabcolsep-\PfCTotalCases*(2*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
\xdef\NumeroReponse{\fpeval{\useKV[ClesQCM]{Reponses}+2}}%
- \begin{tabular}{|p{\LargeurQCM}|*{\PfCTotalCases}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+ \begin{longtable}{|p{\LargeurQCM}|*{\PfCTotalCases}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
\ifboolKV[ClesQCM]{Titre}{%
\cline{2-\fpeval{\PfCTotalCases+1}}%
\multicolumn{1}{c|}{}\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
@@ -265,7 +265,7 @@
}\ifnum\fpeval{\PfCTotalCases-\useKV[ClesQCM]{Reponses}}>0\relax\uppercase{&}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\fi\\
}%
\hline%
- \end{tabular}%
+ \end{longtable}%
}%
}%
\renewcommand{\arraystretch}{1}%
@@ -321,7 +321,7 @@
\xdef\ListeNom{\useKV[ClesQCM]{Noms}}%
\setsepchar[*]{/}%
\readlist*\ListeNomsMul{\ListeNom}%
- \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+ \begin{longtable}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
\cline{2-\NBcases}%
\multicolumn{1}{c|}{}%
\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
@@ -336,7 +336,7 @@
}\\
}%
\hline%
- \end{tabular}%
+ \end{longtable}%
\renewcommand{\arraystretch}{1}%
}{%
\ifboolKV[ClesQCM]{VF}{%
@@ -344,7 +344,7 @@
\setlength{\PfCLargeurQCM}{\useKV[ClesQCM]{Largeur}}%
\setlength{\LargeurQCM}{\linewidth-6\tabcolsep-2\PfCLargeurQCM-4\arrayrulewidth}%
\xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
- \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+ \begin{longtable}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
\cline{2-\NBcases}%
\multicolumn{1}{c|}{}&\useKV[ClesQCM]{NomV}&\useKV[ClesQCM]{NomF}\\
\hline%
@@ -355,7 +355,7 @@
}\\
}%
\hline%
- \end{tabular}
+ \end{longtable}
}{%
\ifboolKV[ClesQCM]{ACompleter}{%
\xdef\PfCTotalCases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
@@ -364,7 +364,7 @@
}%
\setlength{\LargeurQCM}{\fpeval{(\linewidth-2*\tabcolsep-\PfCTotalCases*(2*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
\xdef\NumeroReponse{\fpeval{\useKV[ClesQCM]{Reponses}+2}}%
- \begin{tabular}{|p{\LargeurQCM}|*{\PfCTotalCases}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+ \begin{longtable}{|p{\LargeurQCM}|*{\PfCTotalCases}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
\ifboolKV[ClesQCM]{Titre}{%
\cline{2-\fpeval{\PfCTotalCases+1}}%
\multicolumn{1}{c|}{}\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
@@ -379,7 +379,7 @@
}\ifnum\fpeval{\PfCTotalCases-\useKV[ClesQCM]{Reponses}}>0\relax\uppercase{&}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\fi\\
}%
\hline%
- \end{tabular}%
+ \end{longtable}%
}%
}%
\renewcommand{\arraystretch}{1}%
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcritureUnites.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcritureUnites.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcritureUnites.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -1,8 +1,8 @@
%%%
% Ecritures d'unit\'es
%%%
-\def\filedateEcrireUnites{2025/05/26}%
-\def\fileversionEcrireUnites{0.1a}%
+\def\filedateEcrireUnites{2025/07/17}%
+\def\fileversionEcrireUnites{0.1b}%
\message{-- \filedateEcrireUnites\space v\fileversionEcrireUnites}%
%
\setKVdefault[Unites]{m=false,km=false,hm=false,ha=false,dam=false,a=false,dm=false,cm=true,mm=false,um=false,nm=false,g=true,t=false,q=false,kg=false,hg=false,dag=false,dg=false,cg=false,mg=false,ug=false,ng=false,mmin=false,kmh=true,kms=false,ms=false,mh=false,kgm=false,kgL=false,gcm=true,L=true,kL=false,hL=false,daL=false,dL=false,cL=false,mL=false,l=true,kl=false,hl=false,dal=false,dl=false,cl=false,ml=false,Go=true,Mo=false,ko=false,To=false,o=false,kWh=true,C=true,K=false,F=false,Nombre,US=false,UK=false,CFA=false,CFP=false,CHF=false,Euro=false,Precision=2,Dots={}}%
@@ -95,10 +95,9 @@
}%
}%
-\NewDocumentCommand \Horaire {o o > { \SplitArgument { 2 } { ; } } m }
-{%
+\NewDocumentCommand\Horaire{oo>{\SplitArgument{2}{;}}m}{%
\useKVdefault[Unites]%
- \setKV[Unites]{#1}
+ \setKV[Unites]{#1}%
\group_begin:%
\IfNoValueF{#2}
{ \keys_set:nn { siunitx } {#2} }
@@ -141,6 +140,91 @@
}%
}%
}%
+
+\NewDocumentCommand \Duree {o o > { \SplitArgument { 5 } { ; } } m }
+{%
+ \useKVdefault[Unites]%
+ \setKV[Unites]{#1}%
+ \group_begin:%
+ \IfNoValueF{#2}%
+ { \keys_set:nn { siunitx } {#2} }%
+ \siunitx_duree_output:nnn #3%
+ \group_end:%
+}%
+\cs_new_protected:Npn \siunitx_duree_output:nnn #1#2#3#4#5#6
+{%
+ \IfNoValueF{#1}%
+ {%
+ \tl_if_blank:nF {#1}%
+ {%
+ \ifboolKV[Unites]{Nombre}{%
+ \ifnum#1>1\relax\SI{#1}{\annee\xintifboolexpr{#1>1}{s}{}}\fi%
+ }{%
+ \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+ \pointilles[\PfCLgUnites]~\si{\annee(s)}}%
+ \IfNoValueF{#2}{~}%
+ }%
+ }%
+ \IfNoValueF{#2}%
+ {%
+ \tl_if_blank:nF {#2}%
+ {%
+ \ifboolKV[Unites]{Nombre}{%
+ \ifnum#2>0\relax\SI{#2}{\mois}\fi%
+ }{%
+ \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+ \pointilles[\PfCLgUnites]~\si{\mois}}%
+ \IfNoValueF{#3}{~}%
+ }%
+ }%
+ \IfNoValueF{#3}%
+ {%
+ \tl_if_blank:nF {#3}%
+ {%
+ \ifboolKV[Unites]{Nombre}{%
+ \ifnum#3>0\relax\SI{#3}{\jour}\fi%
+ }{%
+ \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+ \pointilles[\PfCLgUnites]~\si{\jour}}%
+ \IfNoValueF{#4}{~}%
+ }%
+ }%
+ \IfNoValueF{#4}%
+ {%
+ \tl_if_blank:nF {#4}%
+ {%
+ \ifboolKV[Unites]{Nombre}{%
+ \ifnum#4>0\relax\SI{#4}{\hour}\fi%
+ }{%
+ \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+ \pointilles[\PfCLgUnites]~\si{\hour}%
+ }%
+ \IfNoValueF{#5}{\ifnum#4>0\relax{}~\fi}%
+ }%
+ }%
+ \IfNoValueF{#5}%
+ {%
+ \tl_if_blank:nF {#5}%
+ {%
+ \ifboolKV[Unites]{Nombre}{%
+ \ifnum#5>0\relax\SI[minimum-integer-digits=2]{#5}{\minute}\fi%
+ }{%
+ \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+ \pointilles[\PfCLgUnites]~\si{\minute}}%
+ \IfNoValueF{#6}{~}%
+ }%
+ }%
+ \IfNoValueF{#6}%
+ {%
+ \tl_if_blank:nF {#6} {%
+ \ifboolKV[Unites]{Nombre}{%
+ \ifnum#6>0\relax\SI{#6}{\second}\fi%
+ }{%
+ \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+ \pointilles[\PfCLgUnites]~\si{\second}}%
+ }%
+ }%
+}%
\ExplSyntaxOff
\NewDocumentCommand\Temp{o m}{%
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCIteration.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCIteration.tex (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCIteration.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -0,0 +1,195 @@
+%%%
+% Itération
+%%%
+\def\filedateIteration{2025/07/30}%
+\def\fileversionIteration{0.1a}%
+\message{-- \filedateIteration\space v\fileversionIteration}%
+%
+\setKVdefault[Iteration]{Depart=4,Repetitions=3,Images=false,Ratio=false,Fleches=false,Debord=1,Completer=false,Solution=false,CouleurSol=Evidence,Ecart={ ; }}%
+
+\makeatletter
+\NewDocumentCommand\PfM at TikzMark{m}{%
+ \tikz[remember picture,baseline,inner sep=0pt]{%
+ \node[name=Iteration-\theNbDistri,anchor=base] {$#1$};}%
+ \stepcounter{NbDistri}%
+}%
+
+\NewDocumentCommand\Iteration{om}{%
+ \setcounter{NbDistri}{0}%
+ \useKVdefault[Iteration]%
+ \setKV[Iteration]{#1}%
+ \setsepchar{ }\ignoreemptyitems%
+ \readlist*\PfM at ListeOp{#2}%
+ \reademptyitems%
+% Lecture Itération : \showitems\PfM at ListeOp[]\par
+ \ifboolKV[Iteration]{Ratio}{%
+ \edef\PfM at ListeCompoAMelanger{}%
+ \edef\PfM at RetiensLesIterations{0}%
+ \xintFor* ##1 in{\xintSeq{1}{\fpeval{\PfM at ListeOplen/2}}}\do{%
+ \xintFor* ##2 in{\xintSeq{1}{\fpeval{\PfM at ListeOp[\fpeval{##1*2-1}]*\useKV[Iteration]{Repetitions}}}}\do{%
+ \edef\PfM at ListeCompoAMelanger{\PfM at ListeCompoAMelanger,##1}%
+ \edef\PfM at RetiensLesIterations{\fpeval{\PfM at RetiensLesIterations+1}}%
+ }%
+ }%
+ % Ajout d'éléments par la clé Debord.
+ \ifnum\useKV[Iteration]{Debord}>0\relax%
+ \edef\PfM at NbElements{0}%
+ \xintFor* ##2 in{\xintSeq{1}{\fpeval{\PfM at ListeOplen/2}}}\do{%
+ \xintFor* ##3 in{\xintSeq{1}{\PfM at ListeOp[\fpeval{##2*2-1}]}}\do{%
+ \edef\PfM at NbElements{\fpeval{\PfM at NbElements+1}}%
+ \ifnum\useKV[Iteration]{Debord}<\PfM at NbElements\relax%
+ \else%
+ % \PfM at ListeOp[\fpeval{2*##2}]%
+ \edef\PfM at ListeCompoAMelanger{\PfM at ListeCompoAMelanger,##2}%
+ \edef\PfM at RetiensLesIterations{\fpeval{\PfM at RetiensLesIterations+1}}%
+ \fi%
+ }%
+ }%
+ \fi%
+ \MelangeListe{\PfM at ListeCompoAMelanger}{\PfM at RetiensLesIterations}%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\PfM at ListeRatioAAfficher{\faa}%
+ \reademptyitems%
+ \xintFor* ##1 in{\xintSeq{1}{\PfM at RetiensLesIterations}}\do{%
+ \itemtomacro\PfM at ListeRatioAAfficher[##1]\PfM at RatioTiti%
+ \PfM at ListeOp[\fpeval{2*\PfM at RatioTiti}]%
+ }%
+ }{%
+ \ifboolKV[Iteration]{Images}{%
+ \xintFor* ##1 in{\xintSeq{1}{\useKV[Iteration]{Repetitions}}}\do{%
+ \xintFor* ##2 in{\xintSeq{1}{\fpeval{\PfM at ListeOplen/2}}}\do{%
+ \xintFor* ##3 in{\xintSeq{1}{\PfM at ListeOp[\fpeval{##2*2-1}]}}\do{%
+ \PfM at ListeOp[\fpeval{2*##2}]%
+ }%
+ }%
+ }%
+ % Ajout d'éléments par la clé Debord.
+ \ifnum\useKV[Iteration]{Debord}>0\relax%
+ \edef\PfM at NbElements{0}%
+ \xintFor* ##2 in{\xintSeq{1}{\fpeval{\PfM at ListeOplen/2}}}\do{%
+ \xintFor* ##3 in{\xintSeq{1}{\PfM at ListeOp[\fpeval{##2*2-1}]}}\do{%
+ \edef\PfM at NbElements{\fpeval{\PfM at NbElements+1}}%
+ \ifnum\useKV[Iteration]{Debord}<\PfM at NbElements\relax%
+ \else%
+ \PfM at ListeOp[\fpeval{2*##2}]%
+ \fi%
+ }%
+ }%
+ \fi%
+ }{%
+ \ifboolKV[Iteration]{Completer}{\edef\PfM at Repetitions{\fpeval{\useKV[Iteration]{Repetitions}-1}}}{\edef\PfM at Repetitions{\fpeval{\useKV[Iteration]{Repetitions}}}}%
+ \edef\PfM at ValeurIntermediaire{\useKV[Iteration]{Depart}}%
+ \edef\PfM at ListeSuiteNb{\useKV[Iteration]{Depart}}%
+ \xintFor* ##1 in{\xintSeq{1}{\PfM at Repetitions}}\do{%
+ \edef\PfMk{##1}%
+ \xintFor* ##2 in{\xintSeq{1}{\PfM at ListeOplen}}\do{%
+ \edef\PfM at ValeurIntermediaire{\fpeval{\PfM at ValeurIntermediaire\PfM at ListeOp[##2]}}%
+ \edef\PfM at ListeSuiteNb{\PfM at ListeSuiteNb,\PfM at ValeurIntermediaire}%
+ }%
+ }%
+ \ifboolKV[Iteration]{Completer}{%
+ \xintFor* ##3 in{\xintSeq{1}{\useKV[Iteration]{Debord}}}\do{%
+ \xintFor* ##2 in{\xintSeq{1}{\PfM at ListeOplen}}\do{%
+ \edef\PfMk{\fpeval{\PfMk+1}}%
+ \edef\PfM at ValeurIntermediaire{\fpeval{\PfM at ValeurIntermediaire\PfM at ListeOp[##2]}}%
+ \edef\PfM at ListeSuiteNb{\PfM at ListeSuiteNb,\PfM at ValeurIntermediaire}%
+ }%
+ }%
+ }{}%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\PfM at ListeRecupere{\PfM at ListeSuiteNb}%
+ \reademptyitems%
+ \xintFor* ##1 in{\xintSeq{1}{\fpeval{\PfM at ListeOplen*\PfM at Repetitions+1}}}\do{%
+ \PfM at TikzMark{\num{\PfM at ListeRecupere[##1]}}\xintifForLast{}{\useKV[Iteration]{Ecart}}%
+ }%
+ \ifboolKV[Iteration]{Completer}{%
+ \ifboolKV[Iteration]{Solution}{%
+ \xintFor* ##3 in{\xintSeq{1}{\useKV[Iteration]{Debord}}}\do{%
+ \xintFor* ##1 in{\xintSeq{1}{\PfM at ListeOplen}}\do{%
+ \edef\PfM at Titi{\fpeval{\PfM at ListeOplen*\PfM at Repetitions+1+##1+(##3-1)*\PfM at ListeOplen}}%
+ \useKV[Iteration]{Ecart}\PfM at TikzMark{\textcolor{\useKV[Iteration]{CouleurSol}}{\num{\PfM at ListeRecupere[\PfM at Titi]}}}%
+ }%
+ }%
+ }{%
+ \xintFor* ##3 in{\xintSeq{1}{\useKV[Iteration]{Debord}}}\do{%
+ \xintFor* ##1 in{\xintSeq{1}{\PfM at ListeOplen}}\do{%
+ \useKV[Iteration]{Ecart}\pointilles[25pt]{}%
+ }%
+ }%
+ }%
+ }{}%
+ .%
+ \ifboolKV[Iteration]{Fleches}{%
+ \ifnum\PfM at ListeOplen=1\relax%
+ %Fleches avec une opération !
+ \IfSubStr{\PfM at ListeOp[1]}{*}{%
+ \IfSubStr{\PfM at ListeOp[1]}{+}{%
+% Une multiplication et une addition :)
+ \StrBefore{\PfM at ListeOp[1]}{+}[\PfMPartieMul]%
+% PartieMul : \PfMPartieMul\par
+ \StrBehind{\PfM at ListeOp[1]}{+}[\PfMPartiePlus]%
+% PartiePlus : \PfMPartiePlus\par
+ \StrSubstitute{\PfMPartieMul}{*}{\times}[\PfMPartieMul]%
+% PartieMul : \PfMPartieMul\par
+ \xintFor* ##4 in{\xintSeq{0}{\fpeval{\theNbDistri-2}}}\do{%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \coordinate[xshift=0em,yshift=2em] (IterationA) at ($(Iteration-##4)!0.5!(Iteration-\fpeval{##4+1})$);
+ \draw[-stealth,transform canvas={yshift=0.5em}] (Iteration-##4.north) to node[pos=0.65,below]{\footnotesize$\PfMPartieMul$}(IterationA);%
+ \draw[-stealth,transform canvas={yshift=0.5em}] (IterationA) to node[pos=0.65,above]{\footnotesize$+\num{\PfMPartiePlus}$}(Iteration-\fpeval{##4+1}.north);%
+ \end{tikzpicture}%
+ }%
+ }{\IfSubStr{\PfM at ListeOp[1]}{-}{%
+% une multiplication et une soustraction :)
+ \StrBefore{\PfM at ListeOp[1]}{-}[\PfMPartieMul]%
+ \StrBehind{\PfM at ListeOp[1]}{-}[\PfMPartieMoins]%
+ \StrSubstitute{\PfMPartieMul}{*}{\times}[\PfMPartieMul]%
+ \xintFor* ##4 in{\xintSeq{0}{\fpeval{\theNbDistri-2}}}\do{%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \coordinate[xshift=0em,yshift=2em] (IterationA) at ($(Iteration-##4)!0.5!(Iteration-\fpeval{##4+1})$);
+ \draw[-stealth,transform canvas={yshift=0.5em}] (Iteration-##4.north) to node[pos=0.65,below]{\footnotesize$\PfMPartieMul$}(IterationA);%
+ \draw[-stealth,transform canvas={yshift=0.5em}] (IterationA) to node[pos=0.65,above]{\footnotesize$-\num{\PfMPartieMoins}$}(Iteration-\fpeval{##4+1}.north);%
+ \end{tikzpicture}
+ }%
+ }{%
+% une seule et unique opération : \PfM at ListeOp[1]
+ \xintFor* ##4 in{\xintSeq{0}{\fpeval{\theNbDistri-2}}}\do{%
+ \IfSubStr{\PfM at ListeOp[1]}{*}{\StrBehind{\PfM at ListeOp[1]}{*}[\PfMPartieMul]\edef\PfMTiti{\times\num{\PfMPartieMul}}}{}%
+ \IfSubStr{\PfM at ListeOp[1]}{/}{\StrBehind{\PfM at ListeOp[1]}{/}[\PfMPartieMul]\edef\PfMTiti{\div\num{\PfMPartieMul}}}{}%
+ \IfSubStr{\PfM at ListeOp[1]}{+}{\StrBehind{\PfM at ListeOp[1]}{+}[\PfMPartieMul]\edef\PfMTiti{+\num{\PfMPartieMul}}}{}%
+ \IfSubStr{\PfM at ListeOp[1]}{-}{\StrBehind{\PfM at ListeOp[1]}{-}[\PfMPartieMul]\edef\PfMTiti{-\num{\PfMPartieMul}}}{}%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \draw[-stealth,out=30,in=150,transform canvas={yshift=0.5em}] (Iteration-##4.north) to node[midway,above]{\footnotesize$\PfMTiti$}(Iteration-\fpeval{##4+1}.north);%
+ \end{tikzpicture}%
+ }%
+ }%
+ }%
+ }{%
+% une seule et unique opération : \PfM at ListeOp[1]
+ \xintFor* ##4 in{\xintSeq{0}{\fpeval{\theNbDistri-2}}}\do{%
+ \IfSubStr{\PfM at ListeOp[1]}{*}{\StrBehind{\PfM at ListeOp[1]}{*}[\PfMPartieMul]\edef\PfMTiti{\times\num{\PfMPartieMul}}}{}%
+ \IfSubStr{\PfM at ListeOp[1]}{/}{\StrBehind{\PfM at ListeOp[1]}{/}[\PfMPartieMul]\edef\PfMTiti{\div\num{\PfMPartieMul}}}{}%
+ \IfSubStr{\PfM at ListeOp[1]}{+}{\StrBehind{\PfM at ListeOp[1]}{+}[\PfMPartieMul]\edef\PfMTiti{+\num{\PfMPartieMul}}}{}%
+ \IfSubStr{\PfM at ListeOp[1]}{-}{\StrBehind{\PfM at ListeOp[1]}{-}[\PfMPartieMul]\edef\PfMTiti{-\num{\PfMPartieMul}}}{}%
+ \begin{tikzpicture}[remember picture,overlay]
+ \draw[-stealth,out=30,in=150,transform canvas={yshift=0.5em}] (Iteration-##4.north) to node[midway,above]{\footnotesize$\PfMTiti$}(Iteration-\fpeval{##4+1}.north);%
+ \end{tikzpicture}%
+ }%
+ }%
+ \else%
+ \xintFor* ##4 in{\xintSeq{0}{\fpeval{\theNbDistri-2}}}\do{%
+ \modulo{##4}{\PfM at ListeOplen}%
+ \edef\PfM at Test{\PfM at ListeOp[\fpeval{\the\remainder+1}]}%
+ \IfSubStr{\PfM at Test}{*}{\StrBehind{\PfM at Test}{*}[\PfMPartieMul]\edef\PfMTiti{\times\num{\PfMPartieMul}}}{}%
+ \IfSubStr{\PfM at Test}{/}{\StrBehind{\PfM at Test}{/}[\PfMPartieMul]\edef\PfMTiti{\div\num{\PfMPartieMul}}}{}%
+ \IfSubStr{\PfM at Test}{+}{\StrBehind{\PfM at Test}{+}[\PfMPartieMul]\edef\PfMTiti{+\num{\PfMPartieMul}}}{}%
+ \IfSubStr{\PfM at Test}{-}{\StrBehind{\PfM at Test}{-}[\PfMPartieMul]\edef\PfMTiti{-\num{\PfMPartieMul}}}{}%
+ \begin{tikzpicture}[remember picture,overlay]
+ \draw[-stealth,out=30,in=150,transform canvas={yshift=0.5em}] (Iteration-##4.north) to node[midway,above]{\footnotesize$\PfMTiti$}(Iteration-\fpeval{##4+1}.north);%
+ \end{tikzpicture}%
+ }%
+ \fi%
+ }{}%
+ }%
+ }%
+}%
+\makeatother
\ No newline at end of file
Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCIteration.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCJeton.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCJeton.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCJeton.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -1,8 +1,8 @@
%%%
% Jeton
%%%
-\def\filedateJeton{2024/08/04}%
-\def\fileversionJeton{0.1}%
+\def\filedateJeton{2025/08/14}%
+\def\fileversionJeton{0.1a}%
\message{-- \filedateJeton\space v\fileversionJeton}%
%
\setKVdefault[Jeton]{Diametre=5mm,Impression=false}%
@@ -38,7 +38,7 @@
Intensite:=0.3+uniformdeviate(2)/10;
draw woodenThing(p,JetonAngle) withcolor Intensite*Fond;
draw p;
- label(TEX("\bfseries "&decimal(#1)),(0,0));
+ label(TEX("\bfseries \num{#1}"),(0,0));
\end{mplibcode}
\fi%
}%
\ No newline at end of file
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCKakuro.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCKakuro.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCKakuro.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -30,7 +30,7 @@
}{}%
\savecomparemode%
\comparestrict%
- \begin{NiceTabular}{*{\useKV[Kakuro]{TLargeur}}{m{\useKV[Kakuro]{Largeur}}}}[hvlines,color-inside]%
+ \begin{NiceTabular}{*{\useKV[Kakuro]{TLargeur}}{m{\useKV[Kakuro]{Largeur}}}}[hvlines]%,color-inside]%
\xintFor* ##1 in {\xintSeq{0}{\fpeval{\useKV[Kakuro]{THauteur}-1}}}\do{%
\xintFor* ##2 in {\xintSeq{1}{\useKV[Kakuro]{TLargeur}}}\do{%
\rule{0pt}{\PfCKakuro}%
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCKenKen.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCKenKen.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCKenKen.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -19,7 +19,7 @@
\ignoreemptyitems%
\savecomparemode%
\comparestrict%
- \begin{NiceTabular}{*{\useKV[ClesKK]{Taille}}{m{\useKV[ClesKK]{Largeur}}}}[color-inside]%
+ \begin{NiceTabular}{*{\useKV[ClesKK]{Taille}}{m{\useKV[ClesKK]{Largeur}}}}%[color-inside]%
\CodeBefore
\xintFor* ##1 in {\xintSeq{2}{\fpeval{\useKV[ClesKK]{Taille}}}}\do{%
\tikz\draw[gray] (##1-|1) -- (##1-|last);%
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCModeleBarre.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCModeleBarre.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCModeleBarre.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -427,9 +427,11 @@
if nbfois>0:
label(TEX(t),iso((0,0),(u*abs(nbfois),Hauteur)));
else:
+ if t<>"":
label.bot(TEX(t),iso((0,0),(u*abs(nbfois),-Hauteur)));
drawdblarrow (0,-0.5*Hauteur)--(u*abs(nbfois),-0.5*Hauteur);
fi;
+ fi;
);
$
enddef;
@@ -449,9 +451,11 @@
if nbfois>0:
label(LATEX(t),iso((0,0),(u*abs(nbfois),Hauteur)));
else:
+ if t<>"":
label.bot(LATEX(t),iso((0,0),(u*abs(nbfois),-Hauteur)));
drawdblarrow (0,-0.5*Hauteur)--(u*abs(nbfois),-0.5*Hauteur);
fi;
+ fi;
);
$
enddef;
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMonnaieEuro.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCMonnaieEuro.tex (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCMonnaieEuro.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -0,0 +1,91 @@
+%%%
+% Monnaie
+%%%
+\def\filedateMonnaie{2025/08/13}%
+\def\fileversionMonnaie{0.1}%
+\message{-- \filedateMonnaie\space v\fileversionMonnaie}%
+
+\setKVdefault[PfCMonnaie]{Echelle=0.5,Ecart=10pt,EcartPiece=10pt,EcartVH=1.2875cm,Vertical,Impression}%
+
+\makeatletter
+\NewDocumentCommand\Monnaie{om}{%
+ \useKVdefault[PfCMonnaie]%
+ \setKV[PfCMonnaie]{#1}%
+ \edef\PfC at ListeMonnaieAv{#2}%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\PfC at ListeMonnaie{\PfC at ListeMonnaieAv}%
+ \reademptyitems%
+ \edef\PfC at scale{\useKV[PfCMonnaie]{Echelle}}%
+ \ifboolKV[PfCMonnaie]{Impression}{%
+ \ifboolKV[PfCMonnaie]{Vertical}{%
+ \xintFor* ##1 in{\xintSeq{1}{\PfC at ListeMonnaielen}}\do{%
+ \StrCount{\PfC at ListeMonnaie[##1]}{*}[\PfC at RecupStar]%
+ \ifnum\PfC at RecupStar=0\relax%
+ \itemtomacro\PfC at ListeMonnaie[##1]\PfCsuffixemonnaie%
+ \includegraphics[scale=\PfC at scale]{PfCPiece\PfCsuffixemonnaie.pdf}%
+ \else%
+ \StrBefore{\PfC at ListeMonnaie[##1]}{*}[\PfC at Facteur]%
+ \StrBehind{\PfC at ListeMonnaie[##1]}{*}[\PfC at Image]%
+ \begin{tikzpicture}
+ \foreach \PfCi in {1,...,\PfC at Facteur}{%
+ \draw (0,{-1*(\PfCi-1)*\useKV[PfCMonnaie]{EcartPiece}}) node[inner sep=0pt]{\includegraphics[scale=\PfC at scale]{PfCPiece\PfC at Image.pdf}};%
+ }%
+ \end{tikzpicture}%
+ \fi%
+ \xintifForLast{}{\hspace*{\useKV[PfCMonnaie]{Ecart}}}%
+ }%
+ }{%
+ \begin{tikzpicture}
+ \xintFor* ##1 in{\xintSeq{1}{\PfC at ListeMonnaielen}}\do{%
+ \StrCount{\PfC at ListeMonnaie[##1]}{*}[\PfC at RecupStar]%
+ \ifnum\PfC at RecupStar=0\relax%
+ \itemtomacro\PfC at ListeMonnaie[##1]\PfC at Image%
+ \draw (0,{-1*(##1-1)*\useKV[PfCMonnaie]{EcartVH}}) node[inner sep=0pt]{\includegraphics[scale=\PfC at scale]{PfCPiece\PfC at Image.pdf}};%
+ \else%
+ \StrBefore{\PfC at ListeMonnaie[##1]}{*}[\PfC at Facteur]%
+ \StrBehind{\PfC at ListeMonnaie[##1]}{*}[\PfC at Image]%
+ \foreach \PfCi in {1,...,\PfC at Facteur}{%
+ \draw ({-1*(\PfCi-1)*\useKV[PfCMonnaie]{EcartPiece}},{-1*(##1-1)*\useKV[PfCMonnaie]{EcartVH}}) node[inner sep=0pt]{\includegraphics[scale=\PfC at scale]{PfCPiece\PfC at Image.pdf}};%
+ }%
+ \fi%
+ }%
+ \end{tikzpicture}%
+ }%
+ }{%Couleur
+ \ifboolKV[PfCMonnaie]{Vertical}{%
+ \xintFor* ##1 in{\xintSeq{1}{\PfC at ListeMonnaielen}}\do{%
+ \StrCount{\PfC at ListeMonnaie[##1]}{*}[\PfC at RecupStar]%
+ \ifnum\PfC at RecupStar=0\relax%
+ \itemtomacro\PfC at ListeMonnaie[##1]\PfCsuffixemonnaie%
+ \includegraphics[scale=\PfC at scale]{PfCPieceCoul\PfCsuffixemonnaie.pdf}%
+ \else%
+ \StrBefore{\PfC at ListeMonnaie[##1]}{*}[\PfC at Facteur]%
+ \StrBehind{\PfC at ListeMonnaie[##1]}{*}[\PfC at Image]%
+ \begin{tikzpicture}
+ \foreach \PfCi in {1,...,\PfC at Facteur}{%
+ \draw (0,{-1*(\PfCi-1)*\useKV[PfCMonnaie]{EcartPiece}}) node[inner sep=0pt]{\includegraphics[scale=\PfC at scale]{PfCPieceCoul\PfC at Image.pdf}};%
+ }%
+ \end{tikzpicture}%
+ \fi%
+ \xintifForLast{}{\hspace*{\useKV[PfCMonnaie]{Ecart}}}%
+ }%
+ }{%
+ \begin{tikzpicture}
+ \xintFor* ##1 in{\xintSeq{1}{\PfC at ListeMonnaielen}}\do{%
+ \StrCount{\PfC at ListeMonnaie[##1]}{*}[\PfC at RecupStar]%
+ \ifnum\PfC at RecupStar=0\relax%
+ \itemtomacro\PfC at ListeMonnaie[##1]\PfC at Image%
+ \draw (0,{-1*(##1-1)*\useKV[PfCMonnaie]{EcartVH}}) node[inner sep=0pt]{\includegraphics[scale=\PfC at scale]{PfCPieceCoul\PfC at Image.pdf}};%
+ \else%
+ \StrBefore{\PfC at ListeMonnaie[##1]}{*}[\PfC at Facteur]%
+ \StrBehind{\PfC at ListeMonnaie[##1]}{*}[\PfC at Image]%
+ \foreach \PfCi in {1,...,\PfC at Facteur}{%
+ \draw ({-1*(\PfCi-1)*\useKV[PfCMonnaie]{EcartPiece}},{-1*(##1-1)*\useKV[PfCMonnaie]{EcartVH}}) node[inner sep=0pt]{\includegraphics[scale=\PfC at scale]{PfCPieceCoul\PfC at Image.pdf}};%
+ }%
+ \fi%
+ }%
+ \end{tikzpicture}%
+ }%
+ }%
+}%
+\makeatother
\ No newline at end of file
Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMonnaieEuro.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCodes.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCodes.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCodes.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -14,7 +14,7 @@
\readlist*\ListeMotsCodes{#2}%
\xdef\ListeMotsCodesPas{\fpeval{\ListeMotsCodeslen/\useKV[MotsCodes]{Colonnes}}}%
% \begin{NiceTabular}{*{\fpeval{\useKV[MotsCodes]{Colonnes}}}{>{\centering\arraybackslash}m{\useKV[MotsCodes]{Largeur}}}}[color-inside]
- \begin{NiceTabular}{*{\fpeval{\useKV[MotsCodes]{Colonnes}}}{m{\useKV[MotsCodes]{Largeur}}}}[color-inside]
+ \begin{NiceTabular}{*{\fpeval{\useKV[MotsCodes]{Colonnes}}}{m{\useKV[MotsCodes]{Largeur}}}}%[color-inside]
\xintFor* ##1 in {\xintSeq {1}{\ListeMotsCodesPas}}\do{%
\xintFor* ##2 in {\xintSeq {1}{\fpeval{\useKV[MotsCodes]{Colonnes}}}}\do{%
\xintifForFirst{}{&}\Block[draw=black]{4-1}{}%
@@ -43,7 +43,7 @@
\foreachitem\compteur\in\ListeMotsCodesTableau{%
\xintifboolexpr{\ListeMotsCodesMax<\listlen\ListeMotsCodesTableau[\compteurcnt]}{\xdef\ListeMotsCodesMax{\fpeval{\listlen\ListeMotsCodesTableau[\compteurcnt]}}}{}%
}%
- \begin{NiceTabular}{*{\fpeval{\ListeMotsCodesMax}}{>{\centering\arraybackslash}m{\useKV[MotsCodes]{LargeurT}}}}[color-inside]
+ \begin{NiceTabular}{*{\fpeval{\ListeMotsCodesMax}}{>{\centering\arraybackslash}m{\useKV[MotsCodes]{LargeurT}}}}%[color-inside]
\xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeMotsCodesTableaulen}}}\do{%
\xintFor* ##2 in {\xintSeq {1}{\listlen\ListeMotsCodesTableau[##1]}}\do{%
\xintifForFirst{}{&}\ifboolKV[MotsCodes]{Solution}{%
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMulEthiopie.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCMulEthiopie.tex (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCMulEthiopie.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -0,0 +1,148 @@
+%%%
+% Multiplication Japonaise
+%%%
+\def\filedateMulEthiopie{2025/08/01}%
+\def\fileversionMulEthiopie{0.1}%
+\message{-- \filedateMulEthiopie\space v\fileversionMulEthiopie}%
+%
+\setKVdefault[MulEthiopie]{Etape=0,CouleurInter=Crimson,Details=false,Aide=false}
+
+\makeatletter
+\NewDocumentCommand\MulEthiopie{om}{%
+ \useKVdefault[MulEthiopie]%
+ \setKV[MulEthiopie]{#1}%
+ \setsepchar{x}\ignoreemptyitems%
+ \readlist*\PfC at MulEthiopie{#2}%
+ \reademptyitems%
+ \ifboolKV[MulEthiopie]{Details}{%
+ \PfM at BuildTabMulEthiopieDetaille%
+ }{%
+ \PfM at BuildTabMulEthiopie%
+ }%
+}%
+
+\NewDocumentCommand\PfM at BuildTabMulEthiopie{}{%
+ % Combien de lignes
+ \edef\PfC at FacteurA{\PfC at MulEthiopie[1]}%
+ \edef\PfC at FacteurB{\PfC at MulEthiopie[2]}%
+ \edef\PfC at ProduitFinal{\fpeval{\PfC at FacteurA*\PfC at FacteurB}}%
+ \StrLen{\PfC at ProduitFinal}[\PfC at LongueurTab]%
+ \edef\PfC at MulEthiopieTotalEtape{0}%
+ \whiledo{\PfC at FacteurA>1}{%
+ \quotient{\PfC at FacteurA}{2}%
+ \edef\PfC at FacteurA{\the\intquotient}%
+ \edef\PfC at MulEthiopieTotalEtape{\fpeval{\PfC at MulEthiopieTotalEtape+1}}%
+ }%
+ \colorlet{PfCCouleurMulEthiopie}{\useKV[MulEthiopie]{CouleurInter}}%
+ \ifnum\useKV[MulEthiopie]{Etape}<3\relax%
+ \begin{NiceTabular}{m{\fpeval{0.5*\PfC at LongueurTab}em}m{\fpeval{0.5*\PfC at LongueurTab}em}}%
+ \CodeBefore
+ \ifnum\useKV[MulEthiopie]{Etape}=2\relax%
+ \xdef\PfC at FacteurA{\PfC at MulEthiopie[1]}%
+ \xintFor* ##1 in{\xintSeq{1}{\fpeval{\PfC at MulEthiopieTotalEtape+1}}}\do{%
+ \ifodd\PfC at FacteurA\relax%
+ \ifboolKV[MulEthiopie]{Aide}{\tikz \draw[fill=LightGreen] (\fpeval{##1+1+1}-|1) rectangle (\fpeval{##1+1}-|2);}{}%
+ \else%
+ \fi%
+ \quotient{\PfC at FacteurA}{2}%
+ \xdef\PfC at FacteurA{\the\intquotient}%
+ }%
+ \fi%
+ \Body%
+ \Block[draw,fill=Cornsilk]{1-2}{$\num{\PfC at MulEthiopie[1]}\times\num{\PfC at MulEthiopie[2]}$}&\\
+ \ifnum\useKV[MulEthiopie]{Etape}=0\relax%
+ \num{\PfC at MulEthiopie[1]}&\num{\PfC at MulEthiopie[2]}\\%
+ \xintFor* ##1 in{\xintSeq{1}{\PfC at MulEthiopieTotalEtape}}\do{%
+ &\\%
+ }%
+ \fi%
+ \ifnum\useKV[MulEthiopie]{Etape}>0\relax%
+ \xdef\PfC at FacteurA{\PfC at MulEthiopie[1]}%
+ \xdef\PfC at FacteurB{\PfC at MulEthiopie[2]}%
+ \xintFor* ##1 in{\xintSeq{1}{\fpeval{\PfC at MulEthiopieTotalEtape+1}}}\do{%
+ \num{\PfC at FacteurA}&%
+ \ifodd\PfC at FacteurA\relax%
+ \ifnum\useKV[MulEthiopie]{Etape}=2\relax%
+ \textcolor{PfCCouleurMulEthiopie}{\num{\PfC at FacteurB}}%
+ \else%
+ \num{\PfC at FacteurB}%
+ \fi%
+ \else%
+ \num{\PfC at FacteurB}%
+ \fi%
+ \quotient{\PfC at FacteurA}{2}%
+ \xdef\PfC at FacteurA{\the\intquotient}%
+ \xdef\PfC at FacteurB{\fpeval{\PfC at FacteurB*2}}%
+ \\
+ }%
+ \fi%
+ \CodeAfter%
+ \tikz \draw[line width=1pt] (2-|2) to (last-|2);%
+ \ifnum\useKV[MulEthiopie]{Etape}=2\relax%
+ \xdef\PfC at FacteurA{\PfC at MulEthiopie[1]}%
+ \xintFor* ##1 in{\xintSeq{1}{\fpeval{\PfC at MulEthiopieTotalEtape+1}}}\do{%
+ \ifodd\PfC at FacteurA\relax%
+ \else%
+ \tikz \draw[line width=1pt] (\fpeval{##1+1+0.5}-|1) to (\fpeval{##1+1+0.5}-|3);%
+ \fi%
+ \quotient{\PfC at FacteurA}{2}%
+ \xdef\PfC at FacteurA{\the\intquotient}%
+ }%
+ \fi%
+ \end{NiceTabular}%
+ \else%
+ \begin{align*}
+ \num{\PfC at MulEthiopie[1]}\times\num{\PfC at MulEthiopie[2]}&=
+ \xdef\PfC at FacteurA{\PfC at MulEthiopie[1]}%
+ \xdef\PfC at FacteurB{\PfC at MulEthiopie[2]}%
+ \xintFor* ## 1in{\xintSeq{1}{\fpeval{\PfC at MulEthiopieTotalEtape+1}}}\do{%
+ \ifodd\PfC at FacteurA\relax%
+ \num{\PfC at FacteurB}\xintifForLast{}{+}%
+ \fi%
+ \quotient{\PfC at FacteurA}{2}%
+ \xdef\PfC at FacteurA{\the\intquotient}%
+ \xdef\PfC at FacteurB{\fpeval{\PfC at FacteurB*2}}%
+ }\\
+ \num{\PfC at MulEthiopie[1]}\times\num{\PfC at MulEthiopie[2]}&=\mathcolor{Evidence}{\num{\fpeval{\PfC at MulEthiopie[1]*\PfC at MulEthiopie[2]}}}
+ \end{align*}
+ \fi%
+}%
+
+\NewDocumentCommand\PfM at BuildTabMulEthiopieDetaille{}{%
+ % Combien de lignes
+ \edef\PfC at FacteurA{\PfC at MulEthiopie[1]}%
+ \edef\PfC at FacteurB{\PfC at MulEthiopie[1]}%
+ \edef\PfC at ProduitFinal{\fpeval{\PfC at FacteurA*\PfC at FacteurB}}%
+ \StrLen{\PfC at ProduitFinal}[\PfC at LongueurTab]%
+ \edef\PfC at MulEthiopieTotalEtape{0}%
+ \whiledo{\PfC at FacteurA>1}{%
+ \quotient{\PfC at FacteurA}{2}%
+ \edef\PfC at FacteurA{\the\intquotient}%
+ \edef\PfC at MulEthiopieTotalEtape{\fpeval{\PfC at MulEthiopieTotalEtape+1}}%
+ }%
+ \ifnum\useKV[MulEthiopie]{Etape}>\fpeval{\PfC at MulEthiopieTotalEtape+1}\relax%
+ \message{Le nombre d'étapes demandé est supérieur aux \fpeval{\PfC at MulEthiopieTotalEtape+1} nécessaires à la multiplication \PfC at FacteurA x \PfC at FacteurB}%
+ \else%
+ \colorlet{PfCCouleurMulEthiopie}{\useKV[MulEthiopie]{CouleurInter}}%
+ \begin{NiceTabular}{m{\fpeval{0.5*\PfC at LongueurTab}em}m{\fpeval{0.5*\PfC at LongueurTab}em}}%
+ \Block[draw,fill=Cornsilk]{1-2}{$\num{\PfC at MulEthiopie[1]}\times\num{\PfC at MulEthiopie[2]}$}&\\
+ \xdef\PfC at FacteurA{\PfC at MulEthiopie[1]}%
+ \xdef\PfC at FacteurB{\PfC at MulEthiopie[2]}%
+ \xintFor* ##1 in{\xintSeq{1}{\useKV[MulEthiopie]{Etape}}}\do{%
+ \num{\PfC at FacteurA}&\num{\PfC at FacteurB}%
+ \quotient{\PfC at FacteurA}{2}%
+ \xdef\PfC at FacteurA{\the\intquotient}%
+ \xdef\PfC at FacteurB{\fpeval{\PfC at FacteurB*2}}%
+ \\
+ }%
+ \ifnum\useKV[MulEthiopie]{Etape}<\fpeval{\PfC at MulEthiopieTotalEtape+1}\relax%
+ \xintFor* ##1 in{\xintSeq{\fpeval{\useKV[MulEthiopie]{Etape}+1}}{\fpeval{\PfC at MulEthiopieTotalEtape+1}}}\do{%
+ &\\
+ }%
+ \fi%
+ \CodeAfter
+ \tikz \draw[line width=1pt] (2-|2) to (last-|2);
+ \end{NiceTabular}%
+ \fi%
+}%
+\makeatother
\ No newline at end of file
Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMulEthiopie.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCNotionFonction.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCNotionFonction.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCNotionFonction.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -1298,7 +1298,7 @@
pi*angle((x,sqrt(1-x**2)))/180
enddef;
def enplace=
- xscaled xu yscaled yu shifted (Origine*cm)
+ xscaled xu yscaled yu shifted (Origine*u)
enddef;
vardef placepoint(expr q,r)=
(q,r) enplace
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCOpCroisees.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCOpCroisees.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCOpCroisees.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -74,7 +74,7 @@
\setcounter{PfCOCVer}{0}%
%
\begin{center}
- \begin{NiceTabular}{c*{\PfCOCTaille}{m{\useKV[OpCroisees]{Largeur}}}}[color-inside]%
+ \begin{NiceTabular}{c*{\PfCOCTaille}{m{\useKV[OpCroisees]{Largeur}}}}%[color-inside]%
\Block{}{\rule{0pt}{\PfCOpCroisees}}\xintFor* ##1 in {\xintSeq{1}{\PfCOCTaille}}\do{%
&\Block{}{\modulo{##1}{2}\ifnum\remainder=1\relax\stepcounter{PfCOCHor}\Roman{PfCOCHor}\fi}%
}\\
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPatronPaves.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCPatronPaves.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCPatronPaves.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -336,9 +336,9 @@
}%
\def\MPPatronPave#1#2{%
- \ifluatex
- \mplibforcehmode
- \begin{mplibcode}
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
\MPPatronPaveCode
n:=0;
for p_=#2:
@@ -432,8 +432,8 @@
endfor;
fi;
EffectuerTraces;
- \end{mplibcode}
- \else
+ \end{mplibcode}%
+ \else%
\begin{mpost}[mpsettings={\MPPatronPaveCode;}]
n:=0;
for p_=#2:
@@ -448,8 +448,8 @@
LectureLargeur(#1);
Patron(#1);
EffectuerTraces;
- \end{mpost}
- \fi
+ \end{mpost}%
+ \fi%
}%
\def\MPPatronCubeCode{%
@@ -523,8 +523,8 @@
}%
\def\MPPatronCube#1#2{%
- \ifluatex
- \mplibforcehmode
+ \ifluatex%
+ \mplibforcehmode%
\begin{mplibcode}%
\MPPatronCubeCode
%
@@ -682,7 +682,7 @@
\def\MPPatronCubeold#1#2{%
\ifluatex
\mplibforcehmode
- \begin{mplibcode}
+ \begin{mplibcode}%
\MPPatronCubeCode
%
n:=0;
@@ -697,9 +697,9 @@
%
Patron(#1);
EffectuerTraces;
- \end{mplibcode}
- \else
- \begin{mpost}[mpsettings={\MPPatronCubeCode;}]
+ \end{mplibcode}%
+ \else%
+ \begin{mpost}[mpsettings={\MPPatronCubeCode;}]%
%
n:=0;
for p_=#2:
@@ -713,9 +713,9 @@
%
Patron(#1);
EffectuerTraces;
- \end{mpost}
- \fi
-}
+ \end{mpost}%
+ \fi%
+}%
\def\MPPatronPaveCodeold{%
Largeur=\useKV[ClesPatron]{Largeur};
@@ -857,7 +857,7 @@
Patron(#1);
%EffectuerTraces;
\end{mplibcode}
- \else
+ \else%
\begin{mpost}[mpsettings={\MPPatronPaveCode;}]
n:=0;
for p_=#2:
@@ -873,5 +873,5 @@
Patron(#1);
EffectuerTraces;
\end{mpost}
- \fi
+ \fi%
}%
\ No newline at end of file
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPattern.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCPattern.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCPattern.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -1,220 +1,1859 @@
%%%
% Visual Pattern
%%%
-\def\filedatePattern{2024/08/04}%
-\def\fileversionPattern{0.1}%
+\def\filedatePattern{2025/06/30}%
+\def\fileversionPattern{0.1a}%
\message{-- \filedatePattern\space v\fileversionPattern}%
%
-\setKVdefault[Pattern]{Type=1,Etape=3}
+\setKVdefault[Pattern]{Type=1,Etape=3,Base=carre,Basea=disque,Couleur={},Echelle={},Tableau=false,TableauV=false,Grille=false,Solution=false,CouleurSolution={},Calcul=false,Inverse=false,Formule=false,Litteral={},Resultat=false}
+\makeatletter
\NewDocumentCommand\VisualPattern{o}{%
\useKVdefault[Pattern]%
\setKV[Pattern]{#1}%
- \IfStrEqCase{\useKV[Pattern]{Type}}{%
- {284}{\BuildPatternDeuxCentQuatreVingtQuatre}%
- {254}{\BuildPatternDeuxCentCinquanteQuatre}%
- {156}{\BuildPatternCentCinquanteSix}%
- {155}{\BuildPatternCentCinquanteCinq}%
- {55}{\BuildPatternCinquanteCinq}%
- {53}{\BuildPatternCinquanteTrois}%
- {48}{\BuildPatternQuaranteHuit}%
- {46}{\BuildPatternQuaranteSix}%
- {45}{\BuildPatternQuaranteCinq}%
- {39}{\BuildPatternTrenteNeuf}%
- {30}{\BuildPatternTrente}%
- {24}{\BuildPatternVingtQuatre}%
- {20}{\BuildPatternVingt}%
- {19}{\BuildPatternDixNeuf}%
- {18}{\BuildPatternDixHuit}%
- {15}{\BuildPatternQuinze}%
- {14}{\BuildPatternQuatorze}%
- {6}{\BuildPatternSix}%
- {5}{\BuildPatternCinq}%
- {4}{\BuildPatternQuatre}%
- {3}{\BuildPatternTrois}%
- {2}{\BuildPatternDeux}%
- {1}{\BuildPatternUn}%
+ \edef\PfM at NumType{\useKV[Pattern]{Type}}%
+ \edef\etape{1}%
+ \ifboolKV[Pattern]{Grille}{\edef\PfMRetiensEtape{\useKV[Pattern]{Etape}}\setKV[Pattern]{Tableau=false,TableauV=false}}{}%
+ \ifboolKV[Pattern]{Tableau}{%
+ \edef\PfM at NumEtapeTotal{\useKV[Pattern]{Etape}}%
+ \begin{tabular}{*{\PfM at NumEtapeTotal}{c}}
+ \xintFor* ##1 in{\xintSeq{1}{\useKV[Pattern]{Etape}}}\do{%
+ \ifcsname BuildPattern@\PfM at NumType\endcsname%
+ \setKV[Pattern]{Etape=##1}
+ \csname BuildPattern@\PfM at NumType\endcsname%
+ \fi%
+ \xintifForLast{\\}{&}
+ }%\\
+ \xintFor* ##9 in{\xintSeq{1}{\PfM at NumEtapeTotal}}\do{%
+ Étape \num{##9}\xintifForLast{\\}{&}%\\
+ }%
+ \end{tabular}
+ }{%
+ \ifboolKV[Pattern]{TableauV}{%
+ \edef\PfM at NumEtapeTotal{\useKV[Pattern]{Etape}}%
+ \begin{tabular}{rc}
+ \xintFor* ##1 in{\xintSeq{1}{\useKV[Pattern]{Etape}}}\do{%
+ Étape \num{##1}&\\
+ &\ifcsname BuildPattern@\PfM at NumType\endcsname%
+ \setKV[Pattern]{Etape=##1}
+ \csname BuildPattern@\PfM at NumType\endcsname%
+ \fi%
+ \\
+ }%
+ \end{tabular}
+ }{%
+ \ifcsname BuildPattern@\PfM at NumType\endcsname%
+ \csname BuildPattern@\PfM at NumType\endcsname%
+ \fi%
+ }%
}%
}%
-%284
-\NewDocumentCommand\BuildPatternDeuxCentQuatreVingtQuatre{}{
+\expandafter\def\csname BuildPattern at 1\endcsname{\BuildPatternUn{\useKV[Pattern]{Base}}}
+\expandafter\def\csname BuildPattern at 1a\endcsname{\ifemptyKV[Pattern]{Echelle}{\BuildPatternUna}{\BuildPatternUna[\useKV[Pattern]{Echelle}]}}%
+\expandafter\def\csname BuildPattern at 2\endcsname{\BuildPatternDeux}%
+\expandafter\def\csname BuildPattern at 3\endcsname{\BuildPatternTroisa{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 4\endcsname{\BuildPatternQuatrea{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 5\endcsname{\BuildPatternCinqa{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 6\endcsname{\ifemptyKV[Pattern]{Echelle}{\BuildPatternSix}{\BuildPatternSix[\useKV[Pattern]{Echelle}]}}%
+\expandafter\def\csname BuildPattern at 7\endcsname{\BuildPatternSepta{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 8\endcsname{\BuildPatternHuita{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 9\endcsname{\BuildPatternNeufa{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 10\endcsname{\BuildPatternDixa{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 11\endcsname{\BuildPatternOnzea{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 12\endcsname{\BuildPatternDouzea{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 13\endcsname{\BuildPatternTreizea{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 14\endcsname{\BuildPatternQuatorzea{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 15\endcsname{\BuildPatternQuinzea{\useKV[Pattern]{Base}}{\useKV[Pattern]{Basea}}}%
+\expandafter\def\csname BuildPattern at 16\endcsname{\BuildPatternSeizea{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 17\endcsname{\BuildPatternDixSepta{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 18\endcsname{\BuildPatternDixHuita{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 19\endcsname{\BuildPatternDixNeufa{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 20\endcsname{\BuildPatternVingta{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 21\endcsname{\BuildPatternVingtEtUna{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 22\endcsname{\BuildPatternTreizea{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 23\endcsname{\BuildPatternVingtTroisa{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 24\endcsname{\BuildPatternVingtQuatrea{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 25\endcsname{\BuildPatternVingtCinqa{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 26\endcsname{\BuildPatternVingtSixa{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 27\endcsname{\BuildPatternVingtSepta{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 28\endcsname{\BuildPatternVingtHuit}%
+\expandafter\def\csname BuildPattern at 29\endcsname{Pattern 29 non reproduit.}%
+\expandafter\def\csname BuildPattern at 30\endcsname{\BuildPatternTrentea{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 31\endcsname{\BuildPatternTrenteEtUna{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 32\endcsname{\BuildPatternTrenteDeuxa{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 33\endcsname{\BuildPatternTrenteTroisa{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 34\endcsname{\BuildPatternTrenteQuatrea{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 35\endcsname{\BuildPatternTrenteCinq}%
+\expandafter\def\csname BuildPattern at 36\endcsname{\BuildPatternTrenteSix}%
+\expandafter\def\csname BuildPattern at 37\endcsname{\ifemptyKV[Pattern]{Echelle}{\BuildPatternTrenteSept}{\BuildPatternTrenteSept[\useKV[Pattern]{Echelle}]}}%
+\expandafter\def\csname BuildPattern at 38\endcsname{\ifemptyKV[Pattern]{Echelle}{\BuildPatternSix}{\BuildPatternSix[\useKV[Pattern]{Echelle}]}}%
+\expandafter\def\csname BuildPattern at 39\endcsname{\BuildPatternTrenteNeuf}%
+\expandafter\def\csname BuildPattern at 40\endcsname{\BuildPatternQuarante}%
+\expandafter\def\csname BuildPattern at 41\endcsname{Pattern 41 non reproduit.}%
+\expandafter\def\csname BuildPattern at 42\endcsname{\ifemptyKV[Pattern]{Echelle}{\BuildPatternQuaranteDeux}{\BuildPatternQuaranteDeux[\useKV[Pattern]{Echelle}]}}%
+\expandafter\def\csname BuildPattern at 43\endcsname{\BuildPatternQuaranteTroisa{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 44\endcsname{\BuildPatternQuaranteQuatrea{hexagonea}}%
+\expandafter\def\csname BuildPattern at 45\endcsname{\BuildPatternQuaranteCinqa{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 46\endcsname{\BuildPatternQuaranteSix}%
+\expandafter\def\csname BuildPattern at 47\endcsname{Pattern 47 non reproduit.}%
+\expandafter\def\csname BuildPattern at 48\endcsname{\BuildPatternQuaranteHuit}%
+\expandafter\def\csname BuildPattern at 49\endcsname{\BuildPatternQuaranteNeuf}%
+\expandafter\def\csname BuildPattern at 50\endcsname{\BuildPatternCinquante}%
+\expandafter\def\csname BuildPattern at 50a\endcsname{\BuildPatternCinquantea}%
+\expandafter\def\csname BuildPattern at 50b\endcsname{\BuildPatternCinquanteb}%
+\expandafter\def\csname BuildPattern at 50c\endcsname{\BuildPatternCinquantec}%
+\expandafter\def\csname BuildPattern at 50d\endcsname{\BuildPatternCinquanted}%
+\expandafter\def\csname BuildPattern at 50e\endcsname{\BuildPatternCinquantee}%
+\expandafter\def\csname BuildPattern at 50f\endcsname{\BuildPatternCinquantef}%
+\expandafter\def\csname BuildPattern at 50g\endcsname{\BuildPatternCinquanteg}%
+\expandafter\def\csname BuildPattern at 51\endcsname{\BuildPatternCinquanteEtUna{hexagonea}}%
+\expandafter\def\csname BuildPattern at 52\endcsname{\BuildPatternCinquanteDeux}%
+\expandafter\def\csname BuildPattern at 53\endcsname{\ifemptyKV[Pattern]{Echelle}{\BuildPatternCinquanteTrois}{\BuildPatternCinquanteTrois[\useKV[Pattern]{Echelle}]}}%
+\expandafter\def\csname BuildPattern at 54\endcsname{\ifemptyKV[Pattern]{Echelle}{\BuildPatternCinquanteQuatre}{\BuildPatternCinquanteQuatre[\useKV[Pattern]{Echelle}]}}%
+\expandafter\def\csname BuildPattern at 55\endcsname{\ifemptyKV[Pattern]{Echelle}{\BuildPatternCinquanteCinq}{\BuildPatternCinquanteCinq[\useKV[Pattern]{Echelle}]}}%
+\expandafter\def\csname BuildPattern at 56\endcsname{\ifemptyKV[Pattern]{Echelle}{\BuildPatternCinquanteSix}{\BuildPatternCinquanteSix[\useKV[Pattern]{Echelle}]}}%
+\expandafter\def\csname BuildPattern at 56a\endcsname{\ifemptyKV[Pattern]{Echelle}{\BuildPatternCinquanteSixa}{\BuildPatternCinquanteSixa[\useKV[Pattern]{Echelle}]}}%
+\expandafter\def\csname BuildPattern at 57\endcsname{\ifemptyKV[Pattern]{Echelle}{\BuildPatternCinquanteSept}{\BuildPatternCinquanteSept[\useKV[Pattern]{Echelle}]}}%
+\expandafter\def\csname BuildPattern at 58\endcsname{\ifemptyKV[Pattern]{Echelle}{\BuildPatternCinquanteHuit}{\BuildPatternCinquanteHuit[\useKV[Pattern]{Echelle}]}}%
+\expandafter\def\csname BuildPattern at 59\endcsname{\BuildPatternCinquanteNeufa{\useKV[Pattern]{Base}}{\useKV[Pattern]{Basea}}}%
+\expandafter\def\csname BuildPattern at 60\endcsname{\BuildPatternSoixantea{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 61\endcsname{Pattern 61 non reproduit.}%
+\expandafter\def\csname BuildPattern at 62\endcsname{Pattern 62 non reproduit.}%
+\expandafter\def\csname BuildPattern at 63\endcsname{Pattern 63 non reproduit.}%
+\expandafter\def\csname BuildPattern at 64\endcsname{Pattern 64 non reproduit.}%
+\expandafter\def\csname BuildPattern at 65\endcsname{Pattern 65 non reproduit.}%
+\expandafter\def\csname BuildPattern at 66\endcsname{\BuildPatternSoixanteSix}%
+\expandafter\def\csname BuildPattern at 67\endcsname{Pattern 67 non reproduit.}%
+\expandafter\def\csname BuildPattern at 68\endcsname{\BuildPatternSoixanteHuita{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 69\endcsname{\BuildPatternSoixanteNeufa{hexagonea}}%
+\expandafter\def\csname BuildPattern at 70\endcsname{Pattern 70 non reproduit.}%
+\expandafter\def\csname BuildPattern at 71\endcsname{Pattern 71 non reproduit.}%
+\expandafter\def\csname BuildPattern at 72\endcsname{\BuildPatternSoixanteDouzea{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 73\endcsname{Pattern 73 non reproduit.}%
+\expandafter\def\csname BuildPattern at 74\endcsname{Pattern 74 non reproduit.}%
+\expandafter\def\csname BuildPattern at 75\endcsname{\BuildPatternSoixanteQuinzea{dot}}%
+\expandafter\def\csname BuildPattern at 76\endcsname{\BuildPatternSoixanteSeizea{dot}}%
+\expandafter\def\csname BuildPattern at 77\endcsname{\BuildPatternSoixanteDixSept}%
+\expandafter\def\csname BuildPattern at 77a\endcsname{\ifemptyKV[Pattern]{Echelle}{\BuildPatternSoixanteDixSepta}{\BuildPatternSoixanteDixSepta[\useKV[Pattern]{Echelle}]}}%
+\expandafter\def\csname BuildPattern at 77b\endcsname{\BuildPatternSoixanteDixSeptb}%
+\expandafter\def\csname BuildPattern at 78\endcsname{\BuildPatternSoixanteDixHuit}%
+\expandafter\def\csname BuildPattern at 78a\endcsname{\ifemptyKV[Pattern]{Echelle}{\BuildPatternSoixanteDixHuita}{\BuildPatternSoixanteDixHuita[\useKV[Pattern]{Echelle}]}}%
+\expandafter\def\csname BuildPattern at 78b\endcsname{\BuildPatternSoixanteDixHuitb}%
+\expandafter\def\csname BuildPattern at 79\endcsname{\BuildPatternSoixanteDixNeuf}%
+\expandafter\def\csname BuildPattern at 80\endcsname{Pattern 80 non reproduit.}%
+\expandafter\def\csname BuildPattern at 81\endcsname{Pattern 81 non reproduit.}%
+\expandafter\def\csname BuildPattern at 82\endcsname{\BuildPatternQuatreVingtDeux}%
+\expandafter\def\csname BuildPattern at 83\endcsname{\BuildPatternQuatreVingtTrois}%
+\expandafter\def\csname BuildPattern at 84\endcsname{\BuildPatternQuatreVingtQuatre}%
+\expandafter\def\csname BuildPattern at 85\endcsname{\BuildPatternQuatreVingtCinq{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 86\endcsname{\BuildPatternQuatreVingtSix{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 87\endcsname{\BuildPatternQuatreVingtSept{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 88\endcsname{\BuildPatternQuatreVingtHuit{\useKV[Pattern]{Base}}}%
+%Ajout du 3/7/25
+\expandafter\def\csname BuildPattern at 89\endcsname{Pattern 89 non reproduit.}%
+\expandafter\def\csname BuildPattern at 90\endcsname{\BuildPatternQuatreVingtDix{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 91\endcsname{\BuildPatternQuatreVingtOnze{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 92\endcsname{\BuildPatternQuatreVingtDouze{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 93\endcsname{\BuildPatternQuatreVingtTreize{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 94\endcsname{\BuildPatternQuatreVingtQuatorze{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 95\endcsname{\BuildPatternQuatreVingtQuinze{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 95a\endcsname{\BuildPatternQuatreVingtQuinzea{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 96\endcsname{\BuildPatternQuatreVingtSeize{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 97\endcsname{\BuildPatternQuatreVingtDixSept{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 98\endcsname{\BuildPatternQuatreVingtDixHuit}%
+\expandafter\def\csname BuildPattern at 99\endcsname{\BuildPatternQuatreVingtDixNeuf}%
+\expandafter\def\csname BuildPattern at 99a\endcsname{\BuildPatternQuatreVingtDixNeufa}%
+\expandafter\def\csname BuildPattern at 100\endcsname{\BuildPatternCinquante}%
+\expandafter\def\csname BuildPattern at 101\endcsname{\BuildPatternCentUn{\useKV[Pattern]{Base}}}%
+%\expandafter\def\csname BuildPattern at 101*\endcsname{\BuildPatternCentUn*{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 102\endcsname{\BuildPatternCentDeux{\useKV[Pattern]{Base}}}%
+%\expandafter\def\csname BuildPattern at 102*\endcsname{\BuildPatternCentDeux*{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 103\endcsname{\BuildPatternCentTrois{\useKV[Pattern]{Base}}}%
+%\expandafter\def\csname BuildPattern at 103*\endcsname{\BuildPatternCentTrois*{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 104\endcsname{\BuildPatternCentQuatre{\useKV[Pattern]{Base}}}%
+%\expandafter\def\csname BuildPattern at 104*\endcsname{\BuildPatternCentQuatre*{\useKV[Pattern]{Base}}}%
+\expandafter\def\csname BuildPattern at 155\endcsname{\BuildPatternCentCinquanteCinq}%
+\expandafter\def\csname BuildPattern at 156\endcsname{\BuildPatternCentCinquanteSix}%
+\expandafter\def\csname BuildPattern at 254\endcsname{\BuildPatternDeuxCentCinquanteQuatre}%
+\expandafter\def\csname BuildPattern at 284\endcsname{\BuildPatternDeuxCentQuatreVingtQuatre}%
+\makeatother
+
+%\setsepchar{,}\ignoreemptyitems
+%\readlist\ListePattern{1,1a,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23}
+%\reademptyitems
+
+\def\BuildPatternCode{%
+ input PfCPattern;
+ %
+ u:=5mm;
+ %
+ Etape:=\useKV[Pattern]{Etape};
+ %
+ color CouleurFond;
+ \ifemptyKV[Pattern]{Couleur}{%
+ CouleurFond=LightSteelBlue;
+ }{%
+ CouleurFond=\useKV[Pattern]{Couleur};
+ }%
+ pair depla;
+ %
+ extra_endfig := "\ifemptyKV[Pattern]{Echelle}{}{picture Retiens;Retiens=currentpicture;currentpicture:=nullpicture;draw Retiens scaled \useKV[Pattern]{Echelle};}" & extra_endfig;
+}%
+%
+\def\BuildPatternCodeA#1{%
+ picture TestA;
+ if picture #1:
+ TestA=#1;
+ else:
+ TestA=image(label(TEX(#1),(0,0)););
+ fi;
+ if unknown larg:
+ larg:=(abs(lrcorner TestA-llcorner TestA));
+ fi;
+ if unknown haut:
+ haut:=(abs(urcorner TestA-lrcorner TestA));
+ fi;
+}%
+\def\BuildPatternCodeB{%
+ vardef AV=
+ save $; pair $;
+ $=Arela[rela-1]+u*(1,0);
+ $
+enddef;
+%
+vardef RE=
+ save $; pair $;
+ $=Arela[rela-1]+u*(-1,0);
+ $
+enddef;
+%
+vardef MO=
+ save $; pair $;
+ $=Arela[rela-1]+u*(0,1);
+ $
+enddef;
+%
+vardef DE=
+ save $; pair $;
+ $=Arela[rela-1]+u*(0,-1);
+ $
+enddef;
+%
+vardef polygonerela(text t)=
+ pair Arela[];
+ rela:=0;
+ for pliste=t:
+ rela:=rela+1;
+ if pair pliste:
+ Arela[rela]=pliste;
+ else:
+ Arela[rela]=scantokens(pliste);
+ fi;
+ endfor;
+ Arela[rela+1]:=Arela[1];
+ save $;path $;
+ $=Arela[1]--
+ for k=2 upto rela:
+ Arela[k]--
+ endfor
+ cycle;
+ $
+ enddef;
+ u:=5mm;
+ Etape:=\useKV[Pattern]{Etape};
+ path cc[];
+ trace grille(0.5) withcolor 0.8white;
+ color CouleurEtape,CouleurSol;
+ \ifemptyKV[Pattern]{Couleur}{CouleurEtape=Purple;}{CouleurEtape=\useKV[Pattern]{Couleur};}
+ \ifemptyKV[Pattern]{CouleurSolution}{CouleurSol=Evidence;}{CouleurSol=\useKV[Pattern]{CouleurSolution};}
+ %
+ extra_endfig := "\ifemptyKV[Pattern]{Echelle}{}{picture Retiens;Retiens=currentpicture;currentpicture:=nullpicture;draw Retiens scaled \useKV[Pattern]{Echelle};}" & extra_endfig;
+ }%
+\def\BuildPatternCodeC{%
+ u:=5mm;
+ pair Apat[],Cpat,Dpat;
+ %
+ vardef AffichageEtape(suffix pos)(expr nb,paspat,bpat,cpat)=
+ if nb<bpat:
+ label.pos(TEX("Étape "&decimal(nb+paspat)),cpat);
+ else:
+ if \useKV[Pattern]{Solution}:
+ label.pos(TEX("Étape "&decimal(nb+paspat)),cpat);
+ else:
+ label.pos(TEX("Étape "&decimal(nb+paspat)&" ?"),cpat);
+ fi;
+ fi;
+ enddef;
+ %
+ vardef AV=
+ save $; pair $;
+ $=Arela[rela-1]+u*(1,0);
+ $
+enddef;
+%
+vardef RE=
+ save $; pair $;
+ $=Arela[rela-1]+u*(-1,0);
+ $
+enddef;
+%
+vardef MO=
+ save $; pair $;
+ $=Arela[rela-1]+u*(0,1);
+ $
+enddef;
+%
+vardef DE=
+ save $; pair $;
+ $=Arela[rela-1]+u*(0,-1);
+ $
+enddef;
+%
+vardef polygonerela(text t)=
+ pair Arela[];
+ rela:=0;
+ for pliste=t:
+ rela:=rela+1;
+ if pair pliste:
+ Arela[rela]=pliste;
+ else:
+ Arela[rela]=scantokens(pliste);
+ fi;
+ endfor;
+ Arela[rela+1]:=Arela[1];
+ save $;path $;
+ $=Arela[1]--
+ for k=2 upto rela:
+ Arela[k]--
+ endfor
+ cycle;
+ $
+ enddef;
+ %
+ vardef GrillePattern=
+ Dpat=(urcorner currentpicture)+(u*(1,1));
+ currentpicture:=nullpicture;
+ k:=0;
+ forever:exitif xpart(k*(u,0))>xpart(Dpat);
+ trace ((0,0)--(0,ypart(Dpat))) shifted (k*(u,0)) withcolor 0.7white;
+ k:=k+1;
+ endfor;
+ k:=0;
+ forever:exitif ypart(k*(0,u))>ypart(Dpat);
+ trace ((0,0)--(xpart(Dpat),0)) shifted (k*(0,u)) withcolor 0.7white;
+ k:=k+1;
+ endfor;
+ enddef;
+ %
+ vardef AffichagePattern(expr patd,patf)=
+ for k=patd upto patf:
+ if k<patf:
+ fill cc[k] withcolor CouleurEtape withtransparency (1,0.35);
+ trace cc[k] withpen pencircle scaled 1.1 withcolor CouleurEtape;
+ else:
+ if \useKV[Pattern]{Solution}:
+ fill cc[k] withcolor CouleurSol withtransparency (1,0.35);
+ trace cc[k] withpen pencircle scaled 1.1 withcolor CouleurSol;
+ fi;
+ fi;
+ endfor;
+ enddef;
+ %
+ Etape:=\useKV[Pattern]{Etape};
+ path cc[];
+ color CouleurEtape,CouleurSol;
+ \ifemptyKV[Pattern]{Couleur}{CouleurEtape=Purple;}{CouleurEtape=\useKV[Pattern]{Couleur};}
+ \ifemptyKV[Pattern]{CouleurSolution}{CouleurSol=Evidence;}{CouleurSol=\useKV[Pattern]{CouleurSolution};}
+ %
+ extra_endfig := "\ifemptyKV[Pattern]{Echelle}{}{picture Retiens;Retiens=currentpicture;currentpicture:=nullpicture;draw Retiens scaled \useKV[Pattern]{Echelle};}" & extra_endfig;
+ }%
+\def\BuildPatternCodeIso{%
+ u:=2.5mm;
+ pair ptpattern[];
+ pair Apat,Bpat,Cpat,Dpat;
+ %
+ vardef GrillePatternIso=
+ coinbg:=(llcorner currentpicture)+(u*(-alpha,-0.5));
+ coinbd:=(lrcorner currentpicture)+(u*(alpha,-0.5));
+ coinhd:=(urcorner currentpicture)+(u*(alpha,0.5));
+ coinhg:=(ulcorner currentpicture)+(u*(-alpha,0.5));
+ currentpicture:=nullpicture;
+ k:=0;
+ forever:exitif ypart(k*(0,u))>ypart(coinhg);
+ trace ((coinbg+u*(-alpha,0))--(coinbg+u*(-alpha,0)+u*100*(alpha,0.5))) shifted (k*(0,u)) withcolor 0.7white;
+ k:=k+1;
+ endfor;
+ k:=0;
+ forever:exitif xpart(k*(u*alpha,0))>xpart(coinbd);
+ trace ((coinbg+u*(alpha,0))--(coinbg+u*(alpha,0)+u*100*(alpha,0.5))) shifted (k*(2*alpha*u,0)) withcolor 0.7white;
+ k:=k+1;
+ endfor;
+ k:=0;
+ forever:exitif ypart(k*(0,u))>ypart(coinhg);
+ trace ((coinbg+u*(alpha,0))--(coinbg+u*(alpha,0)+u*100*(alpha,-0.5))) shifted (k*(0,u)) withcolor 0.7white;
+ k:=k+1;
+ endfor;
+ k:=0;
+ forever:exitif xpart(k*(u*alpha,0))>xpart(2[coinbg,coinbd]);
+ trace ((coinbg+u*(-alpha,0))--(coinbg+u*(-alpha,0)+u*100*(-alpha,0.5))) shifted (k*(2*alpha*u,0)) withcolor 0.7white;
+ k:=k+1;
+ endfor;
+ %
+ clip currentpicture to polygone(coinbg,coinbd,coinhd,coinhg);
+ enddef;
+ %
+ vardef AffichagePattern(expr patd,patf)=
+ for k=patd upto patf:
+ if k<patf:
+ trace cc[k];
+ else:
+ if \useKV[Pattern]{Solution}:
+ trace cc[k];
+ fi;
+ fi;
+ endfor;
+ enddef;
+ %
+ Etape:=\useKV[Pattern]{Etape};
+ picture cc[];
+ color CouleurEtape,CouleurSol;
+ \ifemptyKV[Pattern]{Couleur}{CouleurEtape=Purple;}{CouleurEtape=\useKV[Pattern]{Couleur};}
+ \ifemptyKV[Pattern]{CouleurSolution}{CouleurSol=Evidence;}{CouleurSol=\useKV[Pattern]{CouleurSolution};}
+ %
+ picture cadrecube,cadrecubesol,TypeCube;
+ pair A[];
+ alpha:=cosd(30);
+ beta:=sind(30);
+ A1=u*(0,2*(Etape+1)*beta);
+ A2-A1=u*(alpha,-beta);
+ A3-A2=u*(alpha,beta);
+ A4-A3=u*(0,2*beta);
+ A5-A4=u*(-alpha,beta);
+ A6-A5=u*(-alpha,-beta);
+ A7-A6=u*(alpha,-beta);
+ boolean Solution;
+ Solution=\useKV[Pattern]{Solution};
+ cadrecube=image(%
+ fill polygone(A1,A2,A3,A4,A5,A6) withcolor CouleurEtape;
+ drawoptions(withcolor 0.7white);
+ trace polygone(A1,A2,A3,A4,A5,A6);
+ trace A6--A7--A2;
+ trace A7--A4;
+ drawoptions();
+ );
+ cadrecubesol=image(%
+ fill polygone(A1,A2,A3,A4,A5,A6) withcolor CouleurSol;
+ drawoptions(withcolor 0.7white);
+ trace polygone(A1,A2,A3,A4,A5,A6);
+ trace A6--A7--A2;
+ trace A7--A4;
+ drawoptions();
+ );
+ %
+ extra_endfig := "\ifemptyKV[Pattern]{Echelle}{}{picture Retiens;Retiens=currentpicture;currentpicture:=nullpicture;draw Retiens scaled \useKV[Pattern]{Echelle};}" & extra_endfig;
+}%
+% 104
+\NewDocumentCommand\BuildPatternCentQuatre{m}{%
\ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k],"AV","AV","AV","MO","MO" for l=1 upto k:,"AV" endfor for l=0 upto 6+2*k:,"MO" endfor for l=0 upto 2+k:,"RE" endfor);
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+(u*(2,0));
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape-1,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=1pt;
+ \BuildPatternCodeA{#1}
+ for k=0 upto Etape+1:
+ for l=0 upto 2*Etape+6:
+ if ((l>2*Etape+4) and (k>2)):
+ else:
+ trace TestA shifted(k*larg,-l*haut);
+ fi;
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
+% 103
+\NewDocumentCommand\BuildPatternCentTrois{sm}{%
+ \ifluatex%
\mplibforcehmode%
+ \IfBooleanTF{#1}{%
+ \edef\PfMRetiensEtape{\useKV[Pattern]{Etape}}%
+ \begin{Geometrie}[CoinHD={0.5*u*(3+0.5*((\PfMRetiensEtape+1) mod 2)+(4+4+\useKV[Pattern]{Etape}+1)*(\useKV[Pattern]{Etape}+1)/2,4+1+\useKV[Pattern]{Etape}+1)}]
+ \BuildPatternCodeB
+ pair A;
+ A=pp(1,1);
+ for k=0 upto Etape-1:
+ cc[k]=polygone(pp(0,0),pp(4+k,0),pp(4+k,4+k),pp(0,4+k)) shifted A;
+ fill cc[k] withcolor CouleurEtape withtransparency (1,0.25);
+ trace cc[k] withpen pencircle scaled 1.1 withcolor CouleurEtape;
+ label.lrt(TEX("Étape "&decimal(k+1)),llcorner cc[k]);
+ A:=lrcorner cc[k]+pp(1,0);
+ endfor;
+ if \useKV[Pattern]{Solution}:
+ for k=Etape upto Etape:
+ cc[k]=polygone(pp(0,0),pp(4+k,0),pp(4+k,4+k),pp(0,4+k)) shifted A;
+ fill cc[k] withcolor CouleurSol withtransparency (1,0.25);
+ trace cc[k] withpen pencircle scaled 1.1 withcolor CouleurSol;
+ label.lrt(TEX("Étape "&decimal(k+1)),llcorner cc[k]);
+ endfor;
+ else:
+ label.lrt(TEX("Étape "&decimal(Etape+1)&" ?"),A);
+ fi;
+ \end{Geometrie}
+ }{%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=1pt;
+ \BuildPatternCodeA{#2}
+ for k=0 upto Etape+2:
+ for l=0 upto Etape+2:
+ trace TestA shifted(k*larg,l*haut);
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
+% 102
+\NewDocumentCommand\BuildPatternCentDeux{sm}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \IfBooleanTF{#1}{%
+ \edef\PfMRetiensEtape{\useKV[Pattern]{Etape}}%
+ \begin{Geometrie}[CoinHD={0.5*u*(4+0.5*((\PfMRetiensEtape+1) mod 2)+(2+\PfMRetiensEtape+1)*(\PfMRetiensEtape+1)/2,1+\useKV[Pattern]{Etape}+2)}]
+ \BuildPatternCodeB
+ pair A;
+ A=pp(4,1);
+ for k=0 upto Etape-1:
+ if k>0:
+ cc[k]=polygone(pp(0,0),pp(1+k,0),pp(1+k,k),pp(k,k),pp(k,k+1),pp(0,k+1)) shifted A;
+ fill cc[k] withcolor CouleurEtape withtransparency (1,0.35);
+ trace cc[k] withpen pencircle scaled 1.1 withcolor CouleurEtape;
+ label.lrt(TEX("Étape "&decimal(k+1)),llcorner cc[k]);
+ A:=lrcorner cc[k]+pp(1,0);
+ else:
+ label.lrt(TEX("Étape "&decimal(k+1)),pp(1,1));
+ label.urt(TEX("Rien"),pp(1,1));
+ fi;
+ endfor;
+ if \useKV[Pattern]{Solution}:
+ for k=Etape upto Etape:
+ cc[k]=polygone(pp(0,0),pp(1+k,0),pp(1+k,k),pp(k,k),pp(k,k+1),pp(0,k+1)) shifted A;
+ fill cc[k] withcolor CouleurSol withtransparency (1,0.35);
+ trace cc[k] withpen pencircle scaled 1.1 withcolor CouleurSol;
+ label.lrt(TEX("Étape "&decimal(k+1)),llcorner cc[k]);
+ endfor;
+ else:
+ label.lrt(TEX("Étape "&decimal(Etape+1)&" ?"),A);
+ fi;
+ \end{Geometrie}
+ }{%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=1pt;
+ \BuildPatternCodeA{#2}
+ for k=0 upto Etape-1:
+ for l=0 upto Etape-1:
+ if ((k=Etape-1) and (l=Etape-1)):
+ else:
+ trace TestA shifted(k*larg,l*haut);
+ fi;
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
+% 101
+\NewDocumentCommand\BuildPatternCentUn{sm}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \IfBooleanTF{#1}{%
+ \edef\PfMRetiensEtape{\useKV[Pattern]{Etape}}%
+ \edef\PfMLargeurQuad{\fpeval{1+\PfMRetiensEtape+(3+\PfMRetiensEtape+1+2)*(\PfMRetiensEtape+1)/2}}%
+ \begin{Geometrie}[CoinHD={0.5*u*(((\PfMLargeurQuad div 2)+1)*2,1+\PfMRetiensEtape+2+2)}]
+ \BuildPatternCodeB
+ pair A;
+ A=pp(1,1+\PfMRetiensEtape+3);
+ for k=0 upto Etape-1:
+ cc[k]=polygone(pp(0,3+k),pp(0,2+k),pp(3+k,2+k),pp(3+k,3+k),pp(2+k,3+k),pp(2+k,0),pp(3+k,0),pp(3+k,1),pp(0,1),pp(0,0),pp(1,0),pp(1,3+k)) shifted (A-pp(0,3+k));
+ fill cc[k] withcolor CouleurEtape withtransparency (1,0.35);
+ trace cc[k] withpen pencircle scaled 1.1 withcolor CouleurEtape;
+ label.urt(TEX("Étape "&decimal(k+1)),ulcorner cc[k]);
+ A:=urcorner cc[k]+pp(1,0);
+ endfor;
+ if \useKV[Pattern]{Solution}:
+ for k=Etape upto Etape:
+ cc[k]=polygone(pp(0,3+k),pp(0,2+k),pp(3+k,2+k),pp(3+k,3+k),pp(2+k,3+k),pp(2+k,0),pp(3+k,0),pp(3+k,1),pp(0,1),pp(0,0),pp(1,0),pp(1,3+k)) shifted (A-pp(0,3+k));
+ fill cc[k] withcolor CouleurSol withtransparency (1,0.35);
+ trace cc[k] withpen pencircle scaled 1.1 withcolor CouleurSol;
+ label.urt(TEX("Étape "&decimal(k+1)),ulcorner cc[k]);
+ endfor;
+ else:
+ label.lrt(TEX("Étape "&decimal(Etape+1)&" ?"),A+pp(0,1));
+ fi;
+ \end{Geometrie}
+ }{%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#2}
+ for k=0 upto Etape-1:
+ for l=0 upto Etape-1:
+ trace TestA shifted(l*larg,k*haut);
+ endfor;
+ endfor;
+ trace TestA shifted(-larg,-haut);
+ trace TestA shifted(Etape*larg,-haut);
+ trace TestA shifted(Etape*larg,Etape*haut);
+ trace TestA shifted(-larg,Etape*haut);
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
+% 99a
+\NewDocumentCommand\BuildPatternQuatreVingtDixNeufa{}{%
+ \ifluatex%
+ \mplibforcehmode
\begin{mplibcode}
+ Etape=\useKV[Pattern]{Etape};
+ %
+ input PfCLego;
+ %
+ \ifemptyKV[Pattern]{Echelle}{magnification:=0.25;}{%
+ magnification:=\useKV[Pattern]{Echelle};
+ }
+ lego_unit :=magnification*0.8cm; % official
+ lego_height :=1.2lego_unit; % official
+ lego_plate_height:=0.4lego_unit; % official
+ lego_thickness :=1/6lego_unit;
+ lego_eps :=1/20lego_unit;
+ lego_overshoot :=lego_plate_height-lego_thickness;%0.2133lego_unit;
+ lego_diam :=lego_unit-2lego_thickness;
+ lego_Diam :=(sqrt 2)*lego_unit-lego_diam;
+ %
+ color CouleurBrique,CouleurBriqueA;
+ \ifemptyKV[Pattern]{Couleur}{CouleurBrique=LightSteelBlue;}{CouleurBrique=\useKV[Pattern]{Couleur};}%
+ %
+ Longueur=2;
+ Largeur=2;
+ %
+ euler(-20,10,15);
+ for k=Etape downto 1:
+ w:=k mod 2;
+ for l=-k+1 upto k-1:
+ TR:=(Longueur*l,0,1-k);
+ if (l mod 2)=w:CouleurBriqueA:=Cornsilk else: CouleurBriqueA:=CouleurBrique fi;
+ Lego_box(Longueur,Largeur,CouleurBriqueA);
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+%99
+\NewDocumentCommand\BuildPatternQuatreVingtDixNeuf{}{%
+ \ifluatex%
+ \mplibforcehmode
+ \begin{mplibcode}
Etape:=\useKV[Pattern]{Etape};
input PfCSolid;
-
+
intensite:=1.5;
Ferme[0]:=false;
- outcolor:=LightSteelBlue;
+ \ifemptyKV[Pattern]{Couleur}{outcolor:=LightSteelBlue;}{outcolor:=\useKV[Pattern]{Couleur};}%
incolor:=white;
nb:=1;subh:=1;
- creux:=true;
-
- Initialisation(2500,40,20,50);
+ creux:=false;
+
+ Initialisation(2500,30,20,50);
Objetcube1("a=0.25");
nbobj:=1;
- TR:=(0,a,0);
- %base
- for k=1 upto 2:
- NBobj:=nbobj;
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
+ for k=2 upto Etape:
+ for l=-k+1 upto k-1:
+ TR:=a*(0,l,1-k);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](1);
+ endfor;
endfor;
- % barre gauche
+ DessineFusion;
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 98
+\NewDocumentCommand\BuildPatternQuatreVingtDixHuit{}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ Etape=\useKV[Pattern]{Etape};
+ color CouleurFond;
+ \ifemptyKV[Pattern]{Couleur}{CouleurFond=0.7white;}{CouleurFond=\useKV[Pattern]{Couleur};}
+ u:=5mm;
+ pair M[],A,B;
+ path cc[];
+ A=(0,0);
+ B-A=u*(4,0);
for k=1 upto Etape:
- TR:=(0,0,k*a);
- NBobj:=1;
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
+ for l=1 step 2 until (2**k-1):
+ M[l]:=(l/(2**k))[A,B];
+ cc[l]:=cercles(M[l],abs(A-B)/(2**k));
+ if (k mod 2)=1:
+ fill cc[l] withcolor CouleurFond;
+ else:
+ fill cc[l] withcolor white;
+ fi;
+ trace cc[l];
+ endfor;
endfor;
- %barre gauche
- for k=1 upto Etape-1:
- TR:=(0,2*a,k*a);
- NBobj:=1;
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 97
+\NewDocumentCommand\BuildPatternQuatreVingtDixSept{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for k=0 upto (2**Etape-1):
+ trace TestA shifted(0,k*haut);
endfor;
- DessineFusion;
- \end{mplibcode}
- \fi
+ for k=0 upto 2:
+ trace TestA shifted(larg,k*haut);
+ endfor;
+ for k=0 upto Etape-1:
+ trace TestA shifted(2*larg,k*haut);
+ endfor;
+ \end{mplibcode}%
+ \fi%
}%
-% 254
-\NewDocumentCommand\BuildPatternDeuxCentCinquanteQuatre{}{
+% 96
+\NewDocumentCommand\BuildPatternQuatreVingtSeize{m}{%
\ifluatex%
\mplibforcehmode%
- \begin{mplibcode}
- Etape:=\useKV[Pattern]{Etape};
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for k=0 upto Etape+1:
+ trace TestA shifted(0,k*haut);
+ endfor;
+ for k=1 upto Etape:
+ for l=0 upto 1:
+ trace TestA shifted(k*larg,l*haut);
+ endfor;
+ endfor;
+ for k=0 upto Etape+1:
+ trace TestA shifted((Etape+1)*larg,(1-k)*haut);
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 95a
+\NewDocumentCommand\BuildPatternQuatreVingtQuinzea{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for k=0 upto Etape:
+ trace TestA shifted(0,k*haut);
+ endfor;
+ for k=0 upto Etape:
+ trace TestA shifted(2*larg,k*haut);
+ endfor;
+ for k=0 upto Etape:
+ trace TestA shifted(larg,(k+Etape)*haut);
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 95
+\NewDocumentCommand\BuildPatternQuatreVingtQuinze{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for k=0 upto 2*Etape-1:
+ trace TestA shifted(0,k*haut);
+ endfor;
+ for k=0 upto 2*Etape-1:
+ trace TestA shifted(2*larg,k*haut);
+ endfor;
+ for k=0 upto Etape:
+ trace TestA shifted(larg,(k+2*Etape-1)*haut);
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 94
+\NewDocumentCommand\BuildPatternQuatreVingtQuatorze{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
for k=0 upto Etape-1:
- for l=0 upto Etape-1:
- fill ((fullcircle scaled 4mm) shifted (5mm*(l,k))) withcolor LightSteelBlue;
- trace ((fullcircle scaled 4mm) shifted (5mm*(l,k)));
+ for l=Etape-1 downto k:
+ trace TestA shifted((Etape-1-l)*larg,k*haut);
+ endfor;
endfor;
+ trace TestA shifted(-larg,0);
+ trace TestA shifted(Etape*larg,0);
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 93
+\NewDocumentCommand\BuildPatternQuatreVingtTreize{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for k=0 upto Etape-1:
+ for l=0 upto 2*Etape+1:
+ trace TestA shifted(k*larg,l*haut);
+ endfor;
endfor;
- fill ((fullcircle scaled 4mm) shifted (5mm*(0,-1))) withcolor LightSteelBlue;
- trace ((fullcircle scaled 4mm) shifted (5mm*(0,-1)));
- fill ((fullcircle scaled 4mm) shifted (5mm*(-1,0))) withcolor LightSteelBlue;
- trace ((fullcircle scaled 4mm) shifted (5mm*(-1,0)));
- fill ((fullcircle scaled 4mm) shifted (5mm*(0,Etape))) withcolor LightSteelBlue;
- trace ((fullcircle scaled 4mm) shifted (5mm*(0,Etape)));
- \end{mplibcode}
- \fi
+ trace TestA shifted(-larg,haut);
+ trace TestA shifted(Etape*larg,haut);
+ \end{mplibcode}%
+ \fi%
}%
-%156
-\NewDocumentCommand\BuildPatternCentCinquanteSix{}{
+%92
+\NewDocumentCommand\BuildPatternQuatreVingtDouze{m}{%
\ifluatex%
\mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=1pt;
+ \BuildPatternCodeA{#1}
+ for k=0 upto Etape-1:
+ for l=0 upto Etape-1:
+ if ((k=Etape-1) and (l>Etape-3)) or ((l=Etape-1) and (k>0)):
+ else:
+ trace TestA shifted(k*larg,l*haut);
+ fi;
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+%91
+\NewDocumentCommand\BuildPatternQuatreVingtOnze{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=0;
+ \BuildPatternCodeA{#1}
+ for k=0 upto Etape-1:
+ trace TestA shifted(k*larg,0);
+ endfor;
+ for k=Etape upto 2*Etape:
+ for l=0 upto Etape:
+ trace TestA shifted(k*larg,l*haut);
+ endfor;
+ endfor;
+ for k=0 upto Etape:
+ trace TestA shifted((2*Etape+1+k)*larg,Etape*haut);
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+%90
+\NewDocumentCommand\BuildPatternQuatreVingtDix{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=0;
+ \BuildPatternCodeA{#1}
+ for k=0 downto -2:
+ trace TestA shifted (0,2*k*haut);
+ endfor;
+ for k=1 upto Etape:
+ for l=0 downto -1:
+ trace TestA shifted ((2*k-1)*larg,(2*l-1)*haut);
+ endfor;
+ for l=0 downto -2:
+ trace TestA shifted ((2*k*larg,2*l*haut));
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+%88
+\NewDocumentCommand\BuildPatternQuatreVingtHuit{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for k=0 upto Etape:
+ for l=0 upto Etape-1:
+ trace TestA shifted(k*larg,l*haut);
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+%87
+\NewDocumentCommand\BuildPatternQuatreVingtSept{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ trace TestA;
+ for k=1 upto 3*(Etape-1):
+ trace TestA shifted((k-1)*(larg,0));
+ endfor;
+ for k=1 upto Etape-1:
+ for l=1 upto 3*(Etape-1)-k:
+ trace TestA shifted((l-1)*larg,k*haut);
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+%86
+\NewDocumentCommand\BuildPatternQuatreVingtSix{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for k=0 upto Etape+1:
+ for l=0 upto Etape+1:
+ trace TestA shifted(k*larg,l*haut);
+ endfor;
+ endfor;
+ for k=0 upto Etape:
+ for l=0 upto Etape:
+ trace TestA shifted((3+k)*larg,(3+l)*haut);
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+%85
+\NewDocumentCommand\BuildPatternQuatreVingtCinq{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for k=0 upto Etape:
+ for l=0 upto Etape:
+ trace TestA shifted(k*larg,l*haut);
+ endfor;
+ endfor;
+ for k=0 upto Etape-1:
+ for l=0 upto Etape-1:
+ trace TestA shifted((k+Etape)*larg,(l+Etape)*haut);
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 84
+\NewDocumentCommand\BuildPatternQuatreVingtQuatre{}{%
+ \ifluatex%
+ \mplibforcehmode
\begin{mplibcode}
+ Etape=\useKV[Pattern]{Etape};
+ %
+ input PfCLego;
+ %
+ \ifemptyKV[Pattern]{Echelle}{magnification:=0.25;}{%
+ magnification:=\useKV[Pattern]{Echelle};
+ }
+ lego_unit :=magnification*0.8cm; % official
+ lego_height :=1.2lego_unit; % official
+ lego_plate_height:=0.4lego_unit; % official
+ lego_thickness :=1/6lego_unit;
+ lego_eps :=1/20lego_unit;
+ lego_overshoot :=lego_plate_height-lego_thickness;%0.2133lego_unit;
+ lego_diam :=lego_unit-2lego_thickness;
+ lego_Diam :=(sqrt 2)*lego_unit-lego_diam;
+ %
+ color CouleurBrique,CouleurBriqueA;
+ \ifemptyKV[Pattern]{Couleur}{CouleurBrique=LightSteelBlue;}{CouleurBrique=\useKV[Pattern]{Couleur};}%
+ %
+ Longueur=2;
+ Largeur=4;
+ %
+ euler(-20,10,15);
+ Lego_box(Longueur,Largeur,CouleurBrique);
+ for k=2 upto Etape:
+ if (k mod 2)=0:CouleurBriqueA:=Cornsilk else: CouleurBriqueA:=CouleurBrique fi;
+ TR:=(-k+1,0,k-1);
+ Lego_box(Longueur,Largeur,CouleurBriqueA);
+ TR:=(k-1,0,k-1);
+ Lego_box(Longueur,Largeur,CouleurBriqueA);
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 83
+\NewDocumentCommand\BuildPatternQuatreVingtTrois{}{%
+ \ifluatex%
+ \mplibforcehmode
+ \begin{mplibcode}
+ Etape=\useKV[Pattern]{Etape};
+ %
+ input PfCLego;
+ %
+ \ifemptyKV[Pattern]{Echelle}{magnification:=0.25;}{%
+ magnification:=\useKV[Pattern]{Echelle};
+ }%
+ lego_unit :=magnification*0.8cm; % official
+ lego_height :=1.2lego_unit; % official
+ lego_plate_height:=0.4lego_unit; % official
+ lego_thickness :=1/6lego_unit;
+ lego_eps :=1/20lego_unit;
+ lego_overshoot :=lego_plate_height-lego_thickness;%0.2133lego_unit;
+ lego_diam :=lego_unit-2lego_thickness;
+ lego_Diam :=(sqrt 2)*lego_unit-lego_diam;
+ %
+ color CouleurBrique,CouleurBriqueA;
+ \ifemptyKV[Pattern]{Couleur}{CouleurBrique=LightSteelBlue;}{CouleurBrique=\useKV[Pattern]{Couleur};}%
+ %
+ Longueur=2;
+ Largeur=4;
+ Longueura=4;
+ Largeura=2;
+% %
+ euler(22,0,0);
+ for k=1 upto Etape:
+ if (k mod 2)=0:CouleurBriqueA:=Cornsilk else: CouleurBriqueA:=CouleurBrique fi;
+ TR:=(-2,1,2*(k-1));
+ Lego_box(Longueur,Largeur,CouleurBriqueA);
+ TR:=(2,1,2*(k-1));
+ Lego_box(Longueur,Largeur,CouleurBriqueA);
+ TR:=(0,0,2*k-1);
+ Lego_box(Longueura,Largeura,CouleurBriqueA);
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+%82
+\NewDocumentCommand\BuildPatternQuatreVingtDeux{}{%
+ \ifluatex%
+ \mplibforcehmode
+ \begin{mplibcode}
+ Etape=\useKV[Pattern]{Etape};
+
+ input PfCLego;
+ %
+ \ifemptyKV[Pattern]{Echelle}{magnification:=0.25;}{%
+ magnification:=\useKV[Pattern]{Echelle};
+ }%
+ lego_unit :=magnification*0.8cm; % official
+ lego_height :=1.2lego_unit; % official
+ lego_plate_height:=0.4lego_unit; % official
+ lego_thickness :=1/6lego_unit;
+ lego_eps :=1/20lego_unit;
+ lego_overshoot :=lego_plate_height-lego_thickness;%0.2133lego_unit;
+ lego_diam :=lego_unit-2lego_thickness;
+ lego_Diam :=(sqrt 2)*lego_unit-lego_diam;
+ %
+ color CouleurBrique;
+ \ifemptyKV[Pattern]{Couleur}{CouleurBrique=LightSteelBlue;}{CouleurBrique=\useKV[Pattern]{Couleur};}%
+ %
+ Longueur=2;
+ Largeura=4;
+% %
+ euler(-30,10,0);
+ for k=Etape downto 2:
+ TR:=(-k+1,0,-k+1);
+ Lego_box(Longueur,Largeura,CouleurBrique);
+ TR:=(k-1,0,-k+1);
+ Lego_box(Longueur,Largeura,CouleurBrique);
+ endfor;
+ TR:=(0,0,0);
+ Lego_box(Longueur,Largeura,CouleurBrique);
+ \end{mplibcode}%
+ \fi%
+}%
+
+%79
+\NewDocumentCommand\BuildPatternSoixanteDixNeuf{}{%
+ \ifluatex%
+ \mplibforcehmode
+ \begin{mplibcode}
Etape:=\useKV[Pattern]{Etape};
input PfCSolid;
-
+
intensite:=1.5;
Ferme[0]:=false;
- outcolor:=LightSteelBlue;
+ \ifemptyKV[Pattern]{Couleur}{outcolor:=LightSteelBlue;}{outcolor:=\useKV[Pattern]{Couleur};}%
incolor:=white;
nb:=1;subh:=1;
- creux:=true;
-
- Initialisation(2500,40,20,50);
+ creux:=false;
+
+ Initialisation(2500,30,20,50);
Objetcube1("a=0.25");
nbobj:=1;
- TR:=(0,a,0);
+ Pro:=-1;
+ for k=2 upto Etape:
+ for l=0 upto k-1:
+ for p=0 upto k-1:
+ for q=0 upto k-1:
+ TR:=a*(l,p,Pro-q);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](1);
+ endfor;
+ endfor;
+ endfor;
+ Pro:=Pro-k;
+ endfor;
+ DessineFusion;
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 78b
+\NewDocumentCommand\BuildPatternSoixanteDixHuitb{O{1}}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ LargMax=2+Etape;
+ HautMax=3;
+ for k=-1 upto LargMax:
+ trace (u*(0,2)--u*(0,-HautMax)) shifted(u*(k,0)) withcolor 0.7white;
+ endfor;
+ for k=2 downto -HautMax:
+ trace (u*(-1,0)--u*(LargMax,0)) shifted(u*(0,k)) withcolor 0.7white;
+ endfor;
+ drawoptions(withpen pencircle scaled 1.1);
+ picture debut;
+ debut=image(
+ trace dot;
+ trace dot shifted(u*(1,1));
+ trace dot shifted(u*(0,-1));
+ trace dot shifted(u*(1,-2));
+ trace dot shifted(u*(0,-1));
+ trace dot shifted(u*(1,0));
+ trace dot shifted(u*(1,-1));
+ );
+ trace debut;
+ trace symetrie(debut,(0,0),(0,1)) shifted(u*(Etape+1,0));
+ %verticales
for k=1 upto Etape:
- NBobj:=nbobj;
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
+ trace dot shifted(u*((1,1)+(k-1)*(1,0)));
+ trace dot shifted(u*((1,0)+(k-1)*(1,0)));
+ trace dot shifted(u*((1,-1)+(k-1)*(1,0)));
+ trace dot shifted(u*((1,-2)+(k-1)*(1,0)));
endfor;
- TR:=(0,0,-0.25);
+ drawoptions();
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 78a
+\NewDocumentCommand\BuildPatternSoixanteDixHuita{O{1}}{%
+ \ifluatex%
+ \begin{Allumettes}[Echelle=\fpeval{0.30*#1}]
+ Etape=\useKV[Pattern]{Etape};
+ LargMax=2+Etape;
+ HautMax=3;
+ for k=-1 upto LargMax:
+ trace (u*(0,2)--u*(0,-HautMax)) shifted(u*(k,0)) withcolor 0.7white;
+ endfor;
+ for k=2 downto -HautMax:
+ trace (u*(-1,0)--u*(LargMax,0)) shifted(u*(0,k)) withcolor 0.7white;
+ endfor;
+ drawoptions(withpen pencircle scaled 1.1);
+ picture debut;
+ debut=image(
+ trace Allu(0.10[(0,0),u*(1,1)],0.90[(0,0),u*(1,1)]);
+ trace Allu(0.10[u*(0,-1),u*(1,-2)],0.90[u*(0,-1),u*(1,-2)]);
+ trace Allu(0.10[(0,0),u*(0,-1)],0.90[(0,0),u*(0,-1)]);
+ trace Allu(0.10[(0,0),u*(1,0)],0.90[(0,0),u*(1,0)]);
+ trace Allu(0.10[u*(0,-1),u*(1,-1)],0.90[u*(0,-1),u*(1,-1)]);
+ );
+ trace debut;
+ trace symetrie(debut,(0,0),(0,1)) shifted(u*(Etape+1,0));
+ %verticales
for k=1 upto Etape:
- NBobj:=nbobj;
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
+ trace Allu(0.10[u*(1,1),u*(1,0)],0.90[u*(1,1),u*(1,0)]) shifted(u*(k-1)*(1,0));
+ trace Allu(0.10[u*(1,0),u*(1,-1)],0.90[u*(1,0),u*(1,-1)]) shifted(u*(k-1)*(1,0));
+ trace Allu(0.10[u*(1,-1),u*(1,-2)],0.90[u*(1,-1),u*(1,-2)]) shifted(u*(k-1)*(1,0));
endfor;
- TR:=(0,0.25,0);
+ %horizontales
+ for k=1 upto Etape-1:
+ trace Allu(0.10[u*(k,1),u*(k+1,1)],0.90[u*(k,1),u*(k+1,1)]);
+ trace Allu(0.10[u*(k,0),u*(k+1,0)],0.90[u*(k,0),u*(k+1,0)]);
+ trace Allu(0.10[u*(k,-1),u*(k+1,-1)],0.90[u*(k,-1),u*(k+1,-1)]);
+ trace Allu(0.10[u*(k,-2),u*(k+1,-2)],0.90[u*(k,-2),u*(k+1,-2)]);
+ endfor;
+ drawoptions();
+ \end{Allumettes}
+ \fi%
+}%
+
+% 78
+\NewDocumentCommand\BuildPatternSoixanteDixHuit{O{1}}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ LargMax=2+Etape;
+ HautMax=3;
+ for k=-1 upto LargMax:
+ trace (u*(0,2)--u*(0,-HautMax)) shifted(u*(k,0)) withcolor 0.7white;
+ endfor;
+ for k=2 downto -HautMax:
+ trace (u*(-1,0)--u*(LargMax,0)) shifted(u*(0,k)) withcolor 0.7white;
+ endfor;
+ drawoptions(withpen pencircle scaled 1.1);
+ picture debut;
+ debut=image(
+ trace 0.15[(0,0),u*(1,1)]--0.85[(0,0),u*(1,1)];
+ trace 0.15[u*(0,-1),u*(1,-2)]--0.85[u*(0,-1),u*(1,-2)];
+ trace 0.15[(0,0),u*(0,-1)]--0.85[(0,0),u*(0,-1)];
+ trace 0.15[(0,0),u*(1,0)]--0.85[(0,0),u*(1,0)];
+ trace 0.15[u*(0,-1),u*(1,-1)]--0.85[u*(0,-1),u*(1,-1)];
+ );
+ trace debut;
+ trace symetrie(debut,(0,0),(0,1)) shifted(u*(Etape+1,0));
+ %verticales
for k=1 upto Etape:
- NBobj:=nbobj;
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
+ trace (0.15[u*(1,1),u*(1,0)]--0.85[u*(1,1),u*(1,0)]) shifted(u*(k-1)*(1,0));
+ trace (0.15[u*(1,0),u*(1,-1)]--0.85[u*(1,0),u*(1,-1)]) shifted(u*(k-1)*(1,0));
+ trace (0.15[u*(1,-1),u*(1,-2)]--0.85[u*(1,-1),u*(1,-2)]) shifted(u*(k-1)*(1,0));
endfor;
- %nbobj=4;
- DessineFusion;
- \end{mplibcode}
- \fi
+ %horizontales
+ for k=1 upto Etape-1:
+ trace (0.15[u*(k,1),u*(k+1,1)]--0.85[u*(k,1),u*(k+1,1)]);
+ trace (0.15[u*(k,0),u*(k+1,0)]--0.85[u*(k,0),u*(k+1,0)]);
+ trace (0.15[u*(k,-1),u*(k+1,-1)]--0.85[u*(k,-1),u*(k+1,-1)]);
+ trace (0.15[u*(k,-2),u*(k+1,-2)]--0.85[u*(k,-2),u*(k+1,-2)]);
+ endfor;
+ drawoptions();
+ \end{mplibcode}%
+ \fi%
}%
-%155
-\NewDocumentCommand\BuildPatternCentCinquanteCinq{}{
+% 77b
+\NewDocumentCommand\BuildPatternSoixanteDixSeptb{}{%
\ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ LargMax=2+Etape;
+ HautMax=2+Etape-1;
+ for k=-1 upto LargMax:
+ trace (u*(0,2)--u*(0,-HautMax)) shifted(u*(k,0)) withcolor 0.7white;
+ endfor;
+ for k=2 downto -HautMax:
+ trace (u*(-1,0)--u*(LargMax,0)) shifted(u*(0,k)) withcolor 0.7white;
+ endfor;
+ drawoptions(withpen pencircle scaled 1.1);
+ for k=0 upto Etape-1:
+ pair K;
+ K=u*(1+k/2,-k/2);
+ picture quart;
+ quart=image(
+ trace dot;
+ trace dot shifted(u*(1,1));
+ for l=1 upto k:
+ trace dot shifted(u*(0,-l+1));
+ trace dot shifted(u*(0,-l));
+ endfor;
+ );
+ trace rotation(quart,K,0);
+ trace rotation(quart,K,90);
+ trace rotation(quart,K,180);
+ trace rotation(quart,K,-90);
+ endfor;
+ drawoptions();
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 77a
+\NewDocumentCommand\BuildPatternSoixanteDixSepta{O{1}}{%
+ \ifluatex%
+ \begin{Allumettes}[Echelle=\fpeval{0.30*#1}]
+ Etape=\useKV[Pattern]{Etape};
+ LargMax=2+Etape;
+ HautMax=2+Etape-1;
+ for k=-1 upto LargMax:
+ trace (u*(0,2)--u*(0,-HautMax)) shifted(u*(k,0)) withcolor 0.7white;
+ endfor;
+ for k=2 downto -HautMax:
+ trace (u*(-1,0)--u*(LargMax,0)) shifted(u*(0,k)) withcolor 0.7white;
+ endfor;
+ drawoptions(withpen pencircle scaled 1.1);
+ for k=0 upto Etape-1:
+ pair K;
+ K=u*(1+k/2,-k/2);
+ picture quart;
+ quart=image(
+ trace Allu(0.15[(0,0),u*(1,1)],0.85[(0,0),u*(1,1)]);
+ for l=1 upto k:
+ trace Allu(0.15[u*(0,-l+1),u*(0,-l)],0.85[u*(0,-l+1),u*(0,-l)]);
+ endfor;
+ );
+ trace rotation(quart,K,0);
+ trace rotation(quart,K,90);
+ trace rotation(quart,K,180);
+ trace rotation(quart,K,-90);
+ endfor;
+ drawoptions();
+ \end{Allumettes}%
+ \fi%
+}%
+
+% 77
+\NewDocumentCommand\BuildPatternSoixanteDixSept{O{1}}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ LargMax=2+Etape;
+ HautMax=2+Etape-1;
+ for k=-1 upto LargMax:
+ trace (u*(0,2)--u*(0,-HautMax)) shifted(u*(k,0)) withcolor 0.7white;
+ endfor;
+ for k=2 downto -HautMax:
+ trace (u*(-1,0)--u*(LargMax,0)) shifted(u*(0,k)) withcolor 0.7white;
+ endfor;
+ drawoptions(withpen pencircle scaled 1.1);
+ for k=0 upto Etape-1:
+ pair K;
+ K=u*(1+k/2,-k/2);
+ picture quart;
+ quart=image(
+ trace 0.15[(0,0),u*(1,1)]--0.85[(0,0),u*(1,1)];
+ for l=1 upto k:
+ trace 0.15[u*(0,-l+1),u*(0,-l)]--0.85[u*(0,-l+1),u*(0,-l)];
+ endfor;
+ );
+ trace rotation(quart,K,0);
+ trace rotation(quart,K,90);
+ trace rotation(quart,K,180);
+ trace rotation(quart,K,-90);
+ endfor;
+ drawoptions();
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 76
+\NewDocumentCommand\BuildPatternSoixanteSeizea{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ LargMax=4+Etape;
+ HautMax=2*(Etape+1);
+ for k=0 upto LargMax:
+ trace ((0,0)--u*(0,HautMax)) shifted(u*(k,0)) withcolor 0.7white;
+ endfor;
+ for k=0 upto HautMax:
+ trace ((0,0)--u*(LargMax,0)) shifted(u*(0,k)) withcolor 0.7white;
+ endfor;
+ for k=1 upto Etape+2:
+ for l=1 upto Etape+1:
+ trace dot shifted(u*(k,l));
+ endfor;
+ endfor;
+ for l=1 upto Etape:
+ for k=l+1 upto Etape+2:
+ trace dot shifted(u*(k,Etape+l+1));
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 75
+\NewDocumentCommand\BuildPatternSoixanteQuinzea{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ LargMax=4+2*(Etape-1);
+ HautMax=2+Etape;
+ for k=0 upto LargMax:
+ trace ((0,0)--u*(0,HautMax)) shifted(u*(k,0)) withcolor 0.7white;
+ endfor;
+ for k=0 upto HautMax:
+ trace ((0,0)--u*(LargMax,0)) shifted(u*(0,k)) withcolor 0.7white;
+ endfor;
+ trace dot shifted(u*(LargMax div 2,HautMax-1));
+ for k=0 upto 2:
+ trace dot shifted(u*((LargMax div 2)-1+k,HautMax-2));
+ endfor;
+ for k=2 upto Etape:
+ trace dot shifted(u*((LargMax div 2)-k,HautMax-k-1));
+ trace dot shifted(u*((LargMax div 2)-k+1,HautMax-k-1));
+ trace dot shifted(u*((LargMax div 2)+k-1,HautMax-k-1));
+ trace dot shifted(u*((LargMax div 2)+k,HautMax-k-1));
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 72
+\NewDocumentCommand\BuildPatternSoixanteDouzea{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ if picture #1:
+ CouleurFond:=white;
+ for k=0 upto 4*Etape:
+ for l=0 upto 4*Etape:
+ depla:=(k*larg,l*haut);
+ trace #1 shifted depla;
+ endfor;
+ endfor;
+ \ifemptyKV[Pattern]{Couleur}{%
+ CouleurFond:=Orange;
+ }{%
+ CouleurFond:=\useKV[Pattern]{Couleur};
+ }%
+ for k=0 upto Etape-1:
+ for l=0 upto Etape-1:
+ trace #1 shifted(k*larg,l*haut);
+ endfor;
+ endfor;
+ for k=3*Etape+1 upto 4*Etape:
+ for l=0 upto Etape-1:
+ trace #1 shifted(k*larg,l*haut);
+ endfor;
+ endfor;
+ for k=0 upto Etape-1:
+ for l=3*Etape+1 upto 4*Etape:
+ trace #1 shifted(k*larg,l*haut);
+ endfor;
+ endfor;
+ for k=3*Etape+1 upto 4*Etape:
+ for l=3*Etape+1 upto 4*Etape:
+ trace #1 shifted(k*larg,l*haut);
+ endfor;
+ endfor;
+ for k=Etape upto 3*Etape:
+ for l=Etape upto 3*Etape:
+ trace #1 shifted(k*larg,l*haut);
+ endfor;
+ endfor;
+ fi;
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 69
+\NewDocumentCommand\BuildPatternSoixanteNeufa{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ if picture #1:
+ for k=0 upto Etape-1:
+ for l=0 upto Etape-1:
+ depla:=(k*larg,l*haut);
+ trace #1 shifted depla;
+ endfor;
+ endfor;
+ for k=0 upto (Etape div 2)-1:
+ trace #1 shifted(Etape*larg,k*haut);
+ endfor;
+ if Etape mod 2=1:
+ trace demihexagonea shifted(Etape*larg,(Etape div 2)*haut);
+ fi;
+ fi;
+ \end{mplibcode}%
+ \fi%
+}%
+%68
+\NewDocumentCommand\BuildPatternSoixanteHuita{m}{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape:
+ cc[k]=polygonerela(Apat[k] for l=0 upto k+1:,"AV" endfor,"MO","MO" if k>0:for l=1 upto k:,"MO" endfor for l=0 upto k+1:,"RE" endfor for l=1 upto k:,"DE" endfor for l=0 upto k:,"AV" endfor else:,"RE" fi,"DE" for l=1 upto k+1:,"RE" endfor);
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(2,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape);
+ for k=0 upto Etape:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=1pt;
+ \BuildPatternCodeA{#1}
+ trace TestA;
+ for k=1 upto Etape:
+ trace TestA shifted(-k*larg,0);
+ trace TestA shifted(0,k*haut);
+ endfor;
+ for p=1 upto Etape-1:
+ for l=2 upto Etape+1:
+ depla:=((1-l)*larg,(1+p)*haut);
+ trace TestA shifted depla;
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
+%66
+\NewDocumentCommand\BuildPatternSoixanteSix{}{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeIso
+ somme:=1;
+ for nbe=1 upto Etape+1:
+ ptpattern[nbe]:=u*(alpha*somme,(somme mod 2)*0.5);
+ if nbe=Etape+1:
+ TypeCube:=cadrecubesol;
+ else:
+ TypeCube:=cadrecube;
+ fi;
+ cc[nbe]=image(
+ for k=0 upto 1:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(alpha,-0.5)+u*(0,-1));%bas droite
+ endfor;
+ for l=1 upto 3:
+ for k=l upto nbe+1:%
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(alpha,-0.5)+(l-1)*u*(0,1));%bas droite
+ endfor;
+ endfor;
+ );
+ trace cc[nbe];
+ somme:=somme+2*nbe+1+3;
+ endfor;
+ GrillePatternIso;
+ AffichagePattern(1,Etape+1);
+ \end{Geometrie}
+ }{%
\mplibforcehmode
\begin{mplibcode}
Etape:=\useKV[Pattern]{Etape};
input PfCSolid;
-
+
intensite:=1.5;
Ferme[0]:=false;
- outcolor:=LightSteelBlue;
+ \ifemptyKV[Pattern]{Couleur}{outcolor:=LightSteelBlue;}{outcolor:=\useKV[Pattern]{Couleur};}%
incolor:=white;
nb:=1;subh:=1;
creux:=true;
-
- Initialisation(2500,40,20,50);
- angx:=-40;
+
+ Initialisation(2500,30,20,50);
Objetcube1("a=0.25");
- angx:=0;
nbobj:=1;
- TR:=(0,a*cosd(-40),a*sind(-40));
- for k=0 upto Etape-2:
- NBobj:=nbobj;
nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
+ TR:=a*(0,1,0);
+ ObjetDeplacement[nbobj](1);
+ for l=1 upto 3:
+ for k=1 upto Etape+2-l:
+ TR:=a*(0,k+l-1,l);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](1);
+ endfor;
endfor;
- NBobj:=1;
- TR:=(0,-a*cosd(-40),-a*sind(-40));
- for k=0 upto Etape-2:
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
- NBobj:=nbobj;
+ DessineFusion;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
+%60
+\NewDocumentCommand\BuildPatternSoixantea{m}{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape:
+ cc[k]=polygonerela(Apat[k] for l=0 upto k:,"AV" endfor for l=0 upto k:,"MO" endfor for l=0 upto k:,"MO" endfor ,"RE" for l=0 upto k:,"DE" endfor for l=1 upto k:,"RE" endfor);
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(2,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape);
+ for k=0 upto Etape:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=1pt;
+ \BuildPatternCodeA{#1}
+ for k=0 upto Etape-1:
+ for l=0 upto Etape-1:
+ trace TestA shifted(k*larg,l*haut);
+ endfor;
endfor;
- NBobj:=1;
- TR:=(0,a*sind(-40),-a*cosd(-40));
- for k=0 upto Etape-2:
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
- NBobj:=nbobj;
+ for l=0 upto Etape-1:
+ depla:=(Etape-1)*(larg,haut)+l*(0,haut);
+ trace TestA shifted depla;
endfor;
- NBobj:=1;
- TR:=(0,-a*sind(-40),a*cosd(-40));
- for k=0 upto Etape-2:
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
- NBobj:=nbobj;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
+%59
+\NewDocumentCommand\BuildPatternCinquanteNeufa{mm}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}
+ \BuildPatternCode
+ bboxmargin:=0pt;
+ if picture #1:
+ trace #1;
+ else:
+ label(TEX(#1),(0,0));
+ fi;
+ if picture #2:
+ trace #2;
+ else:
+ label(TEX(#2),(0,0));
+ fi;
+ Largeur:=abs(lrcorner currentpicture-llcorner currentpicture);
+ Hauteur:=abs(urcorner currentpicture-lrcorner currentpicture);
+ currentpicture:=nullpicture;
+ depla:=(0,0);
+ if picture #1:
+ for k=0 upto Etape-1:
+ for l=0 upto Etape-1:
+ trace #1 shifted ((k*Largeur,l*Hauteur));
+ endfor;
endfor;
- NBobj:=1;
- TR:=(a,0,0);%
+ else:
+ for k=0 upto Etape-1:
+ for l=0 upto Etape-1:
+ label(TEX(#1),(k*Largeur,l*Hauteur));
+ endfor;
+ endfor;
+ fi;
+ if picture #2:
+ for k=-1 upto Etape:
+ trace #2 shifted ((k*Largeur,-Hauteur));
+ trace #2 shifted ((k*Largeur,Etape*Hauteur));
+ endfor;
+ for k=-1 upto Etape:
+ trace #2 shifted ((-Largeur,k*Hauteur));
+ trace #2 shifted ((Etape*Largeur,k*Hauteur));
+ endfor;
+ else:
+ for k=-1 upto Etape:
+ label(TEX(#2),(k*Largeur,-Hauteur));
+ label(TEX(#2),(k*Largeur,Etape*Hauteur));
+ endfor;
+ for k=-1 upto Etape:
+ label(TEX(#2),(-Largeur,k*Hauteur));
+ label(TEX(#2),(Etape*Largeur,k*Hauteur));
+ endfor;
+ fi;
+ \end{mplibcode}
+ \fi%
+}%
+
+%58
+\NewDocumentCommand\BuildPatternCinquanteHuit{O{1}}{%
+ \ifluatex%
+ \begin{Allumettes}[Echelle=\fpeval{0.30*#1}]
+ Etape=\useKV[Pattern]{Etape};
+ pair A[],B[];
+ A0=(0,0);
+ A1-A0=u*(1,0);
+ A2=rotation(A0,A1,-108);
+ A3=rotation(A1,A2,-108);
+ A4=rotation(A2,A3,-108);
+ picture TriEquiA,TriEquiB;
+ TriEquiA=image(
+ trace Allu(A0,A1);
+ trace Allu(A1,A2);
+ trace Allu(A2,A3);
+ trace Allu(A3,A4);
+ trace Allu(A4,A0);
+ );
+ TriEquiB=image(
+ trace Allu(A1,symetrie(A0,A1,A2));
+ trace Allu(symetrie(A0,A1,A2),symetrie(A4,A1,A2));
+ trace Allu(symetrie(A4,A1,A2),symetrie(A3,A1,A2));
+ trace Allu(symetrie(A3,A1,A2),A2);
+ );
+ for k=0 upto Etape-1:
+ if (k mod 2)=0:
+ trace TriEquiA shifted((k div 2)*(A1-A0+A2-A4));
+ else:
+ trace TriEquiB shifted((k div 2)*(A1-A0+A2-A4));
+ fi;
+ endfor;
+ \end{Allumettes}
+ \fi%
+}%
+
+%57
+\NewDocumentCommand\BuildPatternCinquanteSept{O{1}}{%
+ \ifluatex%
+ \begin{Allumettes}[Echelle=\fpeval{0.30*#1}]
+ Etape=\useKV[Pattern]{Etape};
+ pair A[],B[];
+ A0=(0,0);
+ B0=A0;
+ B1-B0=u*(0,1);
+ B2=rotation(B0,B1,90);
+ B3-B2=B0-B1;
+ A1=B1;
+ A2-A1=u*(-1,0);
+ A3-A0=A2-A1;
+ trace Allu(B0,B1);
+ trace Allu(B1,B2);
+ trace Allu(B2,B3);
+ trace Allu(B3,B0);
for k=0 upto Etape-2:
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
- NBobj:=nbobj;
+ trace Allu(A3,A0) shifted(k*u*(-1,0));
+ trace Allu(A1,A2) shifted(k*u*(-1,0));
+ trace Allu(A2,A3) shifted(k*u*(-1,0));
endfor;
- NBobj:=1;
- TR:=(-a,0,0);
+ \end{Allumettes}
+ \fi%
+}%
+
+%56a
+\NewDocumentCommand\BuildPatternCinquanteSixa{O{1}}{%
+ \ifluatex%
+ \begin{Allumettes}[Echelle=\fpeval{0.30*#1}]
+ Etape=\useKV[Pattern]{Etape};
+ pair A[],B[];
+ A0=(0,0);
+ A1-A0=u*(1,0);
+ A2=rotation(A1,A0,60);
+ picture TriEquiA,TriEquiB;
+ TriEquiA=image(
+ trace Allu(A0,A1);
+ trace Allu(A2,A0);
+ );
+ TriEquiB=image(
+ trace Allu(A1,symetrie(A0,A1,A2));
+ trace Allu(symetrie(A0,A1,A2),A2);
+ );
+ trace Allu(A0,A2);
for k=0 upto Etape-2:
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
- NBobj:=nbobj;
+ if (k mod 2)=0:
+ trace Allu(A0,A1) shifted((k div 2)*(A1-A0));
+ else:
+ trace Allu(symetrie(A0,A1,A2),A2) shifted((k div 2)*(A1-A0));
+ fi;
endfor;
- DessineFusion;
- \end{mplibcode}
+ if (Etape mod 2)=1:
+ trace Allu(A0,A1) shifted((Etape div 2)*u*(1,0));
+ trace Allu(A1,A2) shifted((Etape div 2)*u*(1,0));
+ else:
+ trace Allu(A1,symetrie(A0,A1,A2)) shifted(((Etape div 2)-1)*u*(1,0));
+ trace Allu(symetrie(A0,A1,A2),A2) shifted(((Etape div 2)-1)*u*(1,0));
+ fi;
+ \end{Allumettes}
\fi%
}%
+%56
+\NewDocumentCommand\BuildPatternCinquanteSix{O{1}}{%
+ \ifluatex%
+ \begin{Allumettes}[Echelle=\fpeval{0.30*#1}]
+ Etape=\useKV[Pattern]{Etape};
+ pair A[],B[];
+ A0=(0,0);
+ A1-A0=u*(1,0);
+ A2=rotation(A1,A0,60);
+ picture TriEquiA,TriEquiB;
+ TriEquiA=image(
+ trace Allu(A0,A1);
+ trace Allu(A1,A2);
+ trace Allu(A2,A0);
+ );
+ TriEquiB=image(
+ trace Allu(A1,symetrie(A0,A1,A2));
+ trace Allu(symetrie(A0,A1,A2),A2);
+ );
+ for k=0 upto Etape-1:
+ if (k mod 2)=0:
+ trace TriEquiA shifted((k div 2)*(A1-A0));
+ else:
+ trace TriEquiB shifted((k div 2)*(A1-A0));
+ fi;
+ endfor;
+ \end{Allumettes}
+ \fi%
+}%
+
%55
-\NewDocumentCommand\BuildPatternCinquanteCinq{}{%
+\NewDocumentCommand\BuildPatternCinquanteCinq{O{1}}{%
\ifluatex%
- \begin{Allumettes}[Echelle=0.35]
+ \begin{Allumettes}[Echelle=\fpeval{0.30*#1}]
Etape=\useKV[Pattern]{Etape};
pair A[],B[],C[],D[],E[];
A0=(0,0);
@@ -236,14 +1875,41 @@
trace Allu(A1,A2) shifted(k*u*(-1,0));
trace Allu(A2,A3) shifted(k*u*(-1,0));
endfor;
- \end{Allumettes}
+ \end{Allumettes}%
\fi%
}%
+%54
+\NewDocumentCommand\BuildPatternCinquanteQuatre{O{1}}{%
+ \ifluatex%
+ \begin{Allumettes}[Echelle=\fpeval{0.30*#1}]
+ Etape=\useKV[Pattern]{Etape};
+ pair A[],B[];
+ A0=(0,0);
+ B0=A0;
+ B1-B0=u*(0,1);
+ B2=rotation(B0,B1,90);
+ B3-B2=B0-B1;
+ A1=B1;
+ A2-A1=u*(-1,0);
+ A3-A0=A2-A1;
+ trace Allu(B0,B1);
+ trace Allu(B1,B2);
+ trace Allu(B2,B3);
+ trace Allu(B3,B0);
+ for k=0 upto Etape-1:
+ trace Allu(A3,A0) shifted(k*u*(-1,0));
+ trace Allu(A1,A2) shifted(k*u*(-1,0));
+ trace Allu(A2,A3) shifted(k*u*(-1,0));
+ endfor;
+ \end{Allumettes}
+ \fi%
+}%
+
%53
-\NewDocumentCommand\BuildPatternCinquanteTrois{}{%
+\NewDocumentCommand\BuildPatternCinquanteTrois{O{1}}{%
\ifluatex%
- \begin{Allumettes}[Echelle=0.35]
+ \begin{Allumettes}[Echelle=\fpeval{0.30*#1}]
Etape=\useKV[Pattern]{Etape};
pair A[],B[],C[],D[],E[];
A0=(0,0);
@@ -261,140 +1927,875 @@
trace Allu(A1,A2) shifted(k*u*(-1,0));
trace Allu(A2,A3) shifted(k*u*(-1,0));
endfor;
- \end{Allumettes}
+ \end{Allumettes}
\fi%
}%
+%52
+\NewDocumentCommand\BuildPatternCinquanteDeux{}{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeIso
+ somme:=1;
+ for nbe=1 upto Etape+1:
+ ptpattern[nbe]:=u*(alpha*somme,(somme mod 2)*0.5);
+ if nbe=Etape+1:
+ TypeCube:=cadrecubesol;
+ else:
+ TypeCube:=cadrecube;
+ fi;
+ cc[nbe]=image(
+ for k=nbe downto 1:
+ for l=1 upto nbe-k:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(alpha,0.5)+(l-1)*u*(0,1));%haut droite
+ endfor;
+ endfor;
+ for k=nbe downto 1:
+ for l=1 upto nbe-k:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(-alpha,0.5)+(l-1)*u*(0,1));%haut gauche
+ endfor;
+ endfor;
+ for k=0 upto nbe:% downto 0:
+ for l=1 upto nbe-k:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(-alpha,-0.5)+(l-1)*u*(0,1));%bas gauche
+ endfor;
+ endfor;
+ for k=1 upto nbe:% downto 0:
+ for l=1 upto nbe-k:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(alpha,-0.5)+(l-1)*u*(0,1));%bas droite
+ endfor;
+ endfor;
+ );
+ trace cc[nbe];
+ somme:=somme+2*nbe+1+3;
+ endfor;
+ GrillePatternIso;
+ AffichagePattern(1,Etape+1);
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode
+ \begin{mplibcode}
+ Etape:=\useKV[Pattern]{Etape};
+ input PfCSolid;
+
+ intensite:=1.5;
+ Ferme[0]:=false;
+ \ifemptyKV[Pattern]{Couleur}{outcolor:=LightSteelBlue;}{outcolor:=\useKV[Pattern]{Couleur};}%
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=true;
+
+ Initialisation(2500,30,20,50);
+ Objetcube0("a=0.25");
+ nbobj:=0;
+ for k=Etape downto 1:
+ for l=0 upto k:
+ TR:=a*(l,0,-k);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](0);
+ TR:=a*(-l,0,-k);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](0);
+ TR:=a*(0,l,-k);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](0);
+ TR:=a*(0,-l,-k);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](0);
+ endfor;
+ endfor;
+ TR:=a*(0,0,0);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](0);
+ DessineFusion;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
+%51
+\NewDocumentCommand\BuildPatternCinquanteEtUna{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ if picture #1:
+ larg:=abs(lrcorner #1-llcorner #1);
+ picture maxihexa;
+ path cc;
+ cc=cercles((0,0),larg);
+ maxihexa=image(
+ trace #1;
+ trace #1 shifted (0.5*larg*(1.5,sqrt(3)/2));
+ trace #1 shifted (0.5*larg*(1.5,-sqrt(3)/2));
+ trace #1 shifted (larg*(1.5,0));
+ );
+ for l=0 upto Etape-1:
+ depla:=(l*1.5*larg,0);
+ trace maxihexa shifted depla;
+ endfor;
+ fi;
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 50g
+%d'après Troy Henderson
+\NewDocumentCommand\BuildPatternCinquanteg{}{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}%
+ color CouleurFond;
+ \ifemptyKV[Pattern]{Couleur}{CouleurFond=0.8white;}{CouleurFond=\useKV[Pattern]{Couleur};}%
+ %
+ vardef gasket(expr t, s, ss, limit) =
+ if limit<2:
+ fill ss withcolor CouleurFond;
+ draw ss;
+ else:
+ save little_t; path little_t; little_t = t scaled s;
+ save little_s; path little_s; little_s = ss scaled s;
+ for i=1 upto length t:
+ gasket(little_t shifted (point i of t - point i of little_t), s, little_s shifted (point i of t - point i of little_t), limit-1);
+ endfor
+ fi
+ enddef;
+
+ Etape:=\useKV[Pattern]{Etape};
+ %
+ pair A,B,C;
+ B=(0,0);
+ C-B=(220,0);
+ A=rotation(C,B,-60);
+ trace polygone(A,B,C);
+ path T,S; T = for i = 1 upto 3: 220 up rotated (120i) -- endfor cycle;
+ S=A{dir90}..{dir60}2/3[A,C]{dir60}..{dir-90}(1/2[B,C]+(0,-5)){dir90}..{dir-60}2/3[A,B]{dir-60}..{dir-90}cycle;
+ gasket(T,1/2,S,Etape);
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 50f
+% D'après Vincent Pantaloni
+\NewDocumentCommand\BuildPatternCinquantef{}{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}%
+ color CouleurFond;
+ \ifemptyKV[Pattern]{Couleur}{CouleurFond=0.8white;}{CouleurFond=\useKV[Pattern]{Couleur};}%
+ %
+ vardef sierpinski(expr Aa,Ba,Ca,n)=
+ if n>0:
+ sierpinski(Aa,1/2[Aa,Ba],1/2[Aa,Ca],n-1);
+ sierpinski(1/2[Aa,Ba],Ba,1/2[Ba,Ca],n-1);
+ sierpinski(1/2[Aa,Ca],1/2[Ba,Ca],Ca,n-1);
+ else:
+ trace Ca--2/3[Ca,Aa]{dir-80}..{dir90}(1/2[Aa,Ba]+(0,10/(Etape+1))){dir-90}..{dir80}2/3[Ca,Ba]--cycle withcolor CouleurFond;
+ fi;
+ enddef;
+ %
+ Etape:=\useKV[Pattern]{Etape};
+ %
+ u:=3cm;
+ pair A,B,C;
+ A=(0,0);
+ B-A=(u,0);
+ C=rotation(B,A,60);
+ sierpinski(A,B,C,Etape);
+ currentpicture:=rotation(currentpicture,iso(A,B,C),180);
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 50e
+% d'après Troy Henderson
+\NewDocumentCommand\BuildPatternCinquantee{}{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}%
+ color CouleurFond;
+ \ifemptyKV[Pattern]{Couleur}{CouleurFond=0.8white;}{CouleurFond=\useKV[Pattern]{Couleur};}%
+ %
+ vardef gasket(expr t, s, limit) =
+ if limit<2:
+ fill t withcolor CouleurFond;
+ draw t;
+ else:
+ save little_t; path little_t; little_t = t scaled s;
+ for i=1 upto length t:
+ gasket(little_t shifted (point i of t - point i of little_t), s, limit-1);
+ endfor
+ fi;
+ enddef;
+ %
+ Etape:=\useKV[Pattern]{Etape};
+ %
+ path T; T = for i = 1 upto 5: 50 up rotated (144i) -- endfor cycle;
+ gasket(T,(3-sqrt(5))/2,Etape);
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 50d
+% d'après Troy Henderson
+\NewDocumentCommand\BuildPatternCinquanted{}{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}%
+ color CouleurFond;
+ \ifemptyKV[Pattern]{Couleur}{CouleurFond=0.8white;}{CouleurFond=\useKV[Pattern]{Couleur};}%
+ %
+ vardef gasket(expr t, s, limit) =
+ if limit<2:
+ fill t withcolor CouleurFond;
+ draw t;
+ else:
+ save little_t; path little_t; little_t = t scaled s;
+ for i=1 upto length t:
+ gasket(little_t shifted (point i of t - point i of little_t), s, limit-1);
+ endfor
+ fi;
+ enddef;
+
+ Etape:=\useKV[Pattern]{Etape};
+ %
+ path T; T = for i = 1 upto 5: 50 up rotated (72i) -- endfor cycle;
+ gasket(T,(3-sqrt(5))/2,Etape);
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 50c
+% d'après Troy Henderson
+\NewDocumentCommand\BuildPatternCinquantec{}{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}%
+ color CouleurFond;
+ \ifemptyKV[Pattern]{Couleur}{CouleurFond=0.8white;}{CouleurFond=\useKV[Pattern]{Couleur};}%
+ %
+ vardef gasket(expr t, s, limit) =
+ if limit<2:
+ fill t withcolor CouleurFond;
+ draw t;
+ else:
+ save little_t; path little_t; little_t = t scaled s;
+ for i=1 upto length t:
+ gasket(little_t shifted (point i of t - point i of little_t), s, limit-1);
+ endfor
+ fi;
+ enddef;
+
+ Etape:=\useKV[Pattern]{Etape};
+ %
+ path T; T = for i = 1 upto 6: 50 up rotated (60i) -- endfor cycle;
+ gasket(T, 1/3,Etape);
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 50b
+% d'après Vincent Pantaloni
+\NewDocumentCommand\BuildPatternCinquanteb{}{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}%
+ color CouleurFond;
+ \ifemptyKV[Pattern]{Couleur}{CouleurFond=0.8white;}{CouleurFond=\useKV[Pattern]{Couleur};}%
+ %
+ vardef sierpinski(expr Aa,Ba,Ca,Da,n)=
+ if n>0:
+ sierpinski(Aa,1/3[Aa,Ba],1/3[Aa,Ca],1/3[Aa,Da],n-1);
+ sierpinski(1/3[Aa,Ba],1/3[Aa,Ca],1/3[Ba,Da],1/3[Ba,Aa],n-1);
+ sierpinski(2/3[Aa,Ba],Ba,1/3[Ba,Ca],1/3[Ba,Da],n-1);
+ sierpinski(1/3[Ba,Ca],2/3[Ba,Ca],2/3[Aa,Ca],1/3[Ba,Da],n-1);
+ sierpinski(2/3[Ba,Ca],Ca,1/3[Ca,Da],1/3[Ca,Aa],n-1);
+ sierpinski(1/3[Ca,Da],1/3[Ca,Aa],2/3[Ba,Da],2/3[Ca,Da],n-1);
+ sierpinski(2/3[Ba,Da],1/3[Da,Ca],Da,1/3[Da,Aa],n-1);
+ sierpinski(2/3[Ba,Da],1/3[Da,Aa],2/3[Da,Aa],1/3[Aa,Ca],n-1);
+ else:
+ fill Aa--Ba--Ca--Da--cycle withcolor CouleurFond;
+ trace Aa--Ba--Ca--Da--cycle;
+ fi;
+ enddef;
+ %
+ Etape:=\useKV[Pattern]{Etape};
+ %
+ u:=3cm;
+ pair A,B,C,D;
+ A=(0,0);
+ B-A=(u,0);
+ C=rotation(A,B,90);
+ D-C=A-B;
+ sierpinski(A,B,C,D,Etape);
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 50a
+% d'après Vincent Pantaloni
+\NewDocumentCommand\BuildPatternCinquantea{}{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}%
+ color CouleurFond;
+ \ifemptyKV[Pattern]{Couleur}{CouleurFond=0.8white;}{CouleurFond=\useKV[Pattern]{Couleur};}%
+ %
+ vardef sierpinski(expr Aa,Ba,Ca,Da,n)=
+ if n>0:
+ sierpinski(Aa,1/3[Aa,Ba],1/3[Aa,Ca],1/3[Aa,Da],n-1);
+ sierpinski(2/3[Aa,Ba],Ba,1/3[Ba,Ca],1/3[Ba,Da],n-1);
+ sierpinski(2/3[Ba,Ca],Ca,1/3[Ca,Da],1/3[Ca,Aa],n-1);
+ sierpinski(2/3[Ba,Da],1/3[Da,Ca],Da,1/3[Da,Aa],n-1);
+ else:
+ fill Aa--Ba--Ca--Da--cycle withcolor CouleurFond;
+ trace Aa--Ba--Ca--Da--cycle;
+ fi;
+ enddef;
+ %
+ Etape:=\useKV[Pattern]{Etape};
+ %
+ u:=3cm;
+ pair A,B,C,D;
+ A=(0,0);
+ B-A=(u,0);
+ C=rotation(A,B,90);
+ D-C=A-B;
+ sierpinski(A,B,C,D,Etape);
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 50
+% d'après Vincent Pantaloni
+\NewDocumentCommand\BuildPatternCinquante{}{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}%
+ color CouleurFond;
+ \ifemptyKV[Pattern]{Couleur}{CouleurFond=0.8white;}{CouleurFond=\useKV[Pattern]{Couleur};}%
+ %
+ vardef sierpinski(expr Aa,Ba,Ca,n)=
+ if n>0:
+ sierpinski(Aa,1/2[Aa,Ba],1/2[Aa,Ca],n-1);
+ sierpinski(1/2[Aa,Ba],Ba,1/2[Ba,Ca],n-1);
+ sierpinski(1/2[Aa,Ca],1/2[Ba,Ca],Ca,n-1);
+ else:
+ fill Aa--Ba--Ca--cycle withcolor CouleurFond;
+ trace Aa--Ba--Ca--cycle;
+ fi;
+ enddef;
+ %
+ Etape:=\useKV[Pattern]{Etape};
+ %
+ u:=3cm;
+ pair A,B,C;
+ A=(0,0);
+ B-A=(u,0);
+ C=rotation(B,A,60);
+ sierpinski(A,B,C,Etape);
+ \end{mplibcode}%
+ \fi%
+}%
+
+%49
+\NewDocumentCommand\BuildPatternQuaranteNeuf{}{
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeIso
+ somme:=1;
+ for nbe=0 upto Etape:
+ ptpattern[nbe]:=u*(somme,(somme mod 2)*0.5);
+ if nbe=Etape:
+ TypeCube:=cadrecubesol;
+ else:
+ TypeCube:=cadrecube;
+ fi;
+ cc[nbe]=image(
+ if nbe mod 2=0:
+ for k=0 upto (2**(nbe div 2))-1:
+ for l=0 upto (2**((nbe-1) div 2))-1:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(1,-0.5)+l*u*(0,1));
+ endfor;
+ endfor;
+ else:
+ for k=0 upto (2**((nbe-1) div 2))-1:
+ for l=0 upto (2**((nbe-1) div 2))-1:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(1,-0.5)+l*u*(0,1));
+ endfor;
+ endfor;
+ fi;
+ );
+ trace cc[nbe];
+ somme:=somme+nbe+2+1;
+ endfor;
+ GrillePatternIso;
+ AffichagePattern(0,Etape);
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode
+ \begin{mplibcode}
+ Etape:=\useKV[Pattern]{Etape};
+ input PfCSolid;
+
+ intensite:=1.5;
+ Ferme[0]:=false;
+ \ifemptyKV[Pattern]{Couleur}{outcolor:=LightSteelBlue;}{outcolor:=\useKV[Pattern]{Couleur};}%
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=false;
+
+ Initialisation(2500,40,20,50);
+ Objetcube0("a=0.25");
+ nbobj:=0;
+ if (Etape mod 2)=0:
+ for k=0 upto (2**(Etape div 2))-1:
+ for l=0 upto (2**((Etape-1) div 2))-1:
+ nbobj:=nbobj+1;
+ TR:=0.25*(0,k,l);
+ ObjetDeplacement[nbobj](0);
+ endfor;
+ endfor;
+ else:
+ for k=0 upto (2**((Etape-1) div 2))-1:
+ for l=0 upto (2**((Etape-1) div 2))-1:
+ nbobj:=nbobj+1;
+ TR:=0.25*(0,k,l);
+ ObjetDeplacement[nbobj](0);
+ endfor;
+ endfor;
+ fi;
+ DessineFusion;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
%48
-\NewDocumentCommand\BuildPatternQuaranteHuit{}{
+\NewDocumentCommand\BuildPatternQuaranteHuit{}{%
\ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeIso
+ somme:=1;
+ for nbe=0 upto Etape:
+ ptpattern[nbe]:=u*(somme,if (somme mod 2)=0:0 else: -0.5 fi);
+ if nbe=Etape:
+ TypeCube:=cadrecubesol;
+ else:
+ TypeCube:=cadrecube;
+ fi;
+ cc[nbe]=image(
+ trace TypeCube shifted(ptpattern[nbe]);
+ for k=nbe downto 1:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(1,0.5));%haut droite
+ endfor;
+ %for k=nbe downto 1:
+ % trace TypeCube shifted(ptpattern[nbe]+k*u*(-1,0.5));%haut gauche
+ %endfor;
+ %for k=1 upto nbe:% downto 0:
+ % trace TypeCube shifted(ptpattern[nbe]+k*u*(-1,-0.5));%bas gauche
+ %endfor;
+ for k=1 upto nbe:% downto 0:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(1,-0.5));%bas droite
+ endfor;
+ for k=1 upto nbe:% downto 0:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(0,1));%haut
+ endfor;
+ );
+ trace cc[nbe];
+ somme:=somme+nbe+2+1;
+ endfor;
+ GrillePatternIso;
+ AffichagePattern(0,Etape);
+ \end{Geometrie}
+ }{%
\mplibforcehmode
\begin{mplibcode}
Etape:=\useKV[Pattern]{Etape};
input PfCSolid;
-
+
intensite:=1.5;
Ferme[0]:=false;
- outcolor:=LightSteelBlue;
+ \ifemptyKV[Pattern]{Couleur}{outcolor:=LightSteelBlue;}{outcolor:=\useKV[Pattern]{Couleur};}%
incolor:=white;
nb:=1;subh:=1;
creux:=true;
-
+
Initialisation(2500,40,20,50);
Objetcube1("a=0.25");
nbobj:=1;
TR:=(0,a,0);
for k=0 upto Etape-2:
- NBobj:=nbobj;
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
+ NBobj:=nbobj;
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
endfor;
NBobj:=1;
TR:=(-a,0,0);
for k=0 upto Etape-2:
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
- NBobj:=nbobj;
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
+ NBobj:=nbobj;
endfor;
NBobj:=1;
TR:=(0,0,a);%
for k=0 upto Etape-2:
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
- NBobj:=nbobj;
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
+ NBobj:=nbobj;
endfor;
DessineFusion;
\end{mplibcode}
+ }%
\fi%
}%
%46
-\NewDocumentCommand\BuildPatternQuaranteSix{}{
+\NewDocumentCommand\BuildPatternQuaranteSix{}{%
\ifluatex%
- \mplibforcehmode
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeIso
+ somme:=1;
+ for nbe=0 upto Etape:
+ ptpattern[nbe]:=u*(somme,if (somme mod 2)=0:-0.5 else: 0.5 fi);
+ if nbe=Etape:
+ TypeCube:=cadrecubesol;
+ else:
+ TypeCube:=cadrecube;
+ fi;
+ cc[nbe]=image(
+ trace TypeCube shifted(ptpattern[nbe]);
+ for k=nbe downto 1:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(1,0.5));%haut droite
+ endfor;
+ for k=nbe downto 1:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(-1,0.5));%haut gauche
+ endfor;
+ for k=1 upto nbe:% downto 0:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(-1,-0.5));%bas gauche
+ endfor;
+ for k=1 upto nbe:% downto 0:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(1,-0.5));%bas droite
+ endfor;
+ for k=1 upto nbe:% downto 0:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(0,1));%haut
+ endfor;
+ );
+ trace cc[nbe];
+ somme:=somme+2*nbe+1+3;
+ endfor;
+ GrillePatternIso;
+ AffichagePattern(0,Etape);
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode
\begin{mplibcode}
Etape:=\useKV[Pattern]{Etape};
input PfCSolid;
-
+
intensite:=1.5;
Ferme[0]:=false;
- outcolor:=LightSteelBlue;
+ \ifemptyKV[Pattern]{Couleur}{outcolor:=LightSteelBlue;}{outcolor:=\useKV[Pattern]{Couleur};}%
incolor:=white;
nb:=1;subh:=1;
creux:=true;
-
+
Initialisation(2500,40,20,50);
Objetcube1("a=0.25");
nbobj:=1;
TR:=(0,a,0);
for k=0 upto Etape-2:
- NBobj:=nbobj;
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
+ NBobj:=nbobj;
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
endfor;
NBobj:=1;
TR:=(0,-a,0);
for k=0 upto Etape-2:
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
- NBobj:=nbobj;
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
+ NBobj:=nbobj;
endfor;
NBobj:=1;
TR:=(a,0,0);
for k=0 upto Etape-2:
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
- NBobj:=nbobj;
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
+ NBobj:=nbobj;
endfor;
NBobj:=1;
TR:=(-a,0,0);
for k=0 upto Etape-2:
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
- NBobj:=nbobj;
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
+ NBobj:=nbobj;
endfor;
NBobj:=1;
TR:=(0,0,a);%
for k=0 upto Etape-2:
- nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](NBobj);
- NBobj:=nbobj;
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
+ NBobj:=nbobj;
endfor;
DessineFusion;
- \end{mplibcode}
+ \end{mplibcode}%
+ }%
\fi%
}%
%45
-\NewDocumentCommand\BuildPatternQuaranteCinq{}{%
+\NewDocumentCommand\BuildPatternQuaranteCinqa{m}{%
\ifluatex%
- \mplibforcehmode%
- \begin{mplibcode}
- pair A[];
- Etape:=\useKV[Pattern]{Etape};
- A[0]=(0,0);
- path piece;
- piece=unitsquare scaled 5mm shifted(-2.5mm,-2.5mm);
- for k=0 upto (2*Etape):
- for l=0 upto Etape:
- if (k=Etape) and (l=0):
- else:
- trace piece shifted(5mm*(k,l));
- fi;
- endfor;
- endfor;
- \end{mplibcode}
- \fi
-}
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape:
+ cc[k]=polygonerela(Apat[k] for l=0 upto k:,"AV" endfor ,"MO","AV","DE" for l=0 upto k:,"AV" endfor for l=0 upto k+1:,"MO" endfor for l=0 upto 2*(k+1):,"RE" endfor);
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(1,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape);
+ for k=0 upto Etape:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}
+ \BuildPatternCode
+ if picture #1:
+ for k=0 upto (2*Etape):
+ for l=0 upto Etape:
+ if (k=Etape) and (l=0):
+ else:
+ trace #1 shifted(5mm*(k,l));
+ fi;
+ endfor;
+ endfor;
+ fi;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+%44
+\NewDocumentCommand\BuildPatternQuaranteQuatrea{m}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ if picture #1:
+ larg:=abs(lrcorner #1-llcorner #1);
+ picture maxihexa;
+ path cc;
+ cc=cercles((0,0),larg);
+ maxihexa=image(
+ trace #1 shifted (0.5*larg*(1.5,sqrt(3)/2));
+ trace #1 shifted (0.5*larg*(1.5,-sqrt(3)/2));
+ trace #1 shifted (0.5*larg*(-1.5,sqrt(3)/2));
+ trace #1 shifted (0.5*larg*(-1.5,-sqrt(3)/2));
+ trace #1 shifted (0.5*larg*(0,sqrt(3)));
+ trace #1 shifted (0.5*larg*(0,-sqrt(3)));
+ );
+ for l=0 upto Etape-1:
+ depla:=(l*1.5*larg,0);
+ trace maxihexa shifted depla;
+ endfor;
+ fi;
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 43
+\NewDocumentCommand\BuildPatternQuaranteTroisa{m}{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape:
+ cc[k]=polygonerela(Apat[k] for l=0 upto 3+k:,"AV" endfor ,"MO" for l=0 upto k+1:,"AV" endfor,"MO" for l=0 upto k+2:,"RE" endfor,"DE" for l=0 upto k+1:,"RE" endfor for l=0 upto k+2:,"MO" endfor,"RE");
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(1,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape);
+ for k=0 upto Etape:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=0pt;
+ \BuildPatternCodeA{#1}
+ trace TestA;
+ for l=1 upto Etape+2:
+ depla:=(0,l*haut);
+ trace TestA shifted depla;
+ depla:=(l*larg,0);
+ trace TestA shifted depla;
+ depla:=(Etape+1)*(larg,0)+(l*larg,haut);
+ trace TestA shifted depla;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
+%42
+\NewDocumentCommand\BuildPatternQuaranteDeux{O{1}}{%
+ \ifluatex%
+ \begin{Allumettes}[Echelle=\fpeval{0.30*#1}]
+ Etape=\useKV[Pattern]{Etape};
+ pair A[],B[],C[],D[],E[];
+ A0=(0,0);
+ path cc;
+ cc=cercles(A0,u);
+ for k=0 upto 6:
+ B[k]=pointarc(cc,-30+k*60);
+ endfor;
+ picture UnitHexd,UnitHexi;
+ UnitHexd=image(
+ trace Allu(B1,B2);
+ trace Allu(B2,B3);
+ trace Allu(B3,B4);
+ trace Allu(B4,B5);
+ trace Allu(B5,B6);
+ );
+ UnitHexi=image(
+ trace Allu(B1,B2);
+ trace Allu(B2,B3);
+ trace Allu(B4,B5);
+ trace Allu(B5,B6);
+ );
+ currentpicture:=nullpicture;
+ trace UnitHexd;
+ for k=1 upto Etape-1:
+ trace UnitHexi shifted(2*k*(iso(B0,B1)-A0));
+ endfor;
+ trace Allu(B0,B1) shifted(2*(Etape-1)*(iso(B0,B1)-A0));
+ \end{Allumettes}%
+ \fi%
+}%
+
+%40
+\NewDocumentCommand\BuildPatternQuarante{}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ Etape:=\useKV[Pattern]{Etape};
+ input PfCSolid;
+
+ intensite:=1.5;
+ Ferme[0]:=false;
+ \ifemptyKV[Pattern]{Couleur}{outcolor:=white;}{outcolor:=\useKV[Pattern]{Couleur};}
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=true;
+ %
+ Initialisation(2500,22,20,50);
+ Objetcube0("a=0.25");
+ nbobj:=0;
+ for k=0 upto Etape-1:
+ for l=0 upto Etape-1:
+ for p=0 upto Etape-1:
+ TR:=a*(k,l,p);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](0);
+ TR:=a*(k,l+2*Etape,p);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](0);
+ endfor;
+ endfor;
+ endfor;
+ for k=0 upto 3*Etape-1:
+ for l=0 upto Etape-1:
+ nbobj:=nbobj+1;
+ TR:=0.25*(l,k,-1);
+ ObjetDeplacement[nbobj](0);
+ endfor;
+ endfor;
+ DessineFusion;
+ \end{mplibcode}%
+ \fi%
+}%
+
+
%39
\NewDocumentCommand\BuildPatternTrenteNeuf{}{
\ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[CoinHD={5*u*(0.5*(\useKV[Pattern]{Etape}*(\useKV[Pattern]{Etape}+1)/2),0.5*(\useKV[Pattern]{Etape}+2))}]
+ Etape:=\useKV[Pattern]{Etape};
+ color CouleurEtape,CouleurSol;
+ \ifemptyKV[Pattern]{Couleur}{CouleurEtape=Purple;}{CouleurEtape=\useKV[Pattern]{Couleur};}
+ \ifemptyKV[Pattern]{CouleurSolution}{CouleurSol=Evidence;}{CouleurSol=\useKV[Pattern]{CouleurSolution};}
+ u:=2.5mm;
+ trace papierisometriqueu withcolor 0.7white;
+ picture cadrecube,cadrecubesol;
+ pair A[];
+ A1=pp(0,2*(Etape+1)-1);
+ A2-A1=pp(1,-0.5);
+ A3-A2=pp(1,0.5);
+ A4-A3=pp(0,1);
+ A5-A4=pp(-1,0.5);
+ A6-A5=pp(-1,-0.5);
+ A7-A6=pp(1,-0.5);
+ boolean Solution;
+ Solution=\useKV[Pattern]{Solution};
+ cadrecube=image(%
+ fill polygone(A1,A2,A3,A4,A5,A6) withcolor CouleurEtape;
+ drawoptions(withcolor white);
+ trace polygone(A1,A2,A3,A4,A5,A6);
+ trace A6--A7--A2;
+ trace A7--A4;
+ drawoptions();
+ );
+ somme:=2;
+ for nbe=0 upto Etape-2:
+ for k=nbe downto 0:
+ for p=0 upto k:
+ for l=0 upto nbe:
+ trace cadrecube shifted(pp(somme,(somme mod 2)*0.5)+(l-1)*pp(1,-0.5)+p*pp(-1,-0.5)+(-k)*pp(0,1));
+ endfor;
+ endfor;
+ endfor;
+ somme:=somme+nbe+5;
+ endfor;
+ if Solution:
+ cadrecubesol=image(%
+ fill polygone(A1,A2,A3,A4,A5,A6) withcolor CouleurSol;
+ drawoptions(withcolor white);
+ trace polygone(A1,A2,A3,A4,A5,A6);
+ trace A6--A7--A2;
+ trace A7--A4;
+ drawoptions();
+ );
+ for nbe=Etape-1 upto Etape-1:
+ for k=nbe downto 0:
+ for p=0 upto k:
+ for l=0 upto nbe:
+ trace cadrecubesol shifted(pp(somme,(somme mod 2)*0.5)+(l-1)*pp(1,-0.5)+p*pp(-1,-0.5)+(-k)*pp(0,1));
+ endfor;
+ endfor;
+ endfor;
+ endfor;
+ fi;
+ \end{Geometrie}
+ }{%
\mplibforcehmode%
- \begin{mplibcode}
+ \begin{mplibcode}%
Etape:=\useKV[Pattern]{Etape};
input PfCSolid;
-
+
intensite:=1.5;
Ferme[0]:=false;
outcolor:=Orange;
@@ -401,7 +2802,7 @@
incolor:=white;
nb:=1;subh:=1;
creux:=true;
-
+
Initialisation(2500,40,20,50);
Objetcube1("a=0.25");
nbobj:=1;
@@ -415,51 +2816,334 @@
endfor;
endfor;
DessineFusion;
- \end{mplibcode}
- \fi
+ \end{mplibcode}%
+ }%
+ \fi%
}%
-%30
-\NewDocumentCommand\BuildPatternTrente{}{%
+%37
+\NewDocumentCommand\BuildPatternTrenteSept{O{1}}{%
\ifluatex%
+ \begin{Allumettes}[Echelle=\fpeval{0.30*#1}]
+ Etape=\useKV[Pattern]{Etape};
+ pair A[],B[],C[],D[],E[];
+ A0=(0,0);
+ path cc;
+ cc=cercles(A0,u);
+ for k=0 upto 6:
+ B[k]=pointarc(cc,-30+k*60);
+ endfor;
+ picture UnitHexa;
+ UnitHexa=image(
+ trace Allu(B4,B5);
+ trace Allu(B5,B6);
+ trace Allu(B0,B1);
+ trace Allu(B1,B2);
+ trace Allu(B2,B3);
+ );
+ currentpicture:=nullpicture;
+ trace Allu(B3,B4);
+ for k=0 upto Etape-1:
+ trace UnitHexa shifted(2*k*(iso(B0,B1)-A0));
+ endfor;
+ \end{Allumettes}%
+ \fi%
+}%
+
+% 36
+\NewDocumentCommand\BuildPatternTrenteSix{}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ Etape:=\useKV[Pattern]{Etape};
+ %
+ input PfCSolid;
+ %
+ intensite:=1.5;
+ Ferme[0]:=false;
+ \ifemptyKV[Pattern]{Couleur}{outcolor:=LightSteelBlue;}{outcolor:=\useKV[Pattern]{Couleur};}
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=true;
+ %
+ Initialisation(2500,22,20,50);
+ Objetpave0("L=1","H=0.2","P=0.2");
+ %Objetpave1("L=0.2","H=0.2","P=1");
+ nbobj:=0;
+ angz:=90;
+ for k=Etape downto 1:
+ TR:=0.2*(0,0,-k);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](0);
+ endfor;
+ for k=Etape downto 1:
+ TR:=0.2*(0,1,-k);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](0);
+ endfor;
+ for k=Etape downto 1:
+ TR:=0.2*(0,3,-k);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](0);
+ endfor;
+ for k=Etape downto 1:
+ TR:=0.2*(0,4,-k);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](0);
+ endfor;
+ angz:=0;
+ for k=4 downto 0:
+ nbobj:=nbobj+1;
+ TR:=0.2*(-k+2,2,0);
+ ObjetDeplacement[nbobj](0);
+ endfor;
+ % DessineFusion;
+ for k=1 upto nbobj:
+ AffichageObjet[k];
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 35
+\NewDocumentCommand\BuildPatternTrenteCinq{}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ bboxmargin:=0pt;
+ larg:=abs(lrcorner kappla-llcorner kappla);
+ haut:=abs(urcorner kappla-lrcorner kappla);
+ trace kappla;
+ picture Pi;
+ Pi=image(
+ trace rotation(kappla,lrcorner kappla,-90);
+ trace rotation(kappla,lrcorner kappla,-90) shifted(larg-haut,0);
+ trace kappla shifted((larg,larg));
+ trace kappla shifted(2*larg,0);
+ );
+ for l=0 upto Etape-1:
+ trace Pi shifted(l*(2*larg,0));
+ endfor;
+ \end{mplibcode}%
+ \fi%
+}%
+
+% 34
+\NewDocumentCommand\BuildPatternTrenteQuatrea{m}{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape:
+ cc[k]=polygonerela(Apat[k] for l=0 upto 2*(k+1)-1:,"AV" endfor for l=0 upto k:,"MO","RE" endfor for l=0 upto k:,"RE","DE" endfor);
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(1,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape);
+ for k=0 upto Etape:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=0pt;
+ \BuildPatternCodeA{#1}
+ for l=1 upto Etape:
+ for k=0 upto 2*l-1:
+ depla:=((-l+k)*larg,-l*haut);
+ trace TestA shifted depla;
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
+% 33
+\NewDocumentCommand\BuildPatternTrenteTroisa{m}{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,\PfMRetiensEtape+2);
+ picture cc[];
+ for nbe=0 upto Etape-2:
+ path TestA;
+ pair depla;
+ cc[nbe]=image(
+ TestA:=polygonerela(Apat[nbe],"DE","AV","MO");
+ fill TestA withcolor if nbe<Etape:CouleurEtape else:CouleurSol fi withtransparency(1,0.35);
+ trace TestA withpen pencircle scaled 1.1 withcolor if nbe<Etape:CouleurEtape else:CouleurSol fi;
+ for l=1 upto nbe:
+ for k=-l upto l:
+ if (k mod 2)=(l mod 2):
+ depla:=u*(k,l);
+ fill (TestA shifted depla) withcolor if k<Etape:CouleurEtape else:CouleurSol fi withtransparency(1,0.35);
+ trace TestA shifted depla withpen pencircle scaled 1.1 withcolor if k<Etape:CouleurEtape else:CouleurSol fi;
+ depla:=u*(k,-l);
+ fill (TestA shifted depla) withcolor if k<Etape:CouleurEtape else:CouleurSol fi withtransparency(1,0.35);
+ trace TestA shifted depla withpen pencircle scaled 1.1 withcolor if k<Etape:CouleurEtape else:CouleurSol fi;
+ fi;
+ endfor;
+ endfor;
+ );
+ trace cc[nbe];
+ Apat[nbe+1]:=Apat[nbe]+u*(2*nbe+4,0);
+ endfor;
+ GrillePattern;
+ for k=0 upto Etape-1:
+ if k<Etape-1:
+ trace cc[k] withpen pencircle scaled 1.1 withcolor CouleurEtape;
+ else:
+ if \useKV[Pattern]{Solution}:
+ trace cc[k] withpen pencircle scaled 1.1 withcolor CouleurSol;
+ fi;
+ fi;
+ endfor;
+ for k=0 upto Etape-1:
+ AffichageEtape(urt)(k,1,Etape,(xpart(ulcorner cc[k]),ypart(ulcorner cc[Etape])));
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=0pt;
+ \BuildPatternCodeA{#1}
+ trace TestA;
+ for l=1 upto Etape-1:
+ for k=-l upto l:
+ if (k mod 2)=(l mod 2):
+ depla:=(k*larg,l*haut);
+ trace TestA shifted depla;
+ depla:=(k*larg,-l*haut);
+ trace TestA shifted depla;
+ fi;
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
+% 32
+\NewDocumentCommand\BuildPatternTrenteDeuxa{m}{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,\PfMRetiensEtape+3);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] for l=0 upto k+1:,"DE" endfor for l=0 upto k:,"AV" endfor for l=0 upto k+1:,"MO" endfor);
+ trace cc[k];
+ Apat[k+1]:=urcorner cc[k]+u*(2,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(urt)(k,1,Etape,ulcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=0pt;
+ \BuildPatternCodeA{#1}
+ for l=0 upto Etape-1:
+ for k=0 upto Etape:
+ depla:=(l*larg,k*haut);
+ trace TestA shifted depla;
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
+% 31
+\NewDocumentCommand\BuildPatternTrenteEtUna{m}{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,2);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k],"AV","DE" for l=0 upto k:,"AV" endfor ,"MO","AV","MO","RE","MO" for l=0 upto k:,"RE" endfor,"DE","RE");
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(1,1);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=0pt;
+ \BuildPatternCodeA{#1}
+ for l=0 upto Etape-1:
+ for k=0 upto 2:
+ depla:=(l*larg,k*haut);
+ trace TestA shifted depla;
+ endfor;
+ endfor;
+ depla:=(-larg,haut);
+ trace TestA shifted depla;
+ depla:=(Etape*larg,haut);
+ trace TestA shifted depla;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
+% 30
+\NewDocumentCommand\BuildPatternTrentea{m}{%
+ \ifluatex%
\mplibforcehmode%
- \begin{mplibcode}
- pair A[];
- A[0]=(0,0);
- Etape:=\useKV[Pattern]{Etape};
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=5pt;
picture Cle;
- path piece;
- piece=(unitsquare scaled 3mm) shifted(-1.5mm,-1.5mm);
+ \BuildPatternCodeA{#1}
if (Etape mod 2)=0:
- A0:=(0,1.75mm)+(Etape div 2)*(0,3.5mm);
- for k=0 upto Etape-1:
- for l=0 upto Etape-1:
- if (k*l)<>(Etape-1)*(Etape-1):
- draw piece shifted(A[0]+3.5mm*(-k,l));
- draw symetrie(piece shifted(A[0]+3.5mm*(-k,l)),(0,0));
- fi;
- endfor;
- endfor;
- for k=0 upto ((Etape div 2)-1):
- draw piece shifted((0,1.75mm)+k*(0,3.5mm));
- draw symetrie(piece shifted((0,1.75mm)+k*(0,3.5mm)),(0,0));
- endfor;
+ depla:=(0,0.5*haut)+(Etape div 2)*(0,haut);
+ for k=0 upto Etape-1:
+ for l=0 upto Etape-1:
+ if (k*l)<>(Etape-1)*(Etape-1):
+ draw TestA shifted(depla+(-k*larg,l*haut));
+ draw TestA shifted(symetrie(depla+(-k*larg,l*haut),(0,0)));
+ fi;
+ endfor;
+ endfor;
+ for k=0 upto ((Etape div 2)-1):
+ draw TestA shifted((0,0.5*haut)+k*(0,haut));
+ draw TestA shifted(symetrie((0,haut*0.5)+k*(0,haut),(0,0)));
+ endfor;
else:
- A0:=(0,0)+((Etape div 2)+1)*(0,3.5mm);
- for k=0 upto Etape-1:
- for l=0 upto Etape-1:
- if (k*l)<>(Etape-1)*(Etape-1):
- draw piece shifted(A[0]+3.5mm*(-k,l));
- draw symetrie(piece shifted(A[0]+3.5mm*(-k,l)),(0,0));
+ depla:=(0,0)+((Etape div 2)+1)*(0,haut);
+ for k=0 upto Etape-1:
+ for l=0 upto Etape-1:
+ if (k*l)<>(Etape-1)*(Etape-1):
+ draw TestA shifted(depla+(-k*larg,l*haut));
+ draw TestA shifted(symetrie(depla+(-k*larg,l*haut),(0,0)));
+ fi;
+ endfor;
+ endfor;
+ for k=1 upto (Etape div 2):
+ draw TestA shifted(k*(0,haut));
+ draw TestA shifted(symetrie(k*(0,haut),(0,0)));
+ endfor;
+ draw TestA;
fi;
- endfor;
- endfor;
- for k=1 upto (Etape div 2):
- draw piece shifted(k*(0,3.5mm));
- draw symetrie(piece shifted(k*(0,3.5mm)),(0,0));
- endfor;
- draw piece;
- fi;
Cle=currentpicture;
currentpicture:=nullpicture;
draw rotation(Cle,(0,0),40);
@@ -467,123 +3151,804 @@
\fi%
}%
+% 28
+\NewDocumentCommand\BuildPatternVingtHuit{}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}
+ Etape:=\useKV[Pattern]{Etape};
+ %
+ input PfCSolid;
+ %
+ intensite:=1.5;
+ Ferme[0]:=false;
+ \ifemptyKV[Pattern]{Couleur}{outcolor:=LightSteelBlue;}{outcolor:=\useKV[Pattern]{Couleur};}
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=true;
+ %
+ Initialisation(2500,40,20,50);
+ Objetcube0("a=0.25");
+ nbobj:=0;
+ for k=0 upto Etape-1:
+ for l=0 upto Etape-1:
+ nbobj:=nbobj+1;
+ TR:=0.25*(k,l,0);
+ ObjetDeplacement[nbobj](0);
+ endfor;
+ endfor;
+ for l=1 upto Etape-1:
+ for k=0 upto Etape-1:
+ TR:=0.25*(k,0,l);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](1);
+ endfor;
+ for k=0 upto Etape-1:
+ TR:=0.25*(0,k,l);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](1);
+ endfor;
+ endfor;
+ DessineFusion;
+ \end{mplibcode}
+ \fi%
+}%
+
+% 27
+\NewDocumentCommand\BuildPatternVingtSepta{m}{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] for l=0 upto 2*(k+1)-1:,"AV" endfor ,"MO" for l=0 upto k:,"RE" endfor for l=1 upto k:,"MO" endfor for l=0 upto k:,"RE" endfor);
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(2,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for l=0 upto Etape-1:
+ for k=0 upto Etape-1:
+ depla:=(l*larg,k*haut);
+ trace TestA shifted depla;
+ endfor;
+ endfor;
+ for l=0 upto Etape-1:
+ depla:=((Etape+l)*larg,0);
+ trace TestA shifted depla;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
+% 26
+\NewDocumentCommand\BuildPatternVingtSixa{m}{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,\PfMRetiensEtape+3);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] for l=0 upto k:,"DE" endfor if k>0: ,"DE" for l=1 upto k:,"AV" endfor ,"MO","AV" for l=0 upto k-1:,"MO" endfor for l=0 upto k-1:,"AV" endfor ,"MO" else: ,"AV","MO","RE" fi);
+ trace cc[k];
+ Apat[k+1]:=urcorner cc[k]+u*(2,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(urt)(k,1,Etape,ulcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for l=0 upto Etape-1:
+ for k=0 upto Etape-1:
+ trace TestA shifted(l*larg,-k*haut);
+ endfor;
+ endfor;
+ %
+ trace TestA shifted(Etape*(larg,0));
+ trace TestA shifted(Etape*(0,-haut));
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+
+% 25
+\NewDocumentCommand\BuildPatternVingtCinqa{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{3+\useKV[Pattern]{Etape}*2}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \begin{center}
+ \ProgCalcul*[SansCalcul]{?,*2 +3,? \num{\PfMCalculNbMotif}}
+ \end{center}
+ Donc on remonte le programme de calcul :
+ \begin{center}
+ \ProgCalcul*[Direct=false]{\useKV[Pattern]{Etape},*2 ++3}
+ \end{center}
+ L'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[2]. En effet, le motif se décompose en un rectangle de 3 \PfCDescriptionMotif[2] et de \num{\useKV[Pattern]{Etape}} rectangles de 2 \PfCDescriptionMotif[2]%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On remarque que le motif est composé de « étape » rectangles de 2 \PfCDescriptionMotif[3] et d'un rectangle de largeur 1 et de longueur 3.\par
+ Le nombre \PfCDescriptionMotif[3] se calcule sous la forme :\[\text{« étape »}\times2+3.\]
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[2\times e+3.\]
+ }%
+ }{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] for l=0 upto k+2:,"AV" endfor ,"MO","RE","RE" if k>0:,"MO" for l=1 upto k:,"RE" endfor ,"MO","RE" else: ,"MO","MO","RE" fi);
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(1,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ trace TestA;
+ for l=1 upto Etape+1:
+ depla:=l*(larg,0);
+ trace TestA shifted depla;
+ endfor;
+ for l=0 upto Etape-1:
+ depla:=(l*larg,haut);
+ trace TestA shifted depla;
+ endfor;
+ trace TestA shifted(0,2*haut);
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+}%
+}%
+}%
+
%24
-\NewDocumentCommand\BuildPatternVingtQuatre{}{%
+\NewDocumentCommand\BuildPatternVingtQuatrea{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{3+\useKV[Pattern]{Etape}*2}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \begin{center}
+ \ProgCalcul*[SansCalcul]{?,*2 +3,? \num{\PfMCalculNbMotif}}
+ \end{center}
+ Donc on remonte le programme de calcul :
+ \begin{center}
+ \ProgCalcul*[Direct=false]{\useKV[Pattern]{Etape},*2 ++3}
+ \end{center}
+ L'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[2]. En effet, le motif se décompose en un rectangle de 3 \PfCDescriptionMotif[2] et de \num{\useKV[Pattern]{Etape}} rectangles de 2 \PfCDescriptionMotif[2]%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On remarque que le motif est composé d'un rectangle de longueur « étape » et de largeur 2 et d'un rectangle de largeur 1 et de longueur 3.
+ Le nombre \PfCDescriptionMotif[3] se calcule sous la forme :\[\text{« étape »}\times2+3.\]
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[2\times e+3.\]
+ }%
+ }{%
\ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] for l=0 upto k+1:,"AV" endfor ,"MO","MO" for l=0 upto k:,"RE" endfor ,"MO","RE");
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(1,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
\mplibforcehmode%
- \begin{mplibcode}
- pair A[];
- Etape:=\useKV[Pattern]{Etape};
- A[0]=(0,0);
- path piece;
- piece=unitsquare scaled 5mm shifted(-2.5mm,-2.5mm);
- drawoptions(withcolor Orange);
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
for k=0 upto Etape+1:
- for l=0 upto Etape-1:
- fill piece shifted(5mm*(k,l));
+ for l=0 upto 1:
+ trace TestA shifted(k*larg,l*haut);
+ endfor;
endfor;
- endfor;
- fill (piece shifted(0,Etape*5mm));
- drawoptions();
- for k=0 upto Etape+1:
- for l=0 upto Etape-1:
- trace piece shifted(5mm*(k,l));
- endfor;
- endfor;
- trace (piece shifted(0,Etape*5mm));
- \end{mplibcode}
- \fi
-}
+ trace TestA shifted(0,2*haut);
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+}%
+}%
+}%
-%20
-\NewDocumentCommand\BuildPatternVingt{}{%
+% 23
+\NewDocumentCommand\BuildPatternVingtTroisa{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{1+\useKV[Pattern]{Etape}*2+\useKV[Pattern]{Etape}**3}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \[1+?+?\times3\times?=\num{\PfMCalculNbMotif}.\]
+ Après essais successifs, l'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[2]. Le motif 4 peut se décomposer ainsi :
+ \begin{center}
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ u:=3mm;
+ Apat[0]=u*(1,1);
+ for k=3 upto 3:
+ cc[k]=polygonerela(Apat[0] for l=0 upto k+2:,"AV" endfor ,"MO","RE" for l=1 upto 2*k+1:,"MO" endfor ,"RE" for l=2 upto k*k:,"MO" endfor for l=0 upto k:,"RE" endfor);
+ trace cc[k];
+ %Apat[k+1]:=lrcorner cc[k]+u*(1,0);
+ endfor;
+ GrillePattern;
+ for k=4 upto 4:
+ cc[1]:=polygonerela(Apat[0] for l=0 upto k-1:,"AV" endfor for l=0 upto 3*k:,"MO" endfor ,for l=0 upto k-1:,"RE" endfor);
+ cc[2]:=polygonerela(lrcorner cc[1] ,"AV" for l=0 upto 2*k:,"MO" endfor ,"RE");
+ cc[3]:=polygonerela(lrcorner cc[2],"AV","MO","RE");
+ fill cc[1] withcolor CouleurEtape withtransparency(1,0.35);
+ trace cc[1];
+ fill cc[2] withcolor 0.5[CouleurEtape,CouleurSol] withtransparency(1,0.35);
+ trace cc[2];
+ fill cc[3] withcolor CouleurSol withtransparency(1,0.35);
+ trace cc[3];
+ endfor;
+ \end{Geometrie}
+ \end{center}
+ Le motif est donc composé d'un rectangle de largeur \num{\useKV[Pattern]{Etape}} et d'une longueur égale à \num{\fpeval{3*\useKV[Pattern]{Etape}}} ; d'un rectangle de largeur 1 et de longueur \num{\fpeval{2*\useKV[Pattern]{Etape}}} et d'un \PfCDescriptionMotif[1]%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On remarque que le motif est composé d'un rectangle de largeur « étape » et de longueur $\text{« étape »}\times\text{« étape »}$; d'un rectangle de largeur 1 et de longueur $2\times\text{« étape »}$ et d'un \PfCDescriptionMotif[1].\par
+ Le nombre \PfCDescriptionMotif[3] se calcule sous la forme :\[\text{« étape »}\times\text{« étape »}\times\text{« étape »}+2\times\text{« étape »}+1).\]
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[e\times e\times e+2\times e+1\text{ ou }e^3+2e+1.\]
+ }%
+ }{%
\ifluatex%
- \mplibforcehmode%
- \begin{mplibcode}
- pair A[];
- Etape:=\useKV[Pattern]{Etape};
- A[0]=(0,0);
- for l=0 upto Etape-1:
- for k=0 upto Etape+1:
- draw (unitsquare scaled 5mm) shifted(A[0]+5mm*(k,l));
- endfor;
- endfor;
- \end{mplibcode}
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape-1:
+ cc[k]=if k=0:polygonerela(Apat[k] for l=0 upto k+2:,"AV" endfor ,"MO","RE","MO","RE","DE","RE");
+ else:polygonerela(Apat[k] for l=0 upto k+2:,"AV" endfor ,"MO","RE" for l=1 upto 2*k+1:,"MO" endfor ,"RE" for l=2 upto k*k:,"MO" endfor for l=0 upto k:,"RE" endfor);fi;
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(1,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for l=0 upto Etape-1:
+ for k=1 upto Etape*Etape:
+ trace TestA shifted(l*larg,(k-1)*haut);
+ endfor;
+ endfor;
+ %
+ depla:=Etape*(larg,0);
+ for l=0 upto 2*Etape-1:
+ trace TestA shifted(depla+(0,l*haut));
+ endfor;
+ %
+ depla:=(Etape+1)*(larg,0);
+ trace TestA shifted depla;
+ \end{mplibcode}%
+ }%
\fi%
}%
+}%
+}%
+}%
+% 21
+\NewDocumentCommand\BuildPatternVingtEtUna{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{2+\useKV[Pattern]{Etape}*2*\useKV[Pattern]{Etape}}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \[2+?\times2\times?=\num{\PfMCalculNbMotif}.\]
+ Après essais successifs, l'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[2].
+ \begin{center}
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ u:=2.5mm;
+ Apat[0]=u*(1,1);
+ for k=Etape-1 upto Etape-1:
+ cc[k]=polygonerela(Apat[0] for l=0 upto k:,"AV" endfor ,"AV","MO","MO","RE" for l=1 upto 2*k:,"MO" endfor for l=0 upto k:,"RE" endfor);
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(1,0);
+ endfor;
+ GrillePattern;
+ cc[1]=polygonerela(Apat[0] for l=0 upto Etape-1:,"AV" endfor for l=1 upto 2*(Etape-1):,"MO" endfor for l=0 upto Etape-1:,"RE" endfor);
+ fill cc[1] withcolor CouleurEtape withtransparency(1,0.35);
+ trace cc[1];
+ cc2:=polygonerela(lrcorner cc[1],"AV","MO","MO","RE");
+ fill cc[2] withcolor CouleurSol withtransparency(1,0.35);
+ trace cc[2];
+ \end{Geometrie}
+ \end{center}
+ En effet, le motif est composé d'un rectangle de largeur \num{\useKV[Pattern]{Etape}} et d'une longueur égale à \num{\fpeval{2*\useKV[Pattern]{Etape}}} auquel on ajoute 2 \PfCDescriptionMotif[2]%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On remarque que le motif est composé d'un rectangle de largeur « étape » et de longueur $2\times\text{« étape »}$ auquel on ajoute 2 \PfCDescriptionMotif[2].
+ Le nombre \PfCDescriptionMotif[3] se calcule sous la forme :\[\text{« étape »}\times(2\times\text{« étape »}+1).\]
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[e\times(2\times e+1).\]
+ }%
+ }{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] for l=0 upto k:,"AV" endfor ,"AV","MO","MO","RE" for l=1 upto 2*k:,"MO" endfor for l=0 upto k:,"RE" endfor);
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(1,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for l=0 upto Etape-1:
+ for k=1 upto 2*Etape:
+ trace TestA shifted(l*larg,k*haut);
+ endfor;
+ endfor;
+ for k=1 upto 2:
+ trace TestA shifted(Etape*larg,k*haut);
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+}%
+}%
+}%
+% 20
+\NewDocumentCommand\BuildPatternVingta{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{\useKV[Pattern]{Etape}*(2*\useKV[Pattern]{Etape}+1)}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \[?\times (2\times?+1)=\num{\PfMCalculNbMotif}.\]
+ Après essais successifs, l'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[2]. En effet, le motif est composé d'un rectangle de largeur \num{\useKV[Pattern]{Etape}} et d'une longueur égale à \num{\fpeval{2*\useKV[Pattern]{Etape}+1}}%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On remarque que le motif est composé d'un rectangle de largeur « étape » et de longueur $2\times\text{« étape »}+1$.
+ Le nombre \PfCDescriptionMotif[3] se calcule sous la forme :\[\text{« étape »}\times(2\times\text{« étape »}+1).\]
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[e\times(2\times e+1).\]
+ }%
+ }{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \setKV[Pattern]{Echelle=0.7}%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] for l=0 upto 2*(k+1):,"AV" endfor for l=0 upto k:,"MO" endfor for l=0 upto 2*(k+1):,"RE" endfor);
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(1,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for l=0 upto Etape-1:
+ for k=0 upto Etape+1:
+ trace TestA shifted(k*larg,l*haut);
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+}%
+}%
+}%
+
%19
-\NewDocumentCommand\BuildPatternDixNeuf{}{%
+\NewDocumentCommand\BuildPatternDixNeufa{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{\useKV[Pattern]{Etape}*(2+\useKV[Pattern]{Etape})+2}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \[?\times (?+1)+2=\num{\PfMCalculNbMotif}.\]
+ L'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[2]. En effet, le motif est composé d'un rectangle de largeur \num{\useKV[Pattern]{Etape}} et d'une longueur égale à \num{\fpeval{2+\useKV[Pattern]{Etape}}} auquel on ajoute 2 \PfCDescriptionMotif[2]%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On remarque que le motif est composé d'un rectangle de largeur « étape » et de longueur $\text{« étape »}+2$; auquel on ajoute 2.\par
+ Le nombre \PfCDescriptionMotif[3] se calcule sous la forme :\[\text{« étape »}\times(\text{« étape »}+2)+2.\]
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[e\times(e+2)+2.\]
+ }%
+ }{%
\ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,2);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] ,"AV","DE","AV","MO" for l=0 upto k:,"AV" endfor for l=0 upto k:,"MO" endfor for l=0 upto k:,"RE" endfor ,"MO" ,"RE", "DE", "RE");
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(1,1);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
\mplibforcehmode%
\begin{mplibcode}
- pair A[];
- Etape:=\useKV[Pattern]{Etape};
- A[0]=(0,0);
- path piece;
- piece=unitsquare scaled 5mm shifted(-2.5mm,-2.5mm);
- drawoptions(withcolor LightGreen);
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
for k=0 upto Etape+1:
- for l=0 upto Etape-1:
- fill piece shifted(5mm*(k,l));
+ for l=0 upto Etape-1:
+ depla:=(k*larg,l*haut);
+ trace TestA shifted depla;
+ endfor;
endfor;
- endfor;
- fill (piece shifted(5mm,-5mm));
- fill (piece shifted(5mm,Etape*5mm));
- drawoptions();
- for k=0 upto Etape+1:
- for l=0 upto Etape-1:
- trace piece shifted(5mm*(k,l));
- endfor;
- endfor;
- trace (piece shifted(5mm,-5mm));
- trace (piece shifted(5mm,Etape*5mm));
- \end{mplibcode}
+ trace TestA shifted(larg,-haut);
+ trace TestA shifted(larg,Etape*haut);
+ \end{mplibcode}%
+ }%
\fi%
}%
+}%
+}%
+}%
%18
-\NewDocumentCommand\BuildPatternDixHuit{}{%
+\NewDocumentCommand\BuildPatternDixHuita{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{3*\useKV[Pattern]{Etape}}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \[3\times ?=\num{\PfMCalculNbMotif}.\]
+ L'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[2]. En effet, le motif est composé de 3 \PfCDescriptionMotif[2] reproduits \num{\useKV[Pattern]{Etape}} fois%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On remarque que le même motif est répété « étape » fois.\par
+ Le nombre \PfCDescriptionMotif[3] se calcule sous la forme :\[3\times\text{« étape »}.\]
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[3\times e.\]
+ }%
+ }{%
\ifluatex%
- \mplibforcehmode%
- \begin{mplibcode}
- pair A[];
- Etape:=\useKV[Pattern]{Etape};
- Somme=0;
- for k=0 upto Etape-1:
- A[k]=(0,0)+Somme*5mm*(2,-1);
- for l=0 upto k:
- fill polygone(A[k],A[k]+5mm*(2,0),A[k]+5mm*(2,1),A[k]+5mm*(1,1),A[k]+5mm*(1,2),A[k]+5mm*(0,2)) withcolor LightGreen;
- endfor;
- for l=0 upto k:
- trace polygone(A[k],A[k]+5mm*(2,0),A[k]+5mm*(2,1),A[k]+5mm*(1,1),A[k]+5mm*(1,2),A[k]+5mm*(0,2));
- trace chemin(A[k]+5mm*(1,0),A[k]+5mm*(1,1),A[k]+5mm*(0,1));
- endfor;
- Somme:=Somme+1;
- endfor;
- \end{mplibcode}
- \fi
-}
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,\PfMRetiensEtape+2);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] for l=0 upto k:,"DE","AV","AV" endfor ,"MO","RE" for l=1 upto k:,"MO","RE","RE" endfor ,"MO","RE");
+ trace cc[k];
+ Apat[k+1]:=urcorner cc[k]+u*(1,-1);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(urt)(k,1,Etape,ulcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for k=0 upto Etape-1:
+ depla:=(0,0)+k*(2*larg,-haut);
+ for l=0 upto k:
+ trace TestA shifted depla;
+ trace TestA shifted (depla+(0,-haut));
+ trace TestA shifted (depla+(larg,-haut));
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ }
+ \fi%
+}%
+}%
+}%
+}%
+%17
+\NewDocumentCommand\BuildPatternDixSepta{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{1+3*\useKV[Pattern]{Etape}}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \begin{center}
+ \ProgCalcul*[SansCalcul]{?,*3 +1,? \num{\PfMCalculNbMotif}}
+ \end{center}
+ Donc on remonte le programme de calcul :
+ \begin{center}
+ \ProgCalcul*[Direct=false]{\useKV[Pattern]{Etape},*3 ++1}
+ \end{center}
+ L'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[2]. En effet, le motif est composé de trois fois \num{\useKV[Pattern]{Etape}} \PfCDescriptionMotif[2] auxquels il faut ajouter 1 \PfCDescriptionMotif[1]%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On considère le \PfCDescriptionMotif[1] « central ». On remarque qu'à chaque étape on ajoute 3 carrés.\par
+ Le nombre \PfCDescriptionMotif[3] se calcule sous la forme :\[1+3\times\text{« étape »}.\]
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[1+3\times e.\]
+ }%
+ }{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \setKV[Pattern]{Echelle=0.75}%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] for l=0 upto 2*(k+1):,"AV" endfor ,"MO" for l=0 upto k:,"RE" endfor for l=0 upto k:,"MO" endfor ,"RE" for l=0 upto k:,"DE" endfor for l=0 upto k:,"RE" endfor);
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(2,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}%
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ trace TestA;
+ for l=1 upto Etape:
+ depla:=l*(larg,0);
+ trace TestA shifted depla;
+ depla:=l*(-larg,0);
+ trace TestA shifted depla;
+ depla:=l*(0,haut);
+ trace TestA shifted depla;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+}%
+}%
+}%
+
+%16
+\NewDocumentCommand\BuildPatternSeizea{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{((1+2*\useKV[Pattern]{Etape}-1)/2)**2}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \[1+3+5+\dots=\num{\PfMCalculNbMotif}.\]
+ Après essais successifs, l'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[2]. En effet, le motif est composé de :
+ \[1+3+5+\dots+\num{\fpeval{2*\useKV[Pattern]{Etape}+1}}~\text{\PfCDescriptionMotif[2]}\]
+ soit \num{\PfMCalculNbMotif} \PfCDescriptionMotif[2]%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On remarque que les lignes comportent un nombre impair \PfCDescriptionMotif[3] et que la dernière ligne est composée d'un nombre \PfCDescriptionMotif[3] égal à $2\times\text{« étape »}-1$.\par
+ Le nombre \PfCDescriptionMotif[3] se calcule sous la forme :\[1+3+5+\dots+2\times\text{« étape »}-1.\]
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[1+3+5+\dots+2\times e-1.\]
+ }%
+ }{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] for l=0 upto 2*(k+1)-2:,"AV" endfor for l=0 upto k:,"MO","RE" endfor for l=1 upto k:,"DE","RE" endfor);
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(2,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for l=1 upto Etape:
+ for p=1 upto 2*(l-1)+1:
+ depla:=(larg*(p-l),-haut*(l-1));
+ trace TestA shifted depla;
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+}%
+}%
+}%
+
%15
-\NewDocumentCommand\BuildPatternQuinze{}{%
+\NewDocumentCommand\BuildPatternQuinzea{mm}{%
\ifluatex%
\mplibforcehmode%
\begin{mplibcode}
- pair A[];
- Etape:=\useKV[Pattern]{Etape};
- Somme=0;
- trace (fullcircle scaled 3mm);
- for k=0 upto Etape-1:
- A[k]=(0,0)+Somme*4mm*(1,0);
- %for l=0 upto k:
- fill ((unitsquare scaled 3mm) shifted(A[k]+4mm*(1,0)-(center (unitsquare scaled 3mm)))) withcolor 0.7white;
- trace ((unitsquare scaled 3mm) shifted(A[k]+4mm*(1,0)-(center (unitsquare scaled 3mm))));
- trace (fullcircle scaled 3mm) shifted(A[k]+4mm*(1,-1));
- trace (fullcircle scaled 3mm) shifted(A[k]+4mm*(1,1));
- trace (fullcircle scaled 3mm) shifted(A[k]+4mm*(2,0));
- %endfor;
- Somme:=Somme+2;
+ \BuildPatternCode
+ bboxmargin:=0pt;
+ ecartcube:=2pt;
+ if picture #1:
+ trace #1;
+ else:
+ label(TEX(#1),(0,0));
+ fi;
+ if picture #2:
+ trace #2;
+ else:
+ label(TEX(#2),(0,0));
+ fi;
+ Largeur:=abs(lrcorner currentpicture-llcorner currentpicture);
+ Hauteur:=abs(urcorner currentpicture-lrcorner currentpicture);
+ currentpicture:=nullpicture;
+ if picture #1:
+ trace #1;
+ else:
+ label(TEX(#1),(0,0));
+ fi;
+ depla:=(0,0);
+ for k=1 upto Etape:
+ if picture #1:
+ trace #1 shifted (depla+(Largeur,Hauteur));
+ trace #1 shifted (depla+(Largeur,-Hauteur));
+ trace #1 shifted (depla+(2*Largeur,0));
+ else:
+ label(TEX(#1),depla+(Largeur,Hauteur));
+ label(TEX(#1),depla+(Largeur,-Hauteur));
+ label(TEX(#1),depla+(2*Largeur,0));
+ fi;
+ depla:=depla+(Largeur,0);
+ if picture #2:
+ trace #2 shifted depla;
+ else:
+ label(TEX(#2),depla);
+ fi;
+ depla:=depla+(Largeur,0);
endfor;
\end{mplibcode}
\fi%
@@ -590,27 +3955,561 @@
}%
%14
-\NewDocumentCommand\BuildPatternQuatorze{}{%
+\NewDocumentCommand\BuildPatternQuatorzea{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{1+6*\useKV[Pattern]{Etape}}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \begin{center}
+ \ProgCalcul*[SansCalcul]{?,*6 +1,? \num{\PfMCalculNbMotif}}
+ \end{center}
+ Donc on remonte le programme de calcul :
+ \begin{center}
+ \ProgCalcul*[Direct=false]{\useKV[Pattern]{Etape},*6 ++1}
+ \end{center}
+ L'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[2]. En effet, le motif est composé d'un rectangle de longueur 6 et de largeur 8 auquel on ajoute 1 \PfCDescriptionMotif[1]%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ Le nombre \PfCDescriptionMotif[3] se calcule sous la forme :\[6\times\text{« étape »}+1.\]%
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[6\times\useKV[Pattern]{Litteral}+1.\]
+ }%
+ }{%
\ifluatex%
- \mplibforcehmode%
- \begin{mplibcode}
- pair A[];
- Etape:=\useKV[Pattern]{Etape};
- A[0]=(0,0);
- for l=0 upto Etape-1:
- for m=0 upto 5:
- draw (unitsquare scaled 5mm) shifted(A[0]+5mm*(-m,l));
- endfor;
- endfor;
- draw (unitsquare scaled 5mm) shifted(A[0]+5mm*(-5,Etape));
- \end{mplibcode}
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] for l=0 upto 5:,"AV" endfor for l=0 upto k:,"MO" endfor for l=0 upto 4:,"RE" endfor,"MO","RE");
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(1,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape-1,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for l=0 upto Etape-1:
+ for m=0 upto 5:
+ depla:=(-m*larg,l*haut);
+ trace TestA shifted depla;
+ endfor;
+ endfor;
+ depla:=(-5*larg,Etape*haut);
+ trace TestA shifted depla;
+ \end{mplibcode}%
+ }%
\fi%
}%
+}%
+}%
+}%
+% 13
+\NewDocumentCommand\BuildPatternTreizea{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{(\useKV[Pattern]{Etape}+1)*\useKV[Pattern]{Etape}/2}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ Il faut trouver un nombre tel que
+ \[1+2+\dots=\num{\PfMCalculNbMotif}.\]
+ Par essais successifs, on trouve que l'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[2]. En effet, le nombre de \PfCDescriptionMotif[2] est:
+ \[1+2+3+\dots+\num{\useKV[Pattern]{Etape}}\]
+ soit \num{\PfMCalculNbMotif} \PfCDescriptionMotif[2]%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ Le nombre \PfCDescriptionMotif[3] se calcule sous la forme :\[1+(1+2+3+\dots+\text{« étape »}).\]%
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[1+(1+2+3+\dots+\useKV[Pattern]{Litteral}).\]
+ }%
+ }{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] for l=0 upto k:,"AV" endfor for l=0 upto k:,"MO","RE" endfor);
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(2,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape-1,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for l=1 upto Etape:
+ for p=Etape downto l:
+ depla:=(larg*(Etape-p+1),haut*(l-1));
+ trace TestA shifted depla;
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+}%
+}%
+}%
+%12
+\NewDocumentCommand\BuildPatternDouzea{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{(\useKV[Pattern]{Etape}+1)*(\useKV[Pattern]{Etape}+1)}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit trouver le nombre dont le produit par lui-même est égal à \PfMCalculNbMotif.\par Par essais successifs, l'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi. En effet, le motif est un carré de côté \num{\fpeval{\useKV[Pattern]{Etape}+1}} \PfCDescriptionMotif[2]%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On remarque que chaque motif est un carré de côté $\text{« étape »}+1$.
+ \par Le nombre de \PfCDescriptionMotif[2] se calcule sous la forme :\[(\text{« étape »}+1)\times(\text{« étape »}+1).\]%
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[(\useKV[Pattern]{Litteral}+1)\times(\useKV[Pattern]{Litteral}+1).\]
+ }%
+ }{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] for l=0 upto k+1:,"AV" endfor for l=0 upto k+1:,"MO" endfor for l=0 upto k+1:,"RE" endfor for l=0 upto k+1:,"DE" endfor);
+ trace cc[k];
+ Apat[k+1]:=(point(0) of cc[k])+u*(k+1+2,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape-1,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ %
+ for l=1 upto Etape+1:
+ for p=1 upto Etape+1:
+ depla:=(p*larg,l*haut);
+ trace TestA shifted depla;
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+}%
+}%
+}%
+% 11
+\NewDocumentCommand\BuildPatternOnzea{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{1+2*(\useKV[Pattern]{Etape}-1)}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \begin{center}
+ \ProgCalcul*[SansCalcul]{?,-1 *2 +1,? ? \num{\PfMCalculNbMotif}}
+ \end{center}
+ Donc on remonte le programme de calcul :
+ \begin{center}
+ \ProgCalcul*[Direct=false]{\useKV[Pattern]{Etape},-1 *2 ++1}
+ \end{center}
+ L'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi. En effet, il y a 1 \PfCDescriptionMotif[1] de l'étape 1 et \num{\fpeval{\useKV[Pattern]{Etape}-1}} fois 2 carrés%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On remarque que chaque motif est constitué du \PfCDescriptionMotif[1] de l'étape 1 et 2 \PfCDescriptionMotif[2] sont ajoutés à chaque étape {\em à partir de la deuxième étape}.
+ \par Le nombre de \PfCDescriptionMotif[2] se calcule sous la forme :\[2\times(\text{« étape »}-1)+1.\]%
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[2\times(\useKV[Pattern]{Litteral}-1)+1.\]
+ }%
+ }{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,\PfMRetiensEtape+1);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] for l=0 upto k:,"AV" endfor,"MO" for l=0 upto k-1:,"RE" endfor for l=0 upto k-1:,"MO" endfor,"RE");
+ trace cc[k];
+ Apat[k+1]:=(point(0) of cc[k])+u*(k+1+2,-1);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape-1,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ trace TestA;
+ for l=1 upto Etape:
+ depla:=l*(larg,0);
+ trace TestA shifted depla;
+ depla:=l*(0,haut);
+ trace TestA shifted depla;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+}%
+}%
+}%
+% 10
+\NewDocumentCommand\BuildPatternDixa{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{1+2*(\useKV[Pattern]{Etape}-1)}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \begin{center}
+ \ProgCalcul*[SansCalcul]{?,-1 *2 +1,? ? \num{\PfMCalculNbMotif}}
+ \end{center}
+ Donc on remonte le programme de calcul :
+ \begin{center}
+ \ProgCalcul*[Direct=false]{\useKV[Pattern]{Etape},-1 *2 ++1}
+ \end{center}
+ L'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi. En effet, il y a 1 \PfCDescriptionMotif[1] de l'étape 1 et \num{\fpeval{\useKV[Pattern]{Etape}-1}} fois 2 carrés%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On remarque que chaque motif est constitué du \PfCDescriptionMotif[1] de l'étape 1 et 2 \PfCDescriptionMotif[2] sont ajoutés à chaque étape {\em à partir de la deuxième étape}.
+ \par Le nombre de \PfCDescriptionMotif[2] se calcule sous la forme :\[2\times(\text{« étape »}-1)+1.\]%
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[2\times(\useKV[Pattern]{Litteral}-1)+1.\]
+ }%
+ }{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,2);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] ,"AV","MO","RE" for l=1 upto k:,"RE" endfor if k>0:,"DE","DE" fi for l=1 upto k:,"AV" endfor);
+ trace cc[k];
+ Apat[k+1]:=(point(0) of cc[k])+u*(k+2+2,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape-1,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ %
+ for p=1 upto Etape:
+ depla:=(larg*(p-1),0);
+ trace TestA shifted depla;
+ endfor;
+ for p=1 upto Etape-1:
+ depla:=(larg*(p-1),-haut);
+ trace TestA shifted depla;
+ endfor;
+ \end{mplibcode}%
+ \fi%
+ }%
+}%
+}%
+}%
+}%
+% 9
+\NewDocumentCommand\BuildPatternNeufa{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{6+3*(\useKV[Pattern]{Etape}-1)}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \begin{center}
+ \ProgCalcul*[SansCalcul]{?,*3 +6,? \num{\PfMCalculNbMotif}}
+ \end{center}
+ Donc on remonte le programme de calcul :
+ \begin{center}
+ \ProgCalcul*[Direct=false]{\useKV[Pattern]{Etape},*3 ++6}
+ \end{center}
+ L'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi. En effet, il y a les 6 carrés de l'étape 1 et \num{\fpeval{\useKV[Pattern]{Etape}-1}} fois 3 carrés%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On remarque que chaque motif est constitué « de l'escalier » de l'étape 1 et 3 \PfCDescriptionMotif[2] sont ajoutés à chaque étape {\em à partir de la deuxième étape}.
+ \par Le nombre de \PfCDescriptionMotif[2] se calcule sous la forme :\[3\times(\text{« étape »}-1)+6.\]%
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[3\times(\useKV[Pattern]{Litteral}-1)+6.\]
+ }%
+ }{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[1]=u*(1,1);
+ for k=1 upto Etape:
+ cc[k]=polygonerela(Apat[k] for l=0 upto k+1:,"AV" endfor for l=0 upto 2:,"MO","RE" endfor for l=1 upto k-1:,"RE" endfor for l=0 upto 2:,"DE" endfor);
+ trace cc[k];
+ Apat[k+1]:=(point(0) of cc[k])+u*(k+1+2,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(1,Etape);
+ for k=1 upto Etape:
+ AffichageEtape(lrt)(k,0,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ %
+ for l=1 upto 3:
+ for p=Etape+2 downto l:
+ depla:=(larg*(Etape-p+1),haut*(l-1));
+ trace TestA shifted depla;
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+}%
+}%
+}%
+% 8
+\NewDocumentCommand\BuildPatternHuita{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{1+(\useKV[Pattern]{Etape}+1)*\useKV[Pattern]{Etape}/2}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ Il faut trouver un nombre tel que
+ \[1+(1+2+\dots)=\num{\PfMCalculNbMotif}.\]
+ Par essais successifs, on trouve que l'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi. En effet, il y a :
+ \[1+2+3+\dots+\num{\useKV[Pattern]{Etape}}=\num{\fpeval{\useKV[Pattern]{Etape}*(\useKV[Pattern]{Etape}+1)/2}}~\text{\PfCDescriptionMotif[2]}\]
+ et 1 \PfCDescriptionMotif[1]%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ Le nombre \PfCDescriptionMotif[3] se calcule sous la forme :\[1+(1+2+3+\dots+\text{« étape »}).\]%
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[1+(1+2+3+\dots+\useKV[Pattern]{Litteral}).\]
+ }%
+ }{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[1]=u*(1,1);
+ for k=1 upto Etape:
+ cc[k]=polygonerela(Apat[k] for l=0 upto k:,"AV" endfor,"MO","RE","RE" for l=1 upto k-1:,"MO","RE" endfor for l=0 upto k-1:,"DE" endfor);
+ trace cc[k];
+ Apat[k+1]:=(point(0) of cc[k])+u*(k+1+2,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(1,Etape);
+ for k=1 upto Etape:
+ AffichageEtape(lrt)(k,0,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ %
+ for l=0 upto Etape:
+ depla:=(larg*(l-1),0);
+ trace TestA shifted depla;
+ endfor;
+ for l=Etape downto 2:
+ for p=l downto 2:
+ depla:=(larg*(l-p-1),haut*(Etape-l+1));
+ trace TestA shifted depla;
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+}%
+}%
+}%
+
+% 7
+\NewDocumentCommand\BuildPatternSepta{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{2*(\useKV[Pattern]{Etape}-1)+3}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \begin{center}
+ \ProgCalcul*[SansCalcul]{?,-1 *2 +3,? ? \num{\PfMCalculNbMotif}}
+ \end{center}
+ Donc on remonte le programme de calcul :
+ \begin{center}
+ \ProgCalcul*[Direct=false]{\useKV[Pattern]{Etape},-1 *2 ++3}
+ \end{center}
+ L'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ $2\times(\num{\useKV[Pattern]{Etape}}-1)+3$~\PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi{} soit \num{\PfMCalculNbMotif} \PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On remarque que chaque motif est constitué d'une barre de trois carrés et 2 \PfCDescriptionMotif[2] sont ajoutés à chaque étape {\em à partir de la deuxième étape}.
+ \par Le nombre de \PfCDescriptionMotif[2] se calcule sous la forme :\[2\times(\text{« étape »}-1)+3.\]%
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[2\times(\useKV[Pattern]{Litteral}+1)+3.\]
+ }%
+ }{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[1]=u*(1,1);
+ for k=1 upto Etape:
+ cc[k]=polygonerela(Apat[k] for l=1 upto 3:,"AV" endfor,"MO","RE", for l=1 upto k-1:,"MO" endfor for l=0 upto 1:,"RE" endfor for l=0 upto k-1:,"DE" endfor);
+ trace cc[k];
+ Apat[k+1]:=(point(0) of cc[k])+u*(5,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(1,Etape);
+ for k=1 upto Etape:
+ AffichageEtape(lrt)(k,0,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ %
+ depla:=(larg,0);
+ trace TestA;
+ trace TestA shifted depla;
+ trace TestA shifted (2*depla);
+ for l=2 upto Etape:
+ depla:=(0,haut*(l-1));
+ trace TestA shifted depla;
+ trace TestA shifted (depla+(larg,0));
+ endfor;
+ \end{mplibcode}%
+ }
+ \fi%
+}%
+}%
+}%
+}%
+
%6
-\NewDocumentCommand\BuildPatternSix{}{%
+\NewDocumentCommand\BuildPatternSix{O{1}}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{allumette,allumettes,d'allumettes}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{3*(\useKV[Pattern]{Etape}+1)*\useKV[Pattern]{Etape}/2}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ Il faut trouver un nombre tel que
+ \[3\times(1+2+\dots)=\num{\PfMCalculNbMotif}.\]
+ Par essais successifs, on trouve que l'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi. En effet, il y a :
+ \[1+2+3+\dots+\num{\useKV[Pattern]{Etape}}=\num{\fpeval{\useKV[Pattern]{Etape}*(\useKV[Pattern]{Etape}+1)/2}}~\text{triangles}\]
+ et il y a 3 allumettes par triangle%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{Le nombre \PfCDescriptionMotif[3] se calcule sous la forme :\[3\times(1+2+3+\dots+\text{« étape »}).\]%
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[3\times(1+2+3+\dots+\useKV[Pattern]{Litteral}).\]
+ }%
+ }{%
\ifluatex%
- \begin{Allumettes}[Echelle=0.35]
+ \begin{Allumettes}[Echelle=\fpeval{0.30*#1}]
Etape=\useKV[Pattern]{Etape};
pair A[],B[],C[],D[],E[];
A0=(0,0);
@@ -628,104 +4527,554 @@
trace UnitTriangle shifted(A0+k*(B0-A0)+l*(C0-B0));
endfor;
endfor;
- \end{Allumettes}
+ \end{Allumettes}
\fi%
}%
-
+}%
+}%
+}%
%5
-\NewDocumentCommand\BuildPatternCinq{}{%
+\NewDocumentCommand\BuildPatternCinqa{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{2*\useKV[Pattern]{Etape}*(\useKV[Pattern]{Etape}+1)+3}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \begin{center}
+ \ProgCalcul*[SansCalcul]{?,*\fpeval{\useKV[Pattern]{Etape}+1} *2 +3,? ? \num{\PfMCalculNbMotif}}
+ \end{center}
+ Donc on remonte le programme de calcul :
+ \begin{center}
+ \ProgCalcul*[Direct=false]{\useKV[Pattern]{Etape},*\fpeval{\useKV[Pattern]{Etape}+1} *2 ++3}
+ \end{center}
+ L'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ $2\times\num{\useKV[Pattern]{Etape}}\num{\fpeval{\useKV[Pattern]{Etape}+1}}+2$~\PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi{} soit \num{\PfMCalculNbMotif} \PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On remarque que chaque motif est constitué de deux rectangles identiques de longueur $\text{« etape »}+1$ et de largeur $\text{« etape »}$ et 3 \PfCDescriptionMotif[2] sont ajoutés à chaque étape :
+ \begin{center}
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[Etape]=u*(5,Etape);
+ for k=Etape upto Etape:
+ cc[k]=polygonerela(Apat[k],"AV","MO" for l=1 upto k-1:,"AV" endfor for l=0 upto k:,"MO" endfor for l=0 upto k:,"RE" endfor ,"DE","AV" for l=0 upto k-1:,"DE" endfor for l=0 upto k-1:,"RE" endfor ,"MO","RE" for l=0 upto k:,"DE" endfor for l=0 upto k:,"AV" endfor for l=1 upto k-1:,"MO" endfor);
+ trace cc[k];
+ Apat[k+1]:=(point(0) of cc[k])+u*(2+k+k+1,0);
+ endfor;
+ GrillePattern;
+ trace cc[Etape];
+ Apat[1]:=u*(1,1);
+ for k=Etape upto Etape:
+ cc[1]:=polygonerela(Apat[1],for l=0 upto k:,"AV" endfor for l=0 upto k-1:,"MO" endfor for l=0 upto k:,"RE" endfor);
+ Apat[2]:=urcorner cc[1];
+ cc[2]:=polygonerela(Apat[2],for l=0 upto k-1:,"AV" endfor for l=0 upto k:,"MO" endfor for l=0 upto k-1:,"RE" endfor);
+ Apat[3]:=ulcorner cc[1];
+ cc[3]:=polygonerela(Apat[3],"AV","MO","RE");
+ Apat[4]:=urcorner cc[1];
+ cc[4]:=polygonerela(Apat[4],"DE","AV","MO");
+ Apat[5]:=ulcorner cc[2];
+ cc[5]:=polygonerela(Apat[5],"RE","DE","AV");
+ endfor;
+ for k=1 upto 2:
+ fill cc[k] withcolor CouleurEtape withtransparency(1,0.35);
+ endfor;
+ for k=3 upto 5:
+ fill cc[k] withcolor CouleurSol withtransparency(1,0.35);
+ endfor;
+ for k=1 upto 5:
+ trace cc[k];
+ endfor;
+ \end{Geometrie}
+ \end{center}
+ Le nombre de \PfCDescriptionMotif[2] se calcule sous la forme :\[2\times\text{« étape »}\times(\text{« étape »}+1)+3.\]%
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[2\times\useKV[Pattern]{Litteral}\times(\times\useKV[Pattern]{Litteral}+1)+3.\]
+ }%
+ }{%
\ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \setKV[Pattern]{Echelle=0.7}
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[1]=u*(3,\PfMRetiensEtape+1);
+ for k=1 upto Etape:
+ cc[k]=polygonerela(Apat[k],"AV","MO" for l=1 upto k-1:,"AV" endfor for l=0 upto k:,"MO" endfor for l=0 upto k:,"RE" endfor ,"DE","AV" for l=0 upto k-1:,"DE" endfor for l=0 upto k-1:,"RE" endfor ,"MO","RE" for l=0 upto k:,"DE" endfor for l=0 upto k:,"AV" endfor for l=1 upto k-1:,"MO" endfor);
+ trace cc[k];
+ Apat[k+1]:=(point(0) of cc[k])+u*(2+k+k+1,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(1,Etape);
+ for k=1 upto Etape:
+ AffichageEtape(lrt)(k,0,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
\mplibforcehmode%
- \begin{mplibcode}
- pair A[];
- Etape:=\useKV[Pattern]{Etape};
- A0=(0,0);
- for k=Etape-1 upto Etape-1:
- drawoptions(withcolor LightSteelBlue);
- fill (fullcircle scaled 3mm) shifted A[0];
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ %
+ k=Etape-1;
+ trace TestA;
for l=0 upto k:
- for m=1 upto k+2:
- fill (fullcircle scaled 3mm) shifted(A[0]+5mm*(l,m));
- fill symetrie((fullcircle scaled 3mm) shifted(A[0]+5mm*(l,m)),A[0],A[0]+(-1,1));
+ for m=1 upto k+2:
+ depla:=(larg*l,haut*m);
+ trace TestA shifted depla;
+ trace TestA shifted symetrie(depla,(0,0),(-1,1));
+ endfor;
endfor;
+ depla:=(-larg,haut*(k+2));
+ trace TestA shifted depla;
+ trace TestA shifted symetrie(depla,(0,0),(-1,1));
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+}%
+}%
+}%
+
+%4
+\NewDocumentCommand\BuildPatternQuatrea{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{4*\useKV[Pattern]{Etape}+1}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \begin{center}
+ \ProgCalcul*[SansCalcul]{?,*4 +1,? \num{\PfMCalculNbMotif}}
+ \end{center}
+ Donc on remonte le programme de calcul :
+ \begin{center}
+ \ProgCalcul*[Direct=false]{\useKV[Pattern]{Etape},*4 ++1}
+ \end{center}
+ L'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ $4\times\num{\useKV[Pattern]{Etape}}+1$~\PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi{} soit \num{\PfMCalculNbMotif} \PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{On remarque que chaque motif est constitué d'un \PfCDescriptionMotif[2] central et 4 \PfCDescriptionMotif[2] sont ajoutés à chaque étape. Le nombre de \PfCDescriptionMotif[2] se calcule sous la forme :\[1+\text{« étape »}\times4.\]%
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[4\useKV[Pattern]{Litteral}+1.\]
+ }%
+ }{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \setKV[Pattern]{Echelle=0.7}%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(3,\PfMRetiensEtape+2);
+ for k=0 upto Etape-1:
+ cc[k]=polygonerela(Apat[k] for l=0 upto k:,"DE","AV" endfor for l=0 upto k:,"MO","RE" endfor ,"MO" for l=0 upto k:,"AV","MO" endfor for l=0 upto k:,"RE","DE" endfor ,"RE" for l=0 upto k:,"MO","RE" endfor for l=0 upto k:,"DE","AV" endfor, "DE" for l=0 upto k:,"RE","DE" endfor for l=0 upto k:,"AV","MO" endfor);
+ trace cc[k];
+ Apat[k+1]:=(point(0) of cc[k])+u*(2+k+3+k,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ %
+ trace TestA;
+ for l=1 upto Etape:
+ for p=1 upto l:
+ depla:=p*(larg,haut);
+ trace TestA shifted depla;
+ depla:=p*(larg,-haut);
+ trace TestA shifted depla;
+ depla:=p*(-larg,-haut);
+ trace TestA shifted depla;
+ depla:=p*(-larg,haut);
+ trace TestA shifted depla;
+ endfor;
endfor;
- fill (fullcircle scaled 3mm) shifted(A[0]+5mm*(-1,k+2));
- fill symetrie((fullcircle scaled 3mm) shifted(A[0]+5mm*(-1,k+2)),A[0],A[0]+(-1,1));
- % trace
- drawoptions();
- trace (fullcircle scaled 3mm) shifted A[0];
- for l=0 upto k:
- for m=1 upto k+2:
- trace (fullcircle scaled 3mm) shifted(A[0]+5mm*(l,m));
- trace symetrie((fullcircle scaled 3mm) shifted(A[0]+5mm*(l,m)),A[0],A[0]+(-1,1));
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+}%
+}%
+}%
+
+%3
+\NewDocumentCommand\BuildPatternTroisa{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{\useKV[Pattern]{Etape}*(\useKV[Pattern]{Etape}+1)/2}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \[1+2+\dots=\num{\PfMCalculNbMotif}.\]
+ Par essais successifs, l'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ $1+2+3+\dots+\num{\useKV[Pattern]{Etape}}$~\PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi{} soit \num{\PfMCalculNbMotif} \PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{%
+ On double le motif pour observer la situation suivante :
+ \begin{center}
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape:
+ cc[k]=(u*(0,k+2)--u*(0,0)--u*(k+2,0) for l=1 upto k+2:--u*(k+3-l,0+l)--u*(k+2-l,0+l) endfor--cycle) shifted (Apat[k]-u*(0,0));
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(2,0);
+ endfor;
+ GrillePattern;
+ for k=0 upto Etape:
+ fill cc[k] withcolor CouleurEtape withtransparency(1,0.35);
+ fill (symetrie(cc[k],iso(lrcorner cc[k],ulcorner cc[k])) shifted(u*(1,0))) withcolor CouleurSol withtransparency(1,0.35);
+ trace cc[k];
+ trace symetrie(cc[k],iso(lrcorner cc[k],ulcorner cc[k])) shifted(u*(1,0));
+ endfor;
+ \end{Geometrie}
+ \end{center}
+ À chaque fois, un rectangle de longueur $\text{« étape »}+1$ et de largeur « étape ». Donc la formule pour déterminer le nombre \PfCDescriptionMotif[3] est :
+ \[(\text{« étape »}+1)\times\text{« étape »}\div2.\]
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[(\useKV[Pattern]{Litteral}+1)\times\useKV[Pattern]{Litteral}\div2.\]
+ }%
+ }{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape-1:
+ cc[k]=(u*(0,k+2)--u*(0,0)--u*(k+2,0) for l=1 upto k+2:--u*(k+3-l,0+l)--u*(k+2-l,0+l) endfor--cycle) shifted (Apat[k]-u*(0,0));
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+u*(2,0);
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ for l=1 upto Etape+1:
+ for p=Etape+1 downto l:
+ depla:=(larg*(Etape-p+1),haut*(l-1));
+ trace TestA shifted depla;
+ endfor;
endfor;
- endfor;
- trace (fullcircle scaled 3mm) shifted(A[0]+5mm*(-1,k+2));
- trace symetrie((fullcircle scaled 3mm) shifted(A[0]+5mm*(-1,k+2)),A[0],A[0]+(-1,1));
- endfor;
- \end{mplibcode}
+ \end{mplibcode}%
+ }
\fi%
-}
+}%
+}%
+}%
+}%
-\NewDocumentCommand\BuildPatternQuatre{}{%
+%2
+\NewDocumentCommand\BuildPatternDeux{}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{cube,cubes,de cubes}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{2*\useKV[Pattern]{Etape}-1}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ On doit réussir à trouver le nombre entier tel :
+ \begin{center}
+ \ProgCalcul*[SansCalcul]{?,*2 -1,? \num{\PfMCalculNbMotif}}
+ \end{center}
+ Donc on remonte le programme de calcul :
+ \begin{center}
+ \ProgCalcul*[Direct=false]{\useKV[Pattern]{Etape},*2 -1}
+ \end{center}
+ L'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi. En effet, il y a une ligne horizontale de \num{\useKV[Pattern]{Etape}}~\PfCDescriptionMotif[1]\ifnum\useKV[Pattern]{Etape}>1\relax s\fi{} et une ligne verticale de \num{\fpeval{\useKV[Pattern]{Etape}-1}}~\PfCDescriptionMotif[1]\ifnum\fpeval{\useKV[Pattern]{Etape}-1}>1\relax s\fi%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{Le nombre \PfCDescriptionMotif[3] se calcule sous la forme :\[\text{« étape »}+\text{« étape »}-1.\]%
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[2\times\useKV[Pattern]{Litteral}-1.\]
+ }%
+ }{%
\ifluatex%
\mplibforcehmode%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeIso
+ somme:=1;
+ for nbe=1 upto Etape:
+ ptpattern[nbe]:=u*(alpha*somme,(somme mod 2)*beta);%+beta*somme);
+ if nbe=Etape:
+ TypeCube:=cadrecubesol;
+ else:
+ TypeCube:=cadrecube;
+ fi;
+ cc[nbe]=image(
+ for k=1 upto nbe:
+ trace TypeCube shifted(ptpattern[nbe]+k*u*(alpha,-beta));
+ endfor;
+ for k=2 upto nbe:
+ trace TypeCube shifted(ptpattern[nbe]+nbe*u*(alpha,-beta)+(k-1)*u*(0,1));
+ endfor;
+ );
+ trace cc[nbe];
+ somme:=somme+nbe+2;
+ endfor;
+ GrillePatternIso;
+ AffichagePattern(1,Etape);
+ \end{Geometrie}
+ }%
+ {%
\begin{mplibcode}
Etape:=\useKV[Pattern]{Etape};
%
- fill ((unitsquare scaled 5mm) shifted (5mm*0*(1,1))) withcolor LightSteelBlue;
- trace ((unitsquare scaled 5mm) shifted (5mm*0*(1,1)));
- for k=1 upto Etape:
- for l=1 upto k:
- fill ((unitsquare scaled 5mm) shifted (5mm*l*(1,1))) withcolor LightSteelBlue;
- fill ((unitsquare scaled 5mm) shifted (5mm*l*(1,-1)))withcolor LightSteelBlue;
- fill ((unitsquare scaled 5mm) shifted (5mm*l*(-1,1))) withcolor LightSteelBlue;
- fill ((unitsquare scaled 5mm) shifted (5mm*l*(-1,-1))) withcolor LightSteelBlue;
- endfor;
- endfor;
+ input PfCSolid;
%
+ intensite:=1.5;
+ Ferme[0]:=false;
+ outcolor:=LightSteelBlue;
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=true;
+ %
+ Initialisation(2500,40,20,50);
+ Objetcube0("a=0.25");
for k=1 upto Etape:
- for l=1 upto k:
- trace ((unitsquare scaled 5mm) shifted (5mm*l*(1,1)));
- trace ((unitsquare scaled 5mm) shifted (5mm*l*(1,-1)));
- trace ((unitsquare scaled 5mm) shifted (5mm*l*(-1,1)));
- trace ((unitsquare scaled 5mm) shifted (5mm*l*(-1,-1)));
+ TR:=(0,2*k,0);
+ ObjetDeplacement1(0);
+ nbobj:=1;
+ for l=1 upto k-1:
+ TR:=(0,0.25*l,0);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](1);
+ endfor;
+ for l=1 upto k-1:
+ TR:=(0,0.25*(k-1),0.25*l);
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](1);
+ endfor;
endfor;
- endfor;
- %
+ DessineFusion;
\end{mplibcode}
+ }%
\fi%
}%
+}%
+}%
+}%
+%1a
+\NewDocumentCommand\BuildPatternUna{O{1}}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{allumette,allumettes,d'allumettes}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{2*(\useKV[Pattern]{Etape}+1)*\useKV[Pattern]{Etape}}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ Il faut trouver un nombre dont son produit par son suivant est égal à
+ \[\num{\PfMCalculNbMotif}\div2=\num{\fpeval{\PfMCalculNbMotif/2}}.\]
+ Par essais successifs, on trouve que l'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ \num{\PfMCalculNbMotif} \PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi. En effet, il y a \num{\fpeval{\useKV[Pattern]{Etape}+1}} lignes horizontales de \num{\useKV[Pattern]{Etape}}~\PfCDescriptionMotif[1]\ifnum\useKV[Pattern]{Etape}>1\relax s\fi{} et \num{\fpeval{\useKV[Pattern]{Etape}+1}} lignes verticales de \num{\useKV[Pattern]{Etape}}~\PfCDescriptionMotif[1]\ifnum\useKV[Pattern]{Etape}>1\relax s\fi{}
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{Le nombre \PfCDescriptionMotif[3] se calcule sous la forme :\[2\times(\text{« étape »}+1)\times\text{« étape »}.\]%
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[2\times(\useKV[Pattern]{Litteral}+1)\times\useKV[Pattern]{Litteral}.\]
+ }%
+ }{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{Allumettes}[Echelle=\fpeval{0.2*#1}]%
+ Etape=\useKV[Pattern]{Etape};
+ %
+ pair depla;
+ %
+ pair A[];
+ A0=(0,0);
+ A1-A0=u*(1,0);
+ A3-A0=u*(0,1);
+ A2-A1=A3-A0;
+ %
+ for l=0 upto Etape-1:
+ for p=0 upto Etape-1:
+ depla:=u*(p,l);
+ trace Allu(A0,A1) shifted depla;
+ trace Allu(A0,A3) shifted depla;
+ trace Allu(A1,A2) shifted depla;
+ trace Allu(A2,A3) shifted depla;
+ endfor;
+ endfor;
+ \end{Allumettes}%
+ \fi%
+}%
+}%
+}%
+}%
+%1
+\NewDocumentCommand\BuildPatternUn{m}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \greadlist*\PfCDescriptionMotif{carré,carrés,de carrés}%
+ \reademptyitems%
+ \edef\PfMCalculNbMotif{\fpeval{\useKV[Pattern]{Etape}*\useKV[Pattern]{Etape}}}%
+ \ifboolKV[Pattern]{Resultat}{%
+ \num{\PfMCalculNbMotif}%
+ }{%
+ \ifboolKV[Pattern]{Calcul}{%
+ \ifboolKV[Pattern]{Inverse}{%
+ Comme $\num{\useKV[Pattern]{Etape}}\times\num{\useKV[Pattern]{Etape}}=\num{\PfMCalculNbMotif}$ alors l'étape correspondante au motif cherché est l'étape \num{\useKV[Pattern]{Etape}}.%
+ }{%
+ $\num{\useKV[Pattern]{Etape}}\times\num{\useKV[Pattern]{Etape}}$~\PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi{} soit \num{\PfMCalculNbMotif} \PfCDescriptionMotif[1]\ifnum\PfMCalculNbMotif>1\relax s\fi%
+ }%
+ }{%
+ \ifboolKV[Pattern]{Formule}{L'aire du motif se calcule sous la forme :\[\text{« étape »}\times\text{« étape »}.\]%
+ \ifemptyKV[Pattern]{Litteral}{}{Si on appelle $\useKV[Pattern]{Litteral}$ le numéro de l'étape alors la formule s'écrit :
+ \[\useKV[Pattern]{Litteral}\times\useKV[Pattern]{Litteral}\text{ ou }\useKV[Pattern]{Litteral}^2.\]
+ }%
+ }{%
+ \ifluatex%
+ \ifboolKV[Pattern]{Grille}{%
+ \begin{Geometrie}[Cadre="aucun"]
+ \BuildPatternCodeC
+ Apat[0]=u*(1,1);
+ for k=0 upto Etape-1:
+ cc[k]=polygone(u*(0,0),u*(k+1,0),u*(k+1,k+1),u*(0,k+1)) shifted (Apat[k]-u*(0,0));
+ trace cc[k];
+ Apat[k+1]:=lrcorner cc[k]+(u*(2,0));
+ endfor;
+ GrillePattern;
+ AffichagePattern(0,Etape-1);
+ for k=0 upto Etape-1:
+ AffichageEtape(lrt)(k,1,Etape-1,llcorner cc[k]);
+ endfor;
+ \end{Geometrie}
+ }{%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \BuildPatternCode
+ ecartcube:=2pt;
+ \BuildPatternCodeA{#1}
+ %
+ for l=1 upto Etape:
+ for p=1 upto Etape:
+ depla:=(p*larg,l*haut);
+ trace TestA shifted depla;
+ endfor;
+ endfor;
+ \end{mplibcode}%
+ }%
+ \fi%
+}%
+}%
+}%
+}%
-\NewDocumentCommand\BuildPatternTrois{}{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%284
+\NewDocumentCommand\BuildPatternDeuxCentQuatreVingtQuatre{}{
\ifluatex%
\mplibforcehmode%
\begin{mplibcode}
Etape:=\useKV[Pattern]{Etape};
- %
+ input PfCSolid;
+
+ intensite:=1.5;
+ Ferme[0]:=false;
+ outcolor:=LightSteelBlue;
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=true;
+
+ Initialisation(2500,40,20,50);
+ Objetcube1("a=0.25");
+ nbobj:=1;
+ TR:=(0,a,0);
+ %base
+ for k=1 upto 2:
+ NBobj:=nbobj;
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
+ endfor;
+ % barre gauche
for k=1 upto Etape:
- for l=Etape downto k:
- fill ((unitsquare scaled 5mm) shifted (5mm*(Etape-l+1,k-1))) withcolor LightSteelBlue;
+ TR:=(0,0,k*a);
+ NBobj:=1;
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
endfor;
+ %barre gauche
+ for k=1 upto Etape-1:
+ TR:=(0,2*a,k*a);
+ NBobj:=1;
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
endfor;
- for k=1 upto Etape:
- for l=Etape downto k:
- trace ((unitsquare scaled 5mm) shifted (5mm*(Etape-l+1,k-1))) withcolor white;
+ DessineFusion;
+ \end{mplibcode}
+ \fi
+}%
+
+% 254
+\NewDocumentCommand\BuildPatternDeuxCentCinquanteQuatre{}{
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}
+ Etape:=\useKV[Pattern]{Etape};
+ for k=0 upto Etape-1:
+ for l=0 upto Etape-1:
+ fill ((fullcircle scaled 4mm) shifted (5mm*(l,k))) withcolor LightSteelBlue;
+ trace ((fullcircle scaled 4mm) shifted (5mm*(l,k)));
endfor;
endfor;
- %
+ fill ((fullcircle scaled 4mm) shifted (5mm*(0,-1))) withcolor LightSteelBlue;
+ trace ((fullcircle scaled 4mm) shifted (5mm*(0,-1)));
+ fill ((fullcircle scaled 4mm) shifted (5mm*(-1,0))) withcolor LightSteelBlue;
+ trace ((fullcircle scaled 4mm) shifted (5mm*(-1,0)));
+ fill ((fullcircle scaled 4mm) shifted (5mm*(0,Etape))) withcolor LightSteelBlue;
+ trace ((fullcircle scaled 4mm) shifted (5mm*(0,Etape)));
\end{mplibcode}
- \fi%
+ \fi
}%
-\NewDocumentCommand\BuildPatternDeux{}{%
+%156
+\NewDocumentCommand\BuildPatternCentCinquanteSix{}{
\ifluatex%
\mplibforcehmode%
\begin{mplibcode}
Etape:=\useKV[Pattern]{Etape};
- %
input PfCSolid;
- %
+
intensite:=1.5;
Ferme[0]:=false;
outcolor:=LightSteelBlue;
@@ -732,52 +5081,96 @@
incolor:=white;
nb:=1;subh:=1;
creux:=true;
- %
+
Initialisation(2500,40,20,50);
- Objetcube0("a=0.25");
+ Objetcube1("a=0.25");
+ nbobj:=1;
+ TR:=(0,a,0);
for k=1 upto Etape:
- TR:=(0,2*k,0);
- ObjetDeplacement1(0);
- nbobj:=1;
- for l=1 upto k-1:
- TR:=(0,0.25*l,0);
+ NBobj:=nbobj;
nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](1);
+ ObjetDeplacement[nbobj](NBobj);
endfor;
- for l=1 upto k-1:
- TR:=(0,0.25*(k-1),0.25*l);
+ TR:=(0,0,-0.25);
+ for k=1 upto Etape:
+ NBobj:=nbobj;
nbobj:=nbobj+1;
- ObjetDeplacement[nbobj](1);
+ ObjetDeplacement[nbobj](NBobj);
endfor;
+ TR:=(0,0.25,0);
+ for k=1 upto Etape:
+ NBobj:=nbobj;
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
endfor;
- %nbobj=13;
+ %nbobj=4;
DessineFusion;
\end{mplibcode}
- \fi%
+ \fi
}%
-\NewDocumentCommand\BuildPatternUn{}{%
+%155
+\NewDocumentCommand\BuildPatternCentCinquanteCinq{}{
\ifluatex%
- \mplibforcehmode%
+ \mplibforcehmode
\begin{mplibcode}
- u:=5mm;
- pair A[],O[];
- path cc[],dd[];
- Etape=\useKV[Pattern]{Etape};
- %
- k:=Etape;
- O[k]=(0,0);
- dd[k]=unitsquare scaled (k*u);
- cc[k]=dd[k] shifted (O[k]-center(dd[k]));
- trace cc[k];
- for l=1 upto 4:
- A[l]:=point l of cc[k];
+ Etape:=\useKV[Pattern]{Etape};
+ input PfCSolid;
+
+ intensite:=1.5;
+ Ferme[0]:=false;
+ outcolor:=LightSteelBlue;
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=true;
+
+ Initialisation(2500,40,20,50);
+ angx:=-40;
+ Objetcube1("a=0.25");
+ angx:=0;
+ nbobj:=1;
+ TR:=(0,a*cosd(-40),a*sind(-40));
+ for k=0 upto Etape-2:
+ NBobj:=nbobj;
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
endfor;
- %horizontales et verticales
- for m=1 upto k-1:
- trace ((m/k)[A1,A4])--((m/k)[A2,A3]);
- trace ((m/k)[A1,A2])--((m/k)[A4,A3]);
+ NBobj:=1;
+ TR:=(0,-a*cosd(-40),-a*sind(-40));
+ for k=0 upto Etape-2:
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
+ NBobj:=nbobj;
endfor;
+ NBobj:=1;
+ TR:=(0,a*sind(-40),-a*cosd(-40));
+ for k=0 upto Etape-2:
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
+ NBobj:=nbobj;
+ endfor;
+ NBobj:=1;
+ TR:=(0,-a*sind(-40),a*cosd(-40));
+ for k=0 upto Etape-2:
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
+ NBobj:=nbobj;
+ endfor;
+ NBobj:=1;
+ TR:=(a,0,0);%
+ for k=0 upto Etape-2:
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
+ NBobj:=nbobj;
+ endfor;
+ NBobj:=1;
+ TR:=(-a,0,0);
+ for k=0 upto Etape-2:
+ nbobj:=nbobj+1;
+ ObjetDeplacement[nbobj](NBobj);
+ NBobj:=nbobj;
+ endfor;
+ DessineFusion;
\end{mplibcode}
\fi%
-}%
\ No newline at end of file
+}%
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPourcentage.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCPourcentage.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCPourcentage.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -1,19 +1,22 @@
%%%
% Application : pourcentage
%%%
-\def\filedatePourcentage{2025/05/27}%
-\def\fileversionPourcentage{0.1a}%
+\def\filedatePourcentage{2025/08/08}%
+\def\fileversionPourcentage{0.1b}%
\message{-- \filedatePourcentage\space v\fileversionPourcentage}%
%
-\setKVdefault[ClesPourcentage]{Appliquer,Calculer=false,Augmenter=false,Reduire=false,Fractionnaire=false,Decimal,Formule=false,Concret=false,GrandeurA=Grandeur A,GrandeurB=Total,Largeur=1cm,MotReduction=diminution,AideTableau=false,ColorFill=white,CouleurTab=gray!15,Unite={}}
-\defKV[ClesPourcentage]{Unite=\ifempty{#1}{}{\setKV[ClesPourcentage]{Concret}}}%
-\newcommand\Pourcentage[3][]{%
+\setKVdefault[ClesPourcentage]{Appliquer,Calculer=false,Augmenter=false,Reduire=false,Fractionnaire=false,Decimal,Formule=false,GrandeurA=Grandeur A,GrandeurB=Total,Largeur=1cm,MotReduction=diminution,AideTableau=false,ColorFill=white,CouleurTab=gray!15,Unite={},EchellePourcent=false,Vide=false,CouleurEchelle=LightSteelBlue,ACompleter=false}
+%
+\NewDocumentCommand\Pourcentage{omm}{%
\useKVdefault[ClesPourcentage]%
\setKV[ClesPourcentage]{#1}%
+ \ifboolKV[ClesPourcentage]{EchellePourcent}{%
+ \PfMBuildEchellePourcentage[#1]{#2}{#3}%
+ }{%
\ifboolKV[ClesPourcentage]{Reduire}{%
\ifboolKV[ClesPourcentage]{Formule}{%
- R\'eduire une quantit\'e de \num{#2}~\%, cela revient \`a multiplier cette quantit\'e par $1-\dfrac{\num{#2}}{100}$. Par cons\'equent, si on r\'eduit \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{} de \num{#2}~\%, cela donne :
- \[\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\left(1-\frac{\num{#2}}{100}\right)=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times(1-\num{\fpeval{#2/100}})=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\num{\fpeval{(1-#2/100)}}=\num{\fpeval{#3*(1-#2/100)}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\]
+ R\'eduire une quantit\'e de \num{#2}~\%, cela revient \`a multiplier cette quantit\'e par $1-\dfrac{\num{#2}}{100}$. Par cons\'equent, si on r\'eduit \num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\useKV[ClesPourcentage]{Unite}} de \num{#2}~\%, cela donne :
+ \[\num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}\times\left(1-\frac{\num{#2}}{100}\right)=\num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}\times(1-\num{\fpeval{#2/100}})=\num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}\times\num{\fpeval{(1-#2/100)}}=\num{\fpeval{#3*(1-#2/100)}}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}.\]
}{%
Calculons ce que repr\'esente la \useKV[ClesPourcentage]{MotReduction} de \num{#2}~\%.
\ifboolKV[ClesPourcentage]{AideTableau}{%
@@ -25,16 +28,16 @@
\Propor[Math,GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{/\num{#3},\num{#2}/100}
\end{center}
\FlecheCoefInv{\tiny$\times\num{\fpeval{#2/100}}$}%
- On obtient une \useKV[ClesPourcentage]{MotReduction} de $\num{\fpeval{#2/100}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}. Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}-\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1-#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.%
- }{Pour calculer \num{#2}~\% de \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}, on effectue le calcul :
- \[\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{#2}}{100}}{\num{\fpeval{#2/100}}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{\fpeval{#2*#3}}}{100}}{\num{\fpeval{#2*#3/100}}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\ifboolKV[ClesPourcentage]{Fractionnaire}{=\num{\fpeval{#2*#3/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}}{}\]%
- On obtient une \useKV[ClesPourcentage]{MotReduction} de $\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.\\Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}-\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1-#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.}
- }
+ On obtient une \useKV[ClesPourcentage]{MotReduction} de $\num{\fpeval{#2/100}}\times\num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}=\num{\fpeval{#3*#2/100}}$\ifemptyKV[ClesPourcentage]{Unite}{}{~\useKV[ClesPourcentage]{Unite}}. Donc un total de $\num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}-\num{\fpeval{#3*#2/100}}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}=\num{\fpeval{#3*(1-#2/100)}}$\ifemptyKV[ClesPourcentage]{Unite}{}{~\useKV[ClesPourcentage]{Unite}}.%
+ }{Pour calculer \num{#2}~\% de \num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\useKV[ClesPourcentage]{Unite}}, on effectue le calcul :
+ \[\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{#2}}{100}}{\num{\fpeval{#2/100}}}\times\num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}=\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{\fpeval{#2*#3}}}{100}}{\num{\fpeval{#2*#3/100}}}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}\ifboolKV[ClesPourcentage]{Fractionnaire}{=\num{\fpeval{#2*#3/100}}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}}{}.\]%
+ On obtient une \useKV[ClesPourcentage]{MotReduction} de $\num{\fpeval{#3*#2/100}}$\ifemptyKV[ClesPourcentage]{Unite}{}{~\useKV[ClesPourcentage]{Unite}}.\\Donc un total de $\num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}-\num{\fpeval{#3*#2/100}}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}=\num{\fpeval{#3*(1-#2/100)}}$\ifemptyKV[ClesPourcentage]{Unite}{}{~\useKV[ClesPourcentage]{Unite}}.}%
+ }%
}{%
\ifboolKV[ClesPourcentage]{Augmenter}{%
\ifboolKV[ClesPourcentage]{Formule}{%
- Augmenter de \num{#2}~\% une quantit\'e, cela revient \`a multiplier cette quantit\'e par $1+\dfrac{\num{#2}}{100}$. Par cons\'equent, si on augmente \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{} de \num{#2}~\%, cela donne :
- \[\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\left(1+\frac{\num{#2}}{100}\right)=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times(1+\num{\fpeval{#2/100}})=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\num{\fpeval{(1+#2/100)}}=\num{\fpeval{#3*(1+#2/100)}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\]
+ Augmenter de \num{#2}~\% une quantit\'e, cela revient \`a multiplier cette quantit\'e par $1+\dfrac{\num{#2}}{100}$. Par cons\'equent, si on augmente \num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\useKV[ClesPourcentage]{Unite}} de \num{#2}~\%, cela donne :
+ \[\num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}\times\left(1+\frac{\num{#2}}{100}\right)=\num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}\times(1+\num{\fpeval{#2/100}})=\num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}\times\num{\fpeval{(1+#2/100)}}=\num{\fpeval{#3*(1+#2/100)}}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}.\]
}{%
Calculons ce que repr\'esente l'augmentation de \num{#2}~\%. %
\ifboolKV[ClesPourcentage]{AideTableau}{%
@@ -46,11 +49,11 @@
\Propor[Math,GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{/\num{#3},\num{#2}/100}%
\end{center}%
\FlecheCoefInv{\tiny$\times\num{\fpeval{#2/100}}$}%
- On obtient une augmentation de $\num{\fpeval{#2/100}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.\\Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}+\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1+#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.%
- }{Pour calculer \num{#2}~\% de \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}, on effectue le calcul :
- \[\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{#2}}{100}}{\num{\fpeval{#2/100}}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{\fpeval{#2*#3}}}{100}}{\num{\fpeval{#2*#3/100}}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\ifboolKV[ClesPourcentage]{Fractionnaire}{=\num{\fpeval{#2*#3/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}}{}\]%
- On obtient une augmentation de $\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.\\Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}+\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1+#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.}
- }
+ On obtient une augmentation de $\num{\fpeval{#2/100}}\times\num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}=\num{\fpeval{#3*#2/100}}$\ifemptyKV[ClesPourcentage]{Unite}{}{~\useKV[ClesPourcentage]{Unite}}.\\Donc un total de $\num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}+\num{\fpeval{#3*#2/100}}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}=\num{\fpeval{#3*(1+#2/100)}}$\ifemptyKV[ClesPourcentage]{Unite}{}{~\useKV[ClesPourcentage]{Unite}}.%
+ }{Pour calculer \num{#2}~\% de \num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\useKV[ClesPourcentage]{Unite}}, on effectue le calcul :
+ \[\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{#2}}{100}}{\num{\fpeval{#2/100}}}\times\num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}=\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{\fpeval{#2*#3}}}{100}}{\num{\fpeval{#2*#3/100}}}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}\ifboolKV[ClesPourcentage]{Fractionnaire}{=\num{\fpeval{#2*#3/100}}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}}{}.\]%
+ On obtient une augmentation de $\num{\fpeval{#3*#2/100}}$\ifemptyKV[ClesPourcentage]{Unite}{}{~\useKV[ClesPourcentage]{Unite}}.\\Donc un total de $\num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}+\num{\fpeval{#3*#2/100}}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}=\num{\fpeval{#3*(1+#2/100)}}$\ifemptyKV[ClesPourcentage]{Unite}{}{~\useKV[ClesPourcentage]{Unite}}.}%
+ }%
}{%
\ifboolKV[ClesPourcentage]{Calculer}{%
\xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}%
@@ -63,9 +66,85 @@
\FlechesPH{1}{2}{\scriptsize$\div\num{\fpeval{#3/100}}$}%
\xdef\ResultatPourcentage{\fpeval{#2*100/#3}}%
}{%
- Pour calculer \num{#2}~\% de \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}, on effectue le calcul :%
- \[\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{#2}}{100}}{\num{\fpeval{#2/100}}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{\fpeval{#2*#3}}}{100}}{\num{\fpeval{#2*#3/100}}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\ifboolKV[ClesPourcentage]{Fractionnaire}{=\num{\fpeval{#2*#3/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}}{}\]%
+ Pour calculer \num{#2}~\% de \num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\useKV[ClesPourcentage]{Unite}}, on effectue le calcul :%
+ \[\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{#2}}{100}}{\num{\fpeval{#2/100}}}\times\num{#3}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}=\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{\fpeval{#2*#3}}}{100}}{\num{\fpeval{#2*#3/100}}}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}\ifboolKV[ClesPourcentage]{Fractionnaire}{=\num{\fpeval{#2*#3/100}}\ifemptyKV[ClesPourcentage]{Unite}{}{~\text{\useKV[ClesPourcentage]{Unite}}}}{}.\]%
}%
}%
}%
+}%
+}%
+
+\NewDocumentCommand\PfMBuildEchellePourcentage{omm}{%
+ \setKV[ClesPourcentage]{#1}%
+ \modulo{#2}{10}
+ \ifnum\remainder=0\relax%
+ \PfMBuildEchellePourcentageMP{10}{#2}{#3}%
+ \else%
+ \modulo{#2}{5}
+ \ifnum\remainder=0\relax%
+ \PfMBuildEchellePourcentageMP{5}{#2}{#3}%
+ \else%
+ Le pourcentage choisi n'est pas adapté à une échelle de pourcentage.%
+ \fi%
+ \fi%
+}%
+
+\NewDocumentCommand\PfMBuildEchellePourcentageMP{mmm}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{Geometrie}[Cadre="aucun"]
+ boolean Vide,ACompleter;
+ Vide=\useKV[ClesPourcentage]{Vide};
+ ACompleter=\useKV[ClesPourcentage]{ACompleter};
+ color CoulFond;
+ CoulFond=\useKV[ClesPourcentage]{CouleurEchelle};
+ %
+ pair A[],B[],M[],N[],O[],P[];
+ A1=u*(0,1.5);
+ A2-A1=u*(7,0);
+ A3-A2=u*(0,1);
+ A4-A3=A1-A2;
+ B1=u*(0,0);
+ B2-B1=u*(7,0);
+ B3-B2=u*(0,1);
+ B4-B3=B1-B2;
+ base=100/#1;
+ for k=0 upto base:
+ M[k]=(k/base)[A1,A2];
+ N[k]=(k/base)[A4,A3];
+ O[k]=(k/base)[B1,B2];
+ P[k]=(k/base)[B4,B3];
+ endfor;
+ if Vide=false:
+ fill polygone(M0,M[#2/#1],N[#2/#1],N0) withcolor CoulFond;
+ fill polygone(O0,O[#2/#1],P[#2/#1],P0) withcolor CoulFond;
+ fi;
+ if ACompleter=false:
+ for k=1 step (10/#1) until base-1:
+ label.top(TEX("\rule[-1pt]{0pt}{0pt}\scriptsize\num{\fpeval{"&decimal(k)&"*#1*#3/100}}\ifempty{Unite}{}{~\useKV[ClesPourcentage]{Unite}}"),P[k]);
+ endfor;
+ fi;
+ k:=0;
+ label.top(TEX("\footnotesize\num{\fpeval{"&decimal(k)&"*#1*#3/100}}\ifempty{Unite}{}{~\useKV[ClesPourcentage]{Unite}}"),P[k]);
+ k:=base;
+ label.top(TEX("\footnotesize\num{\fpeval{"&decimal(k)&"*#1*#3/100}}\ifempty{Unite}{}{~\useKV[ClesPourcentage]{Unite}}"),P[k]);
+ for k=1 step (10/#1) until base-1:
+ label.top(TEX("\scriptsize\SI{"&decimal(k*#1)&"}{\percent}"),N[k]);
+ endfor;
+ label.top(TEX("\footnotesize\SI{"&decimal(0)&"}{\percent}"),N[0]);
+ label.top(TEX("\footnotesize\SI{"&decimal(100)&"}{\percent}"),N[base]);
+ for k=0 upto base:
+ trace M[k]--N[k];
+ trace O[k]--P[k];
+ endfor;
+ drawoptions(withpen pencircle scaled 1.02);
+ for k=0 step (10/#1) until base:
+ trace M[k]--N[k];
+ trace O[k]--P[k];
+ endfor;
+ trace polygone(A1,A2,A3,A4);
+ trace polygone(B1,B2,B3,B4);
+ drawoptions();
+ \end{Geometrie}%
+ \fi%
}%
\ No newline at end of file
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPythagore.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCPythagore.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCPythagore.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -5,7 +5,7 @@
\def\fileversionPythagore{0.1a}%
\message{-- \filedatePythagore\space v\fileversionPythagore}%
%
-\setKVdefault[ClesPythagore]{Exact=false,AvantRacine=false,Racine=false,Entier=false,Egalite=false,Precision=2,Soustraction=false,Figure=false,FigureSeule=false,Angle=0,Echelle=1cm,Reciproque=false,ReciColonnes=false,Faible=false,Unite=cm,EnchaineA=false,EnchaineB=false,EnchaineC=false,Perso=false,AllPerso=false,SansMots=false,Decalage=5mm,ModeleCouleur=5,ValeurA={},ValeurB={},ValeurC={}}%
+\setKVdefault[ClesPythagore]{Exact=false,AvantRacine=false,Racine=false,Entier=false,Egalite=false,Precision=2,Soustraction=false,Figure=false,FigureSeule=false,Angle=0,Echelle=1cm,Reciproque=false,ReciColonnes=false,Faible=false,Unite=cm,EnchaineA=false,EnchaineB=false,EnchaineC=false,Perso=false,AllPerso=false,SansMots=false,Decalage=5mm,ModeleCouleur=5,ValeurA={},ValeurB={},ValeurC={},Dys=false}%
\defKV[ClesPythagore]{%
ValeurA=\ifempty{#1}{}{\setKV[ClesPythagore]{EnchaineA}},%
ValeurB=\ifempty{#1}{}{\setKV[ClesPythagore]{EnchaineB}},%
@@ -29,6 +29,9 @@
\mplibforcehmode%
\begin{mplibcode}
defaultcolormodel := \useKV[ClesPythagore]{ModeleCouleur};
+
+ boolean Dys;
+ Dys=\useKV[ClesPythagore]{Dys};
u:=\useKV[ClesPythagore]{Echelle};
pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit
@@ -52,7 +55,11 @@
draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
draw D--E--F;
numeric decalage;
- decalage=3mm;
+ if Dys:
+ decalage=2*\useKV[ClesPythagore]{Decalage};
+ else:
+ decalage=\useKV[ClesPythagore]{Decalage};
+ fi;
if (#4<#5) or (#4=#5) :
if ypart(B)>ypart(O) :
label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B)));
@@ -136,8 +143,10 @@
\mplibforcehmode
\begin{mplibcode}
defaultcolormodel := \useKV[ClesPythagore]{ModeleCouleur};
- u:=\useKV[ClesPythagore]{Echelle};
- decalage=\useKV[ClesPythagore]{Decalage};
+ u:=\useKV[ClesPythagore]{Echelle};
+ boolean Dys;
+ Dys=\useKV[ClesPythagore]{Dys};
+ decalage=if Dys:2* fi \useKV[ClesPythagore]{Decalage};
pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit
O=u*(2.5,2.5);
path cc;
@@ -200,7 +209,11 @@
\mplibforcehmode
\begin{mplibcode}
defaultcolormodel := \useKV[ClesPythagore]{ModeleCouleur};
- u:=\useKV[ClesPythagore]{Echelle};
+ u:=\useKV[ClesPythagore]{Echelle};
+ boolean Dys;
+ Dys=\useKV[ClesPythagore]{Dys};
+ numeric decalage;
+ decalage=if Dys:2* fi \useKV[ClesPythagore]{Decalage};
pair A,B,C,O,D,E,F,L[],M[],N[];%B est le sommet de l'angle droit
O=u*(2.5,2.5);
path cc;
@@ -228,8 +241,6 @@
N1=rotation(A,C,90);
N2-N1=A-C;
trace chemin(C,N1,N2,A);
- numeric decalage;
- decalage=3mm;
if (#4<#5) or (#4=#5) :
if ypart(B)>ypart(O) :
label(btex \num{#4} etex,1/2[C,B]+decalage*(unitvector(A-B)));
@@ -412,6 +423,7 @@
% #5 Troisi\`eme longueur (\'eventuellement vide)
\useKVdefault[ClesPythagore]%
\setKV[ClesPythagore]{#1}%
+ \ifPfCPfMScratchDys\relax\setKV[BandeNum]{Dys}\fi%
\DeclareSIUnit{\PfCPythaUnit}{\useKV[ClesPythagore]{Unite}}%
\ifboolKV[ClesPythagore]{Reciproque}{%
% On retient les noms des sommets
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCReperage.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCReperage.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCReperage.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -39,18 +39,28 @@
\foreachitem\compteur\in\ListePointEspace{\expandafter\Updatetoksrepere\compteur\nil}%
\MPEspaceSphere{\the\toklistepointrepere}{\useKV[ClesReperage]{EchelleEspace}}%
}{%
- \foreachitem\compteur\in\ListePointEspace{\expandafter\Updatetoksespace\compteur\nil}%
+ \edef\RetiensListePoints{}%
+ \foreachitem\compteur\in\ListePointEspace{%
+ \edef\RetiensListePoints{\RetiensListePoints\ListePointEspace[\compteurcnt,1],}%
+ \edef\RetiensListePoints{\RetiensListePoints\ListePointEspace[\compteurcnt,2],}%
+ \edef\RetiensListePoints{\RetiensListePoints\ListePointEspace[\compteurcnt,3],}%
+ \IfStrEq{\ListePointEspace[\compteurcnt,4]}{ }{%
+ \edef\RetiensListePoints{\RetiensListePoints"",}%
+ }{%
+ \edef\RetiensListePoints{\RetiensListePoints"\ListePointEspace[\compteurcnt,4]",}%
+ }%
+ }%
\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}}{\RetiensListePoints}{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}}%
+ \MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\RetiensListePoints}{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}}{\RetiensListePoints}{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}}%
+ \MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\RetiensListePoints}{0}{\useKV[ClesReperage]{EchelleEspace}}%
}%
}%
}%
@@ -454,6 +464,8 @@
CoulTrace=(0,0,0,1);
gris=0.1(0,0,0,1);
fi;
+ boolean Tiret;
+ Tiret=\useKV[ClesReperage]{Tiret};
color CouleurX,CouleurY,CouleurZ;
CouleurX=\useKV[ClesReperage]{CouleurX};
CouleurY=\useKV[ClesReperage]{CouleurY};
@@ -460,7 +472,7 @@
CouleurZ=\useKV[ClesReperage]{CouleurZ};
typetrace:="3D";
typerepre:="persp";
- Figure(-20u,-20u,20u,20u);
+% Figure(-20u,-20u,20u,20u);
Initialisation(1500,30,20,abs(#9));
% marque_r:=marque_r/2;
marque_p:="plein";
@@ -470,23 +482,35 @@
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]));
+ label.top(TEX("$x$"),Projette(1.5[D,A]));
+ label.top(TEX("$y$"),Projette(1.5[D,C]));
+ label.top(TEX("$z$"),Projette(1.5[D,E]));
+ dotlabel.ulft(TEX("1"),Projette((1/#2)[D,A]));
+ dotlabel.bot(TEX("1"),Projette((1/#4)[D,C]));
+ dotlabel.lft(TEX("1"),Projette((1/#6)[D,E]));
drawoptions(withcolor CouleurX);
for k=1 upto (#2):
+ if Tiret:
+ trace chemin(D+0.02*(E-D),D,D+0.02*(C-D)) shifted Projette((k/#2)[D,A]);
+ else:
pointe((k/#2)[D,A]);
+ fi;
endfor;
drawoptions(withcolor CouleurY);
for k=1 upto (#4):
+ if Tiret:
+ trace chemin(D+0.02*(E-D),D,D+0.02*(A-D)) shifted Projette((k/#4)[D,C]);
+ else:
pointe((k/#4)[D,C]);
+ fi;
endfor;
drawoptions(withcolor CouleurZ);
for k=1 upto (#6):
+ if Tiret:
+ trace chemin(D+0.02*(A-D),D,D+0.02*(C-D)) shifted Projette((k/#6)[D,E]);
+ else:
pointe((k/#6)[D,E]);
+ fi;
endfor;
drawoptions();
else:
@@ -493,12 +517,12 @@
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]));
+ label.lrt(TEX("$x$"),Projette(1.5[A,D]));
+ label.top(TEX("$y$"),Projette(1.5[A,B]));
+ label.top(TEX("$z$"),Projette(1.5[A,F]));
+ dotlabel.ulft(TEX("1"),Projette((1/#2)[A,D]));
+ dotlabel.bot(TEX("1"),Projette((1/#4)[A,B]));
+ dotlabel.lft(TEX("1"),Projette((1/#6)[A,F]));
drawoptions(withcolor CouleurX);
for k=1 upto (#2):
pointe((k/#2)[A,D]);
@@ -588,8 +612,8 @@
enddef;
if #9>0:
tata(#7);
- else:
- toto(#7);
+% else:
+% toto(#7);
fi;
draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
if \useKV[ClesReperage]{Code}:
@@ -2489,8 +2513,9 @@
\setKV[ClesReperage]{Unitex=2,Unitey=2.5,Unitez=1.5}%
\ifboolKV[ClesReperage]{Sphere}{\setKV[ClesReperage]{EchelleEspace=75}}{}%
\setKV[ClesReperage]{#1}%
- \setsepchar[*]{,*/}\ignoreemptyitems%
+ \setsepchar[*]{,*/}\reademptyitems%
\readlist*\ListePointEspace{#2}%
+ \reademptyitems%
\buildespace%
}{\ifboolKV[ClesReperage]{Plan}{%
\setsepchar[*]{,*/}%\ignoreemptyitems%
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterFraction.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterFraction.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterFraction.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -1,29 +1,48 @@
%%%
% Fractions
%%%
-\def\filedateRepFrac{2025/03/11}%
-\def\fileversionRepFrac{0.1b}%
+\def\filedateRepFrac{2025/07/16}%
+\def\fileversionRepFrac{0.1c}%
\message{-- \filedateRepFrac\space v\fileversionRepFrac}%
%
-\setKVdefault[ClesFraction]{Rayon=2cm,Disque,Regulier=false,Segment=false,Rectangle=false,Longueur=5cm,Largeur=2cm,Cotes=5,Triangle=false,Parts=3,Eprouvette=false,Couleur=green,Reponse=false,Multiple=1,Hachures=false,Epaisseur=1,Aleatoire=false,Gradue=false,Muette=false,Decimal=false,LabelF=false,UniteComplete=false,Part=0,Hauteur=1.5cm}%
+\setKVdefault[ClesFraction]{Rayon=2cm,Disque,Regulier=false,Segment=false,Rectangle=false,Longueur=5cm,Largeur=2cm,Cotes=5,Triangle=false,Parts=3,Eprouvette=false,Couleur=green,Reponse=false,Multiple=1,Hachures=false,Epaisseur=1,Aleatoire=false,Gradue=false,Muette=false,Decimal=false,LabelF=false,UniteComplete=false,Part=0,Hauteur=1.5cm,SansPart=false,SansPartA=false,Graine={},Ecart=1cm}%
-\def\MPFractionSegmentGradueCode{%
+\def\MPFractionBaseCode{%
Longueur=\useKV[ClesFraction]{Longueur};
+ Largeur=\useKV[ClesFraction]{Largeur};
Hauteur=\useKV[ClesFraction]{Hauteur};
- color ColSegment;
+ HauteurEp=\useKV[ClesFraction]{Longueur};
+ Ecart=\useKV[ClesFraction]{Ecart};
+ Rayon=\useKV[ClesFraction]{Rayon};
+ Cotes=\useKV[ClesFraction]{Cotes};
+ nbparts:=\useKV[ClesFraction]{Parts};
+ Multiple=\useKV[ClesFraction]{Multiple};
+ Epaisseur=\useKV[ClesFraction]{Epaisseur};
+ Part=\useKV[ClesFraction]{Part};
+ %
+ color ColSegment,ColEprou,ColPolyReg,ColTriangle,ColRectangle,ColDisque,ColSegment;
ColSegment=\useKV[ClesFraction]{Couleur};
- boolean Hachures,Reponse;
+ ColRectangle=\useKV[ClesFraction]{Couleur};
+ ColSegment=\useKV[ClesFraction]{Couleur};
+ ColEprou=\useKV[ClesFraction]{Couleur};%
+ ColPolyReg=\useKV[ClesFraction]{Couleur};
+ ColTriangle=\useKV[ClesFraction]{Couleur};
+ ColDisque=\useKV[ClesFraction]{Couleur};
+ %
+ boolean Hachures,Reponse,SansPart,SansPartA,TypeDecimal,LabelF,UniteComplete,Muette;%
Reponse=\useKV[ClesFraction]{Reponse};
Hachures=\useKV[ClesFraction]{Hachures};
- Epaisseur=\useKV[ClesFraction]{Epaisseur};
- Part=\useKV[ClesFraction]{Part};
+ SansPart=\useKV[ClesFraction]{SansPart};
+ SansPartA=\useKV[ClesFraction]{SansPartA};
%
- boolean TypeDecimal,LabelF,UniteComplete,Muette;
TypeDecimal=\useKV[ClesFraction]{Decimal};
LabelF=\useKV[ClesFraction]{LabelF};
UniteComplete=\useKV[ClesFraction]{UniteComplete};
Muette=\useKV[ClesFraction]{Muette};
%
+ \ifemptyKV[ClesFraction]{Graine}{}{randomseed:=\useKV[ClesFraction]{Graine};}%
+}%
+\def\MPFractionSegmentGradueCode{%
pair A,C,B[];
A=(0,0);
C-A=(Longueur,0);
@@ -99,7 +118,7 @@
draw Etiquette shifted(iso(B[k],B[k+1])+m*(Longueur,0));
fi;
endfor;
- draw segment(A,C) shifted(m*(Longueur,0));
+ draw segment(A,C) shifted(m*(Longueur,0));
fi;
if Hachures:drawoptions(withpen pencircle scaled Epaisseur);fi;
draw (segment(B[0],B[Nume mod deno]) shifted(m*(Longueur,0)));
@@ -130,7 +149,7 @@
fi;
endfor;
endfor;
- %%
+ %%
if TypeDecimal:
for l=0 upto m-1:
for k=1 upto 9:
@@ -166,7 +185,7 @@
endfor;
pointe(C shifted(m*(Longueur,0)));
label.bot(TEX("\num{"&decimal(m+1)&"}"),C shifted(m*(Longueur,0)));
- fi;
+ fi;
else:
if Muette=false:
if TypeDecimal=false:
@@ -180,43 +199,59 @@
}%
\NewDocumentCommand\MPFractionSegmentGradue{mm}{%
- \ifluatex
- \mplibforcehmode
- \begin{mplibcode}
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \MPFractionBaseCode
\MPFractionSegmentGradueCode
trace FractionSegment(#1,#2);
- \end{mplibcode}
+ \end{mplibcode}%
\fi%
}%
\def\MPFractionEprouvetteCode{%
- Hauteur=\useKV[ClesFraction]{Longueur};
- color ColEprou;%
- ColEprou=\useKV[ClesFraction]{Couleur};%
- boolean Hachures,Reponse;%
- Reponse=\useKV[ClesFraction]{Reponse};%
- Hachures=\useKV[ClesFraction]{Hachures};%
- Epaisseur=\useKV[ClesFraction]{Epaisseur};
+ vardef TraceGradEprouvette(expr denoa,numea)=
+ picture TraceEprouGrad;
+ TraceEprouGrad=image(
+ drawoptions(withpen pencircle scaled 1.1);
+ if SansPart=false:
+ if SansPartA=false:
+ for k=1 upto (denoa-1):
+ trace (subpath(length Cc/2,length Cc*0.7) of Cc) shifted ((k/denoa)*(0,HauteurEp));
+ endfor;
+ else:
+ la:=1+floor(uniformdeviate((numea mod denoa)-2));
+ lb:=((numea mod denoa)+1)+floor(uniformdeviate(denoa-(numea mod denoa)-1));
+ for k=1 upto (denoa-1):
+ if (k=la) or (k=lb):
+ else:
+ trace (subpath(length Cc/2,length Cc*0.7) of Cc) shifted ((k/denoa)*(0,HauteurEp));
+ fi;
+ endfor;
+ fi;
+ fi;
+ drawoptions();
+ );
+ TraceEprouGrad
+ enddef;
+ %
vardef eprouvette(expr deno,nume)=
- picture PfCEprou,PfCEprouGrad;
- path Cc;
- Cc=cercles((0,0),1u) yscaled 0.2;
- PfCEprouGrad=image(
- trace Cc shifted((0,Hauteur));
- trace subpath(0,length Cc/2) of Cc dashed evenly;
- trace subpath(length Cc/2,length Cc) of Cc;
- trace segment(point(0) of Cc,point(0) of Cc shifted((0,Hauteur)));
- trace segment(point(length Cc/2) of Cc,point(length Cc/2) of (Cc shifted((0,Hauteur))));
- for k=1 upto (deno-1):
- trace (subpath(length Cc/2,length Cc*0.7) of Cc) shifted ((k/deno)*(0,Hauteur));
- endfor;
- );
+ picture PfCEprou,PfCEprouGrad;
+ path Cc;
+ Cc=cercles((0,0),1u) yscaled 0.2;
+ PfCEprouGrad=image(%
+ trace Cc shifted((0,HauteurEp));
+ trace subpath(0,length Cc/2) of Cc dashed evenly;
+ trace subpath(length Cc/2,length Cc) of Cc;
+ trace segment(point(0) of Cc,point(0) of Cc shifted((0,HauteurEp)));
+ trace segment(point(length Cc/2) of Cc,point(length Cc/2) of (Cc shifted((0,HauteurEp))));
+ );
m=nume div deno;
if (nume mod deno)=0:m:=m-1; fi;
PfCEprou=image(%
path Volume,VolumeComplet;
- Volume=(point(0) of Cc)--(subpath(0,length Cc/2) of Cc shifted(((nume mod deno)/deno)*(0,Hauteur)))--(point(length Cc/2) of Cc shifted(((nume mod deno)/deno)*(0,Hauteur)))--(subpath(length Cc/2,length Cc) of Cc)--cycle;
- VolumeComplet=(point(0) of Cc)--(subpath(0,length Cc/2) of Cc shifted((0,Hauteur)))--(point(length Cc/2) of Cc)--(subpath(length Cc/2,length Cc) of Cc)--cycle;
+ Volume=(point(0) of Cc)--(subpath(0,length Cc/2) of Cc shifted(((nume mod deno)/deno)*(0,HauteurEp)))--(point(length Cc/2) of Cc shifted(((nume mod deno)/deno)*(0,HauteurEp)))--(subpath(length Cc/2,length Cc) of Cc)--cycle;
+ VolumeComplet=(point(0) of Cc)--(subpath(0,length Cc/2) of Cc shifted((0,HauteurEp)))--(point(length Cc/2) of Cc)--(subpath(length Cc/2,length Cc) of Cc)--cycle;
if m>0:
for l=0 upto (m-1):
if Reponse:
@@ -223,7 +258,7 @@
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
trace hachurage(VolumeComplet shifted(l*(3u,0)),60,0.2,0) withcolor ColEprou;
- drawoptions(withpen pencircle scaled Epaisseur);
+ drawoptions();
else:
remplis (VolumeComplet shifted(l*(3u,0))) withcolor ColEprou;
fi;
@@ -235,11 +270,11 @@
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
trace hachurage(Volume shifted(m*(3u,0)),60,0.2,0) withcolor ColEprou;
- drawoptions(withpen pencircle scaled Epaisseur);
+ drawoptions();
else:
remplis (Volume shifted(m*(3u,0))) withcolor ColEprou;
fi;
- trace (Cc shifted(((nume mod deno)/deno)*(0,Hauteur))) shifted(m*(3u,0));
+ trace (Cc shifted(((nume mod deno)/deno)*(0,HauteurEp))) shifted(m*(3u,0));
fi;
else:
if Reponse:
@@ -254,38 +289,32 @@
fi;
for k=0 upto m:
trace PfCEprouGrad shifted((3u*k,0));
+ trace TraceGradEprouvette(deno,nume) shifted((3u*k,0));
endfor;
);
PfCEprou
enddef;
}
-
+
\def\MPFractionEprouvette#1#2{%
% #1 num
% #2 d\'eno
- \ifluatex
- \mplibforcehmode
- \begin{mplibcode}
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
% Pas d'aléa ici : l'eau ne peut pas être en lévitation :)
+ \MPFractionBaseCode
\MPFractionEprouvetteCode
trace eprouvette(#2,#1);
- \end{mplibcode}
- \else
- \begin{mpost}[mpsettings={\MPFractionEprouvetteCode}]
+ \end{mplibcode}%
+ \else%
+ \begin{mpost}[mpsettings={\MPFractionBaseCode;\MPFractionEprouvetteCode}]
trace eprouvette(#2,#1);
- \end{mpost}
- \fi
-}
+ \end{mpost}%
+ \fi%
+}%
\def\MPFractionRegulierCodeAlea{%
- Rayon=\useKV[ClesFraction]{Rayon};
- Cotes=\useKV[ClesFraction]{Cotes};
- color ColPolyReg;
- ColPolyReg=\useKV[ClesFraction]{Couleur};
- boolean Hachures,Reponse;
- Reponse=\useKV[ClesFraction]{Reponse};
- Hachures=\useKV[ClesFraction]{Hachures};
- Epaisseur=\useKV[ClesFraction]{Epaisseur};
pair O,A[],B[];
O=u*(0,0);
path cc,cd;
@@ -307,7 +336,7 @@
if (nume mod deno)=0:m:=m-1; fi;
picture RetourFraction;
RetourFraction=image(%
- Reste=((nume div deno)+1)*deno;
+ Reste=if (nume mod deno)=0:nume else:((nume div deno)+1)*deno fi;
RetiensPart=0;
if Reponse:
if m>0:
@@ -324,6 +353,7 @@
else:
fill part[k] shifted(l*(2*Rayon+0.5cm,0)) withcolor ColPolyReg;
fi;
+ trace part[k] shifted(l*(2*Rayon+0.5cm,0));
fi;
else:
RetiensPart:=RetiensPart+1;
@@ -333,11 +363,12 @@
else:
fill part[k] shifted(l*(2*Rayon+0.5cm,0)) withcolor ColPolyReg;
fi;
+ trace part[k] shifted(l*(2*Rayon+0.5cm,0));
fi;
fi;
Reste:=Reste-1;
endfor;
- endfor;
+ endfor;
fi;
for k=0 upto deno-1:
if RetiensPart<nume:
@@ -351,6 +382,7 @@
else:
fill part[k] shifted(m*(2*Rayon+0.5cm,0)) withcolor ColPolyReg;
fi;
+ trace part[k] shifted(m*(2*Rayon+0.5cm,0));
fi;
else:
RetiensPart:=RetiensPart+1;
@@ -360,17 +392,20 @@
else:
fill part[k] shifted(m*(2*Rayon+0.5cm,0)) withcolor ColPolyReg;
fi;
+ trace part[k] shifted(m*(2*Rayon+0.5cm,0));
fi;
fi;
- Reste:=Reste-1;
+ Reste:=Reste-1;
endfor;
fi;
drawoptions(withpen pencircle scaled Epaisseur);
for l=0 upto m:
draw cd shifted(l*(2*Rayon+0.5cm,0));
- for k=0 upto (deno-1):
- draw segment(O,B[k]) shifted(l*(2*Rayon+0.5cm,0));
- endfor;
+ if SansPart=false:
+ for k=0 upto (deno-1):
+ draw segment(O,B[k]) shifted(l*(2*Rayon+0.5cm,0));
+ endfor;
+ fi;
endfor;
drawoptions();
);
@@ -379,14 +414,6 @@
}%
\def\MPFractionRegulierCode{%
- Rayon=\useKV[ClesFraction]{Rayon};
- Cotes=\useKV[ClesFraction]{Cotes};
- color ColPolyReg;
- ColPolyReg=\useKV[ClesFraction]{Couleur};
- boolean Hachures,Reponse;
- Reponse=\useKV[ClesFraction]{Reponse};
- Hachures=\useKV[ClesFraction]{Hachures};
- Epaisseur=\useKV[ClesFraction]{Epaisseur};
pair O,A[],B[];
O=u*(0,0);
path cc,cd;
@@ -401,51 +428,95 @@
endfor;
picture fondcolore,FractionPoly;
fondcolore=image(
- if Hachures:
- drawoptions(withpen pencircle scaled Epaisseur);
- trace hachurage(O--arccercle(B[0],B[nume mod deno],O)--cycle,1.5*360/Cotes,0.25,0) withcolor ColPolyReg;
- drawoptions(withpen pencircle scaled Epaisseur);
- else:
- remplis O--arccercle(B[0],B[nume mod deno],O)--cycle withcolor ColPolyReg;
- fi;
- clip currentpicture to cd;
- for k=0 upto deno-1:
- draw segment(O,B[k]) cutafter cd;
- endfor;
- trace cd;
+ if Hachures:
+ drawoptions(withpen pencircle scaled Epaisseur);
+ trace hachurage(O--arccercle(B[0],B[nume mod deno],O)--cycle,1.5*360/Cotes,0.25,0) withcolor ColPolyReg;
+ drawoptions();
+ else:
+ remplis O--arccercle(B[0],B[nume mod deno],O)--cycle withcolor ColPolyReg;
+ fi;
+ clip currentpicture to cd;
+ drawoptions(withpen pencircle scaled Epaisseur);
+ if SansPart:
+ draw B[0]--O--B[nume mod deno];
+% elseif SansPartA:
+% la:=floor(uniformdeviate(deno-2));
+% for k=0 upto deno-1:
+% if k<>la:
+% draw segment(O,B[k]) cutafter cd;
+% fi;
+% endfor;
+% else:
+% for k=0 upto deno-1:
+% draw segment(O,B[k]) cutafter cd;
+% endfor;
+ fi;
+ trace cd;
+ drawoptions();
);
currentpicture:=nullpicture;
m=nume div deno;
if (nume mod deno)=0:m:=m-1; fi;
FractionPoly=image(
- if m>0:
- for l=0 upto (m-1):
- if Reponse:
- if Hachures:
- drawoptions(withpen pencircle scaled Epaisseur);
- trace hachurage(cd shifted(l*(Rayon*2+0.5cm,0)),1.5*360/Cotes,0.25,0) withcolor ColPolyReg;
- drawoptions(withpen pencircle scaled Epaisseur);
- else:
- fill cd shifted(l*(Rayon*2+0.5cm,0)) withcolor ColPolyReg;
- fi;
- fi;
- trace cd shifted(l*(Rayon*2+0.5cm,0));
- if deno>1:
- for k=0 upto deno-1:
- draw (segment(O,B[k]) cutafter cd) shifted(l*(Rayon*2+0.5cm,0));
- endfor;
- fi;
- endfor;
- fi;
- if Reponse:
- draw fondcolore shifted(m*(Rayon*2+0.5cm,0));
- fi;
- draw cd shifted(m*(Rayon*2+0.5cm,0));
- if deno>1:
- for k=0 upto deno-1:
- draw (segment(O,B[k]) cutafter cd) shifted(m*(Rayon*2+0.5cm,0));
- endfor;
- fi;
+ if m>0:
+ for l=0 upto (m-1):
+ if Reponse:
+ if Hachures:
+ drawoptions(withpen pencircle scaled Epaisseur);
+ trace hachurage(cd shifted(l*(Rayon*2+0.5cm,0)),1.5*360/Cotes,0.25,0) withcolor ColPolyReg;
+ drawoptions();
+ else:
+ fill cd shifted(l*(Rayon*2+0.5cm,0)) withcolor ColPolyReg;
+ fi;
+ fi;
+ drawoptions(withpen pencircle scaled Epaisseur);
+ trace cd shifted(l*(Rayon*2+0.5cm,0));
+ if SansPart:
+ elseif SansPartA:
+ if deno>1:
+ la:=1+floor(uniformdeviate(deno-2));
+ for k=0 upto (deno-1):
+ if k<>la:
+ draw (segment(O,B[k]) cutafter cd) shifted(l*(2*Rayon+0.5cm,0));
+ fi;
+ endfor;
+ fi;
+ else:
+ if deno>1:
+ for k=0 upto deno-1:
+ draw (segment(O,B[k]) cutafter cd) shifted(l*(Rayon*2+0.5cm,0));
+ endfor;
+ fi;
+ fi;
+ drawoptions();
+ endfor;
+ fi;
+ if Reponse:
+ draw fondcolore shifted(m*(Rayon*2+0.5cm,0));
+ fi;
+ drawoptions(withpen pencircle scaled Epaisseur);
+ draw cd shifted(m*(Rayon*2+0.5cm,0));
+ if deno>1:
+ if SansPart:
+ %trace (0,0)--(50,50) withpen pencircle scaled 2;
+ %trace (B[0]--O--B[nume mod deno];
+ elseif SansPartA:
+% draw (0,0)--(50,50) withpen pencircle scaled 2;
+ if deno>1:
+ la:=1+floor(uniformdeviate(deno-2));
+ for k=0 upto (deno-1):
+ if k<>la:
+ draw (segment(O,B[k]) cutafter cd) shifted(m*(2*Rayon+0.5cm,0));
+ fi;
+ endfor;
+ fi;
+ else:
+ for k=0 upto deno-1:
+ draw (segment(O,B[k]) cutafter cd) shifted(m*(Rayon*2+0.5cm,0));
+ endfor;
+ fi;
+ fi;
+ drawoptions();
);
FractionPoly
enddef;
@@ -453,9 +524,10 @@
\def\MPFractionRegulier#1#2{%
% #1 num, #2 deno
- \ifluatex
- \mplibforcehmode
- \begin{mplibcode}
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \MPFractionBaseCode
boolean Alea;
Alea=\useKV[ClesFraction]{Aleatoire};
if Alea:
@@ -464,24 +536,17 @@
\MPFractionRegulierCode
fi;
trace FractionPolyReg(#1,#2);
- \end{mplibcode}
- \else
- \begin{mpost}[mpsettings={\MPFractionRegulierCode}]
+ \end{mplibcode}%
+ \else%
+ \begin{mpost}[mpsettings={\MPFractionBaseCode;\MPFractionRegulierCode}]%
trace FractionPolyReg(#1,#2);
- \end{mpost}
- \fi
+ \end{mpost}%
+ \fi%
}%
\def\MPFractionTriangleCodeAlea{%
- Longueur:=\useKV[ClesFraction]{Longueur};
- nbparts:=\useKV[ClesFraction]{Parts};
- color ColTriangle;
- ColTriangle=\useKV[ClesFraction]{Couleur};
- boolean Hachures,Reponse;
- Reponse=\useKV[ClesFraction]{Reponse};
- Hachures=\useKV[ClesFraction]{Hachures};
- Epaisseur=\useKV[ClesFraction]{Epaisseur};
nbtriangle=0;
+ boolean Allume[];
%
vardef Ligne(expr longueur)=
for k=0 upto 2*(longueur-1):
@@ -491,6 +556,7 @@
else:
M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A));
fi;
+ Allume[nbtriangle]=false;
endfor;
enddef;
%
@@ -521,7 +587,7 @@
fi;
picture RetourFraction;
RetourFraction=image(
- Reste=((nume div deno)+1)*deno;
+ Reste=if (nume mod deno)=0:nume else:((nume div deno)+1)*deno fi;
RetiensPart=0;
if Reponse:
if m>0:
@@ -533,27 +599,33 @@
if test>0.5:
RetiensPart:=RetiensPart+1;
if Hachures:
- drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(M[k] shifted(l*(Longueur+1cm,0)),90,0.2,0) withcolor ColTriangle;
+ %drawoptions(withpen pencircle scaled Epaisseur);
+ draw hachurage(M[k] shifted(l*(Longueur+Ecart,0)),90,0.2,0) withcolor ColTriangle;
else:
- fill M[k] shifted(l*(Longueur+1cm,0)) withcolor ColTriangle;
+ fill M[k] shifted(l*(Longueur+Ecart,0)) withcolor ColTriangle;
fi;
+ Allume[k]:=true;
fi;
else:
RetiensPart:=RetiensPart+1;
if Hachures:
- drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(M[k] shifted(l*(Longueur+1cm,0)),90,0.2,0) withcolor ColTriangle;
+ %drawoptions(withpen pencircle scaled Epaisseur);
+ draw hachurage(M[k] shifted(l*(Longueur+Ecart,0)),90,0.2,0) withcolor ColTriangle;
else:
- fill M[k] shifted(l*(Longueur+1cm,0)) withcolor ColTriangle;
+ fill M[k] shifted(l*(Longueur+Ecart,0)) withcolor ColTriangle;
fi;
+ Allume[k]:=true;
fi;
fi;
Reste:=Reste-1;
endfor;
- endfor;
+ for k=1 upto nbtriangle:
+ if Allume[k]=false:trace M[k] shifted(l*(Longueur+Ecart,0)) fi;
+ endfor;
+ endfor;
fi;
for k=1 upto nbtriangle:
+ Allume[k]:=false;
if RetiensPart<nume:
if Reste>(nume-RetiensPart):
test:=uniformdeviate(1);
@@ -560,54 +632,62 @@
if test>0.5:
RetiensPart:=RetiensPart+1;
if Hachures:
- drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(M[k] shifted(m*(Longueur+1cm,0)),90,0.2,0) withcolor ColTriangle;
+ %drawoptions(withpen pencircle scaled Epaisseur);
+ draw hachurage(M[k] shifted(m*(Longueur+Ecart,0)),90,0.2,0) withcolor ColTriangle;
else:
- fill M[k] shifted(m*(Longueur+1cm,0)) withcolor ColTriangle;
+ fill M[k] shifted(m*(Longueur+Ecart,0)) withcolor ColTriangle;
fi;
+ Allume[k]:=true;
fi;
else:
RetiensPart:=RetiensPart+1;
if Hachures:
- drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(M[k] shifted(m*(Longueur+1cm,0)),90,0.2,0) withcolor ColTriangle;
+ %drawoptions(withpen pencircle scaled Epaisseur);
+ draw hachurage(M[k] shifted(m*(Longueur+Ecart,0)),90,0.2,0) withcolor ColTriangle;
else:
- fill M[k] shifted(m*(Longueur+1cm,0)) withcolor ColTriangle;
+ fill M[k] shifted(m*(Longueur+Ecart,0)) withcolor ColTriangle;
fi;
+ Allume[k]:=true;
fi;
fi;
- Reste:=Reste-1;
+ Reste:=Reste-1;
endfor;
+ for k=1 upto nbtriangle:
+ if Allume[k]=false:trace M[k] shifted(m*(Longueur+Ecart,0)) fi;
+ endfor;
fi;
- drawoptions(withpen pencircle scaled Epaisseur);
- for l=0 upto m:
- trace FondTriangle shifted(l*(Longueur+1cm,0));
- endfor;
+ % drawoptions(withpen pencircle scaled Epaisseur);
+ if SansPart:
+ for l=0 upto m:
+ trace polygone(A,B,C) shifted(l*(Longueur+Ecart,0));
+ endfor;
+ elseif SansPartA:
+ %
+ else:
+ for l=0 upto m:
+ trace FondTriangle shifted(l*(Longueur+Ecart,0));
+ endfor;
+ fi;
);
+ drawoptions(withpen pencircle scaled Epaisseur);
RetourFraction
enddef;
}%
\def\MPFractionTriangleCode{%
- Longueur:=\useKV[ClesFraction]{Longueur};
- nbparts:=\useKV[ClesFraction]{Parts};
- color ColTriangle;
- ColTriangle=\useKV[ClesFraction]{Couleur};
- boolean Hachures,Reponse;
- Reponse=\useKV[ClesFraction]{Reponse};
- Hachures=\useKV[ClesFraction]{Hachures};
- Epaisseur=\useKV[ClesFraction]{Epaisseur};
nbtriangle=0;
+ boolean Allume[];
%
vardef Ligne(expr longueur)=
- for k=0 upto 2*(longueur-1):
- nbtriangle:=nbtriangle+1;
- if (k mod 2)=0:
- M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A));
- else:
- M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A));
- fi;
- endfor;
+ for k=0 upto 2*(longueur-1):
+ nbtriangle:=nbtriangle+1;
+ if (k mod 2)=0:
+ M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+ else:
+ M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+ fi;
+ Allume[nbtriangle]=false;
+ endfor;
enddef;
%
pair A,B,C;
@@ -620,56 +700,142 @@
Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]);
%
for k=nbparts downto 1:
- Ligne(k);
+ Ligne(k);
endfor;
%
vardef FractionTriangle(expr nume,deno)=
- m:=nume div deno;
- picture RetourFraction;
- RetourFraction=image(
- for l=1 upto (nume mod deno):
- if Reponse:
- if Hachures:
- drawoptions(withpen pencircle scaled Epaisseur);
- trace hachurage(M[l] shifted(m*(Longueur+1cm,0)),90,0.2,0) withcolor ColTriangle;
- drawoptions(withpen pencircle scaled Epaisseur);
- else:
- fill (M[l] shifted(m*(Longueur+1cm,0))) withcolor ColTriangle;
- fi;
- fi;
- for k=1 upto nbparts:
- trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]) shifted(m*(Longueur+1cm,0));
- trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]) shifted(m*(Longueur+1cm,0));
- trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]) shifted(m*(Longueur+1cm,0));
- endfor;
- endfor;
- %
- for l=0 upto (m-1):
- if Reponse:
- if Hachures:
- drawoptions(withpen pencircle scaled Epaisseur);
- trace hachurage(polygone(A,B,C) shifted(l*(Longueur+1cm,0)),90,0.2,0) withcolor ColTriangle;
- drawoptions(withpen pencircle scaled Epaisseur);
- else:
- remplis polygone(A,B,C) withcolor ColTriangle;
- fi;
- fi;
- for k=1 upto nbparts:
- trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]) shifted(l*(Longueur+1cm,0));
- trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]) shifted(l*(Longueur+1cm,0));
- trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]) shifted(l*(Longueur+1cm,0));
- endfor;
- endfor;
- );
- RetourFraction
+ m:=nume div deno;
+ picture RetourFraction;
+ RetourFraction=image(
+ for l=1 upto (nume mod deno):
+ if Reponse:
+ if Hachures:
+ % drawoptions(withpen pencircle scaled Epaisseur);
+ trace hachurage(M[l] shifted(m*(Longueur+Ecart,0)),90,0.2,0) withcolor ColTriangle;
+ % drawoptions();
+ else:
+ fill (M[l] shifted(m*(Longueur+Ecart,0))) withcolor ColTriangle;
+ trace (M[l] shifted(m*(Longueur+Ecart,0))) withcolor ColTriangle;
+ fi;
+ Allume[l]:=true;
+ fi;
+ if SansPart:
+ trace polygone(A,B,C) shifted(m*(Longueur+Ecart,0));
+ elseif SansPartA:
+ if deno>1:
+ la:=1+floor(uniformdeviate(nbparts-2));
+ for k=1 upto nbparts:
+ if k<>la:
+ trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]) shifted(m*(Longueur+Ecart,0));
+ trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]) shifted(m*(Longueur+Ecart,0));
+ trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]) shifted(m*(Longueur+Ecart,0));
+ fi;
+ endfor;
+ fi;
+ trace polygone(A,B,C) shifted(m*(Longueur+Ecart,0));
+ %la:=1+floor(uniformdeviate(nbtriangle div 2));
+ %lb:=(nbtriangle div 2)+1 +floor(uniformdeviate((nbtriangle-1) div 2));
+ %for k=1 upto nbtriangle:
+ % if (k<>la) and (k<>lb):
+ % trace M[k] shifted(l*(Longueur+Ecart,0));
+ % fi;
+ %endfor;
+ %trace polygone(A,B,C) shifted(l*(Longueur+Ecart,0));
+ else:
+ if deno>1:
+ for k=1 upto nbparts:
+ trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]) shifted(m*(Longueur+Ecart,0));
+ trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]) shifted(m*(Longueur+Ecart,0));
+ trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]) shifted(m*(Longueur+Ecart,0));
+ endfor;
+ else:
+ trace polygone(A,B,C) shifted(m*(Longueur+Ecart,0));
+ fi;
+ fi;
+ endfor;
+% for l=1 upto nbtriangle:
+% label(decimal(l),center M[l]);
+% endfor;
+ % Suite du sans part
+ if SansPart:
+ nbtriangle:=0;
+ pair Ak[];
+ path morceauxg[],morceauxb[];
+ for nb=nbparts downto 1:
+ Ak[nb]:=((nbparts-nb+1)/nbparts)[A,C];
+ for k=0 upto 2*(nb-1):
+ nbtriangle:=nbtriangle+1;
+ if Allume[nbtriangle]:
+ %if nb<nbparts:
+ % fill M[nbtriangle] withcolor ColTriangle;
+ % trace M[nbtriangle] withcolor ColTriangle;
+ %fi;
+ if (k mod 2)=0:
+ morceauxg[nb]:=subpath(1,2) of M[nbtriangle];
+ Ak[nb+1]:=point(1) of M[nbtriangle]% morceauxb[nb]:=A--A;%subpath(0,1) of M[nbtriangle];
+ else:
+ morceauxg[nb]:=subpath(1,0) of M[nbtriangle];
+% morceauxb[nb]:=subpath(2,3) of M[nbtriangle];
+ fi;
+ fi;
+ endfor;
+ %if known morceauxg[nb]:trace morceauxg[nb]--((nbparts-nb+1)/nbparts)[A,C] fi;
+ endfor;
+ for k=nbparts downto 1:
+ if known morceauxg[k]:trace (morceauxg[k]--Ak[k]) shifted(m*(Longueur+Ecart,0)) fi;
+ endfor;
+ %trace polygone(A,B,C);% shifted(l*(Longueur+Ecart,0));
+ fi;
+ %
+ %
+ for l=0 upto (m-1):
+ if Reponse:
+ if Hachures:
+ % drawoptions(withpen pencircle scaled Epaisseur);
+ trace hachurage(polygone(A,B,C) shifted(l*(Longueur+Ecart,0)),90,0.2,0) withcolor ColTriangle;
+ % drawoptions();
+ else:
+ remplis polygone(A,B,C) withcolor ColTriangle;
+ fi;
+ fi;
+ if SansPart:
+ trace polygone(A,B,C) shifted(l*(Longueur+Ecart,0));
+ elseif SansPartA:
+ if deno>1:
+ la:=1+floor(uniformdeviate(nbparts-2));
+ for k=1 upto nbparts:
+ if k<>la:
+ trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]) shifted(l*(Longueur+Ecart,0));
+ trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]) shifted(l*(Longueur+Ecart,0));
+ trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]) shifted(l*(Longueur+Ecart,0));
+ fi;
+ endfor;
+ fi;
+ trace polygone(A,B,C) shifted(l*(Longueur+Ecart,0));
+ else:
+ if deno>1:
+ for k=1 upto nbparts:
+ trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]) shifted(l*(Longueur+Ecart,0));
+ trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]) shifted(l*(Longueur+Ecart,0));
+ trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]) shifted(l*(Longueur+Ecart,0));
+ endfor;
+ else:
+ trace polygone(A,B,C) shifted(l*(Longueur+Ecart,0));
+ fi;
+ fi;
+ endfor;
+ );
+ drawoptions(withpen pencircle scaled Epaisseur);
+ RetourFraction
enddef;
}%
\def\MPFractionTriangle#1#2{%
% #1 num #2 d\'eno (attention : = partage^2)
- \ifluatex
- \mplibforcehmode
- \begin{mplibcode}
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \MPFractionBaseCode
boolean Alea;
Alea=\useKV[ClesFraction]{Aleatoire};
if Alea:
@@ -678,25 +844,15 @@
\MPFractionTriangleCode;
fi;
draw FractionTriangle(#1,#2);
- \end{mplibcode}
- \else
- \begin{mpost}[mpsettings={\MPFractionTriangleCode}]
+ \end{mplibcode}%
+ \else%
+ \begin{mpost}[mpsettings={\MPFractionBaseCode;\MPFractionTriangleCode}]%
draw FractionTriangle(#1,#2);
- \end{mpost}
- \fi
+ \end{mpost}%
+ \fi%
}%
\def\MPFractionRectangleCodeAlea{%
- Longueur=\useKV[ClesFraction]{Longueur};
- Largeur=\useKV[ClesFraction]{Largeur};
- color ColRectangle;
- ColRectangle=\useKV[ClesFraction]{Couleur};
- boolean Hachures,Reponse;
- Reponse=\useKV[ClesFraction]{Reponse};
- Hachures=\useKV[ClesFraction]{Hachures};
- Epaisseur=\useKV[ClesFraction]{Epaisseur};
- Multiple=\useKV[ClesFraction]{Multiple};
- %
pair A,B,C,D,M[],N[],R[],S[];
A=(0,0);
B-A=(Longueur,0);
@@ -721,17 +877,20 @@
fi;
picture FondRectangle;
FondRectangle=image(%
+ trace polygone(A,B,C,D);
path case[];
for k=0 upto Multiple-1:
for l=0 step Multiple until (deno-1):
case[k*(deno div Multiple)+(l div Multiple)]=(unitsquare xscaled (Multiple*abs(A-B)/deno) yscaled (abs(D-A)/Multiple)) shifted (((l/deno)[A,B]-A)+((k/Multiple)[A,D]-A));
- trace case[k*(deno div Multiple)+(l div Multiple)];
+ if SansPart=false:
+ trace case[k*(deno div Multiple)+(l div Multiple)];
+ fi;
endfor;
endfor;
);
picture RetourRectangle;
RetourRectangle=image(
- Reste=((nume div deno)+1)*deno;
+ Reste=if (nume mod deno)=0:nume else:((nume div deno)+1)*deno fi;
RetiensPart=0;
if Reponse:
if m>0:
@@ -744,24 +903,26 @@
RetiensPart:=RetiensPart+1;
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(case[k] shifted(l*(Longueur+1cm,0)),45,0.25,0) withcolor ColRectangle;
+ draw hachurage(case[k] shifted(l*(Longueur+Ecart,0)),45,0.25,0) withcolor ColRectangle;
else:
- fill case[k] shifted(l*(Longueur+1cm,0)) withcolor ColRectangle;
+ fill case[k] shifted(l*(Longueur+Ecart,0)) withcolor ColRectangle;
fi;
+ if SansPart:trace case[k] fi;
fi;
else:
RetiensPart:=RetiensPart+1;
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(case[k] shifted(l*(Longueur+1cm,0)),45,0.25,0) withcolor ColRectangle;
+ draw hachurage(case[k] shifted(l*(Longueur+Ecart,0)),45,0.25,0) withcolor ColRectangle;
else:
- fill case[k] shifted(l*(Longueur+1cm,0)) withcolor ColRectangle;
+ fill case[k] shifted(l*(Longueur+Ecart,0)) withcolor ColRectangle;
fi;
+ if SansPart:trace case[k] fi;
fi;
fi;
Reste:=Reste-1;
endfor;
- endfor;
+ endfor;
fi;
for k=0 upto deno-1:
if RetiensPart<nume:
@@ -771,43 +932,36 @@
RetiensPart:=RetiensPart+1;
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(case[k] shifted(m*(Longueur+1cm,0)),45,0.25,0) withcolor ColRectangle;
+ draw hachurage(case[k] shifted(m*(Longueur+Ecart,0)),45,0.25,0) withcolor ColRectangle;
else:
- fill case[k] shifted(m*(Longueur+1cm,0)) withcolor ColRectangle;
+ fill case[k] shifted(m*(Longueur+Ecart,0)) withcolor ColRectangle;
fi;
+ if SansPart:trace case[k] fi;
fi;
else:
RetiensPart:=RetiensPart+1;
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(case[k] shifted(m*(Longueur+1cm,0)),45,0.25,0) withcolor ColRectangle;
+ draw hachurage(case[k] shifted(m*(Longueur+Ecart,0)),45,0.25,0) withcolor ColRectangle;
else:
- fill case[k] shifted(m*(Longueur+1cm,0)) withcolor ColRectangle;
+ fill case[k] shifted(m*(Longueur+Ecart,0)) withcolor ColRectangle;
fi;
+ if SansPart:trace case[k] fi;
fi;
fi;
- Reste:=Reste-1;
+ Reste:=Reste-1;
endfor;
fi;
for l=0 upto m:
- trace FondRectangle shifted(l*(Longueur+1cm,0));
+ trace FondRectangle shifted(l*(Longueur+Ecart,0));
endfor;
);
+ drawoptions(withpen pencircle scaled Epaisseur);
RetourRectangle
enddef;
}%
\def\MPFractionRectangleCode{%
- Longueur=\useKV[ClesFraction]{Longueur};
- Largeur=\useKV[ClesFraction]{Largeur};
- color ColRectangle;
- ColRectangle=\useKV[ClesFraction]{Couleur};
- boolean Hachures,Reponse;
- Reponse=\useKV[ClesFraction]{Reponse};
- Hachures=\useKV[ClesFraction]{Hachures};
- Epaisseur=\useKV[ClesFraction]{Epaisseur};
- Multiple=\useKV[ClesFraction]{Multiple};
- %
pair A,B,C,D,M[],N[],R[],S[];
A=(1,1);
B-A=(Longueur,0);
@@ -814,88 +968,135 @@
C-B=(0,Largeur);
D-C=A-B;
vardef FractionRectangle(expr nume,deno)=
- m=nume div deno;
- if (nume mod deno)=0:m:=m-1; fi;
- numeric parts;
- parts=(deno div Multiple);
- for k=0 upto parts:
- M[k]=(k/parts)[A,B];
- N[k]=(k/parts)[D,C];
- endfor;
- if Multiple>1:
- for k=0 upto Multiple:
- R[k]=(k/Multiple)[A,D];
- S[k]=(k/Multiple)[B,C];
- endfor;
- fi;
- picture FondRectangle;
- FondRectangle=image(%
- draw polygone(A,B,C,D);
- for k=1 upto (parts-1):
- draw segment(M[k],N[k]);
- endfor;
- if Multiple>1:
- for k=1 upto (Multiple-1):
- draw segment(R[k],S[k]);
- endfor;
- fi;
+ m=nume div deno;
+ if (nume mod deno)=0:m:=m-1; fi;
+ numeric parts;
+ parts=(deno div Multiple);
+ for k=0 upto parts:
+ M[k]=(k/parts)[A,B];
+ N[k]=(k/parts)[D,C];
+ endfor;
+ if Multiple>1:
+ for k=0 upto Multiple:
+ R[k]=(k/Multiple)[A,D];
+ S[k]=(k/Multiple)[B,C];
+ endfor;
+ fi;
+ picture FondRectangle;
+ FondRectangle=image(%
+ draw polygone(A,B,C,D);
+ );
+ picture FondRectangleColorie;
+ FondRectangleColorie=image(%
+ if Multiple=1:
+ if Hachures:
+ % drawoptions(withpen pencircle scaled Epaisseur);
+ trace hachurage(polygone(A,M[nume mod deno],N[nume mod deno],D),45,0.25,0) withcolor ColRectangle;
+% drawoptions(withpen pencircle scaled Epaisseur);
+ else:
+ remplis polygone(A,M[nume mod deno],N[nume mod deno],D) withcolor ColRectangle;
+ trace polygone(A,M[nume mod deno],N[nume mod deno],D);% withcolor ColRectangle;
+ fi;
+ else:
+ DDiv=(nume mod deno) div parts;
+ MMod=(nume mod deno) mod parts;
+ if Hachures:
+ % drawoptions(withpen pencircle scaled Epaisseur);
+ trace hachurage(polygone(A,B,S[DDiv],R[DDiv]),45,0.25,0) withcolor ColRectangle;
+ % drawoptions(withpen pencircle scaled Epaisseur);
+ trace hachurage(polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]),45,0.25,0) withcolor ColRectangle;
+ % drawoptions(withpen pencircle scaled Epaisseur);
+ else:
+ remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor ColRectangle;
+ remplis polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor ColRectangle;
+ trace polygone(A,B,S[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]);
+ fi;
+ fi;
);
- picture FondRectangleColorie;
- FondRectangleColorie=image(%
- if Multiple=1:
- if Hachures:
- drawoptions(withpen pencircle scaled Epaisseur);
- trace hachurage(polygone(A,M[nume mod deno],N[nume mod deno],D),45,0.25,0) withcolor ColRectangle;
- drawoptions(withpen pencircle scaled Epaisseur);
- else:
- remplis polygone(A,M[nume mod deno],N[nume mod deno],D) withcolor ColRectangle;
- fi;
- else:
- DDiv=(nume mod deno) div parts;
- MMod=(nume mod deno) mod parts;
- if Hachures:
- drawoptions(withpen pencircle scaled Epaisseur);
- trace hachurage(polygone(A,B,S[DDiv],R[DDiv]),45,0.25,0) withcolor ColRectangle;
- drawoptions(withpen pencircle scaled Epaisseur);
- trace hachurage(polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]),45,0.25,0) withcolor ColRectangle;
- drawoptions(withpen pencircle scaled Epaisseur);
- else:
- remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor ColRectangle;
- remplis polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor ColRectangle;
- fi;
- fi;
- );
picture RetourRectangle;
RetourRectangle=image(
- if m>0:
- for l=0 upto m-1:
- if Reponse:
- if Hachures:
+ if m>0:
+ for l=0 upto m-1:
+ if Reponse:
+ if Hachures:
+ % drawoptions(withpen pencircle scaled Epaisseur);
+ trace hachurage(polygone(A,B,C,D) shifted(l*(Longueur+Ecart,0)),45,0.25,0) withcolor ColRectangle;
+ % drawoptions(withpen pencircle scaled Epaisseur);
+ else:
+ remplis (polygone(A,B,C,D) shifted(l*(Longueur+Ecart,0))) withcolor ColRectangle;
+ fi;
+ fi;
+ trace FondRectangle shifted(l*(Longueur+Ecart,0));
+ if SansPart:
+ elseif SansPartA:
+ la:=1+floor(uniformdeviate(parts-2));
+ for k=1 upto (parts-1):
+ if k<>la:
+ draw segment(M[k],N[k])shifted(l*(Longueur+Ecart,0));
+ fi;
+ endfor;
+ if Multiple>1:
+ la:=1+floor(uniformdeviate(Multiple-2));
+ for k=1 upto (Multiple-1):
+ if k<>la:
+ draw segment(R[k],S[k]) shifted(l*(Longueur+Ecart,0));
+ fi;
+ endfor;
+ fi;
+ else:
+ for k=1 upto (parts-1):
+ draw segment(M[k],N[k]) shifted(l*(Longueur+Ecart,0));
+ endfor;
+ if Multiple>1:
+ for k=1 upto (Multiple-1):
+ draw segment(R[k],S[k]) shifted(l*(Longueur+Ecart,0));
+ endfor;
+ fi;
+ fi;
+ endfor;
+ fi;
+ if (nume mod deno)<>0:
+ if Reponse:
+ trace FondRectangleColorie shifted(m*(Longueur+Ecart,0));
+ fi;
+ else:
+ if Reponse:
+ if Hachures:
+ trace hachurage(polygone(A,B,C,D) shifted(m*(Longueur+Ecart,0)),45,0.25,0) withcolor ColRectangle;
+ else:
+ remplis (polygone(A,B,C,D) shifted(m*(Longueur+Ecart,0))) withcolor ColRectangle;
+ fi;
+ fi;
+ fi;
+ trace FondRectangle shifted(m*(Longueur+Ecart,0));
+ if SansPart:
+ elseif SansPartA:
+ la:=1+floor(uniformdeviate(parts-2));
+ for k=1 upto (parts-1):
+ if k<>la:
+ draw segment(M[k],N[k])shifted(m*(Longueur+Ecart,0));
+ fi;
+ endfor;
+ if Multiple>1:
+ la:=1+floor(uniformdeviate(Multiple-2));
+ for k=1 upto (Multiple-1):
+ if k<>la:
+ draw segment(R[k],S[k]) shifted(m*(Longueur+Ecart,0));
+ fi;
+ endfor;
+ fi;
+ else:
+ for k=1 upto (parts-1):
+ draw segment(M[k],N[k]) shifted(m*(Longueur+Ecart,0));
+ endfor;
+ if Multiple>1:
+ for k=1 upto (Multiple-1):
+ draw segment(R[k],S[k]) shifted(m*(Longueur+Ecart,0));
+ endfor;
+ fi;
+ fi;
+ );
drawoptions(withpen pencircle scaled Epaisseur);
- trace hachurage(polygone(A,B,C,D) shifted(l*(Longueur+1cm,0)),45,0.25,0) withcolor ColRectangle;
- drawoptions(withpen pencircle scaled Epaisseur);
- else:
- remplis (polygone(A,B,C,D) shifted(l*(Longueur+1cm,0))) withcolor ColRectangle;
- fi;
- fi;
- trace FondRectangle shifted(l*(Longueur+1cm,0));
- endfor;
- fi;
- if (nume mod deno)<>0:
- if Reponse:
- trace FondRectangleColorie shifted(m*(Longueur+1cm,0));
- fi;
- else:
- if Reponse:
- if Hachures:
- trace hachurage(polygone(A,B,C,D) shifted(m*(Longueur+1cm,0)),45,0.25,0) withcolor ColRectangle;
- else:
- remplis (polygone(A,B,C,D) shifted(m*(Longueur+1cm,0))) withcolor ColRectangle;
- fi;
- fi;
- fi;
- trace FondRectangle shifted(m*(Longueur+1cm,0));
- );
RetourRectangle
enddef;
}%
@@ -904,7 +1105,8 @@
% #1 num, #2 deno
\ifluatex%
\mplibforcehmode%
- \begin{mplibcode}
+ \begin{mplibcode}%
+ \MPFractionBaseCode;
boolean Alea;
Alea=\useKV[ClesFraction]{Aleatoire};
if Alea:
@@ -913,22 +1115,15 @@
\MPFractionRectangleCode;
fi;
trace FractionRectangle(#1,#2);
- \end{mplibcode}
+ \end{mplibcode}%
\else%
- \begin{mpost}[mpsettings={\MPFractionRectangleCode;color ColRectangle;ColRectangle=\useKV[ClesFraction]{Couleur};}]
+ \begin{mpost}[mpsettings={\MPFractionBaseCode;\MPFractionRectangleCode;}]
trace FractionRectangle(#1,#2);
- \end{mpost}
+ \end{mpost}%
\fi%
}%
\def\MPFractionDisqueCodeAlea{%
- Rayon=\useKV[ClesFraction]{Rayon};
- Epaisseur=\useKV[ClesFraction]{Epaisseur};
- color ColDisque;
- ColDisque=\useKV[ClesFraction]{Couleur};
- boolean Hachures,Reponse;
- Hachures=\useKV[ClesFraction]{Hachures};
- Reponse:=\useKV[ClesFraction]{Reponse};
%
pair A,B[];
A=(0,0);
@@ -945,7 +1140,7 @@
if (nume mod deno)=0:m:=m-1; fi;
picture RetourFraction;
RetourFraction=image(%
- Reste=((nume div deno)+1)*deno;
+ Reste=if (nume mod deno)=0:nume else:((nume div deno)+1)*deno fi;
RetiensPart=0;
if Reponse:
if m>0:
@@ -958,24 +1153,26 @@
RetiensPart:=RetiensPart+1;
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(part[k] shifted(l*(2*Rayon+1cm,0)),1.5*360/deno,0.25,0) withcolor ColDisque;
+ draw hachurage(part[k] shifted(l*(2*Rayon+Ecart,0)),1.5*360/deno,0.25,0) withcolor ColDisque;
else:
- fill part[k] shifted(l*(2*Rayon+1cm,0)) withcolor ColDisque;
+ fill part[k] shifted(l*(2*Rayon+Ecart,0)) withcolor ColDisque;
fi;
+ trace part[k] shifted(l*(2*Rayon+Ecart,0));
fi;
else:
RetiensPart:=RetiensPart+1;
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(part[k] shifted(l*(2*Rayon+1cm,0)),1.5*360/deno,0.25,0) withcolor ColDisque;
+ draw hachurage(part[k] shifted(l*(2*Rayon+Ecart,0)),1.5*360/deno,0.25,0) withcolor ColDisque;
else:
- fill part[k] shifted(l*(2*Rayon+1cm,0)) withcolor ColDisque;
+ fill part[k] shifted(l*(2*Rayon+Ecart,0)) withcolor ColDisque;
fi;
+ trace part[k] shifted(l*(2*Rayon+Ecart,0));
fi;
fi;
Reste:=Reste-1;
endfor;
- endfor;
+ endfor;
fi;
for k=0 upto deno-1:
if RetiensPart<nume:
@@ -985,30 +1182,34 @@
RetiensPart:=RetiensPart+1;
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(part[k] shifted(m*(2*Rayon+1cm,0)),1.5*360/deno,0.25,0) withcolor ColDisque;
+ draw hachurage(part[k] shifted(m*(2*Rayon+Ecart,0)),1.5*360/deno,0.25,0) withcolor ColDisque;
else:
- fill part[k] shifted(m*(2*Rayon+1cm,0)) withcolor ColDisque;
+ fill part[k] shifted(m*(2*Rayon+Ecart,0)) withcolor ColDisque;
fi;
+ trace part[k] shifted(m*(2*Rayon+Ecart,0));
fi;
else:
RetiensPart:=RetiensPart+1;
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(part[k] shifted(m*(2*Rayon+1cm,0)),1.5*360/deno,0.25,0) withcolor ColDisque;
+ draw hachurage(part[k] shifted(m*(2*Rayon+Ecart,0)),1.5*360/deno,0.25,0) withcolor ColDisque;
else:
- fill part[k] shifted(m*(2*Rayon+1cm,0)) withcolor ColDisque;
+ fill part[k] shifted(m*(2*Rayon+Ecart,0)) withcolor ColDisque;
fi;
+ trace part[k] shifted(m*(2*Rayon+Ecart,0));
fi;
fi;
- Reste:=Reste-1;
+ Reste:=Reste-1;
endfor;
fi;
drawoptions(withpen pencircle scaled Epaisseur);
for l=0 upto m:
- draw cc shifted(l*(2*Rayon+1cm,0));
- for k=0 upto (deno-1):
- draw segment(A,B[k]) shifted(l*(2*Rayon+1cm,0));
- endfor;
+ draw cc shifted(l*(2*Rayon+Ecart,0));
+ if SansPart=false:
+ for k=0 upto (deno-1):
+ draw segment(A,B[k]) shifted(l*(2*Rayon+Ecart,0));
+ endfor;
+ fi;
endfor;
drawoptions();
);
@@ -1017,61 +1218,71 @@
}%
\def\MPFractionDisqueCode{%
- Rayon=\useKV[ClesFraction]{Rayon};
- Epaisseur=\useKV[ClesFraction]{Epaisseur};
- color ColDisque;
- ColDisque=\useKV[ClesFraction]{Couleur};
- boolean Hachures,Reponse;
- Hachures=\useKV[ClesFraction]{Hachures};
- Reponse:=\useKV[ClesFraction]{Reponse};
- %
pair A,B[];
A=(0,0);
path cc;
cc=cercles(A,Rayon);
vardef FractionDisque(expr nume,deno)=
- for k=0 upto deno:
- B[k]=pointarc(cc,(360/deno)*k);
- endfor;
- m=(nume div deno);
- if (nume mod deno)=0:m:=m-1; fi;
- picture RetourFraction;
- RetourFraction=image(%
- if Reponse:
- if m>0:
- for l=0 upto (m-1):
- if Hachures:
- drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(cc shifted(l*(2*Rayon+1cm,0)),1.5*360/deno,0.25,0) withcolor ColDisque;
- else:
- fill cc shifted(l*(2*Rayon+1cm,0)) withcolor ColDisque;
- fi;
- endfor;
- fi;
- if Hachures:
- drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage((A--B0--arccercle(B[0],B[nume mod deno],A)--cycle) shifted(m*(2*Rayon+1cm,0)),1.5*360/deno,0.25,0) withcolor ColDisque;
- else:
- fill ((A--B0--arccercle(B[0],B[nume mod deno],A)--cycle) shifted (m*(2*Rayon+1cm,0))) withcolor ColDisque;
- fi;
- fi;
- drawoptions(withpen pencircle scaled Epaisseur);
- for l=0 upto m:
- draw cc shifted(l*(2*Rayon+1cm,0));
- for k=0 upto (deno-1):
- draw segment(A,B[k]) shifted(l*(2*Rayon+1cm,0));
- endfor;
- endfor;
- drawoptions();
- );
- RetourFraction
+ for k=0 upto deno:
+ B[k]=pointarc(cc,(360/deno)*k);
+ endfor;
+ m=(nume div deno);
+ if (nume mod deno)=0:m:=m-1; fi;
+ picture RetourFraction;
+ RetourFraction=image(%
+ if Reponse:
+ if m>0:
+ for l=0 upto (m-1):
+ if Hachures:
+ drawoptions(withpen pencircle scaled Epaisseur);
+ draw hachurage(cc shifted(l*(2*Rayon+Ecart,0)),1.5*360/deno,0.25,0) withcolor ColDisque;
+ else:
+ fill cc shifted(l*(2*Rayon+Ecart,0)) withcolor ColDisque;
+ fi;
+ endfor;
+ fi;
+ if Hachures:
+ drawoptions(withpen pencircle scaled Epaisseur);
+ draw hachurage((A--B0--arccercle(B[0],B[nume mod deno],A)--cycle) shifted(m*(2*Rayon+Ecart,0)),1.5*360/deno,0.25,0) withcolor ColDisque;
+ else:
+ fill ((A--B0--arccercle(B[0],B[nume mod deno],A)--cycle) shifted (m*(2*Rayon+Ecart,0))) withcolor ColDisque;
+ fi;
+ fi;
+ drawoptions(withpen pencircle scaled Epaisseur);
+ for l=0 upto m:
+ draw cc shifted(l*(2*Rayon+Ecart,0));
+ if SansPart:
+ if l=m:
+ draw (B0--A--B[nume mod deno]) shifted(l*(2*Rayon+Ecart,0));
+ fi;
+ elseif SansPartA:
+ if deno>1:
+ la:=1+floor(uniformdeviate(deno-2));
+ for k=0 upto (deno-1):
+ if k<>la:
+ draw segment(A,B[k]) shifted(l*(2*Rayon+Ecart,0));
+ fi;
+ endfor;
+ fi;
+ else:
+ if deno>1:
+ for k=0 upto (deno-1):
+ draw segment(A,B[k]) shifted(l*(2*Rayon+Ecart,0));
+ endfor;
+ fi;
+ fi;
+ endfor;
+ drawoptions();
+ );
+ RetourFraction
enddef;
}%
\NewDocumentCommand\MPFractionDisque{mm}{%
- \ifluatex
+ \ifluatex%
\mplibforcehmode%
- \begin{mplibcode}
+ \begin{mplibcode}%
+ \MPFractionBaseCode
boolean Alea;
Alea=\useKV[ClesFraction]{Aleatoire};
if Alea:
@@ -1080,23 +1291,15 @@
\MPFractionDisqueCode
fi;
trace FractionDisque(#1,#2);
- \end{mplibcode}
+ \end{mplibcode}%
\else%
- \begin{mpost}[mpsettings={\MPFractionDisqueCode}]
+ \begin{mpost}[mpsettings={\MPFractionBaseCode,\MPFractionDisqueCode}]%
trace FractionDisque(#1,#2);
- \end{mpost}
- \fi
+ \end{mpost}%
+ \fi%
}%
\def\MPFractionSegmentCodeAlea{%
- Longueur=\useKV[ClesFraction]{Longueur};
- color ColSegment;
- ColSegment=\useKV[ClesFraction]{Couleur};
- boolean Hachures,Reponse;
- Reponse=\useKV[ClesFraction]{Reponse};
- Hachures=\useKV[ClesFraction]{Hachures};
- Epaisseur=\useKV[ClesFraction]{Epaisseur};
- %
pair A,C,B[];
A=(0,0);
C-A=(Longueur,0);
@@ -1113,7 +1316,7 @@
m=nume div deno;
picture RetourFraction;
RetourFraction=image(
- Reste=((nume div deno)+1)*deno;
+ Reste=if (nume mod deno)=0:nume else:((nume div deno)+1)*deno fi;
RetiensPart=0;
% Reponse
if Reponse:
@@ -1127,10 +1330,10 @@
RetiensPart:=RetiensPart+1;
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(part[k] shifted(l*(Longueur+1cm,0)),120,0.2,0) withcolor ColSegment;
+ draw hachurage(part[k] shifted(l*(Longueur+Ecart,0)),120,0.2,0) withcolor ColSegment;
drawoptions();
else:
- draw (segment(B[k],B[k+1]) shifted(l*(Longueur+1cm,0))) withpen pencircle scaled 2 withcolor ColSegment;
+ draw (segment(B[k],B[k+1]) shifted(l*(Longueur+Ecart,0))) withpen pencircle scaled 2 withcolor ColSegment;
fi;
fi;
else:
@@ -1137,16 +1340,16 @@
RetiensPart:=RetiensPart+1;
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(part[k] shifted(l*(Longueur+1cm,0)),120,0.2,0) withcolor ColSegment;
+ draw hachurage(part[k] shifted(l*(Longueur+Ecart,0)),120,0.2,0) withcolor ColSegment;
drawoptions();
else:
- draw (segment(B[k],B[k+1]) shifted(l*(Longueur+1cm,0))) withpen pencircle scaled 2 withcolor ColSegment;
+ draw (segment(B[k],B[k+1]) shifted(l*(Longueur+Ecart,0))) withpen pencircle scaled 2 withcolor ColSegment;
fi;
fi;
fi;
Reste:=Reste-1;
endfor;
- endfor;
+ endfor;
fi;
for k=0 upto deno-1:
if RetiensPart<nume:
@@ -1156,10 +1359,10 @@
RetiensPart:=RetiensPart+1;
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(part[k] shifted(m*(Longueur+1cm,0)),120,0.2,0) withcolor ColSegment;
+ draw hachurage(part[k] shifted(m*(Longueur+Ecart,0)),120,0.2,0) withcolor ColSegment;
drawoptions();
else:
- draw (segment(B[k],B[k+1]) shifted(m*(Longueur+1cm,0))) withpen pencircle scaled 2 withcolor ColSegment;
+ draw (segment(B[k],B[k+1]) shifted(m*(Longueur+Ecart,0))) withpen pencircle scaled 2 withcolor ColSegment;
fi;
fi;
else:
@@ -1166,30 +1369,30 @@
RetiensPart:=RetiensPart+1;
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(part[k] shifted(m*(Longueur+1cm,0)),120,0.2,0) withcolor ColSegment;
+ draw hachurage(part[k] shifted(m*(Longueur+Ecart,0)),120,0.2,0) withcolor ColSegment;
else:
- draw (segment(B[k],B[k+1]) shifted(m*(Longueur+1cm,0))) withpen pencircle scaled 2 withcolor ColSegment;
+ draw (segment(B[k],B[k+1]) shifted(m*(Longueur+Ecart,0))) withpen pencircle scaled 2 withcolor ColSegment;
fi;
fi;
fi;
- Reste:=Reste-1;
+ Reste:=Reste-1;
endfor;
fi;
%fin Reponse
if Hachures:drawoptions(withpen pencircle scaled Epaisseur);fi;
- % draw (segment(B[0],B[nume mod deno]) shifted(m*(Longueur+1cm,0)));
+ % draw (segment(B[0],B[nume mod deno]) shifted(m*(Longueur+Ecart,0)));
for l=0 upto m:
- draw segment(A,C) shifted(l*(Longueur+1cm,0));
+ draw segment(A,C) shifted(l*(Longueur+Ecart,0));
endfor;
marque_p:="tiretv";
for l=0 upto m-1:
for k=0 upto deno:
- pointe(B[k] shifted(l*(Longueur+1cm,0)));
+ pointe(B[k] shifted(l*(Longueur+Ecart,0)));
endfor;
endfor;
if (nume mod deno)<>0:
for k=0 upto deno:
- pointe(B[k] shifted(m*(Longueur+1cm,0)));
+ pointe(B[k] shifted(m*(Longueur+Ecart,0)));
endfor;
fi;
);
@@ -1198,14 +1401,6 @@
}
\def\MPFractionSegmentCode{%
- Longueur=\useKV[ClesFraction]{Longueur};
- color ColSegment;
- ColSegment=\useKV[ClesFraction]{Couleur};
- boolean Hachures,Reponse;
- Reponse=\useKV[ClesFraction]{Reponse};
- Hachures=\useKV[ClesFraction]{Hachures};
- Epaisseur=\useKV[ClesFraction]{Epaisseur};
- %
pair A,C,B[];
A=(0,0);
C-A=(Longueur,0);
@@ -1222,13 +1417,13 @@
if Reponse:
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(polygone(B[0]+u*(0,-0.15),B[deno]+u*(0,-0.15),B[deno]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(l*(Longueur+1cm,0)),120,0.2,0) withcolor ColSegment;
+ draw hachurage(polygone(B[0]+u*(0,-0.15),B[deno]+u*(0,-0.15),B[deno]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(l*(Longueur+Ecart,0)),120,0.2,0) withcolor ColSegment;
drawoptions();
else:
- draw (segment(B[0],B[deno]) shifted(l*(Longueur+1cm,0))) withpen pencircle scaled 2 withcolor ColSegment;
+ draw (segment(B[0],B[deno]) shifted(l*(Longueur+Ecart,0))) withpen pencircle scaled 2 withcolor ColSegment;
fi;
fi;
- draw (segment(B[0],B[deno]) shifted(l*(Longueur+1cm,0)));
+ draw (segment(B[0],B[deno]) shifted(l*(Longueur+Ecart,0)));
endfor;
fi;
if (nume mod deno)<>0:
@@ -1235,29 +1430,53 @@
if Reponse:
if Hachures:
drawoptions(withpen pencircle scaled Epaisseur);
- draw hachurage(polygone(B[0]+u*(0,-0.15),B[nume mod deno]+u*(0,-0.15),B[nume mod deno]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(m*(Longueur+1cm,0)),120,0.2,0) withcolor ColSegment;
+ draw hachurage(polygone(B[0]+u*(0,-0.15),B[nume mod deno]+u*(0,-0.15),B[nume mod deno]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(m*(Longueur+Ecart,0)),120,0.2,0) withcolor ColSegment;
drawoptions();
else:
- draw (segment(B[0],B[nume mod deno]) shifted(m*(Longueur+1cm,0))) withpen pencircle scaled 2 withcolor ColSegment;
- draw segment(A,C) shifted(m*(Longueur+1cm,0));
+ draw (segment(B[0],B[nume mod deno]) shifted(m*(Longueur+Ecart,0))) withpen pencircle scaled 2 withcolor ColSegment;
+ draw segment(A,C) shifted(m*(Longueur+Ecart,0));
fi;
fi;
if Hachures:drawoptions(withpen pencircle scaled Epaisseur);fi;
- draw (segment(B[0],B[nume mod deno]) shifted(m*(Longueur+1cm,0)));
- draw segment(A,C) shifted(m*(Longueur+1cm,0));
+ draw (segment(B[0],B[nume mod deno]) shifted(m*(Longueur+Ecart,0)));
+ draw segment(A,C) shifted(m*(Longueur+Ecart,0));
%drawoptions();
fi;
if Hachures:drawoptions(withpen pencircle scaled Epaisseur);fi;
marque_p:="tiretv";
- for l=0 upto m-1:
- for k=0 upto deno:
- pointe(B[k] shifted(l*(Longueur+1cm,0)));
- endfor;
- endfor;
- if (nume mod deno)<>0:
- for k=0 upto deno:
- pointe(B[k] shifted(m*(Longueur+1cm,0)));
- endfor;
+ if SansPart:
+ for l=0 upto m:
+ pointe(A shifted(l*(Longueur+Ecart,0)));
+ pointe(C shifted(l*(Longueur+Ecart,0)));
+ endfor;
+ elseif SansPartA:
+ for l=0 upto m-1:
+ la:=1+floor(uniformdeviate(deno-2));
+ for k=0 upto deno:
+ if k<>la:
+ pointe(B[k] shifted(l*(Longueur+Ecart,0)));
+ fi;
+ endfor;
+ endfor;
+ if (nume mod deno)<>0:
+ la:=1+floor(uniformdeviate(deno-2));
+ for k=0 upto deno:
+ if k<>la:
+ pointe(B[k] shifted(m*(Longueur+Ecart,0)));
+ fi;
+ endfor;
+ fi;
+ else:
+ for l=0 upto m-1:
+ for k=0 upto deno:
+ pointe(B[k] shifted(l*(Longueur+Ecart,0)));
+ endfor;
+ endfor;
+ if (nume mod deno)<>0:
+ for k=0 upto deno:
+ pointe(B[k] shifted(m*(Longueur+Ecart,0)));
+ endfor;
+ fi;
fi;
);
RetourFraction
@@ -1265,9 +1484,10 @@
}%
\NewDocumentCommand\MPFractionSegment{mm}{%
- \ifluatex
- \mplibforcehmode
- \begin{mplibcode}
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \MPFractionBaseCode
boolean Alea;
Alea=\useKV[ClesFraction]{Aleatoire};
if Alea:
@@ -1276,11 +1496,11 @@
\MPFractionSegmentCode
fi;
trace FractionSegment(#1,#2);
- \end{mplibcode}
- \else
- \begin{mpost}[mpsettings={\MPFractionSegmentCode}]
+ \end{mplibcode}%
+ \else%
+ \begin{mpost}[mpsettings={\MPFractionSegmentCode}]%
trace FractionSegment(#1,#2);
- \end{mpost}
+ \end{mpost}%
\fi%
}%
@@ -1292,26 +1512,26 @@
\ifboolKV[ClesFraction]{Gradue}{%
\MPFractionSegmentGradue{\ListeFraction[1]}{\ListeFraction[2]}%
}{%
- \ifboolKV[ClesFraction]{Eprouvette}{%
- \MPFractionEprouvette{\ListeFraction[1]}{\ListeFraction[2]}%
- }{%
- \ifboolKV[ClesFraction]{Triangle}{%
- \MPFractionTriangle{\ListeFraction[1]}{\ListeFraction[2]}%
+ \ifboolKV[ClesFraction]{Eprouvette}{%
+ \MPFractionEprouvette{\ListeFraction[1]}{\ListeFraction[2]}%
}{%
- \ifboolKV[ClesFraction]{Regulier}{%
- \MPFractionRegulier{\ListeFraction[1]}{\ListeFraction[2]}%
+ \ifboolKV[ClesFraction]{Triangle}{%
+ \MPFractionTriangle{\ListeFraction[1]}{\ListeFraction[2]}%
}{%
- \ifboolKV[ClesFraction]{Segment}{%
- \MPFractionSegment{\ListeFraction[1]}{\ListeFraction[2]}%
+ \ifboolKV[ClesFraction]{Regulier}{%
+ \MPFractionRegulier{\ListeFraction[1]}{\ListeFraction[2]}%
}{%
- \ifboolKV[ClesFraction]{Rectangle}{%
- \MPFractionRectangle{\ListeFraction[1]}{\ListeFraction[2]}%
+ \ifboolKV[ClesFraction]{Segment}{%
+ \MPFractionSegment{\ListeFraction[1]}{\ListeFraction[2]}%
}{%
- \MPFractionDisque{\ListeFraction[1]}{\ListeFraction[2]}%
+ \ifboolKV[ClesFraction]{Rectangle}{%
+ \MPFractionRectangle{\ListeFraction[1]}{\ListeFraction[2]}%
+ }{%
+ \MPFractionDisque{\ListeFraction[1]}{\ListeFraction[2]}%
+ }%
}%
}%
}%
}%
}%
-}%
}%
\ No newline at end of file
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterTableur.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterTableur.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterTableur.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -110,10 +110,10 @@
\addtot at bs{\\\hline&}%
\collectcp at bodys
}{%
- \setlength{\PfCLongInter}{-40pt+\fpeval{\useKV[Tableur]{LargeurUn}}pt+\fpeval{(\useKV[Tableur]{Colonnes}-2)*\useKV[Tableur]{Largeur}}pt+\fpeval{2*\useKV[Tableur]{Colonnes}-6}\tabcolsep+\fpeval{\useKV[Tableur]{Colonnes}+2}\arrayrulewidth}%
+ \setlength{\PfCLongInter}{\fpeval{-60+\useKV[Tableur]{LargeurNombre}+\useKV[Tableur]{LargeurUn}+(\useKV[Tableur]{Colonnes}-2)*\useKV[Tableur]{Largeur}}pt+\fpeval{2*\useKV[Tableur]{Colonnes}-6}\tabcolsep+\fpeval{\useKV[Tableur]{Colonnes}+2}\arrayrulewidth}%
\ifboolKV[Tableur]{Bandeau}{%
\begin{NiceTabular}{p{\PfCTableurLargeur}p{10pt}p{50pt}p{\PfCLongInter}}%
- \Block[draw,l]{}{\useKV[Tableur]{Cellule}}&\Block[draw]{}{\scriptsize$\blacktriangledown$}&\Block{}{$f_x$\hfill$\sum$~\scriptsize$\blacktriangledown$\hfill$=$}&\Block[draw]{}{\useKV[Tableur]{Formule}\hfill\scriptsize$\blacktriangledown$}\\
+ \Block[l,hvlines]{}{\useKV[Tableur]{Cellule}}&\Block[draw]{}{\scriptsize$\blacktriangledown$}&\Block{}{$f_x$\hfill$\sum$~\scriptsize$\blacktriangledown$\hfill$=$}&\Block[draw]{}{\useKV[Tableur]{Formule}\hfill\scriptsize$\blacktriangledown$}\\
\CodeAfter
\ifboolKV[Tableur]{ApresBandeau}{%
\useKV[Tableur]{CodeAfterBandeau}%
@@ -134,7 +134,7 @@
\xintifboolexpr{\cntlin>\fpeval{\useKV[Tableur]{Ligne}} 'and' \cntlin<\fpeval{\useKV[Tableur]{Ligne}+\useKV[Tableur]{PasL}+1}}{\textcolor{white}{\fpeval{\cntlin+\Affichecntlin-1}}}{\fpeval{\cntlin+\Affichecntlin-1}}%
}{\fpeval{\cntlin+\Affichecntlin-1}}%
\fi}%
- wc{20pt}A*{\fpeval{\useKV[Tableur]{Colonnes}-1}}{B}}[hvlines]%,color-inside
+ wc{\PfCTableurLargeurZero}A*{\fpeval{\useKV[Tableur]{Colonnes}-1}}{B}}[hvlines]%,color-inside
\CodeBefore
% on colorie en gris toute la première ligne
\tikz\fill[gray!15](row-1-|col-1) rectangle (row-2-|last);%
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCSimplifierFraction.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCSimplifierFraction.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCSimplifierFraction.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -21,6 +21,15 @@
\fi}%
\makeatother
+\def\PfCSimplifiable#1#2{%
+ \ensuremath{%
+ \PGCD{#1}{#2}%
+ \ifnum\pgcd>1\relax
+ \text{ ou }\Simplification{#1}{#2}%
+ \fi
+ }%
+}%
+
\def\SSimplifie#1#2{%
% Simplification d'une \'ecriture #1/#2
\ensuremath{
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCSolides.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCSolides.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCSolides.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -5,7 +5,7 @@
\def\fileversionSolides{0.1b}%
\message{-- \filedateSolides\space v\fileversionSolides}%
%
-\setKVdefault[ClesSolides]{Nom=cube,Aretes,Sommets,Pointilles,Largeur=1.5,Hauteur=1,Profondeur=0.75,ListeSommets={A,B,C,D,E,F,G,H},Rho=1500,Phi=30,Theta=20,Distance=50,Code=false,Couleur=white,Anglex=0,Arete=1,RayonCone=1,HauteurCone=2,HauteurPrisme=2,SommetsPrisme=6,HauteurPyramide=2,SommetsPyramide=5,Reguliere=false,DecalageSommet={(0,0,0)},RayonCylindre=1,HauteurCylindre=2,RayonSphere=1,AutoLabel=true,Sections=false,CoefSection=0.3,Axes=false,PointsSection={M,N,O,P},RemplisSection=false,ObjetSection={0.5,E,H,0.25,F,G,G,B},Traces={},Section={},CouleurSection={}}%
+\setKVdefault[ClesSolides]{Nom=cube,Aretes,Sommets,Pointilles,Largeur=1.5,Hauteur=1,Profondeur=0.75,ListeSommets={A,B,C,D,E,F,G,H},Rho=1500,Phi=30,Theta=20,Distance=50,Code=false,Couleur=white,Anglex=0,Arete=1,RayonCone=1,HauteurCone=2,HauteurPrisme=2,SommetsPrisme=6,HauteurPyramide=2,RayonPyramide=1,SommetsPyramide=5,Reguliere=false,DecalageSommet={(0,0,0)},RayonCylindre=1,HauteurCylindre=2,RayonSphere=1,AutoLabel=true,Sections=false,CoefSection=0.3,Axes=false,PointsSection={M,N,O,P},RemplisSection=false,ObjetSection={0.5,E,H,0.25,F,G,G,B},Traces={},Section={},CouleurSection={}}%
\defKV[ClesSolides]{
Traces=\ifempty{#1}{}{\setKV[ClesSolides]{Code}},%
Section=\ifempty{#1}{}{\setKV[ClesSolides]{Sections}},%
@@ -219,7 +219,7 @@
outcolor:=PfCOutColor;
Ferme1:=true;
angx:=anglerotationx;
- Objetcylindre1("r="&decimal(rayoncylindre),"h="&decimal(hauteurcylindre));
+ Objetcylindre1("r=rayoncylindre","h=hauteurcylindre");
eclairage:=false;
% traits:=false;
% AffichageObjet1;
@@ -357,6 +357,7 @@
CoefSection=\useKV[ClesSolides]{CoefSection};
anglerotationx=\useKV[ClesSolides]{Anglex};
hauteurpyramide=\useKV[ClesSolides]{HauteurPyramide};
+ rayonpyramide=\useKV[ClesSolides]{RayonPyramide};
nombresommets=\useKV[ClesSolides]{SommetsPyramide};
color PfCOutColor,DecalageSommet;
PfCOutColor=\useKV[ClesSolides]{Couleur};
@@ -385,7 +386,7 @@
else:
repereangle:=(k-2)*ecartangle+(ecartangle*0.25+uniformdeviate(floor(ecartangle/2)));
fi;
- Sommet[k]:=(cosd(repereangle),-sind(repereangle),0);
+ Sommet[k]:=rayonpyramide*(cosd(repereangle),-sind(repereangle),0);
endfor;
Sommet[NbS+1]:=Sommet[2];
@@ -585,7 +586,7 @@
outcolor:=PfCOutColor;
Ferme1:=true;
angx:=anglerotationx;
- Objetcone1("r="&decimal(rayoncone),"h="&decimal(hauteurcone));
+ Objetcone1("r=rayoncone","h=hauteurcone");
traits:=false;
AffichageObjet1;
@@ -920,7 +921,7 @@
outcolor:=white;%PfCOutColor;
Ferme1:=true;
angx:=anglerotationx;
- Objetsphere1("R="&decimal(rayonsphere));
+ Objetsphere1("R=rayonsphere");
% traits:=false;
% AffichageObjet1;
color Sommet[],SommetN,SommetS,SommetB;
@@ -995,7 +996,7 @@
% Ferme1:=false;
creux:=true;
angx:=anglerotationx;
- Objetdemispherebasse1("R="&decimal(rayonsphere));
+ Objetdemispherebasse1("R=rayonsphere");
% traits:=false;
AffichageObjet1;
color Sommet[],SommetN,SommetS,SommetB;
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCStatistiques.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCStatistiques.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCStatistiques.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -2715,6 +2715,7 @@
\NewDocumentCommand\buildmoustacheMP{m}{%
\ifluatex%
+ \setbox1=\hbox{,}
\mplibforcehmode%
\begin{mplibcode}
pasx=\useKV[ClesStat]{Pasx};
@@ -2747,12 +2748,12 @@
if (k>1) and (k<5):
if Lecture=false:
trace segment((xpart(P[k]),0.5cm),(xpart(P[k]),0)) dashed evenly;
- label.top(TEX("\scriptsize\num{"&decimal(val[k])&"}"),(xpart(P[k]),1.5cm));
+ label.top(TEX("\rule[-\dp1]{0pt}{0pt}\scriptsize\num{"&decimal(val[k])&"}"),(xpart(P[k]),1.5cm));
fi;
else:
if Lecture=false:
trace segment(P[k],(xpart(P[k]),0)) dashed evenly;
- label.top(TEX("\scriptsize\num{"&decimal(val[k])&"}"),(xpart(P[k]),1.2cm));
+ label.top(TEX("\rule[-\dp1]{0pt}{0pt}\scriptsize\num{"&decimal(val[k])&"}"),(xpart(P[k]),1.2cm));
fi;
fi;
endfor;
@@ -2772,7 +2773,7 @@
R1=(u*(floor(val1/pasx)*pasx),0);
R2=(u*(ceiling(val5/pasx)*pasx),0);
%
- for k=0 upto 20:
+ for k=0 upto 20/PasGrilley:
draw (R1--R2) shifted (0,k*PasGrilley*1mm) withcolor 0.8white;
endfor;
k=0;
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCSystemeImage.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCSystemeImage.tex (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCSystemeImage.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -0,0 +1,57 @@
+%%%
+% Systèmes images
+%%%
+\def\filedateSystemeImage{2025/07/27}%
+\def\fileversionSystemeImage{0.1}%
+\message{-- \filedateSystemeImage\space v\fileversionSystemeImage}%
+%
+\setKVdefault[SystemeImage]{Images={A,B,C},Solutions=false,Solution={},Inconnues={A,B,C}}
+
+\makeatletter
+\NewDocumentCommand\SystemeImage{om}{%
+ \useKVdefault[SystemeImage]%
+ \setKV[SystemeImage]{#1}%
+ \ifemptyKV[SystemeImage]{Solution}{}{\setKV[SystemeImage]{Solutions}}%
+ \edef\PfM at PrepaImages{\useKV[SystemeImage]{Images}}%
+ \edef\PfM at PrepaInconnues{\useKV[SystemeImage]{Inconnues}}%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\PfM at ListeImages{\PfM at PrepaImages}%
+ \readlist*\PfM at ListeInconnues{\PfM at PrepaInconnues}%
+ \setsepchar{§}\ignoreemptyitems%
+ \readlist*\PfM at ListeEqua{#2}%
+ \reademptyitems%
+% Equa : $\showitems\PfM at ListeEqua[]$\par
+% Inconnues : \showitems\PfM at ListeInconnues[]\par
+% Images : \showitems\PfM at ListeImages[]\par
+ \ifboolKV[SystemeImage]{Solutions}{%
+ \edef\PfM at PrepaSolutions{\useKV[SystemeImage]{Solution}}%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\PfM at ListeSolutions{\PfM at PrepaSolutions}%
+ \reademptyitems%
+ \begin{align*}
+ \xintFor* ##1 in{\xintSeq{1}{\PfM at ListeEqualen}}\do{%
+ &\edef\PfM at Test{\PfM at ListeEqua[##1]}%
+ \xintFor* ##2 in{\xintSeq{1}{\PfM at ListeImageslen}}\do{%
+ \expandarg%
+ \edef\PfM at Titi{\PfM at ListeInconnues[##2]}%
+ \StrSubstitute{\PfM at Test}{\PfM at Titi}{\mathcolor{Evidence}{\PfM at ListeSolutions[##2]}}[\PfM at Test]%
+ }%
+ \PfM at Test\xintifboolexpr{##1==\PfM at ListeEqualen}{}{\\}
+ }%
+ \end{align*}
+ }{%
+ \begin{align*}
+ \xintFor* ##1 in{\xintSeq{1}{\PfM at ListeEqualen}}\do{%
+ &\edef\PfM at Test{\PfM at ListeEqua[##1]}%
+ \xintFor* ##2 in{\xintSeq{1}{\PfM at ListeImageslen}}\do{%
+ \expandarg%
+ \edef\PfM at Titi{\PfM at ListeInconnues[##2]}%
+ %
+ \StrSubstitute{\PfM at Test}{\PfM at Titi}{\raisebox{-0.25\height}{\text{\PfM at ListeImages[##2]}}}[\PfM at Test]%
+ }\PfM at Test\xintifboolexpr{##1==\PfM at ListeEqualen}{}{\\}
+ }%
+ \end{align*}
+ }%
+}%
+\makeatother
+%
\ No newline at end of file
Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCSystemeImage.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCTortueBase.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCTortueBase.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCTortueBase.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -190,8 +190,8 @@
\immediate\write\turtle at out{drawoptions(withcolor DarkGreen);label(TEX("\noexpand\useKV[Tortue]{Personnage}") rotated RetiensAngle[0] scaled 1.5,A[0]);}%
}{}%
\ifboolKV[Tortue]{Etapes}{%
- \immediate\write\turtle at out{drawoptions(withcolor DarkGreen);label(btex \noexpand\Large\noexpand\ding{40} etex rotated RetiensAngle[Total] scaled 1.5,A[Total]);}%
- }{\ifboolKV[Tortue]{TortueF}{\immediate\write\turtle at out{drawoptions(withcolor DarkGreen);label(btex \noexpand\Large\noexpand\ding{40} etex rotated RetiensAngle[k] scaled 1.5,A[k]);}}{}}%
+ \immediate\write\turtle at out{drawoptions(withcolor DarkGreen);label(TEX("\noexpand\useKV[Tortue]{Personnage}") rotated RetiensAngle[Total] scaled 1.5,A[Total]);}%
+ }{\ifboolKV[Tortue]{TortueF}{\immediate\write\turtle at out{drawoptions(withcolor DarkGreen);label(TEX("\noexpand\useKV[Tortue]{Personnage}") rotated RetiensAngle[k] scaled 1.5,A[k]);}}{}}%
\immediate\write\turtle at out{drawoptions();}%
\ifboolKV[Tortue]{Trace}{%
\immediate\write\turtle at out{\useKV[Tortue]{Traces}}%
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCUrneProba.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCUrneProba.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCUrneProba.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -13,7 +13,7 @@
\def\UpdatetoksUrneNombres#1\nil{\addtotok\tokUrneListeNombres{"#1",}}%
\def\UpdatetoksUrneColonnes#1\nil{\addtotok\tokUrneListeColonnes{"#1",}}%
-\setKVdefault[PfCUrne]{Couleurs=false,Nombres=false,Pas=4,Echelle=1,Repartition={1,2,3},Double=false,RepartitionC={1,2,3},RepartitionN={1,2,3},Roue=false,Rayon=3,Tableau=false,SansRemise=false,Solution=false,Codes=false,CouleurLigne=0.85white,CouleurColonne=0.85white,Different=false,RepartitionLigne={1,2,3},RepartitionColonne={1,2,3},Impression,Casino=false,Traces={},ListeCouleurs={},ListeNombres={},ListeColonne={},ListeLigne={}}%
+\setKVdefault[PfCUrne]{Couleurs=false,Nombres=false,Pas=4,Echelle=1,Repartition={1,2,3},Double=false,RepartitionC={1,2,3},RepartitionN={1,2,3},Roue=false,Rayon=3,Tableau=false,SansRemise=false,Solution=false,Codes=false,CouleurLigne=0.85white,CouleurColonne=0.85white,Different=false,RepartitionLigne={1,2,3},RepartitionColonne={1,2,3},Impression,Casino=false,Traces={},ListeCouleurs={},ListeNombres={},ListeColonne={},ListeLigne={},Orientation=false,CoefEcart=17}%
\defKV[PfCUrne]{%
Traces=\ifempty{#1}{}{\setKV[PfCUrne]{Codes}},%
ListeCouleurs=\ifempty{#1}{}{\setKV[PfCUrne]{Couleurs}\setsepchar{,}\ignoreemptyitems\readlist*\ListeCouleursAv{#1}\reademptyitems},
@@ -393,47 +393,49 @@
u:=\useKV[PfCUrne]{Echelle}*1cm;
numeric RetiensNum[];
vardef RecupRepartition(text t)=
- n:=0;
- for p_=t:
- RetiensNum[n]=p_;
- n:=n+1;
- endfor;
- totalboules=n;
+ n:=0;
+ for p_=t:
+ RetiensNum[n]=p_;
+ n:=n+1;
+ endfor;
+ totalboules=n;
enddef;
color Col[];
vardef RecuperationCouleurs(text t)=
- n:=0;
- for p_=t:
- n:=n+1;
- Col[n]=p_;
- endfor;
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ Col[n]=p_;
+ endfor;
enddef;
string Nombres[];
vardef RecuperationNombres(text t)=
- n:=0;
- for p_=t:
- n:=n+1;
- Nombres[n]=p_;
- endfor;
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ Nombres[n]=p_;
+ endfor;
enddef;
- numeric Pas,Rayon;
+ numeric Pas,Rayon,CoefEcart;
+ CoefEcart=\useKV[PfCUrne]{CoefEcart};
Pas=\useKV[PfCUrne]{Pas};
Rayon=\useKV[PfCUrne]{Rayon};
- boolean Couleurs, Nombres, Roue;
+ boolean Couleurs, Nombres, Roue, Orientation;
Couleurs=\useKV[PfCUrne]{Couleurs};
Nombres=\useKV[PfCUrne]{Nombres};
Roue=\useKV[PfCUrne]{Roue};
+ Orientation=\useKV[PfCUrne]{Orientation};
RecupRepartition(#3);
if Couleurs:
- RecuperationCouleurs(#1);
+ RecuperationCouleurs(#1);
fi;
if Nombres:
- RecuperationNombres(#2);
+ RecuperationNombres(#2);
fi;
pair O;
@@ -440,71 +442,75 @@
pair A[],B[];
if Roue:
- O=(0,0);
- path cc;
- cc=cercles(O,Rayon*u);
- angd=180/totalboules;
- angr=360/totalboules;
- for k=1 upto totalboules:
- A[k]=17/20[O,pointarc(cc,angd+(k-1)*angr)];
- endfor;
- drawarrow rotation((O+u*(0,1.35*Rayon))--(O+u*(0,1.1*Rayon)),O,angd);
- % trace cc;
- B[0]=pointarc(cc,0);
- for k=1 upto totalboules:
- B[k]=pointarc(cc,k*angr);
- if Couleurs:
- fill O--arccercle(B[k-1],B[k],O)--cycle withcolor if unknown Col[RetiensNum[k-1]]:white else: Col[RetiensNum[k-1]] fi;
- else:
- label(TEX(Nombres[RetiensNum[k-1]]),A[k]);
- fi;
- endfor;
- trace cc;
- for k=1 upto totalboules:
- trace O--B[k];
- endfor;
+ O=(0,0);
+ path cc;
+ cc=cercles(O,Rayon*u);
+ angd=180/totalboules;
+ angr=360/totalboules;
+ for k=1 upto totalboules:
+ A[k]=(CoefEcart/20)[O,pointarc(cc,angd+(k-1)*angr)];
+ endfor;
+ drawarrow rotation((O+u*(0,1.35*Rayon))--(O+u*(0,1.1*Rayon)),O,angd);
+ % trace cc;
+ B[0]=pointarc(cc,0);
+ for k=1 upto totalboules:
+ B[k]=pointarc(cc,k*angr);
+ if Couleurs:
+ fill O--arccercle(B[k-1],B[k],O)--cycle withcolor if unknown Col[RetiensNum[k-1]]:white else: Col[RetiensNum[k-1]] fi;
+ else:
+ if Orientation:
+ label(TEX(Nombres[RetiensNum[k-1]]) rotated angle(A[k]-O),iso(O,A[k]));
+ else:
+ label(TEX(Nombres[RetiensNum[k-1]]),A[k]);
+ fi;
+ fi;
+ endfor;
+ trace cc;
+ for k=1 upto totalboules:
+ trace O--B[k];
+ endfor;
else:
- for k=0 upto (totalboules div Pas)-1:
- for l=0 upto Pas-1:
- rang:=k*Pas+l;
- A[rang]=u*(0.5,0.5)+u*(l,k);
- if Couleurs:
- fill cercles(A[rang],0.5u) withcolor if unknown Col[RetiensNum[rang]]:white else: Col[RetiensNum[rang]] fi;
- else:
- label(TEX(Nombres[RetiensNum[rang]]),A[rang]);
+ for k=0 upto (totalboules div Pas)-1:
+ for l=0 upto Pas-1:
+ rang:=k*Pas+l;
+ A[rang]=u*(0.5,0.5)+u*(l,k);
+ if Couleurs:
+ fill cercles(A[rang],0.5u) withcolor if unknown Col[RetiensNum[rang]]:white else: Col[RetiensNum[rang]] fi;
+ else:
+ label(TEX(Nombres[RetiensNum[rang]]),A[rang]);
+ fi;
+ % trace cercles(A[k*Pas+l],0.5u);
+ endfor;
+ endfor;
+ for k=0 upto (totalboules mod Pas)-1:
+ rang:=(totalboules div Pas)*Pas+k;
+ A[rang]=u*(0.5,0.5)+u*(k+0.5,totalboules div Pas-1+cosd(30));
+ if Couleurs:
+ fill cercles(A[rang],0.5u) withcolor if unknown Col[RetiensNum[rang]]:white else: Col[RetiensNum[rang]] fi;
+ else:
+ label(TEX(Nombres[RetiensNum[rang]]),A[rang]);
+ fi;
+ % trace cercles(A[(totalboules div Pas)*Pas+k],0.5u);
+ endfor;
+ %
+ for k=0 upto (totalboules div Pas)-1:
+ for l=0 upto Pas-1:
+ rang:=k*Pas+l;
+ trace cercles(A[rang],0.5u);
+ endfor;
+ endfor;
+ for k=0 upto (totalboules mod Pas)-1:
+ rang:=(totalboules div Pas)*Pas+k;
+ trace cercles(A[rang],0.5u);
+ endfor;
+ %
+ drawoptions(withpen pencircle scaled 1.2);
+ if totalboules<Pas:
+ trace u*(0,(totalboules div Pas)+1.15)--u*(0,0-(1-cosd(30)))--u*(Pas,0-(1-cosd(30)))--u*(Pas,(totalboules div Pas)+1.15);
+ else:
+ trace u*(0,(totalboules div Pas)+1.15)--u*(0,0)--u*(Pas,0)--u*(Pas,(totalboules div Pas)+1.15);
+ fi;
fi;
- %trace cercles(A[k*Pas+l],0.5u);
- endfor;
- endfor;
- for k=0 upto (totalboules mod Pas)-1:
- rang:=(totalboules div Pas)*Pas+k;
- A[rang]=u*(0.5,0.5)+u*(k+0.5,totalboules div Pas-1+cosd(30));
- if Couleurs:
- fill cercles(A[rang],0.5u) withcolor if unknown Col[RetiensNum[rang]]:white else: Col[RetiensNum[rang]] fi;
- else:
- label(TEX(Nombres[RetiensNum[rang]]),A[rang]);
- fi;
- %trace cercles(A[(totalboules div Pas)*Pas+k],0.5u);
- endfor;
- %
- for k=0 upto (totalboules div Pas)-1:
- for l=0 upto Pas-1:
- rang:=k*Pas+l;
- trace cercles(A[rang],0.5u);
- endfor;
- endfor;
- for k=0 upto (totalboules mod Pas)-1:
- rang:=(totalboules div Pas)*Pas+k;
- trace cercles(A[rang],0.5u);
- endfor;
- %
- drawoptions(withpen pencircle scaled 1.2);
- if totalboules<Pas:
- trace u*(0,(totalboules div Pas)+1.15)--u*(0,0-(1-cosd(30)))--u*(Pas,0-(1-cosd(30)))--u*(Pas,(totalboules div Pas)+1.15);
- else:
- trace u*(0,(totalboules div Pas)+1.15)--u*(0,0)--u*(Pas,0)--u*(Pas,(totalboules div Pas)+1.15);
- fi;
- fi;
\end{mplibcode}
\else
\begin{mpost}[mpsettings={u:=\useKV[PfCUrne]{Echelle}*1cm;numeric Pas;Pas=\useKV[PfCUrne]{Pas}; boolean Couleurs, Nombres; Couleurs=\useKV[PfCUrne]{Couleurs}; Nombres=\useKV[PfCUrne]{Nombres};}]
@@ -818,26 +824,27 @@
}{%
\ifboolKV[PfCUrne]{Tableau}{%
\ifboolKV[PfCUrne]{Different}{%
- \xdef\PfCFooRepartitionC{\useKV[PfCUrne]{RepartitionColonne}}%
- \xdef\PfCFooRepartitionL{\useKV[PfCUrne]{RepartitionLigne}}%
+ \edef\PfCFooRepartitionC{\useKV[PfCUrne]{RepartitionColonne}}%
+ \edef\PfCFooRepartitionL{\useKV[PfCUrne]{RepartitionLigne}}%
\setsepchar{,}\ignoreemptyitems%
\readlist*\ListeRepartitionCAv{\PfCFooRepartitionC}%
\readlist*\ListeRepartitionLAv{\PfCFooRepartitionL}%
+ \reademptyitems%
% Repartition : \showitems\ListeRepartitionAv[]%
- \xdef\PfCFooListeRepartitionC{}%
- \xdef\PfCFooListeRepartitionL{}%
- \xdef\PfCTotalC{0}%
- \xdef\PfCTotalL{0}%
+ \edef\PfCFooListeRepartitionC{}%
+ \edef\PfCFooListeRepartitionL{}%
+ \edef\PfCTotalC{0}%
+ \edef\PfCTotalL{0}%
\xintFor* ##1 in{\xintSeq{1}{\ListeRepartitionCAvlen}}\do{%
\xintFor* ##2 in{\xintSeq{1}{\ListeRepartitionCAv[##1]}}\do{%
- \xdef\PfCFooListeRepartitionC{\PfCFooListeRepartitionC,##1}%
- \xdef\PfCTotalC{\fpeval{\PfCTotalC+1}}%
+ \edef\PfCFooListeRepartitionC{\PfCFooListeRepartitionC,##1}%
+ \edef\PfCTotalC{\fpeval{\PfCTotalC+1}}%
}%
}%
\xintFor* ##1 in{\xintSeq{1}{\ListeRepartitionLAvlen}}\do{%
\xintFor* ##2 in{\xintSeq{1}{\ListeRepartitionLAv[##1]}}\do{%
- \xdef\PfCFooListeRepartitionL{\PfCFooListeRepartitionL,##1}%
- \xdef\PfCTotalL{\fpeval{\PfCTotalL+1}}%
+ \edef\PfCFooListeRepartitionL{\PfCFooListeRepartitionL,##1}%
+ \edef\PfCTotalL{\fpeval{\PfCTotalL+1}}%
}%
}%
\foreachitem\compteur\in\ListeCouleursAv{\expandafter\UpdatetoksUrneColonnes\compteur\nil}%
@@ -844,15 +851,16 @@
\foreachitem\compteur\in\ListeNombresAv{\expandafter\UpdatetoksUrneNombres\compteur\nil}%
\BuildTableauDoubleEntreeDifferent{\the\tokUrneListeColonnes}{\the\tokUrneListeNombres}{\PfCFooListeRepartitionC}{\PfCFooListeRepartitionL}%
}{%
- \xdef\PfCFooRepartition{\useKV[PfCUrne]{Repartition}}%
+ \edef\PfCFooRepartition{\useKV[PfCUrne]{Repartition}}%
\setsepchar{,}\ignoreemptyitems%
\readlist*\ListeRepartitionAv{\PfCFooRepartition}%
- \xdef\PfCFooListeRepartition{}%
- \xdef\PfCTotal{0}%
+ \reademptyitems%
+ \edef\PfCFooListeRepartition{}%
+ \edef\PfCTotal{0}%
\xintFor* ##1 in{\xintSeq{1}{\ListeRepartitionAvlen}}\do{%
\xintFor* ##2 in{\xintSeq{1}{\ListeRepartitionAv[##1]}}\do{%
- \xdef\PfCFooListeRepartition{\PfCFooListeRepartition,##1}%
- \xdef\PfCTotal{\fpeval{\PfCTotal+1}}%
+ \edef\PfCFooListeRepartition{\PfCFooListeRepartition,##1}%
+ \edef\PfCTotal{\fpeval{\PfCTotal+1}}%
}%
}%
\ifboolKV[PfCUrne]{Couleurs}{%
@@ -867,53 +875,55 @@
}%
}{%
\ifboolKV[PfCUrne]{Double}{%
- \xdef\PfCFooRepartitionC{\useKV[PfCUrne]{RepartitionC}}%
- \xdef\PfCFooRepartitionN{\useKV[PfCUrne]{RepartitionN}}%
+ \edef\PfCFooRepartitionC{\useKV[PfCUrne]{RepartitionC}}%
+ \edef\PfCFooRepartitionN{\useKV[PfCUrne]{RepartitionN}}%
\setsepchar{,}\ignoreemptyitems%
\readlist*\ListeRepartitionCAv{\PfCFooRepartitionC}%
\readlist*\ListeRepartitionNAv{\PfCFooRepartitionN}%
% Repartition : \showitems\ListeRepartitionAv[]%
- \xdef\PfCFooListeRepartitionC{}%
- \xdef\PfCFooListeRepartitionN{}%
- \xdef\PfCTotalC{0}%
- \xdef\PfCTotalN{0}%
+ \reademptyitems%
+ \edef\PfCFooListeRepartitionC{}%
+ \edef\PfCFooListeRepartitionN{}%
+ \edef\PfCTotalC{0}%
+ \edef\PfCTotalN{0}%
\xintFor* ##1 in{\xintSeq{1}{\ListeRepartitionCAvlen}}\do{%
\xintFor* ##2 in{\xintSeq{1}{\ListeRepartitionCAv[##1]}}\do{%
- \xdef\PfCFooListeRepartitionC{\PfCFooListeRepartitionC,##1}%
- \xdef\PfCTotalC{\fpeval{\PfCTotalC+1}}%
+ \edef\PfCFooListeRepartitionC{\PfCFooListeRepartitionC,##1}%
+ \edef\PfCTotalC{\fpeval{\PfCTotalC+1}}%
}%
}%
\xintFor* ##1 in{\xintSeq{1}{\ListeRepartitionNAvlen}}\do{%
\xintFor* ##2 in{\xintSeq{1}{\ListeRepartitionNAv[##1]}}\do{%
- \xdef\PfCFooListeRepartitionN{\PfCFooListeRepartitionN,##1}%
- \xdef\PfCTotalN{\fpeval{\PfCTotalN+1}}%
+ \edef\PfCFooListeRepartitionN{\PfCFooListeRepartitionN,##1}%
+ \edef\PfCTotalN{\fpeval{\PfCTotalN+1}}%
}%
}%
\MelangeListe{\PfCFooListeRepartitionC}{\PfCTotalC}%
- \xdef\ListeRepartitionCouleurs{\faa}%
+ \edef\ListeRepartitionCouleurs{\faa}%
\foreachitem\compteur\in\ListeCouleursAv{\expandafter\UpdatetoksUrneCouleurs\compteur\nil}%
\MelangeListe{\PfCFooListeRepartitionN}{\PfCTotalN}%
- \xdef\ListeRepartitionNombres{\faa}%
+ \edef\ListeRepartitionNombres{\faa}%
\foreachitem\compteur\in\ListeNombresAv{\expandafter\UpdatetoksUrneNombres\compteur\nil}%
\BuildUrneDouble{\the\tokUrneListeCouleurs}{\the\tokUrneListeNombres}{\ListeRepartitionCouleurs}{\ListeRepartitionNombres}%
}{%
- \xdef\PfCFooRepartition{\useKV[PfCUrne]{Repartition}}%
+ \edef\PfCFooRepartition{\useKV[PfCUrne]{Repartition}}%
\setsepchar{,}\ignoreemptyitems%
\readlist*\ListeRepartitionAv{\PfCFooRepartition}%
% Repartition : \showitems\ListeRepartitionAv[]%
- \xdef\PfCFooListeRepartition{}%
- \xdef\PfCTotal{0}%
+ \reademptyitems%
+ \edef\PfCFooListeRepartition{}%
+ \edef\PfCTotal{0}%
\xintFor* ##1 in{\xintSeq{1}{\ListeRepartitionAvlen}}\do{%
\xintFor* ##2 in{\xintSeq{1}{\ListeRepartitionAv[##1]}}\do{%
- \xdef\PfCFooListeRepartition{\PfCFooListeRepartition,##1}%
- \xdef\PfCTotal{\fpeval{\PfCTotal+1}}%
+ \edef\PfCFooListeRepartition{\PfCFooListeRepartition,##1}%
+ \edef\PfCTotal{\fpeval{\PfCTotal+1}}%
}%
}%
\ifboolKV[PfCUrne]{Couleurs}{%
- \xdef\ListeAvantCouleurs{\useKV[PfCUrne]{ListeCouleurs}}%
+ \edef\ListeAvantCouleurs{\useKV[PfCUrne]{ListeCouleurs}}%
% Couleurs = \ListeAvantCouleurs
\MelangeListe{\PfCFooListeRepartition}{\PfCTotal}%
- \xdef\ListeRepartitionCouleurs{\faa}%
+ \edef\ListeRepartitionCouleurs{\faa}%
% \foreachitem\compteur\in\ListeCouleursAv{\expandafter\UpdatetoksUrneCouleurs\compteur\nil}%
% Couleurs :\\
% La répartition est : \ListeRepartitionCouleurs\\
@@ -923,11 +933,11 @@
}{%
\ifboolKV[PfCUrne]{Nombres}{%
\MelangeListe{\PfCFooListeRepartition}{\PfCTotal}%
- \xdef\ListeRepartitionNombres{\faa}%
+ \edef\ListeRepartitionNombres{\faa}%
\foreachitem\compteur\in\ListeNombresAv{\expandafter\UpdatetoksUrneNombres\compteur\nil}%
- % Nombres :\\
- % La répartition est : \ListeRepartitionNombres\\
- % Les nombres sont : \the\tokUrneListeNombres.\\
+% Nombres :\\
+% La répartition est : \ListeRepartitionNombres\\
+% Les nombres sont : \the\tokUrneListeNombres.\\
\BuildUrne{}{\the\tokUrneListeNombres}{\ListeRepartitionNombres}%
}{}%
}%
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCVueCubes.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCVueCubes.tex 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCVueCubes.tex 2025-08-27 20:13:06 UTC (rev 76163)
@@ -5,7 +5,7 @@
\def\fileversionVueCubes{0.1c}%
\message{-- \filedateVueCubes\space v\fileversionVueCubes}%
%
-\setKVdefault[VueCubes]{Solution=false,Hauteur=5,Profondeur=4,Largeur=3,Angle=60,Nom=Ex1,Trou=false,Echelle=0.25,CouleurCube=LightSteelBlue,CouleurFleche=LightGray,Face=false,Creation=false,Grilles=false,Seul=false,Perso=false,EclateX=0,EclateZ=0,EclateY=0,TroisCouleur=false,TroisCouleurs={},Colores=false,ListeCouleurs={},Theta=20,Codes=false,Traces={},Visualisation=false}
+\setKVdefault[VueCubes]{Solution=false,Hauteur=5,Profondeur=4,Largeur=3,Angle=60,Nom=Ex1,Trou=false,Echelle=0.25,CouleurCube=LightSteelBlue,CouleurFleche=LightGray,Face=false,Creation=false,Grilles=false,Seul=false,Perso=false,EclateX=0,EclateZ=0,EclateY=0,TroisCouleur=false,TroisCouleurs={},Colores=false,ListeCouleurs={},Theta=20,Codes=false,Traces={},Visualisation=false,Ecart=\qquad}
\defKV[VueCubes]{%
TroisCouleurs=\ifempty{#1}{}{\setKV[VueCubes]{TroisCouleur}\setsepchar{,}\ignoreemptyitems\readlist*\ListeCouleursVueCubes{#1}},%
ListeCouleurs=\ifempty{#1}{}{\setKV[VueCubes]{Colores}\setsepchar{,}\ignoreemptyitems\readlist*\ListeCouleursVueCubes{#1}},%
@@ -17,7 +17,7 @@
\def\UpdatetoksEmpilementPerso#1\nil{\addtotok\toklisteVueCube{"#1",}}%
\NewDocumentCommand\VueCubes{o m}{%
- \newtoks\toklistecouleur\toklistecouleur{}
+ \newtoks\toklistecouleur\toklistecouleur{}%
\useKVdefault[VueCubes]%
\setKV[VueCubes]{#1}%
\toklisteVueCube{}%
@@ -61,76 +61,77 @@
\NewDocumentCommand\BuildMPEmpilementPerso{mmmm}{%
\ifluatex%
\mplibforcehmode%
- \begin{mplibcode}
+ \begin{mplibcode}%
nbcouches=#2;
nblignes:=#3;
-
+ %
input PfCSolid;
-
+ %
boolean TroisCouleur;
TroisCouleur=\useKV[VueCubes]{TroisCouleur};
-
+ %
intensite:=1.5;
-
+ %
Ferme[0]:=false;
outcolor:=\useKV[VueCubes]{CouleurCube};%
incolor:=white;
nb:=1;subh:=1;
creux:=true;
-
+ %
Phi := \useKV[VueCubes]{Angle};
+ Theta := \useKV[VueCubes]{Theta};
Echelle:=\useKV[VueCubes]{Echelle};
EclateX:=\useKV[VueCubes]{EclateX};
EclateY:=\useKV[VueCubes]{EclateY};
EclateZ:=\useKV[VueCubes]{EclateZ};
-
+ %
string LesSymboles[];
string LesLignes[][];
-
+ %
TotalObj:=0;
-
+ %
vardef CreationSolide(text t)=
- n:=0;
- for p_=t:
- n:=n+1;
- LesSymboles[n]=p_;
- endfor;
- for l=nbcouches downto 1:
- for k=nblignes downto 1:
- LesLignes[l][k]=LesSymboles[(nbcouches-l)*nblignes+(nblignes-k+1)];
- endfor;
- endfor;
- for l=nbcouches downto 1:
- for k=nblignes downto 1:
- for m=0 upto (length(LesLignes[l][k])-1):
- if (substring((m,m+1)) of LesLignes[l][k])="x":
- TotalObj:=incr TotalObj;
- TR:=(Echelle*(nblignes-k)+Echelle*(nblignes-k)*EclateX,Echelle*(m+m*EclateY),Echelle*l-Echelle*(nbcouches-l)*EclateZ);
- ObjetDeplacement[TotalObj](0);
- fi;
- endfor;
- endfor;
- endfor;
+ n:=0;
+ for pk=t:
+ n:=n+1;
+ LesSymboles[n]=pk;
+ endfor;
+ for l=nbcouches downto 1:
+ for k=nblignes downto 1:
+ LesLignes[l][k]=LesSymboles[(nbcouches-l)*nblignes+(nblignes-k+1)];
+ endfor;
+ endfor;
+ for l=nbcouches downto 1:
+ for k=nblignes downto 1:
+ for m=0 upto (length(LesLignes[l][k])-1):
+ if (substring((m,m+1)) of LesLignes[l][k])="x":
+ TotalObj:=incr TotalObj;
+ TR:=(Echelle*(nblignes-k)+Echelle*(nblignes-k)*EclateX,Echelle*(m+m*EclateY),Echelle*l-Echelle*(nbcouches-l)*EclateZ);
+ ObjetDeplacement[TotalObj](0);
+ fi;
+ endfor;
+ endfor;
+ endfor;
enddef;
-
- Initialisation(2500,Phi,20,50);
- Objetcube0("a="&decimal(Echelle));
-
+ %
+ Initialisation(2500,Phi,Theta,50);
+ Objetcube0("a=Echelle");%&decimal(Echelle));
+ %
CreationSolide(#1);
nbobj:=TotalObj;
if TroisCouleur:
- color retienscoul[];
- n:=0;
- for p_=#4:
- n:=n+1;
- retienscoul[n]=p_;
- endfor;
- coulfaceX:=retienscoul[1];
- coulfaceY:=retienscoul[2];
- coulfaceZ:=retienscoul[3];
- DessineFusionTroisCouleurs;
+ color retienscoul[];
+ n:=0;
+ for pk=#4:
+ n:=n+1;
+ retienscoul[n]=pk;
+ endfor;
+ coulfaceX:=retienscoul[1];
+ coulfaceY:=retienscoul[2];
+ coulfaceZ:=retienscoul[3];
+ DessineFusionTroisCouleurs;
else:
- DessineFusion;
+ DessineFusion;
fi;
\end{mplibcode}%
\fi%
@@ -137,8 +138,8 @@
}%
\NewDocumentCommand\BuildVueCubes{m m m m}{%
- \ifluatex
- \mplibforcehmode
+ \ifluatex%
+ \mplibforcehmode%
\xdef\PfCVueCubeNom{\useKV[VueCubes]{Nom}}%
\begin{mplibcode}[\PfCVueCubeNom]
string NomRetenu;
@@ -161,8 +162,12 @@
Largeur:=\useKV[VueCubes]{Largeur};
Hauteur:=\useKV[VueCubes]{Hauteur};
Phi:=#1;
+ Theta:=\useKV[VueCubes]{Theta};
Echelle:=\useKV[VueCubes]{Echelle};
-
+ EclateX:=\useKV[VueCubes]{EclateX};
+ EclateY:=\useKV[VueCubes]{EclateY};
+ EclateZ:=\useKV[VueCubes]{EclateZ};
+
color CouleurFleche;
CouleurFleche:=\useKV[VueCubes]{CouleurFleche};
@@ -182,7 +187,8 @@
hauteurtour[m+1][k+1]:=p_;
for l=1 upto hauteurtour[m+1][k+1]:
TotalObj:=incr TotalObj;
- TR:=(-Echelle*k,(m+1)*Echelle,Echelle*l-Echelle/2);
+ % TR:=(-Echelle*k,(m+1)*Echelle,Echelle*l-Echelle/2);
+ TR:=(Echelle*(Largeur-k)+Echelle*(Largeur-k)*EclateX,Echelle*(m+m*EclateY),Echelle*l-Echelle*(Hauteur-l)*EclateZ);
ObjetDeplacement[TotalObj](0);
endfor;
PfCnbcubes:=incr PfCnbcubes;
@@ -189,7 +195,7 @@
endfor;
enddef;
- Initialisation(2500,Phi,20,50);
+ Initialisation(2500,Phi,Theta,50);
Objetcube0("a="&decimal(Echelle));
if Creation:
@@ -295,10 +301,10 @@
draw Projette((k/Hauteur)[Adg0,Adg3])--Projette((k/Hauteur)[Adg1,Adg2]);
endfor;
fi;
- \end{mplibcode}
+ \end{mplibcode}%
\ifboolKV[VueCubes]{Seul}{}{%
\ifboolKV[VueCubes]{Grilles}{}{%
-% \hspace*{1.5cm}
+ \useKV[VueCubes]{Ecart}%
\begin{mplibcode}[\PfCVueCubeNom]
input PfCSolid;
@@ -366,10 +372,10 @@
else:
DessineFusion;
fi;
- \end{mplibcode}
+ \end{mplibcode}%
}%
}%
- \fi
+ \fi%
}%
\NewDocumentCommand\BuildVueCubesSolution{}{%
@@ -495,9 +501,9 @@
}%
\NewDocumentCommand\BuildMPEmpilementPersoColore{mmmm}{%
- \ifluatex
- \mplibforcehmode
- \begin{mplibcode}
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
nbcouches=#2;
nblignes:=#3;
%
@@ -588,8 +594,88 @@
label.lft(TEX("E"),Projette(Echelle*((nblignes-1)/2,-3.5,((nbcouches+1)/2))));
fi;
- if Codes:
- \useKV[VueCubes]{Traces};
+ \ifemptyKV[VueCubes]{Traces}{}{\useKV[VueCubes]{Traces}};
+% if Codes:
+% \useKV[VueCubes]{Traces};
+% fi;
+ \end{mplibcode}%
+ \fi%
+}%
+
+\NewDocumentCommand\VueCubesSimple{mmmm}{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ nbcouches=#2;
+ nblignes:=#3;
+ %
+ input PfCSolid;
+ %
+ boolean TroisCouleur;
+ TroisCouleur=\useKV[VueCubes]{TroisCouleur};
+ %
+ intensite:=1.5;
+ %
+ Ferme[0]:=false;
+ outcolor:=\useKV[VueCubes]{CouleurCube};%
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=true;
+ %
+ Phi := \useKV[VueCubes]{Angle};
+ Theta := \useKV[VueCubes]{Theta};
+ Echelle:=\useKV[VueCubes]{Echelle};
+ EclateX:=\useKV[VueCubes]{EclateX};
+ EclateY:=\useKV[VueCubes]{EclateY};
+ EclateZ:=\useKV[VueCubes]{EclateZ};
+ %
+ string LesSymboles[];
+ string LesLignes[][];
+ %
+ TotalObj:=0;
+ %
+ vardef CreationSolide(text t)=
+ n:=0;
+ for pk=t:
+ n:=n+1;
+ LesSymboles[n]=pk;
+ endfor;
+ for l=nbcouches downto 1:
+ for k=nblignes downto 1:
+ LesLignes[l][k]=LesSymboles[(nbcouches-l)*nblignes+(nblignes-k+1)];
+ endfor;
+ endfor;
+ for l=nbcouches downto 1:
+ for k=nblignes downto 1:
+ for m=0 upto (length(LesLignes[l][k])-1):
+ if (substring((m,m+1)) of LesLignes[l][k])="x":
+ TotalObj:=incr TotalObj;
+ TR:=(Echelle*(nblignes-k)+Echelle*(nblignes-k)*EclateX,Echelle*(m+m*EclateY),Echelle*l-Echelle*(nbcouches-l)*EclateZ);
+ ObjetDeplacement[TotalObj](0);
+ fi;
+ endfor;
+ endfor;
+ endfor;
+ enddef;
+ %
+ Initialisation(2500,Phi,Theta,50);
+ Objetcube0("a=Echelle");%&decimal(Echelle));
+ %
+ CreationSolide(#1);
+ nbobj:=TotalObj;
+ if TroisCouleur:
+ color retienscoul[];
+ n:=0;
+ for pk=#4:
+ n:=n+1;
+ retienscoul[n]=pk;
+ endfor;
+ coulfaceX:=retienscoul[1];
+ coulfaceY:=retienscoul[2];
+ coulfaceZ:=retienscoul[3];
+ DessineFusionTroisCouleurs;
+ else:
+ DessineFusion;
fi;
\end{mplibcode}%
\fi%
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty 2025-08-27 20:12:29 UTC (rev 76162)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty 2025-08-27 20:13:06 UTC (rev 76163)
@@ -2,9 +2,9 @@
% licence : Released under the LaTeX Project Public License v1.3c
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}%
-\def\filedate{2025/06/12}%
+\def\filedate{2025/08/26}%
\let\PfCfiledate\filedate%
-\def\fileversion{0.99-A-l}%
+\def\fileversion{0.99-A-m}%
\let\PfCfileversion\fileversion%
\ProvidesPackage{ProfCollege}[\filedate\space v\fileversion\space Aide pour utiliser LaTeX au college]%
@@ -948,6 +948,11 @@
\def\PfCieme{\up{e}\xspace}%from french.ldf
+\input{PfCBoiteADix}
+\input{PfCMonnaieEuro}
+\input{PfCMulEthiopie}
+\input{PfCIteration}
+\input{PfCSystemeImage}
\input{PfCPanneauxRoutiers}
\input{PfCAireSimple}
\input{PfCDecompFrac}
@@ -1100,7 +1105,22 @@
% \newcommand\Puissances[2]{%
\NewDocumentCommand\Puissances{mm}{%
\ensuremath{%
- \xintifboolexpr{#2==0}{1}{\xintifboolexpr{#2>0}{\xdef\TotalP{\fpeval{#2-1}}#1\xintFor* ##1 in{\xintSeq{1}{\TotalP}}\do{\times#1}}{\xdef\TotalP{\fpeval{-#2-1}}\frac{1}{#1\xintFor* ##1 in{\xintSeq{1}{\TotalP}}\do{\times#1}}}}%
+ % \xintifboolexpr{#2==0}{1}{\xintifboolexpr{#2>0}{\ifnum#2=1\relax#1\else\xdef\TotalP{\fpeval{#2-1}}#1\xintFor* ##1 in{\xintSeq{1}{\TotalP}}\do{\times#1}\fi}{\xdef\TotalP{\fpeval{-#2-1}}\frac{1}{#1\xintFor* ##1 in{\xintSeq{1}{\TotalP}}\do{\times#1}}}}%
+ \ifnum#2=0\relax%
+ 1%
+ \else%
+ \ifnum#2>0\relax%
+ \xintFor* ##1 in{\xintSeq{1}{#2}}\do{%
+ #1\xintifForLast{}{\times}%
+ }%
+ \else%
+ \frac{1}{%
+ \xintFor* ##1 in{\xintSeq{1}{\fpeval{abs(#2)}}}\do{%
+ #1\xintifForLast{}{\times}%
+ }%
+ }%
+ \fi%
+ \fi%
}%
}%
More information about the tex-live-commits
mailing list.