summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/metapost/PfCEngrenages.mp
blob: 12d82c285049345a437d4bf4854541a0afc81bf6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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;