Fichier ballon_foot_02.jps — Modifié le 30 Juin 2006 à 15 h 48

ballon_foot_02.pdf
Source
%% Pour passer en pur postscript, decommenter la ligne suivante 
%% 294 420 translate

%% puis commenter les 3 suivantes
-10 10 setxrange
-10 10 setyrange
20 setxunit

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Manuel Luque                                                 %%
%% juin 2006                                                    %%
%% poour le dessin de l'icosaedre et du ballon                  %%
%% c'est une adaptation du fichier MatLab de Jean-Bernard ROUX :%%
%%  http://hypo.ge-dip.etat-ge.ch/www/math/html/node45.html     %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/cm {28.45 mul} def % 1 cm = 28.45 pts
%% les transformations de l'objet
%% translation
/CX 2 def % centre du ballon
/CY 5 def
/CZ 5 def
%% rotation autour des axes
/RotX 0 def
/RotY 36 def
/RotZ 72 def
/c2 {RotY cos} bind def
/s2 {RotY sin} bind def
/c3 {RotZ cos} bind def
/s3 {RotZ sin} bind def
/c1 {RotX cos} bind def
/s1 {RotX sin} bind def
%% les coefficients de la matrice de transformation
%% de l'objet
/M11 {c2 c3 mul} bind def
/M12 {c3 s1 mul s2 mul c1 s3 mul sub} bind def
/M13 {c1 c3 mul s2 mul s1 s3 mul add} bind def
/M21 {c2 s3 mul} bind def
/M22 {s1 s2 mul s3 mul c1 c3 mul add} bind def
/M23 {s3 s2 mul c1 mul c3 s1 mul sub} bind def
/M31 {s2 neg} bind def
/M32 {s1 c2 mul} bind def
/M33 {c1 c2 mul} bind def
%% définir le point de vue
%% par ses coordonnées sphériques
/THETA 30 def
/PHI 60 def
/Dobs 100 def % distance observateur
/Decran 60 def % distance de l'écran
%% calcul des coefficients de la matrice
%% de transformation
/Sin1 {THETA sin} bind def
/Sin2 {PHI sin} bind def
/Cos1 {THETA cos} bind def
/Cos2 {PHI cos} bind def
/Cos1Sin2 {Cos1 Sin2 mul} bind def
/Sin1Sin2 {Sin1 Sin2 mul} bind def
/Cos1Cos2 {Cos1 Cos2 mul} bind def
/Sin1Cos2 {Sin1 Cos2 mul} bind def
%%
/CalculsPointsAfterTransformations{%
  /Xabscisse  M11 Xpoint mul M12 Ypoint mul add M13 Zpoint mul add CX add def
  /Yordonnee  M21 Xpoint mul M22 Ypoint mul add M23 Zpoint mul add CY add def
  /Zcote      M31 Xpoint mul M32 Ypoint mul add M33 Zpoint mul add CZ add def
  }
def
%% pour la 3D conventionnelle
%% Dony : graphisme scientifique : page 187
/formulesTroisD{%
  /xObservateur Xabscisse Sin1 mul neg Yordonnee Cos1 mul add def
  /yObservateur Xabscisse Cos1Sin2 mul neg Yordonnee Sin1Sin2 mul sub Zcote Cos2 mul add def
  /zObservateur Xabscisse neg Cos1Cos2 mul Yordonnee Sin1Cos2 mul sub Zcote Sin2 mul sub Dobs add def
  /Xi Decran xObservateur mul zObservateur div def
  /Yi Decran yObservateur mul zObservateur div def
  }
