#######################################################################################################################################
#                                                                                                                                     #
#         T R A C E   D E   D E U X   H I S T O G R A M M E S   D U   M O D U L E   D E S   V I T E S S E S                           #
#         S U I V A N T   U N E   R E P A R T I T I O N   D E S   P A R T I C U L E S   E N   D E U X   S O U S - E N S E M B L 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.13.$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   COND(c,x,y)         ((c) ? (x) : (y))
$c                  #define   MIN2(x,y)           COND(((x) < (y)),x,y)
$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    10
$c                                      /* Definition de la moitie (a 1 pres) de la taille de l'histogramme.                         */
$c                  #define   L_AXE_OX  0.2
$c                  #define   AXE_OX1_0 0.0
$c                  #define   AXE_OX1_N (AXE_OX1_0+L_AXE_OX)
$c                  #define   AXE_OX2_0 (AXE_OX2_N-L_AXE_OX)
$c                  #define   AXE_OX2_N (1-AXE_OX1_0)
$c                  #define   AXE_OX_0  COND((k == 1),AXE_OX1_0,COND((k == 2),AXE_OX2_0,0))
$c                  #define   AXE_OX_N  COND((k == 1),AXE_OX1_N,COND((k == 2),AXE_OX2_N,1))
$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                                      int       k;
$c
$c                                      printf("$DELETE     $xTV/VITESSES\n");
$c                                      printf("$DELETE     $xTV/VITESSES.1\n");
$c                                      printf("$DELETE     $xTV/VITESSES.2\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("$xrv/selection.01$X
$c                                                          ne=0
$c                                                          fichier=$xTV/VITESSES
$c                                                          selection=$xTV/ENSEMBLE.100
$c                                                          > $xTV/VITESSES.1\n"
$c                                            ,n
$c                                             );
$c                                      printf("$xrv/selection.01$X
$c                                                          ne=0
$c                                                          fichier=$xTV/VITESSES
$c                                                          selection=$xTV/ENSEMBLE.001
$c                                                          > $xTV/VITESSES.2\n"
$c                                            ,n
$c                                             );
$c
$c                                      for       (k=1 ; k<=2 ; k++)
$c                                                {
$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("set  Particules=`$WC $xTV/VITESSES.%d`\n"
$c                                                      ,k
$c                                                       );
$c                                                printf("set  Particules=$Particules[$WC1]\n");
$c
$c                                                printf("$xrv/histogram.01$X
$c                                                                    ne=0
$c                                                                    fichier=$xTV/VITESSES.%d
$c                                                                    nombre=%d
$c                                                                    forcer=VRAI minimum=$MinL maximum=$MaxL
$c                                                                    > $xTV/HISTOGRAMME\n"
$c                                                      ,k
$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                                      }
$c                            }

$Z                  $DELETE                                      $xTV/LISTE_POINTS
$Z                  $DELETE                                      $xTV/VITESSES
$Z                  $DELETE                                      $xTV/VITESSES.1
$Z                  $DELETE                                      $xTV/VITESSES.2
$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.