summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-08-15 03:00:53 +0000
committerNorbert Preining <norbert@preining.info>2023-08-15 03:00:53 +0000
commit3593305133bcfb167225af1b35c299bde1456579 (patch)
treec80fe825c17682b4b49b9b2f9ac687210e5df157 /macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp
parent8360ddccbd0538a65b33a2474e0b3b79acd83dab (diff)
CTAN sync 202308150300
Diffstat (limited to 'macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp')
-rw-r--r--macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp247
1 files changed, 235 insertions, 12 deletions
diff --git a/macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp b/macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp
index 52869904af..95c18757f1 100644
--- a/macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp
+++ b/macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp
@@ -1315,19 +1315,19 @@ enddef;
%Outils
numeric echelleequerre;
-echelleequerre=2;
-vardef equerre(expr dte,drte,perpe,sens)=
+echelleequerre=0.5;
+vardef equerreold(expr dte,drte,perpe,sens)=
save picequerre;
picture picequerre;
pair ww,t[];
path intermede;
pair perpen,ptt,pttt;
perpen:=projection(perpe,dte,drte);
- %if sens=1 :
- ptt:=longueurequerre*(drte-dte) rotated 90 shifted perpen;
- %else :
-% ptt:=longueurequerre*(drte-dte) rotated (-90) shifted perpen;
- %fi;
+ if sens=1 :
+ ptt:=echelleequerre*(drte-dte) rotated 90 shifted perpen;
+ else :
+ ptt:=echelleequerre*(drte-dte) rotated (-90) shifted perpen;
+ fi;
ww=unitvector(drte-dte);
intermede=ptt--(10[ptt,(perpen rotatedabout(ptt,if sens=1: 30 else:-30 fi))]);
pttt=intermede intersectionpoint (10[dte,drte]--10[drte,dte]);
@@ -1338,6 +1338,78 @@ vardef equerre(expr dte,drte,perpe,sens)=
picequerre
enddef;
+vardef equerre(text gradua)(expr ea,eb,ec)=
+ save picequerre;
+ picture picequerre;
+ pair EA,EB,EC,ED,EE,EF,EI;
+ EA:=ea;
+ EB:=eb;
+ EC:=ec;
+ ED=projection(EC,EA,EB);
+ EE-ED=EB-EA;
+ EF-ED=echelleequerre*abs(EE-ED)*(unitvector(EE-ED) rotated 90);
+ EI=CentreCercleI(EE,ED,EF);
+ picequerre=image(
+ fill (EE--ED--EF--cycle) withcolor 0.7white;
+ draw codeperp(EE,ED,EF,5);
+ draw EE--ED--EF--cycle;
+ fill ((((EE--ED--EF--cycle) shifted ((0,0)-EI)) scaled 0.5) shifted EI) withcolor white;
+ trace (((EE--ED--EF--cycle) shifted ((0,0)-EI)) scaled 0.5) shifted EI;
+ % if abs(EE-ED)>abs(EF-ED):
+% for k=10 upto 50:%
+% trace (ED+k*1mm*unitvector(EE-ED))--(ED+k*1mm*unitvector(EE-ED)+1mm*unitvector(EF-ED));
+% endfor;
+% else:
+% for k=10 upto 50:%
+% trace (ED+k*1mm*unitvector(EF-ED))--(ED+k*1mm*unitvector(EF-ED)+1mm*unitvector(EE-ED));
+% endfor;
+% fi;
+ );
+ picequerre
+enddef;
+
+
+% ww;
+% pair Intermede;
+% pair perpen,I,ptt;%,pttt
+% perpen:=projection(perpe,dte,drte);
+% Intermede:=echelleequerre[dte,drte];
+% ptt-perpen=abs(Intermede-perpen)*0.5*unitvector(perpe-perpen);
+% I:=CentreCercleI(perpen,ptt,Intermede);
+% ww=unitvector(drte-dte);
+% intermede=ptt--(10[ptt,(perpen rotatedabout(ptt,if sens=1: 30 else:-30 fi))]);
+% pttt=intermede intersectionpoint (10[dte,drte]--10[drte,dte]);
+% picequerre=image(
+%
+% draw codeperp(ptt,perpen,Intermede,5);
+% k=0;
+% pair Equa,Equb,Equc;
+% Equa:=perpen;
+% boolean Stop;
+% Stop=false;
+% forever:
+% label.top(TEX(decimal(angle(drte-perpen)-angle(perpe-perpen))),A);
+% for k=1 upto 100:
+% k:=k+1;
+% Equa:=perpen+k*1mm*unitvector(drte-perpen);
+% dotlabel("",Equa);
+% Equb:=Equa+1mm*unitvector(drte-perpen);
+% Equc:=rotation(Equb,Equa,-angle((drte-perpen)-(perpe-perpen)));
+% drawoptions(withcolor red);
+% dotlabel("",Equc);
+% drawoptions();
+% if abs(Equa-perpen)>9mm:%
+% trace Equa--Equc;
+% fi;
+ % if abs(drte-Equa)<1cm:
+% Stop:=false;
+% fi;
+% exitif: Stop;
+% endfor;
+% );
+% picequerre
+%enddef;
+
vardef regle(expr depart,arrivee,rr)=
save picregle;
picture picregle,grad[],gradu[],final;
@@ -1425,16 +1497,167 @@ vardef crayon(expr depart,arrive,ptplace,nbechelle)=
piccray
enddef;
-boolean Simple;
-Simple=false;
+boolean Simpleold;
+Simpleold=false;
+
+vardef Rapporteur(text t)(expr rapcentre,pointsupport,rr,pasgrad)=
+ picture rap;
+ path cc,cd,cent;
+ pair grada[],gradb[],rapv,rapw,rapt,rapww,rapvv,rap[],rapp[],RA[],RB[];
+ boolean Simple,Double,Aleph,Tiret;
+ Simple=true;
+ Double=false;
+ Aleph=false;
+ Tiret=false;
+ for p_=t:
+ if p_="Double":
+ Double:=true;
+ Simple:=false;
+ elseif p_="Aleph":
+ Aleph:=true;
+ Tiret:=true;
+ elseif p_="Tiret":
+ Tiret:=true;
+ fi;
+ endfor;
+ % Le cercle
+ RA1=0.3[rapcentre,pointsupport];
+ RA2=0.375[rapcentre,pointsupport];
+ RA3=0.45[rapcentre,pointsupport];
+ RB1=rotation(RA1,rapcentre,rr*45);
+ RB2=rotation(RA2,rapcentre,rr*45);
+ RB3=rotation(RA3,rapcentre,rr*45);
+ cc=cercles(rapcentre,0.75*abs(rapcentre-pointsupport));
+ rapt=cc intersectionpoint (rapcentre--pointsupport);
+ rapw=rapt-2*unitvector(pointsupport-rapcentre);rapv=symetrie(rapw,rapt);
+ rapww=rapt-5*unitvector(pointsupport-rapcentre);rapvv=symetrie(rapww,rapt);
+ grada0=(rapww-rapcentre) shifted rapcentre;
+ gradb0=(rapvv-rapcentre) shifted rapcentre;
+ path cerc;
+ cerc=subpath((angle(pointsupport-rapcentre)*(length cc))/360,((length cc)/2)+(angle(pointsupport-rapcentre)*(length cc))/360) of cc;
+ % On trace les graduations
+ for i=0 upto 71 :
+ for j=1 upto 4 :
+ grada[5*i+j]=(rapw-rapcentre) rotated (rr*(5*i+j)) shifted rapcentre;
+ gradb[5*i+j]=(rapv-rapcentre) rotated (rr*(5*i+j)) shifted rapcentre;
+ endfor;
+ grada[5*(i+1)]=(rapww-rapcentre) rotated (rr*(5*(i+1))) shifted rapcentre;
+ gradb[5*(i+1)]=(rapvv-rapcentre) rotated (rr*(5*(i+1))) shifted rapcentre;
+ endfor;
+ if Aleph:
+ fincompteur:=72;
+ else:
+ fincompteur:=36;
+ fi;
+ if (pasgrad=10) or (pasgrad=5) or (pasgrad=1):
+ for i=0 upto (fincompteur-1)/2:
+ draw grada[10*i]--gradb[10*i] withpen pencircle scaled 1.15;
+ endfor;
+ fi;
+ if (pasgrad=5) or (pasgrad=1):
+ for i=1 step 2 until (fincompteur-1):
+% draw grada[5*i]--gradb[5*i];
+ draw 0.9[grada[5*i],gradb[5*i]]--0.9[gradb[5*i],grada[5*i]];
+ endfor;
+ fi;
+ if pasgrad=1:
+ for i=0 upto (fincompteur-1) :
+ for j=1 upto 4 :
+ draw grada[5*i+j]--gradb[5*i+j];
+ endfor;
+ endfor;
+ fi;
+ % On affiche les graduations
+ picture nomb[],nombre[];
+ if Aleph:
+ for j=0 upto (fincompteur/2):
+ nombre[10*j]=image(
+ label.top(TEX("\fontsize{4}{4}\selectfont"&decimal(10*j)&""),gradb[10*j]);
+ currentpicture:=currentpicture rotatedabout(gradb[10*j],angle(gradb[10*j]-rapcentre)-90);
+ );
+ endfor;
+ else:
+ if rr=1:
+ for j=0 upto 18:
+ nombre[10*j]=image(
+ label.bot(TEX("\fontsize{4}{4}\selectfont"&decimal(10*j)&""),grada[10*j]);
+ currentpicture:=currentpicture rotatedabout(grada[10*j],angle(grada[10*j]-rapcentre)-90);
+ );
+ endfor
+ for j=0 upto 18:
+ nombre[10*j+1]=image(
+ label.top(TEX("\fontsize{4}{4}\selectfont"&decimal(180-10*j)&""),gradb[10*j]);
+ currentpicture:=currentpicture rotatedabout(gradb[10*j],angle(gradb[10*j]-rapcentre)-90);
+ );
+ endfor
+ else:
+ for j=0 upto 18:
+ nombre[10*j]=image(
+ label.bot(TEX("\fontsize{4}{4}\selectfont"&decimal(180-10*j)&""),grada[10*j]);
+ currentpicture:=currentpicture rotatedabout(grada[10*j],angle(grada[10*j]-rapcentre)-90);
+ );
+ endfor
+ for j=18 downto 0:
+ nombre[10*j+1]=image(
+ label.top(TEX("\fontsize{4}{4}\selectfont"&decimal(10*j)&""),gradb[10*j]);
+ currentpicture:=currentpicture rotatedabout(gradb[10*j],angle(gradb[10*j]-rapcentre)-90);
+ );
+ endfor
+ fi;
+ fi;
+ picture $;
+ $=image(
+ if Aleph:
+ for i=0 upto (fincompteur/2)-1 :
+ draw nombre[10*i];
+ endfor;
+ else:
+ for i=0 upto (fincompteur/2) :
+ draw nombre[10*i+1];
+ if Simple=false:
+ draw nombre[10*i];
+ fi;
+ endfor;
+ fi;
+ if Aleph:
+ draw cc;
+ draw grada[0]--grada[180];
+ else:
+ if rr=-1:
+ draw cerc reflectedabout(pointsupport,rapcentre)--cycle;
+ else:
+ draw cerc--cycle;
+ fi;
+ fi;
+ cent=cercle(rapcentre,0.05*u);
+ if Tiret:
+ trace ((0.05[rapcentre,grada[0]])--(0.05[rapcentre,grada[180]])) withpen pencircle scaled 1.25;
+ trace rotation(((0.05[rapcentre,grada[0]])--(0.05[rapcentre,grada[180]])),rapcentre,90) withpen pencircle scaled 1.25;
+ else:
+ fill cent withcolor if unknown fillrap: 0.9white else: fillrap fi;
+ fi;
+ if Aleph=true:
+ if rr=1:
+ for k=1 upto 3:
+ drawarrow arccercle(RA[k],RB[k],rapcentre);
+ endfor;
+ else:
+ for k=1 upto 3:
+ drawarrow reverse(arccercle(RB[k],RA[k],rapcentre));
+ endfor;
+ fi;
+ fi;
+ );
+ $
+ enddef;
vardef rapporteur(expr centre,segment,rr)=
save raps;
picture raps;
raps=image(
- Simple:=true;
+ Simpleold:=true;
trace rapporteurdouble(centre,segment,rr);
- Simple:=false;
+ Simpleold:=false;
);
raps
enddef;
@@ -1491,7 +1714,7 @@ vardef rapporteurdouble(expr centre,segment,rr)=
rap=image(
for i=0 upto 18 :
draw nombre[10*i+1];
- if Simple=false:
+ if Simpleold=false:
draw nombre[10*i];
fi;
endfor;