def
/XpointVue {Dobs Cos1Cos2 mul} bind def
/YpointVue {Dobs Sin1Cos2 mul} bind def
/ZpointVue {Dobs Sin2 mul} bind def
%% dessin de l'icosaedre et du ballon
%% C'est une adaptation du fichier MatLab de Jean-Bernard ROUX :
%%  http://hypo.ge-dip.etat-ge.ch/www/math/html/node45.html
/radius 4 def % rayon de la sphère circonscrite
/m 5 def % nombre d'arêtes sur un sommet
/n 3 def % nombre de côtés de chaque face
/sina {180 m div cos 180 n div sin div} bind def
/cosa {1 sina dup mul sub sqrt} bind def
/al {sina cosa atan} bind def
/l {radius 2 mul 180 m div cos mul al cos mul 180 m div sin al sin mul div} bind def
/k {2 radius dup mul mul l dup mul sub 2 radius mul div} bind def
/r {radius dup mul k dup mul sub sqrt} bind def
%% les sommets
%% abscisses
/x1 {r 0 cos mul} bind def
/x2 {r 72 cos mul} bind def
/x3 {r 144 cos mul} bind def
/x4 {r 216 cos mul} bind def
/x5 {r 288 cos mul} bind def
/x6 0 def
/x7 0 def
/x8 {x1 neg} bind def
/x9 {x2 neg} bind def
/x10 {x3 neg} bind def
/x11 {x4 neg} bind def
/x12 {x5 neg} bind def
%% ordonnées
/y1 {r 0 sin mul} bind def
/y2 {r 72 sin mul} bind def
/y3 {r 144 sin mul} bind def
/y4 {r 216 sin mul} bind def
/y5 {r 288 sin mul} bind def
/y6 0 def
/y7 0 def
/y8 {y1 neg} bind def
/y9 {y2 neg} bind def
/y10 {y3 neg} bind def
/y11 {y4 neg} bind def
/y12 {y5 neg} bind def
%% les cotes
/z1 k def
/z2 k def
/z3 k def
/z4 k def
/z5 k def
/z6 radius def
/z7 radius neg def
/z8 k neg def
/z9 k neg def
/z10 k neg def
/z11 k neg def
/z12 k neg def
%% les sommets : 12 sommets = 36 coordonnées
/S [x1  y1  z1  % 0->2
    x2  y2  z2  % 3->5
    x3  y3  z3  % 6->8
    x4  y4  z4  % 9->11
    x5  y5  z5  % 12->14
    x6  y6  z6  % 15->17
    x7  y7  z7  % 18->20
    x8  y8  z8  % 21->23
    x9  y9  z9  % 24->26
    x10 y10 z10 % 27->29
    x11 y11 z11 % 30->32
    x12 y12 z12 % 33-->35
    ] def
%% les 20 faces
%% tableau des faces de l'icosaèdre
/FacesIco [       % No
     2  6  1      % 0
     2  3  6      % 1
     6  3  4      % 2
     4  5  6      % 3
     5  1  6      % 4
     1  5  10     % 5
     1  10 11     % 6
     11 2  1      % 7
     11 12 2      % 8
     2  12 3      % 9
     3  12 8      % 10
     8  4  3      % 11
     8  9  4      % 12
     9  5  4      % 13
     5  9  10     % 14
     12 11 7      % 15
     12 7  8      % 16
     9  8  7      % 17
     7  10 9      % 18
     7  11 10     % 19
    ] def

%% indice des autres sommets voisins de chaque sommet
/co [ 6 2 11 10  5  % voisins du sommet 1
      3 6  1 11 12  %    "    de 2
      2 8 12  4  6  %    "    de 3
      6 5  9  8  3  %    "    de 4
      6 4 10  9  1  %    "    de 5
      1 2  3  4  5  %    "    de 6
     10 9  8 12 11  %    "    de 7
     12 3  4  9  7  %    "    de 8
      8 4  5 10  7  %    "    de 9
     11 7  9  5  1  %    "    de 10
      1 2 12  7 10  %    "    de 11
     11 2  3  8  7  %    "    de 12
     ] def

