#######################################################################################################################################
# #
# 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