diff options
author | Norbert Preining <norbert@preining.info> | 2023-08-15 03:00:53 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2023-08-15 03:00:53 +0000 |
commit | 3593305133bcfb167225af1b35c299bde1456579 (patch) | |
tree | c80fe825c17682b4b49b9b2f9ac687210e5df157 /macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp | |
parent | 8360ddccbd0538a65b33a2474e0b3b79acd83dab (diff) |
CTAN sync 202308150300
Diffstat (limited to 'macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp')
-rw-r--r-- | macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp | 247 |
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; |