%% dessin de l'icosaedre tronqué
1 setlinejoin
%%294 420 translate
%% les axes
gsave
0 0 moveto
/Zcote 0 def
/Yordonnee 0 def
/Xabscisse 10 def
formulesTroisD
Xi cm Yi cm lineto
2 setlinewidth
1 0 0 setrgbcolor
stroke
0 0 moveto
/Zcote 0 def
/Yordonnee 10 def
/Xabscisse 0 def
formulesTroisD
Xi cm Yi cm lineto
2 setlinewidth
0 1 0 setrgbcolor
stroke
0 0 moveto
/Zcote 10 def
/Yordonnee 0 def
/Xabscisse 0 def
formulesTroisD
Xi cm Yi cm lineto
2 setlinewidth
0 0 1 setrgbcolor
stroke
grestore
%
%% dessin de l'icosaedre tronqué

/i 0 def
/Sico [ % les coordonnées des sommets de
        % l'icosaèdre tronqué
0 5 co length 5 sub  {
 /j exch def
    S i get  /xt1 exch def
    S i 1 add get /yt1 exch def
    S i 2 add get /zt1 exch def
%
    co j get 1 sub 3 mul /k exch def
    S k get  /xt2 exch def
    xt1 2 mul xt2 add 3 div
%
    S k 1 add get /yt2 exch def
    yt1 2 mul yt2 add 3 div
%
    S k 2 add get /zt2 exch def
    zt1 2 mul zt2 add 3 div
%%
    co j 1 add get 1 sub 3 mul /k exch def
    S k get  /xt2 exch def
    xt1 2 mul xt2 add 3 div
%
    S k 1 add get /yt2 exch def
    yt1 2 mul yt2 add 3 div
%
    S k 2 add get /zt2 exch def
    zt1 2 mul zt2 add 3 div
%%
    co j 2 add get 1 sub 3 mul /k exch def
    S k get  /xt2 exch def
    xt1 2 mul xt2 add 3 div
%
    S k 1 add get /yt2 exch def
    yt1 2 mul yt2 add 3 div
%
    S k 2 add get /zt2 exch def
    zt1 2 mul zt2 add 3 div
%%
    co j 3 add get 1 sub 3 mul /k exch def
    S k get  /xt2 exch def
    xt1 2 mul xt2 add 3 div
%
    S k 1 add get /yt2 exch def
    yt1 2 mul yt2 add 3 div
%
    S k 2 add get /zt2 exch def
    zt1 2 mul zt2 add 3 div
%%
    co j 4 add get 1 sub 3 mul /k exch def
    S k get  /xt2 exch def
    xt1 2 mul xt2 add 3 div
%
    S k 1 add get /yt2 exch def
    yt1 2 mul yt2 add 3 div
%
    S k 2 add get /zt2 exch def
    zt1 2 mul zt2 add 3 div
/i i 3 add def
} for
 ]  def
%

%% les sommets des faces pentagonales
/FP [  % 12 pentagones
         1     5     4     3     2
         6     7     8     9    10
        15    11    13    12    14
        16    17    18    19    20
        23    25    21    22    24
        26    27    28    29    30
        35    31    32    33    34
        36    37    38    39    40
        41    42    43    44    45
        46    50    49    48    47
        51    52    53    54    55
        56    57    58    59    60 ] def
/FH [ % 20 hexagones
        14    15    28    29    16    20
        17    16    29    30    21    22
        11    15    28    27     7     6
        27    26     1     2     8     7
        26    30    21    25     5     1
         4     5    25    23    49    50
        55    51     3     4    50    46
         9     8     2     3    51    52
        56    57    10     9    52    53
        13    11     6    10    57    58
        36    37    12    13    58    59
        19    20    14    12    37    38
        41    42    18    19    38    39
        24    22    17    18    42    43
        48    49    23    24    43    44
        53    54    35    34    60    56
        59    60    34    33    40    36
        39    40    33    32    45    41
        44    45    32    31    47    48
        46    47    31    35    54    55] def

