#######################################################################################################################################
#                                                                                                                                     #
#         T R A C E   D E   L ' H I S T O G R A M M E   D U   M O D U L E   D E S   V I T E S S E S                                   #
#         A V E C   A J U S T E M E N T   A U T O M A T I Q U E  :                                                                    #
#                                                                                                                                     #
#                                                                                                                                     #
#         Author of '$xivP/disk.000000009/face.2/.REFL.w.12.$U' :                                                                                    #
#                                                                                                                                     #
#                     Jean-Francois Colonna (LACTAMME, AAAAMMJJhhmmss).                                                               #
#                                                                                                                                     #
#######################################################################################################################################

$Z                  SETENVParam         _____Fhisto                   0.25

$X                  echo                "neutre"
$X                                      # commande destinee uniquement a mettre a jour l'environnement 'env'...                       #

$c                  #include  <stdio.h>
$c
$c                  #define   MIN2(a,b) (((a) < (b)) ? (a) : (b))
$c
$c                  extern    int       atoi();
$c                  extern    double    atof();
$c                  extern    char      *getenv();
$c
$c                  #define   NA0       (atoi(getenv("PremiereA")))
$c                  #define   NA        (atoi(getenv("DerniereA")))
$c
$c                  #define   NOMBRE    20
$c                                      /* Definition de la moitie (a 1 pres) de la taille de l'histogramme.                         */
$c                  #define   AXE_OX_0  0.3
$c                  #define   AXE_OX_N  0.7
$c                  #define   AXE_OY    0.1
$c                  #define   AXE_OZ    0.5
$c                                      /* Definition des 3 axes.                                                                    */
$c                  #define   A_HISTO   (atof(getenv("_____Fhisto")))
$c                  #define   B_HISTO   AXE_OY
$c                                      /* Transformation lineaire des valeurs de l'histogramme.                                     */
$c                  #define   RAYON     0.012
$c                                      /* Taille des boules de l'histogramme.                                                       */
$c
$c                  int       main()
$c                            {
$c                            int       n;
$c
$c                            printf("$DELETE     $xTV/VITESSES\n");
$c
$c                            printf("$CA         $xTV/LISTE_POINTS             |
$c                                    $GRE        -v '^ *$'                     |
$c                                    $SE         -e 's/^.*VITESSE=//'
$c                                                -e 's/ .*$//'
$c                                                > $xTV/VITESSES\n"
$c                                   );
$c
$c             printf("set         MinL=`$xrv/extrema.01$X ne=0 fichier=$xTV/VITESSES | $GRE '^minimum=' | $SE -e 's/^.*=//'`\n");
$c             printf("set         MinL=`$xcg/MIN2.01$X a=0 b=$MinL`\n");
$c             printf("set         MaxL=`$xrv/extrema.01$X ne=0 fichier=$xTV/VITESSES | $GRE '^maximum=' | $SE -e 's/^.*=//'`\n");
$c
$c                            printf("$DELETE     $xTV/VITESSES\n");
$c
$c                            for       (n=NA0 ; n<=NA ; n++)
$c                                      {
$c                                      printf("$DELETE     $xTV/VITESSES\n");
$c                                      printf("$DELETE     $xTV/HISTOGRAMME\n");
$c                                      printf("$DELETE     $xTV/COORD.1$COORD_X\n");
$c                                      printf("$DELETE     $xTV/COORD.2$COORD_X\n");
$c                                      printf("$DELETE     $xTV/COORDONNEES$COORD_X\n");
$c                                      printf("$DELETE     $xTV/COORD.1$COORD_Y\n");
$c                                      printf("$DELETE     $xTV/COORD.2$COORD_Y\n");
$c                                      printf("$DELETE     $xTV/COORDONNEES$COORD_Y\n");
$c                                      printf("$DELETE     $xTV/COORD.1$COORD_Z\n");
$c                                      printf("$DELETE     $xTV/COORD.2$COORD_Z\n");
$c                                      printf("$DELETE     $xTV/COORDONNEES$COORD_Z\n");
$c
$c                                      printf("$CA         $xTV/LISTE_POINTS             |
$c                                              $GRE        'periode=%d '                 |
$c                                              $SE         -e 's/^.*VITESSE=//'
$c                                                          -e 's/ .*$//'                 |
$c                                              $xrv/neutre$X
$c                                                          ne=0
$c                                                          fichier='='
$c                                                          formater=VRAI decimales=8
$c                                                          > $xTV/VITESSES\n"
$c                                            ,n
$c                                             );
$c                                      /* L'utilisation de 'decimales=8' permet de traiter proprement le probleme du aux erreurs    */
$c                                      /* d'arrondi. En effet, si par exemple tous les modules sont censes valoir '0.02' dans la    */
$c                                      /* definition de '$xTV/MODULE', le fait de passer des coordonnees polaires aux coordonnees   */
$c                                      /* cartesiennes donne en fait dans '$xTV/MODULE' les valeurs differentes suivantes :         */
$c                                      /*                                                                                           */
$c                                      /*                  +0.01999999999999999                                                     */
$c                                      /*                  +0.02                                                                    */
$c                                      /*                  +0.02000000000000001                                                     */
$c                                      /*                                                                                           */
$c                                      /* et alors avec 8 decimales, toutes ces valeurs redonnent '0.02'.                           */
$c
$c                                      printf("set  Particules=`$WC $xTV/VITESSES`\n");
$c                                      printf("set  Particules=$Particules[$WC1]\n");
$c
$c                                      printf("$xrv/histogram.01$X
$c                                                          ne=0
$c                                                          fichier=$xTV/VITESSES
$c                                                          nombre=%d
$c                                                          forcer=VRAI minimum=$MinL maximum=$MaxL
$c                                                          > $xTV/HISTOGRAMME\n"
$c                                            ,(2*NOMBRE)+1
$c                                             );
$c                                      /* Il est preferable d'utiliser un nombre impair d'elements pour l'histogramme afin de       */
$c                                      /* garantir un centrage d'une barre unique dans le cas ou tous les elements du fichier       */
$c                                      /* '$xTV/VITESSES' sont egaux et centres dans {minimum,maximum}.                             */
$c
$c                                      printf("set  Lhistogramme=`$WC $xTV/HISTOGRAMME`\n");
$c                                      printf("set  Lhistogramme=$Lhistogramme[$WC1]\n");
$c                                      printf("@    Lhistogramme2 = $Lhistogramme * 2\n");
$c
$c                                      printf("$xci/valeurs_inte$X
$c                                                     premiere=1 derniere=$Lhistogramme
$c                                                     vD=%f vA=%f
$c                                                     cubique=FAUX
$c                                                          > $xTV/COORD.1$COORD_X\n"
$c                                            ,AXE_OX_0,AXE_OX_N
$c                                             );
$c                                      printf("$xci/valeurs_inte$X
$c                                                     premiere=1 derniere=$Lhistogramme
$c                                                     vD=%f vA=%f
$c                                                     cubique=FAUX
$c                                                          > $xTV/COORD.2$COORD_X\n"
$c                                            ,AXE_OX_0,AXE_OX_N
$c                                             );
$c                                      printf("$PAST
$c                                                     $xTV/COORD.1$COORD_X
$c                                                     $xTV/COORD.2$COORD_X
$c                                                     | $R      %c$K_TAB%c %c$K_NL%c
$c                                                          > $xTV/COORDONNEES$COORD_X\n"
$c                                            ,'"','"','"','"'
$c                                             );
$c
$c                                      printf("$xci/valeurs_inte$X
$c                                                     premiere=1 derniere=$Lhistogramme
$c                                                     vD=%f vA=%f
$c                                                     cubique=FAUX
$c                                                          > $xTV/COORD.1$COORD_Y\n"
$c                                            ,AXE_OY,AXE_OY
$c                                             );
$c
$c                                      printf("set  Ahistogramme=`$xcg/MUL2.01$X a=2 b=$Particules`\n");
$c                                      printf("set  Ahistogramme=`$xcg/DIVZ.01$X a=$Ahistogramme b=$Lhistogramme`\n");
$c                                      printf("set  Ahistogramme=`$xcg/INVZ.01$X a=$Ahistogramme`\n");
$c                                      printf("set  Ahistogramme=`$xcg/MUL2.01$X a=%f b=$Ahistogramme`\n"
$c                                            ,A_HISTO
$c                                             );
$c                                      /* Le principe de ce calcul est de considerer que l'histogramme va etre grossierement un     */
$c                                      /* triangle de base '$Lhistogramme' et d'aire '$Particules'. Soit donc 'h' sa hauteur :      */
$c                                      /*                                                                                           */
$c                                      /*                                        1                  1                               */
$c                                      /*                  aire = $Particules = ---.base.hauteur = ---.$Lhistogramme.h              */
$c                                      /*                                        2                  2                               */
$c                                      /*                                                                                           */
$c                                      /* d'ou :                                                                                    */
$c                                      /*                                                                                           */
$c                                      /*                          $Particules                                                      */
$c                                      /*                  h = 2.---------------                                                    */
$c                                      /*                         $Lhistogramme                                                     */
$c                                      /*                                                                                           */
$c                                      /* Le facteur de reduction '$Ahistogramme' est donc l'inverse de 'h' multiplie par un        */
$c                                      /* facteur arbitraire 'A_HISTO'.                                                             */
$c
$c                                      printf("$xrv/AXPB.01$X
$c                                                     ne=0
$c                                                     fichier=$xTV/HISTOGRAMME
$c                                                     a=$Ahistogramme b=%f
$c                                                          > $xTV/COORD.2$COORD_Y\n"
$c                                            ,B_HISTO
$c                                             );
$c                                      printf("$PAST
$c                                                     $xTV/COORD.1$COORD_Y
$c                                                     $xTV/COORD.2$COORD_Y
$c                                                     | $R      %c$K_TAB%c %c$K_NL%c
$c                                                          > $xTV/COORDONNEES$COORD_Y\n"
$c                                            ,'"','"','"','"'
$c                                             );
$c
$c                                      printf("$xrv/particule.10$X
$c                                                          np=1
$c                                                          iterations=$Lhistogramme2
$c                                                          isoles=VRAI
$c                                                          LISTE_X=$xTV/COORDONNEES$COORD_X
$c                                                          LISTE_Y=$xTV/COORDONNEES$COORD_Y
$c                                                          LISTE_Z=%f
$c                                                          LISTE_ROUGE=$BLANC
$c                                                          LISTE_VERTE=$BLANC
$c                                                          LISTE_BLEUE=$BLANC
$c                                                          LISTE_RAYON=%f
$c                                                          zoom_automatique=FAUX ZOOM=1.0
$c                                                          isoles=FAUX
$c                                                          chainer=FAUX
$c                                                          ajuster_points=VRAI
$c                                                          Apoints=16
$c                                                          Rpoints=4
$c                                                          fond=VRAI fond_dynamique=FAUX F=$_____imagesW.%04d
$c                                                          Lz=100
$c                                                          R=$xTV/HIST.1.
$c                                                                    $formatI\n"
$c                                            ,AXE_OZ,RAYON,n
$c                                             );
$c
$c                                      printf("$xci/acces$X
$c                                                          A=$xTV/HIST.1.%04d$ROUGE
$c                                                          R=$_____imagesW.%04d$ROUGE
$c                                                                    $formatI\n"
$c                                            ,NA0,n
$c                                             );
$c                                      printf("$xci/acces$X
$c                                                          A=$xTV/HIST.1.%04d$VERTE
$c                                                          R=$_____imagesW.%04d$VERTE
$c                                                                    $formatI\n"
$c                                            ,NA0,n
$c                                             );
$c                                      printf("$xci/acces$X
$c                                                          A=$xTV/HIST.1.%04d$BLEUE
$c                                                          R=$_____imagesW.%04d$BLEUE
$c                                                                    $formatI\n"
$c                                            ,NA0,n
$c                                             );
$c                                      }
$c                            }

$Z                  $DELETE                                      $xTV/LISTE_POINTS
$Z                  $DELETE                                      $xTV/VITESSES
$Z                  $DELETE                                      $xTV/HISTOGRAMME
$Z                  $DELETE                                      $xTV/COORD.1$COORD_X
$Z                  $DELETE                                      $xTV/COORD.2$COORD_X
$Z                  $DELETE                                      $xTV/COORDONNEES$COORD_X
$Z                  $DELETE                                      $xTV/COORD.1$COORD_Y
$Z                  $DELETE                                      $xTV/COORD.2$COORD_Y
$Z                  $DELETE                                      $xTV/COORDONNEES$COORD_Y
$Z                  $DELETE                                      $xTV/COORD.1$COORD_Z
$Z                  $DELETE                                      $xTV/COORD.2$COORD_Z
$Z                  $DELETE                                      $xTV/COORDONNEES$COORD_Z



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.