summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/metapost/PfCEngrenages.mp
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-10-13 03:01:48 +0000
committerNorbert Preining <norbert@preining.info>2022-10-13 03:01:48 +0000
commitba720f8eaac74c537fb16f8556e4cf0ab4cd8235 (patch)
treee6932ca49174877c4ef511fd5c01d614b988b449 /macros/latex/contrib/profcollege/metapost/PfCEngrenages.mp
parentb9fbd9245255da7a36ca3b07890c471c708f7777 (diff)
CTAN sync 202210130301
Diffstat (limited to 'macros/latex/contrib/profcollege/metapost/PfCEngrenages.mp')
-rw-r--r--macros/latex/contrib/profcollege/metapost/PfCEngrenages.mp73
1 files changed, 73 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/metapost/PfCEngrenages.mp b/macros/latex/contrib/profcollege/metapost/PfCEngrenages.mp
new file mode 100644
index 0000000000..12d82c2850
--- /dev/null
+++ b/macros/latex/contrib/profcollege/metapost/PfCEngrenages.mp
@@ -0,0 +1,73 @@
+color CouleurEngrenage;
+
+vardef sin(expr t) = sind(c*t) enddef;
+
+vardef cos(expr t) = cosd(c*t) enddef;
+
+vardef tan(expr t) = sin(t)/cos(t) enddef;
+
+vardef Developpante(expr dp)=
+ save $;
+ path $;
+ $=(dp*u)*(1,0) for t=0 step 0.1 until pi:
+ --((dp*u)*(cos(t)+t*sin(t),sin(t)-t*cos(t)))
+ endfor;
+ $
+enddef;
+
+vardef Entraxe(expr na,nb)=
+ 0.5*(ModuleEng/u)*(na+nb)+0.04
+enddef;
+
+vardef Engrenage(expr M,Z,Cc)=%M : Module, Z : nb dents,Cc=Centre
+ % Pour des engrenages dont le profil est une développante de cercle
+ save $;
+ picture $;
+ ModuleEng:=M*u;
+ Dp:=ModuleEng*Z;%Module (mm)
+
+ De:=Dp+2*ModuleEng;%Diamètre extérieur
+ Dpied:=Dp-2.5*ModuleEng;%Diamètre de pied
+ Alpha:=20;%Angle de pression
+ Db:=Dp*cosd(Alpha);%Diamètre de base
+
+ pair OPfC,APfC,BPfC,CPfC,Obase[];
+ OPfC=(0,0);
+ path cerclep,cerclee,cercleb,cerclepied;
+ cerclep=cercles(OPfC,0.5*Dp);
+ cerclee=cercles(OPfC,0.5*De);
+ cercleb=cercles(OPfC,0.5*Db);
+ cerclepied=cercles(OPfC,0.5*Dpied);
+ path dd,daction,dsupport[],dperp[],dsymetrie,darret;
+ 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;
+ ReleveAngle:=90-angle(profil intersectionpoint cerclep);
+ dsymetrie=rotation(dd,OPfC,-(360/(4*Z)+ReleveAngle));
+ darret=rotation(dd,OPfC,(360/(4*Z)-ReleveAngle));
+ pair D;
+ D=profil intersectionpoint cerclee;
+ 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)));
+ path ProfilGene;
+ ProfilGene=Profil
+ for k=1 upto Z-1:
+ --rotation(Profil,OPfC,-k*(360/Z))
+ endfor
+ --cycle;
+ $=image(
+ fill ProfilGene withcolor CouleurEngrenage;
+ trace ProfilGene;
+ 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));
+ );
+ $:=rotation($,OPfC,-90+(360/(4*Z)+ReleveAngle)) shifted Cc;
+ $
+enddef;