/ballonP {
% /RED 0 def
0 5 FP length 5 sub { % le dessin des pentagones
  /i exch def
  FP i get 1 sub 3 mul /k exch def
  Sico k get       /Xpoint exch def
  Sico k 1 add get /Ypoint exch def
  Sico k 2 add get /Zpoint exch def
  CalculsPointsAfterTransformations
     /X1 Xabscisse def
     /Y1 Yordonnee def
     /Z1 Zcote def
%%
  FP i 1 add get 1 sub 3 mul /k exch def
  Sico k get       /Xpoint exch def
  Sico k 1 add get /Ypoint exch def
  Sico k 2 add get /Zpoint exch def
  CalculsPointsAfterTransformations
     /X2 Xabscisse def
     /Y2 Yordonnee def
     /Z2 Zcote def
%%
  FP i 2 add get 1 sub 3 mul /k exch def
  Sico k get       /Xpoint exch def
  Sico k 1 add get /Ypoint exch def
  Sico k 2 add get /Zpoint exch def
  CalculsPointsAfterTransformations
     /X3 Xabscisse def
     /Y3 Yordonnee def
     /Z3 Zcote def
%%
  FP i 3 add get 1 sub 3 mul /k exch def
  Sico k get       /Xpoint exch def
  Sico k 1 add get /Ypoint exch def
  Sico k 2 add get /Zpoint exch def
  CalculsPointsAfterTransformations
     /X4 Xabscisse def
     /Y4 Yordonnee def
     /Z4 Zcote def
%%
  FP i 4 add get 1 sub 3 mul /k exch def
  Sico k get       /Xpoint exch def
  Sico k 1 add get /Ypoint exch def
  Sico k 2 add get /Zpoint exch def
  CalculsPointsAfterTransformations
     /X5 Xabscisse def
     /Y5 Yordonnee def
     /Z5 Zcote def
%% centre de la face
   /xF {X1 X2 add X3 add X4 add X5 add 5 div} bind def
   /yF {Y1 Y2 Y3 Y4 Y5 add add add add 5 div} bind def
   /zF {Z1 Z2 Z3 Z4 Z5 add add add add 5 div} bind def
%% vecteur : centre de la face -> point de vue
    /xV {XpointVue xF sub } bind def
    /yV {YpointVue yF sub } bind def
    /zV {ZpointVue zF sub } bind def
%% normale
    /xN xF CX sub def
    /yN yF CY sub def
    /zN zF CZ sub def
% le produit scalaire des 2 vecteurs
/PS xV xN mul yV yN mul add zV zN mul add def
PS 0 ge {
/pentagone {
newpath
% tracé de la facette
    /Zcote Z1 def
    /Yordonnee Y1 def
    /Xabscisse X1 def
formulesTroisD
Xi cm Yi cm  moveto
    /Zcote Z2 def
    /Yordonnee Y2 def
    /Xabscisse X2 def
formulesTroisD
Xi cm Yi cm lineto
    /Zcote Z3 def
    /Yordonnee Y3 def
    /Xabscisse X3 def
formulesTroisD
Xi cm Yi cm lineto
    /Zcote Z4 def
    /Yordonnee Y4 def
    /Xabscisse X4 def
formulesTroisD
Xi cm Yi cm lineto
    /Zcote Z5 def
    /Yordonnee Y5 def
    /Xabscisse X5 def
formulesTroisD
Xi cm Yi cm lineto
closepath } def
gsave
pentagone
% strokepath  
 clip 
/condition {le} def
 ballonH 
grestore
 } if
 } for
 } def

 %
/YELLOW 1 def
/condition {ge} def
/ballonH {
0 6 FH length 6 sub { % le dessin des hexagones
    /i exch def
  FH i get 1 sub 3 mul /k exch def
  Sico k get       /Xpoint exch def
  Sico k 1 add get /Ypoint exch def
  Sico k 2 add get /Zpoint exch def
  CalculsPointsAfterTransformations
     /X1 Xabscisse def
     /Y1 Yordonnee def
     /Z1 Zcote def
%%
  FH i 1 add get 1 sub 3 mul /k exch def
  Sico k get       /Xpoint exch def
  Sico k 1 add get /Ypoint exch def
  Sico k 2 add get /Zpoint exch def
  CalculsPointsAfterTransformations
     /X2 Xabscisse def
     /Y2 Yordonnee def
     /Z2 Zcote def
%%
  FH i 2 add get 1 sub 3 mul /k exch def
  Sico k get       /Xpoint exch def
  Sico k 1 add get /Ypoint exch def
  Sico k 2 add get /Zpoint exch def
  CalculsPointsAfterTransformations
     /X3 Xabscisse def
     /Y3 Yordonnee def
     /Z3 Zcote def
%%
  FH i 3 add get 1 sub 3 mul /k exch def
  Sico k get       /Xpoint exch def
  Sico k 1 add get /Ypoint exch def
  Sico k 2 add get /Zpoint exch def
  CalculsPointsAfterTransformations
     /X4 Xabscisse def
     /Y4 Yordonnee def
     /Z4 Zcote def
%%
  FH i 4 add get 1 sub 3 mul /k exch def
  Sico k get       /Xpoint exch def
  Sico k 1 add get /Ypoint exch def
  Sico k 2 add get /Zpoint exch def
  CalculsPointsAfterTransformations
     /X5 Xabscisse def
     /Y5 Yordonnee def
     /Z5 Zcote def
%%
  FH i 5 add get 1 sub 3 mul /k exch def
  Sico k get       /Xpoint exch def
  Sico k 1 add get /Ypoint exch def
  Sico k 2 add get /Zpoint exch def
  CalculsPointsAfterTransformations
     /X6 Xabscisse def
     /Y6 Yordonnee def
     /Z6 Zcote def
%% centre de la face
   /xF {X1 X2 add X3 add X4 add X5 add X6 add 6 div} bind def
   /yF {Y1 Y2 Y3 Y4 Y5 Y6 add add add add add 6 div} bind def
   /zF {Z1 Z2 Z3 Z4 Z5 Z6 add add add add add 6 div} bind def
%% vecteur : centre de la face -> point de vue
    /xV {XpointVue xF sub } bind def
    /yV {YpointVue yF sub } bind def
    /zV {ZpointVue zF sub } bind def
%% normale
    /xN xF CX sub def
    /yN yF CY sub def
    /zN zF CZ sub def
% le produit scalaire des 2 vecteurs
/PS xV xN mul yV yN mul add zV zN mul add def
PS 0 condition {
newpath
% tracé de la facette
    /Zcote Z1 def
    /Yordonnee Y1 def
    /Xabscisse X1 def
formulesTroisD
    Xi cm Yi cm  moveto
    /Zcote Z2 def
    /Yordonnee Y2 def
    /Xabscisse X2 def
formulesTroisD
    Xi cm Yi cm lineto
    /Zcote Z3 def
    /Yordonnee Y3 def
    /Xabscisse X3 def
formulesTroisD
    Xi cm Yi cm lineto
    /Zcote Z4 def
    /Yordonnee Y4 def
    /Xabscisse X4 def
formulesTroisD
 Xi cm Yi cm lineto
    /Zcote Z5 def
    /Yordonnee Y5 def
    /Xabscisse X5 def
formulesTroisD
    Xi cm Yi cm lineto
    /Zcote Z6 def
    /Yordonnee Y6 def
    /Xabscisse X6 def
formulesTroisD
    Xi cm Yi cm lineto
closepath
gsave
    0 0 YELLOW 0 setcmykcolor
    fill
grestore
1 setlinewidth
stroke } if
} for
} def

/YELLOW 0.2 def
ballonP
/condition {ge} def
/YELLOW 0.7 def
ballonH