/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D ' U N E   F O N C T I O N   D E   D E N S I T E   D E F I N I E   P A R                                    */
/*        U N   E N S E M B L E   D E   P O I N T S   { X , Y , Z }                                                                  */
/*        E T   E L L I P S E   G E N E R A L I S E E S  :                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Pour la notion d'ellipses generalisees,                                                                        */
/*                  on verra 'v $xrv/densite.01$I 20030228091429'                                                                    */
/*                  avec profit. On utilisera alors plus de 2 points                                                                 */
/*                  donnant ainsi naissance a des "ellipses" a plus                                                                  */
/*                  de 2 foyers...                                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrv/densite.01$K' :                                                                                            */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20000911084827).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PRAGMA_CPP_____AUTORISER_LE_GooF
                                        /* Ceci a ete introduit le 20070727155719.                                                   */
#define   PRAGMA_CPP_____SI_LE_GooF_EST_ACTIVABLE_ALORS_FAIRE_DE_L_ARITHMETIQUE_ETENDUE_DES_NOMBRES_FLOTTANTS
                                        /* Ceci a ete introduit le 20070727155719.                                                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE
#include  image_image_DI_ALBUM_EXT
                                        /* Introduit le 20100504154039...                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V A L E U R S   I M P L I C I T E S   D E S   P A R A M E T R E S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/sequence.01.I"
                                        /* ATTENTION, on definit ainsi le symbole 'DERNIERE_IMAGE' qui ne sert a rien ici, puisque   */
                                        /* c'est en effet 'Zmax' qui joue ce role (introduit le 20100504105806).                     */

#define   VISUALISER_EN_MODE_RECTANGULAIRE                                                                                              \
                    FAUX
#define   CENTRER_LES_COORDONNEES_NORMALISEES                                                                                           \
                    VRAI
#include  xci/coordonne.01.I"
                                        /* Afin qu'un carre reste un carre...                                                        */

#define   GENERER_UNE_IMAGE_UNIQUE                                                                                                      \
                    VRAI                                                                                                                \
                                        /* Faut-il generer une image unique ('VRAI') ou un album ('FAUX'). Cette possibilite a       */ \
                                        /* ete introduite le 20100504104717, la valeur par defaut garantissant la compatibilite      */ \
                                        /* anterieure...                                                                             */

#define   TRANCHE_VERTICALE                                                                                                             \
                    FZorigine                                                                                                           \
                                        /* Tranche verticale a priori correspondant a l'Image generee...                             */

#define   L_ESPACE_EST_TORIQUE                                                                                                          \
                    FAUX                                                                                                                \
                                        /* L'espace est-il torique et donc periodique ('VRAI') ou non periodique ('FAUX') ?          */
#define   L_ESPACE_EST_TORIQUE_EN_X                                                                                                     \
                    VRAI
#define   L_ESPACE_EST_TORIQUE_EN_Y                                                                                                     \
                    VRAI
#define   L_ESPACE_EST_TORIQUE_EN_Z                                                                                                     \
                    VRAI
                                        /* Si 'EST_VRAI(l_espace_est_torique)' controle individuellement les trois axes {X,Y,Z}.     */
                                        /* Ceci fut introduit le 20070418130650, en particulier pour permettre d'optimiser les       */
                                        /* cas bidimensionnels (ou la coordonnee 'Z' est inutile...).                                */

#define   FACTEUR_AXI                                                                                                                   \
                    FU
#define   FACTEUR_BXI                                                                                                                   \
                    FZERO
#define   FACTEUR_AYI                                                                                                                   \
                    FU
#define   FACTEUR_BYI                                                                                                                   \
                    FZERO
#define   FACTEUR_AZI                                                                                                                   \
                    FU
#define   FACTEUR_BZI                                                                                                                   \
                    FZERO
                                        /* Transformation des coordonnees Image.                                                     */
#define   FACTEUR_AXF                                                                                                                   \
                    FU
#define   FACTEUR_BXF                                                                                                                   \
                    FZERO
#define   FACTEUR_AYF                                                                                                                   \
                    FU
#define   FACTEUR_BYF                                                                                                                   \
                    FZERO
#define   FACTEUR_AZF                                                                                                                   \
                    FU
#define   FACTEUR_BZF                                                                                                                   \
                    FZERO
                                        /* Transformation des coordonnees Fichier.                                                   */

#define   X_MINIMUM                                                                                                                     \
                    COORDONNEE_BARYCENTRIQUE_MINIMALE
#define   X_MAXIMUM                                                                                                                     \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE
                                        /* Extrema a priori de la coordonnee 'X' normalisee (introduit le 20100827205253).           */
#define   Y_MINIMUM                                                                                                                     \
                    COORDONNEE_BARYCENTRIQUE_MINIMALE
#define   Y_MAXIMUM                                                                                                                     \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE
                                        /* Extrema a priori de la coordonnee 'Y' normalisee (introduit le 20100827205253).           */
#define   Z_MINIMUM                                                                                                                     \
                    COORDONNEE_BARYCENTRIQUE_MINIMALE
#define   Z_MAXIMUM                                                                                                                     \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE
                                        /* Extrema a priori de la coordonnee 'Z' normalisee (introduit le 20100827205253).           */

#define   EDITER_LES_PARAMETRES_EVENTUELLEMENT_VARIABLES                                                                                \
                    FAUX                                                                                                                \
                                        /* Faut-il editer 'facteur_de_la_distance_dans_l_exponentielle' de meme que les extrema des  */ \
                                        /* coordonnees normalisees ('VRAI') ou pas ('FAUX') ?                                        */

#define   CALCULER_DES_DISTANCES_ETENDUES                                                                                               \
                    FAUX                                                                                                                \
                                        /* Faut-il utiliser calculer des distances "etendues" -via l'arithmetique etendue- ('VRAI')  */ \
                                        /* ou pas ('FAUX') ? Ceci fut introduit le 20070727155719, la valeur par defaut assurant     */ \
                                        /* la compatibilite anterieure...                                                            */

#define   PONDERATION_DE_LA_DISTANCE_EUCLIDIENNE                                                                                        \
                    FU
#define   PONDERATION_DE_LA_DISTANCE_DU_CHAUFFEUR_DE_TAXI_INFERIEURE                                                                    \
                    FZERO
#define   PONDERATION_DE_LA_DISTANCE_DU_CHAUFFEUR_DE_TAXI_SUPERIEURE                                                                    \
                    FZERO
#define   PONDERATION_DE_LA_DISTANCE_DU_CHAUFFEUR_DE_TAXI_CUMULEE                                                                       \
                    FZERO
#define   PONDERATION_DE_LA_DISTANCE_DU_CHAUFFEUR_DE_TAXI_MULTIPLIEE                                                                    \
                    FZERO
                                        /* Ponderation des differentes distances calculables (introduit le 20070715110705).          */

#define   IGNORER_LES_GRANDES_DISTANCES                                                                                                 \
                    FAUX
#define   SEUIL_DE_DEFINITION_DES_GRANDES_DISTANCES                                                                                     \
                    F_INFINI
                                        /* Le 20070514102133 fut introduit la possibilite d'oublier purement et simplement les       */
                                        /* grandes distances et ce dans le but d'accelerer les calculs. A titre d'exemple, les       */
                                        /* images 'v $xiirk/DIFS.21.Densite' et 'v $xiirk/DIFS.22.Densite' demandent environ         */
                                        /* 06:00 sur '$LACT15 et $LACT17 respectivement. Les tests effectues montrent qu'avec        */
                                        /* un seuil de 0.1, l'image 'v $xiirk/DIFS.11.Densite' n'est pas affectee, alors que         */
                                        /* le temps de calcul etait divise par 4.2...                                                */
                                        /*                                                                                           */
                                        /* Le 20070515105215 des tests ont ete faits relativement a 'v $xiirk/DIFS.21.Densite'.      */
                                        /* Sur '$LACT15' le calcul a demande environ 06:00:00 sur '$LACT15', alors que sur '$LACT16' */
                                        /* (sans oublier le rapport de performances entre les deux MACHINEs -environ 1.5-), ce temps */
                                        /* est passe a 00:54:20 avec un seuil egal a 0.1 et la densite calculee etant identique      */
                                        /* (en mode "standard=VRAI"). Par contre avec un seuil de 0.03, alors que le temps de        */
                                        /* calcul etait passe a 00:49:50, la densite calculee etait differente pour, qui plus est,   */
                                        /* un gain en temps de calcul faible (de 54 a 50 minutes...). Enfin, avec un seuil de 0.01   */
                                        /* le temps de calcul est passe a 00:49:30 avec evidemment une degradation plus forte...     */
                                        /* Il semblerait donc qu'un "bon" seuil sur les grandes distances soit 0.1 qui donne donc    */
                                        /* un gain de temps de ((06:00:00)/1.5)/(00:54:20) (environ 4) ; au passage le rapport de    */
                                        /* performances entre '$LACT15' et '$LACT16' est donne par 'v $xt/$Fnota 20040227102626'...  */

#define   MINIMUM_DE_LA_DISTANCE                                                                                                        \
                    FZERO
#define   MAXIMUM_DE_LA_DISTANCE                                                                                                        \
                    F_INFINI
                                        /* Le 20070506183223, 'SEUIL_DE_LA_DISTANCE' a ete remplace par quelque chose de plus        */
                                        /* general [MINIMUM_DE_LA_DISTANCE,MAXIMUM_DE_LA_DISTANCE]. On ne garde donc que les         */
                                        /* distances qui sont dans ce segment. On notera qu'evidemment 'SEUIL_DE_LA_DISTANCE'        */
                                        /* valait 'F_INFINI'...                                                                      */
#define   VALEUR_DE_LA_DISTANCE_AU_MINIMUM_DE_LA_DISTANCE                                                                               \
                    MINIMUM_DE_LA_DISTANCE
#define   VALEUR_DE_LA_DISTANCE_AU_MAXIMUM_DE_LA_DISTANCE                                                                               \
                    MAXIMUM_DE_LA_DISTANCE
                                        /* Valeurs a forcer pour la distance lorsqu'il y filtrage. Ceci fut introduit le             */
                                        /* 20070508090851 avec des valeurs assurant la compatibilite anterieure...                   */

#define   AJUSTER_AUTOMATIQUEMENT_LE_FACTEUR_DE_LA_DISTANCE_DANS_L_EXPONENTIELLE                                                        \
                    FAUX                                                                                                                \
                                        /* Faut-il ajuster automatiquement 'facteur_de_la_distance_dans_l_exponentielle' ('VRAI')    */ \
                                        /* ou lui laisser sa valeur courante ('FAUX') ?                                              */

#define   FACTEUR_DE_LA_DISTANCE                                                                                                        \
                    FU                                                                                                                  \
                                        /* Facteur de la distance apres son calcul "euclidien"...                                    */

#define   FACTEUR_DE_LA_DISTANCE_DANS_L_EXPONENTIELLE                                                                                   \
                    FLOT(SEIZE)                                                                                                         \
                                        /* Facteur multiplicatif de la distance apres son elevation a                                */ \
                                        /* 'EXPOSANT_DE_LA_DISTANCE_DANS_L_EXPONENTIELLE'.                                           */
#define   EXPOSANT_DE_LA_DISTANCE_DANS_L_EXPONENTIELLE                                                                                  \
                    FDEUX                                                                                                               \
                                        /* Exposant de la distance dans l'exponentielle (a priori, on va utiliser des gaussiennes).  */

#define   MODULER_L_EXPONENTIELLE                                                                                                       \
                    FAUX                                                                                                                \
                                        /* Faut-il moduler l'exponentielle ('VRAI') ou l'utiliser tel quel ('FAUX') ?                */

#define   FACTEUR_DE_L_EXPONENTIELLE                                                                                                    \
                    FU                                                                                                                  \
                                        /* Facteur de l'exponentielle si 'IL_NE_FAUT_PAS(MODULER_L_EXPONENTIELLE)'. Ceci fut         */ \
                                        /* introduit le 20100831160725...                                                            */

#define   FACTEUR_DU_MONOME                                                                                                             \
                    FU                                                                                                                  \
                                        /* Facteur du monome...                                                                      */
#define   EXPOSANT_DE_LA_DISTANCE_DANS_LE_MONOME                                                                                        \
                    FU                                                                                                                  \
                                        /* Exposant de la distance dans le monome...                                                 */

#define   FACTEUR_DU_COSINUS                                                                                                            \
                    FU                                                                                                                  \
                                        /* Facteur du cosinus...                                                                     */
#define   EXPOSANT_DE_LA_DISTANCE_DANS_LE_COSINUS                                                                                       \
                    FU                                                                                                                  \
                                        /* Exposant de la distance dans le cosinus...                                                */
#define   OMEGA_DU_COSINUS                                                                                                              \
                    FU
#define   PHI_DU_COSINUS                                                                                                                \
                    FZERO
                                        /* Pulsation "omega" et phase "phi" du cosinus.                                              */

#define   CALCULER_LA_DENSITE_PAR_SOMMATION                                                                                             \
                    VRAI                                                                                                                \
                                        /* Faut-il calculer la densite par sommation ('VRAI') ou par maximisation ('FAUX') ? Cette   */ \
                                        /* possibilite fut introduite le 20070517103803 afin de pouvoir faire de la percolation      */ \
                                        /* "continue" ou les particules ponctuelles sont remplacees par des disques. Il suffira      */ \
                                        /* donc, pour cela, de calculer la densite par maximisation, puis de "binariser" le resultat */ \
                                        /* ce qui transformera donc les gaussiennes en disques. Dans ce cas, il faudra utiliser les  */ \
                                        /* options :                                                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  rectangulaire=FAUX grand_carre=FAUX                                      */ \
                                        /*                                                                                           */ \
                                        /* afin que les proportions (la "circularite") soient respectees...                          */

#define   RENORMALISER_LES_DENSITES                                                                                                     \
                    FAUX                                                                                                                \
                                        /* Faut-il renormaliser ('VRAI') ou pas ('FAUX') les densites ? Ceci a ete introduit         */ \
                                        /* le 20100504145037, la valeur par defaut garantissant la compatibilite anterieure...       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   F I C H I E R S  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/ARITHMET.1d.I"
                                        /* Passage a l'allocation dynamique le 20060214185901...                                     */
#include  xrv/ARITHMET.21.I"
#include  xrv/champs_5.41.I"

#define   X_IMPLICITE                                                                                                                   \
                    FZERO
#define   Y_IMPLICITE                                                                                                                   \
                    FZERO
#define   Z_IMPLICITE                                                                                                                   \
                    FZERO

gGENERATION_D_UN_FICHIER(fichier_LISTE_X,liste_initiale_des_X);
gGENERATION_D_UN_FICHIER(fichier_LISTE_Y,liste_initiale_des_Y);
gGENERATION_D_UN_FICHIER(fichier_LISTE_Z,liste_initiale_des_Z);
                                        /* Definition en memoire des fichiers de coordonnees cartesiennes.                           */

#define   ELEMENT_DU_FICHIER_LISTE_X(index)                                                                                             \
                    gELEMENT_DU_FICHIER(liste_initiale_des_X,index)
#define   ELEMENT_DU_FICHIER_LISTE_Y(index)                                                                                             \
                    gELEMENT_DU_FICHIER(liste_initiale_des_Y,index)
#define   ELEMENT_DU_FICHIER_LISTE_Z(index)                                                                                             \
                    gELEMENT_DU_FICHIER(liste_initiale_des_Z,index)
                                        /* Acces a un element courant des fichiers de coordonnees cartesiennes.                      */

#define   MODULATION_DU_FACTEUR_DE_LA_DISTANCE_DANS_L_EXPONENTIELLE_IMPLICITE                                                           \
                    FU
gGENERATION_D_UN_FICHIER(fichier_LISTE_MODULATION_DU_FACTEUR_DE_LA_DISTANCE,liste_initiale_des_MODULATION_DU_FACTEUR_DE_LA_DISTANCE);
#define   ELEMENT_DU_FICHIER_LISTE_MODULATION_DU_FACTEUR_DE_LA_DISTANCE(index)                                                          \
                    gELEMENT_DU_FICHIER(liste_initiale_des_MODULATION_DU_FACTEUR_DE_LA_DISTANCE,index)
                                        /* "Modulateur" de la distance dans l'exponentielle.                                         */

#define   MODULATION_DE_OMEGA_IMPLICITE                                                                                                 \
                    FU
gGENERATION_D_UN_FICHIER(fichier_LISTE_MODULATION_DE_OMEGA,liste_initiale_des_MODULATION_DE_OMEGA);
#define   ELEMENT_DU_FICHIER_LISTE_MODULATION_DE_OMEGA(index)                                                                           \
                    gELEMENT_DU_FICHIER(liste_initiale_des_MODULATION_DE_OMEGA,index)
                                        /* "Modulateur" de "omega" dans le cosinus.                                                  */

#define   MODULATION_DE_PHI_IMPLICITE                                                                                                   \
                    FU
gGENERATION_D_UN_FICHIER(fichier_LISTE_MODULATION_DE_PHI,liste_initiale_des_MODULATION_DE_PHI);
#define   ELEMENT_DU_FICHIER_LISTE_MODULATION_DE_PHI(index)                                                                             \
                    gELEMENT_DU_FICHIER(liste_initiale_des_MODULATION_DE_PHI,index)
                                        /* "Modulateur" de "phi" dans le cosinus.                                                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L A   P E R I O D I C I T E   D E   L ' E S P A C E  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   LONGUEUR_DES_TROIS_DIMENSIONS                                                                                                 \
                    CHOY(_____lNORMALISE_OX(dimX)                                                                                       \
                        ,_____lNORMALISE_OY(dimY)                                                                                       \
                        ,_____lNORMALISE_OZ(dimZ)                                                                                       \
                         )                                                                                                              \
                                        /* Longueur commune des trois dimensions (l'espace est un cube 1x1x1).                       */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : jusqu'au 20070416120500, il y avait {dimXN,dimYN,dimZN} par erreur ci-dessus. */
#define   TRANSLATION_NEGATIVE_DES_COORDONNEES(l_axe_est_torique)                                                                       \
                    COND(IFET(EST_VRAI(l_espace_est_torique),EST_VRAI(l_axe_est_torique))                                               \
                        ,NEGA(LONGUEUR_DES_TROIS_DIMENSIONS)                                                                            \
                        ,FZERO                                                                                                          \
                         )
#define   TRANSLATION_POSITIVE_DES_COORDONNEES(l_axe_est_torique)                                                                       \
                    COND(IFET(EST_VRAI(l_espace_est_torique),EST_VRAI(l_axe_est_torique))                                               \
                        ,NEUT(LONGUEUR_DES_TROIS_DIMENSIONS)                                                                            \
                        ,FZERO                                                                                                          \
                         )
                                        /* Translation "negative" et "positive" des trois coordonnees...                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   " R A P P O R T "   E N T R E   ' OX '   E T   ' OY '  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   TRANSFORMATION_COORDONNEEE_X(x)                                                                                               \
                    TRANS_SUPER_cNORMALISE_OX(x,translation_des_X_normalisees)
#define   TRANSFORMATION_COORDONNEEE_Y(y)                                                                                               \
                    TRANS_SUPER_cNORMALISE_OY(y,translation_des_Y_normalisees)
                                        /* Transformation des coordonnees 'X' et 'Y'...                                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   D E N S I T E  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/densite.01.I"
                                        /* Introduit le 20111213102619 a cause de 'v $xcc/cpp$Z 20111129084103'...                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D ' U N E   F O N C T I O N   D E   D E N S I T E   D E F I N I E   P A R                                    */
/*        U N   E N S E M B L E   D E   P O I N T S   { X , Y , Z }                                                                  */
/*        E T   E L L I P S E   G E N E R A L I S E E S  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
#include  xci/coordonne.02.I"
#include  xrv/ARITHMET.22.I"

     DEFV(Logical,INIT(generer_une_image_unique,GENERER_UNE_IMAGE_UNIQUE));
                                        /* Faut-il generer une image unique ('VRAI') ou un album ('FAUX'). Cette possibilite a       */
                                        /* ete introduite le 20100504104717, la valeur par defaut garantissant la compatibilite      */
                                        /* anterieure...                                                                             */

     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));

     DEFV(CHAR,INIC(POINTERc(nom_postfixe),NOM_UNDEF_VIDE));
                                        /* Nom d'un eventuel postfixe a placer derriere <nom_albumA><numero> (par exemple '$ROUGE'). */
     DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
                                        /* Numero de la premiere image,                                                              */
     DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
                                        /* Pas de passage d'un numero d'image a une autre.                                           */
     DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES));
                                        /* Nombre de chiffres codant le numero des images de la serie...                             */

     DEFV(Float,INIT(tranche_Z,TRANCHE_VERTICALE));
                                        /* Definition de la troisieme coordonnee 'Z' correspondant a l'Image generee.                */

     DEFV(Logical,INIT(l_espace_est_torique,L_ESPACE_EST_TORIQUE));
                                        /* L'espace est-il torique et donc periodique ('VRAI') ou non periodique ('FAUX') ?          */
     DEFV(Logical,INIT(l_espace_est_torique_en_X,L_ESPACE_EST_TORIQUE_EN_X));
     DEFV(Logical,INIT(l_espace_est_torique_en_Y,L_ESPACE_EST_TORIQUE_EN_Y));
     DEFV(Logical,INIT(l_espace_est_torique_en_Z,L_ESPACE_EST_TORIQUE_EN_Z));
                                        /* Si 'EST_VRAI(l_espace_est_torique)' controle individuellement les trois axes {X,Y,Z}.     */
                                        /* Ceci fut introduit le 20070418130650, en particulier pour permettre d'optimiser les       */
                                        /* cas bidimensionnels (ou la coordonnee 'Z' est inutile...).                                */

     DEFV(Float,INIT(facteur_AXI,FACTEUR_AXI));
     DEFV(Float,INIT(facteur_BXI,FACTEUR_BXI));
     DEFV(Float,INIT(facteur_AYI,FACTEUR_AYI));
     DEFV(Float,INIT(facteur_BYI,FACTEUR_BYI));
     DEFV(Float,INIT(facteur_AZI,FACTEUR_AZI));
     DEFV(Float,INIT(facteur_BZI,FACTEUR_BZI));
                                        /* Transformation des coordonnees Image.                                                     */
     DEFV(Float,INIT(facteur_AXF,FACTEUR_AXF));
     DEFV(Float,INIT(facteur_BXF,FACTEUR_BXF));
     DEFV(Float,INIT(facteur_AYF,FACTEUR_AYF));
     DEFV(Float,INIT(facteur_BYF,FACTEUR_BYF));
     DEFV(Float,INIT(facteur_AZF,FACTEUR_AZF));
     DEFV(Float,INIT(facteur_BZF,FACTEUR_BZF));
                                        /* Transformation des coordonnees Fichier.                                                   */

     DEFV(Float,INIT(X_minimum,X_MINIMUM));
     DEFV(Float,INIT(X_maximum,X_MAXIMUM));
                                        /* Extrema a priori de la coordonnee 'X' normalisee (introduit le 20100827205253).           */
     DEFV(Float,INIT(Y_minimum,Y_MINIMUM));
     DEFV(Float,INIT(Y_maximum,Y_MAXIMUM));
                                        /* Extrema a priori de la coordonnee 'Y' normalisee (introduit le 20100827205253).           */
     DEFV(Float,INIT(Z_minimum,Z_MINIMUM));
     DEFV(Float,INIT(Z_maximum,Z_MAXIMUM));
                                        /* Extrema a priori de la coordonnee 'Z' normalisee (introduit le 20100827205253).           */

     DEFV(Logical,INIT(editer_les_parametres_eventuellement_variables
                      ,EDITER_LES_PARAMETRES_EVENTUELLEMENT_VARIABLES
                       )
          );
                                        /* Faut-il editer 'facteur_de_la_distance_dans_l_exponentielle' de meme que les extrema des  */
                                        /* coordonnees normalisees ('VRAI') ou pas ('FAUX') ?                                        */

     DEFV(Logical,INIT(calculer_des_distances_etendues,CALCULER_DES_DISTANCES_ETENDUES));
                                        /* Faut-il utiliser l'arithmetique etendue ('VRAI') ou pas ('FAUX') ? Ceci fut introduit     */
                                        /* le 20070727155719, la valeur par defaut assurant la compatibilite anterieure...           */

     DEFV(Float,INIT(ponderation_de_la_distance_euclidienne
                    ,PONDERATION_DE_LA_DISTANCE_EUCLIDIENNE
                     )
          );
     DEFV(Float,INIT(ponderation_de_la_distance_du_chauffeur_de_taxi_inferieure
                    ,PONDERATION_DE_LA_DISTANCE_DU_CHAUFFEUR_DE_TAXI_INFERIEURE
                     )
          );
     DEFV(Float,INIT(ponderation_de_la_distance_du_chauffeur_de_taxi_superieure
                    ,PONDERATION_DE_LA_DISTANCE_DU_CHAUFFEUR_DE_TAXI_SUPERIEURE
                     )
          );
     DEFV(Float,INIT(ponderation_de_la_distance_du_chauffeur_de_taxi_cumulee
                    ,PONDERATION_DE_LA_DISTANCE_DU_CHAUFFEUR_DE_TAXI_CUMULEE
                     )
          );
     DEFV(Float,INIT(ponderation_de_la_distance_du_chauffeur_de_taxi_multipliee
                    ,PONDERATION_DE_LA_DISTANCE_DU_CHAUFFEUR_DE_TAXI_MULTIPLIEE
                     )
          );
                                        /* Ponderation des differentes distances calculables (introduit le 20070715110705).          */

     DEFV(Logical,INIT(ignorer_les_grandes_distances,IGNORER_LES_GRANDES_DISTANCES));
     DEFV(Float,INIT(seuil_de_definition_des_grandes_distances,SEUIL_DE_DEFINITION_DES_GRANDES_DISTANCES));
                                        /* Le 20070514102133 fut introduit la possibilite d'oublier purement et simplement les       */
                                        /* grandes distances et ce dans le but d'accelerer les calculs. A titre d'exemple, les       */
                                        /* images 'v $xiirk/DIFS.21.Densite' et 'v $xiirk/DIFS.22.Densite' demandent environ         */
                                        /* 06:00 sur '$LACT15 et $LACT17 respectivement. Les tests effectues montrent qu'avec        */
                                        /* un seuil de 0.1, l'image 'v $xiirk/DIFS.11.Densite' n'est pas affectee, alors que         */
                                        /* le temps de calcul etait divise par 4.2...                                                */
                                        /*                                                                                           */
                                        /* Le 20070515105215 des tests ont ete faits relativement a 'v $xiirk/DIFS.21.Densite'.      */
                                        /* Sur '$LACT15' le calcul a demande environ 06:00:00 sur '$LACT15', alors que sur '$LACT16' */
                                        /* (sans oublier le rapport de performances entre les deux MACHINEs -environ 1.5-), ce temps */
                                        /* est passe a 00:54:20 avec un seuil egal a 0.1 et la densite calculee etant identique      */
                                        /* (en mode "standard=VRAI"). Par contre avec un seuil de 0.03, alors que le temps de        */
                                        /* calcul etait passe a 00:49:50, la densite calculee etait differente pour, qui plus est,   */
                                        /* un gain en temps de calcul faible (de 54 a 50 minutes...). Enfin, avec un seuil de 0.01   */
                                        /* le temps de calcul est passe a 00:49:30 avec evidemment une degradation plus forte...     */
                                        /* Il semblerait donc qu'un "bon" seuil sur les grandes distances soit 0.1 qui donne donc    */
                                        /* un gain de temps de ((06:00:00)/1.5)/(00:54:20) (environ 4) ; au passage le rapport de    */
                                        /* performances entre '$LACT15' et '$LACT16' est donne par 'v $xt/$Fnota 20040227102626'...  */
     DEFV(Float,INIT(minimum_de_la_distance,MINIMUM_DE_LA_DISTANCE));
     DEFV(Float,INIT(maximum_de_la_distance,MAXIMUM_DE_LA_DISTANCE));
                                        /* Le 20070506183223, 'SEUIL_DE_LA_DISTANCE' a ete remplace par quelque chose de plus        */
                                        /* general [MINIMUM_DE_LA_DISTANCE,MAXIMUM_DE_LA_DISTANCE]. On ne garde donc que les         */
                                        /* distances qui sont dans ce segment. On notera qu'evidemment 'seuil_de_la_distance'        */
                                        /* valait 'F_INFINI' par defaut...                                                           */
     DEFV(Float,INIT(valeur_de_la_distance_au_minimum_de_la_distance,VALEUR_DE_LA_DISTANCE_AU_MINIMUM_DE_LA_DISTANCE));
     DEFV(Float,INIT(valeur_de_la_distance_au_maximum_de_la_distance,VALEUR_DE_LA_DISTANCE_AU_MAXIMUM_DE_LA_DISTANCE));
                                        /* Valeurs a forcer pour la distance lorsqu'il y filtrage. Ceci fut introduit le             */
                                        /* 20070508090851 avec des valeurs assurant la compatibilite anterieure...                   */

     DEFV(Logical,INIT(ajuster_automatiquement_le_facteur_de_la_distance_dans_l_exponentielle
                      ,AJUSTER_AUTOMATIQUEMENT_LE_FACTEUR_DE_LA_DISTANCE_DANS_L_EXPONENTIELLE
                       )
          );
                                        /* Faut-il ajuster automatiquement 'facteur_de_la_distance_dans_l_exponentielle' ('VRAI')    */
                                        /* ou lui laisser sa valeur courante ('FAUX') ?                                              */

     DEFV(Float,INIT(facteur_de_la_distance,FACTEUR_DE_LA_DISTANCE));
                                        /* Facteur de la distance apres son calcul "euclidien"...                                    */

     DEFV(Float,INIT(facteur_de_la_distance_dans_l_exponentielle,FACTEUR_DE_LA_DISTANCE_DANS_L_EXPONENTIELLE));
                                        /* Facteur multiplicatif de la distance apres son elevation a                                */
                                        /* 'exposant_de_la_distance_dans_l_exponentielle'. On notera que plus ce facteur est grand,  */
                                        /* plus les gaussiennes sont resserrees (ce qui est logique a cause du 'NEGA(...)' qui       */
                                        /* intervient dans le calcul de 'fonction_de_la_distance_courante').                         */
     DEFV(Float,INIT(exposant_de_la_distance_dans_l_exponentielle,EXPOSANT_DE_LA_DISTANCE_DANS_L_EXPONENTIELLE));
                                        /* Exposant de la distance dans l'exponentielle (a priori, on va utiliser des gaussiennes).  */

     DEFV(Logical,INIT(moduler_l_exponentielle,MODULER_L_EXPONENTIELLE));
                                        /* Faut-il moduler l'exponentielle ('VRAI') ou l'utiliser tel quel ('FAUX') ?                */

     DEFV(Float,INIT(facteur_de_l_exponentielle,FACTEUR_DE_L_EXPONENTIELLE));
                                        /* Facteur de l'exponentielle si 'IL_NE_FAUT_PAS(MODULER_L_EXPONENTIELLE)'. Ceci fut         */
                                        /* introduit le 20100831160725...                                                            */
     DEFV(Float,INIT(facteur_du_monome,FACTEUR_DU_MONOME));
                                        /* Facteur du monome...                                                                      */
     DEFV(Float,INIT(exposant_de_la_distance_dans_le_monome,EXPOSANT_DE_LA_DISTANCE_DANS_LE_MONOME));
                                        /* Exposant de la distance dans le monome...                                                 */

     DEFV(Float,INIT(facteur_du_cosinus,FACTEUR_DU_COSINUS));
                                        /* Facteur du cosinus...                                                                     */
     DEFV(Float,INIT(exposant_de_la_distance_dans_le_cosinus,EXPOSANT_DE_LA_DISTANCE_DANS_LE_COSINUS));
                                        /* Exposant de la distance dans le cosinus...                                                */
     DEFV(Float,INIT(omega_du_cosinus,OMEGA_DU_COSINUS));
     DEFV(Float,INIT(phi_du_cosinus,PHI_DU_COSINUS));
                                        /* Pulsation "omega" et phase "phi" du cosinus.                                              */

     DEFV(Logical,INIT(calculer_la_densite_par_sommation,CALCULER_LA_DENSITE_PAR_SOMMATION));
                                        /* Faut-il calculer la densite par sommation ('VRAI') ou par maximisation ('FAUX') ? Cette   */
                                        /* possibilite fut introduite le 20070517103803 afin de pouvoir faire de la percolation      */
                                        /* "continue" ou les particules ponctuelles sont remplacees par des disques. Il suffira      */
                                        /* donc, pour cela, de calculer la densite par maximisation, puis de "binariser" le resultat */
                                        /* ce qui transformera donc les gaussiennes en disques. Dans ce cas, il faudra utiliser les  */
                                        /* options :                                                                                 */
                                        /*                                                                                           */
                                        /*                  rectangulaire=FAUX grand_carre=FAUX                                      */
                                        /*                                                                                           */
                                        /* afin que les proportions (la "circularite") soient respectees...                          */

     DEFV(Logical,INIT(renormaliser_les_densites,RENORMALISER_LES_DENSITES));
                                        /* Faut-il renormaliser ('VRAI') ou pas ('FAUX') les exponentielles ? Ceci a ete introduit   */
                                        /* le 20100504145037, la valeur par defaut garantissant la compatibilite anterieure...       */
     /*..............................................................................................................................*/

#include  xci/coordonne.04.I"
                                        /* Ceci a ete introduit le 20051218183919, ainsi que les 'PROCESS_ARGUMENT_?(...)' qui       */
                                        /* suivent...                                                                                */

     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(PROCESS_ARGUMENT_I("nombre_elements=""ne=",nombre_d_elements
                                           ,BLOC(VIDE;)
                                           ,BLOC(Bblock
                                                 PRINT_AVERTISSEMENT("'ne=' doit etre defini avant toute entree de fichiers");
                                                 Eblock
                                                 )
                                            );

                         PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01;

                         PROKESF_ARGUMENT_FICHIER("LISTE_X="
                                                 ,fichier_LISTE_X
                                                 ,liste_initiale_des_X
                                                 ,X_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_Y="
                                                 ,fichier_LISTE_Y
                                                 ,liste_initiale_des_Y
                                                 ,Y_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_Z="
                                                 ,fichier_LISTE_Z
                                                 ,liste_initiale_des_Z
                                                 ,Z_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         PROKESF_ARGUMENT_FICHIER("LISTE_MODULATION_DISTANCE="
                                                 ,fichier_LISTE_MODULATION_DU_FACTEUR_DE_LA_DISTANCE
                                                 ,liste_initiale_des_MODULATION_DU_FACTEUR_DE_LA_DISTANCE
                                                 ,MODULATION_DU_FACTEUR_DE_LA_DISTANCE_DANS_L_EXPONENTIELLE_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_MODULATION_OMEGA="
                                                 ,fichier_LISTE_MODULATION_DE_OMEGA
                                                 ,liste_initiale_des_MODULATION_DE_OMEGA
                                                 ,MODULATION_DE_OMEGA_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_MODULATION_PHI="
                                                 ,fichier_LISTE_MODULATION_DE_PHI
                                                 ,liste_initiale_des_MODULATION_DE_PHI
                                                 ,MODULATION_DE_PHI_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         GET_ARGUMENT_L("image_unique=""image=",generer_une_image_unique);
                         GET_ARGUMENT_N("album=",generer_une_image_unique);
                                        /* Arguments introduits le 20100504104717...                                                 */

                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_C("postfixe=",nom_postfixe);
                         GET_ARGUMENT_I("premiere=",premiere_image);
                         GET_ARGUMENT_I("pas=",pas_des_images);
                         GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);
                                        /* Arguments introduits le 20100504104717...                                                 */

                         GET_ARGUMENT_L("centrer=",centrer_les_coordonnees_normalisees);

                         GET_ARGUMENT_F("z=""Z=",tranche_Z);

                         GET_ARGUMENT_L("torique=""periodique=",l_espace_est_torique);
                         GET_ARGUMENT_L("toriqueX=""periodiqueX=",l_espace_est_torique_en_X);
                         GET_ARGUMENT_L("toriqueY=""periodiqueY=",l_espace_est_torique_en_Y);
                         GET_ARGUMENT_L("toriqueZ=""periodiqueZ=",l_espace_est_torique_en_Z);
                                        /* Le controle individuel des trois axes {X,Y,Z} fut introduit le 20070418130650...          */

                         GET_ARGUMENT_F("AXI=",facteur_AXI);
                         GET_ARGUMENT_F("BXI=",facteur_BXI);
                         GET_ARGUMENT_F("AYI=",facteur_AYI);
                         GET_ARGUMENT_F("BYI=",facteur_BYI);
                         GET_ARGUMENT_F("AZI=",facteur_AZI);
                         GET_ARGUMENT_F("BZI=",facteur_BZI);

                         GET_ARGUMENT_F("AXF=",facteur_AXF);
                         GET_ARGUMENT_F("BXF=",facteur_BXF);
                         GET_ARGUMENT_F("AYF=",facteur_AYF);
                         GET_ARGUMENT_F("BYF=",facteur_BYF);
                         GET_ARGUMENT_F("AZF=",facteur_AZF);
                         GET_ARGUMENT_F("BZF=",facteur_BZF);

                         GET_ARGUMENT_F("FXmin=",X_minimum);
                         GET_ARGUMENT_F("FXmax=",X_maximum);
                         GET_ARGUMENT_F("FYmin=",Y_minimum);
                         GET_ARGUMENT_F("FYmax=",Y_maximum);
                         GET_ARGUMENT_F("FZmin=",Z_minimum);
                         GET_ARGUMENT_F("FZmax=",Z_maximum);
                                        /* Introduits le 20100827205253...                                                           */

                         GET_ARGUMENT_L("editer=",editer_les_parametres_eventuellement_variables);

                         GET_ARGUMENT_L("distances_etendues=""de=",calculer_des_distances_etendues);
                                        /* Introduit le 20070727155719...                                                            */

                         GET_ARGUMENT_F("sphere=""euclidienne=""euclide=",ponderation_de_la_distance_euclidienne);
                         GET_ARGUMENT_F("tmin=""tinf=""taxi_minimum=""taxi_inferieur="
                                       ,ponderation_de_la_distance_du_chauffeur_de_taxi_inferieure
                                        );
                         GET_ARGUMENT_F("tsup=""tmax=""taxi_maximum=""taxi_superieur="
                                       ,ponderation_de_la_distance_du_chauffeur_de_taxi_superieure
                                        );
                         GET_ARGUMENT_F("tcum=""taxi_cumul=""tadd=",ponderation_de_la_distance_du_chauffeur_de_taxi_cumulee);
                         GET_ARGUMENT_F("tmul=""taxi_multiplication=",ponderation_de_la_distance_du_chauffeur_de_taxi_multipliee);
                                        /* Parametres introduits le 20070715110705...                                                */

                         GET_ARGUMENT_L("igd=""ignorer_grandes_distances=",ignorer_les_grandes_distances);
                         GET_ARGUMENT_F("sgd=""seuil_grandes_distances=",seuil_de_definition_des_grandes_distances);
                                        /* Parametres introduits le 20070514102133...                                                */
                         GET_ARGUMENT_F("minimum=""min=",minimum_de_la_distance);
                         GET_ARGUMENT_F("seuil=""s=""maximum=""max=",maximum_de_la_distance);
                                        /* {minimum_de_la_distance,maximum_de_la_distance} ont remplace 'seuil_de_la_distance'       */
                                        /* le 20070506183223. Malgre tout, "seuil=" et ""s=" sont conserves pour des raisons de      */
                                        /* compatibilite anterieure...                                                               */
                         GET_ARGUMENT_F("vmin=""valeur_minimale=",valeur_de_la_distance_au_minimum_de_la_distance);
                         GET_ARGUMENT_F("vmax=""valeur_maximale=",valeur_de_la_distance_au_maximum_de_la_distance);
                                        /* Les parametres ""valeur_minimale=" et "valeur_maximale=" ont ete introduits le            */
                                        /* 20070508090851...                                                                         */

                         GET_ARGUMENT_L("ajuster=",ajuster_automatiquement_le_facteur_de_la_distance_dans_l_exponentielle);

                         GET_ARGUMENT_F("k=""facteur=""f=",facteur_de_la_distance);

                         GET_ARGUMENT_F("Ek=""Efacteur=""Ef=",facteur_de_la_distance_dans_l_exponentielle);

                         GET_ARGUMENT_F("Eexposant=""Ee=",exposant_de_la_distance_dans_l_exponentielle);

                         GET_ARGUMENT_L("moduler=",moduler_l_exponentielle);

                         GET_ARGUMENT_F("Fe=""Fexponentielle=",facteur_de_l_exponentielle);
                                        /* Parametre introduit le 20100831160725...                                                  */

                         GET_ARGUMENT_F("Mk=""Mfacteur=""Mf=",facteur_du_monome);
                         GET_ARGUMENT_F("Mexposant=""Me=",exposant_de_la_distance_dans_le_monome);

                         GET_ARGUMENT_F("Ck=""Cfacteur=""Cf=",facteur_du_cosinus);
                         GET_ARGUMENT_F("Cexposant=""Ce=",exposant_de_la_distance_dans_le_cosinus);
                         GET_ARGUMENT_F("omega=",omega_du_cosinus);
                         GET_ARGUMENT_F("phi=",phi_du_cosinus);

                         GET_ARGUMENT_L("sommation=""somme=",calculer_la_densite_par_sommation);
                         GET_ARGUMENT_N("maximisation=""maximise=",calculer_la_densite_par_sommation);
                                        /* Parametres introduits le 20070517103803...                                                */

                         GET_ARGUMENTS2_F("amplitude_nullite=""nullite="
                                         ,IFnormalisation_____amplitude_des_extrema_en_deca_de_laquelle_il_y_a_nullite
                                         ,AFnormalisation_____amplitude_des_extrema_en_deca_de_laquelle_il_y_a_nullite
                                          );
                         GET_ARGUMENTS2_F("origine=""o="
                                         ,IFnormalisation_____niveau_origine___de_normalisation
                                         ,AFnormalisation_____niveau_origine___de_normalisation
                                          );
                         GET_ARGUMENTS2_F("extremite=""e="
                                         ,IFnormalisation_____niveau_extremite_de_normalisation
                                         ,AFnormalisation_____niveau_extremite_de_normalisation
                                          );
                         GET_ARGUMENTS2_L("zero="
                                         ,IFnormalisation_____conserver_le_zero
                                         ,AFnormalisation_____conserver_le_zero
                                          );
                                        /* Parametres introduits le 20100504152652...                                                */
                         GET_ARGUMENT_L("rn=""renormaliser=",renormaliser_les_densites);
                                        /* Parametres introduits le 20100504145037...                                                */
                         )
                    );

#include  xci/coordonne.03.I"

     Test(IFET(IL_FAUT(ajuster_automatiquement_le_facteur_de_la_distance_dans_l_exponentielle)
              ,IFLE(nombre_d_elements,UN)
               )
          )
          Bblock
          PRINT_ATTENTION("pas assez d'elements pour ajuster automatiquement le facteur de la distance dans l'exponentielle");
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFET(IL_FAUT(ajuster_automatiquement_le_facteur_de_la_distance_dans_l_exponentielle)
              ,IFGT(nombre_d_elements,UN)
               )
          )
          Bblock
          DEFV(Int,INIT(indexI,UNDEF));
          DEFV(Int,INIT(indexJ,UNDEF));
                                        /* Index des elements courants dans les fichiers pour calculer les distances {I,J}.          */
          DEFV(Float,INIT(distance_IJ_minimale,F_INFINI));
          DEFV(Float,INIT(distance_IJ_maximale,F_MOINS_L_INFINI));
                                        /* Extrema de toutes les distances 2 a 2. On notera que 'distance_IJ_maximale' ne sert       */
                                        /* a rien, mais on ne sait jamais (plus tard...).                                            */

          DoIn(indexI
              ,PREMIER_ELEMENT_D_UN_FICHIER
              ,DERNIER_ELEMENT_D_UN_FICHIER
              ,I
               )
               Bblock
               DEFV(Float,INIT(coordonnee_XI,ELEMENT_DU_FICHIER_LISTE_X(indexI)));
               DEFV(Float,INIT(coordonnee_YI,ELEMENT_DU_FICHIER_LISTE_Y(indexI)));
               DEFV(Float,INIT(coordonnee_ZI,ELEMENT_DU_FICHIER_LISTE_Z(indexI)));
                                        /* Recuperation des coordonnees {X,Y,Z} courantes dans les fichiers.                         */

               DoIn(indexJ
                   ,PREMIER_ELEMENT_D_UN_FICHIER
                   ,DERNIER_ELEMENT_D_UN_FICHIER
                   ,I
                    )
                    Bblock
                    DEFV(Float,INIT(coordonnee_XJ,ELEMENT_DU_FICHIER_LISTE_X(indexJ)));
                    DEFV(Float,INIT(coordonnee_YJ,ELEMENT_DU_FICHIER_LISTE_Y(indexJ)));
                    DEFV(Float,INIT(coordonnee_ZJ,ELEMENT_DU_FICHIER_LISTE_Z(indexJ)));
                                        /* Recuperation des coordonnees {X,Y,Z} courantes dans les fichiers.                         */

                    Test(IFNE(indexI,indexJ))
                         Bblock
                         DEFV(Float,INIT(distance_IJ
                                        ,RdisF3D(coordonnee_XI,coordonnee_YI,coordonnee_ZI
                                                ,coordonnee_XJ,coordonnee_YJ,coordonnee_ZJ
                                                 )
                                         )
                              );
                                        /* Calcul de la distance des points {I,J} pour I#J.                                          */

                         EGAL(distance_IJ_minimale,MIN2(distance_IJ_minimale,distance_IJ));
                         EGAL(distance_IJ_maximale,MAX2(distance_IJ_maximale,distance_IJ));
                                        /* Recherche des extrema de toutes les distances 2 a 2...                                    */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               EDoI
               Eblock
          EDoI

          Test(IZGT(distance_IJ_minimale))
               Bblock
               EGAL(facteur_de_la_distance_dans_l_exponentielle
                   ,DIVI(facteur_de_la_distance_dans_l_exponentielle,distance_IJ_minimale)
                    );
                                        /* Ainsi, plus la distance minimale est petite, plus le facteur est grand et ce de facon     */
                                        /* a limiter la portee des points a grande distance.                                         */
               Eblock
          ATes
               Bblock
               PRINT_ATTENTION("la distance minimale est nulle,");
               PRINT_ATTENTION("le facteur de la distance dans l'exponentielle ne peut donc etre ajuste");
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IL_FAUT(editer_les_parametres_eventuellement_variables))
          Bblock
          CAL2(Prin4("espace XxY normalise : [%f,%f]x[%f,%f]\n\n"
                    ,TRANSFORMATION_COORDONNEEE_X(Xmin)
                    ,TRANSFORMATION_COORDONNEEE_X(Xmax)
                    ,TRANSFORMATION_COORDONNEEE_Y(Ymin)
                    ,TRANSFORMATION_COORDONNEEE_Y(Ymax)
                     )
               );

          CAL2(Prin1("facteur effectif de la distance dans l'exponentielle : %.^^^\n\n"
                    ,facteur_de_la_distance_dans_l_exponentielle
                     )
               );
                                        /* Le 20060105161108, le format "16g" est passe a "^^g" pour plus de souplesse...            */
                                        /*                                                                                           */
                                        /* Le 20091123123522, le format "^^g" est passe a "^^^" pour plus de souplesse...            */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     begin_nouveau_block
          Bblock
          DEFV(Float,INIT(minimum_des_densites,F_INFINI));
          DEFV(Float,INIT(maximum_des_densites,F_MOINS_L_INFINI));
                                        /* Definition des extrema de l'ensemble des densites (introduit le 20100504145037).          */

          DEFV(Float,INIT(densite_courante,FLOT__UNDEF));
                                        /* Definition de la densite courante au point {X,Y,Z} de l'image.                            */

          Test(IL_FAUT(generer_une_image_unique))
                                        /* Test introduit le 20100504104717...                                                       */
               Bblock
               BDEFV(imageF,fonction_de_densite);
                                        /* Definition de la fonction de densite.                                                     */

               CALi(IFinitialisation(fonction_de_densite,FZERO));
                                        /* Initialisation de la fonction de densite.                                                 */

               begin_image
                    Bblock
                    CALCUL_DE_LA_DENSITE(tranche_Z);

                    storeF_point(densite_courante,fonction_de_densite,X,Y);
                                        /* Rangement de la densite courante au point {X,Y,Z} de l'Image.                             */
                    Eblock
               end_image

               Test(IL_FAUT(renormaliser_les_densites))
                                        /* Test introduit le 20100504145037...                                                       */
                    Bblock
                    CALS(IFnormalisation(fonction_de_densite,fonction_de_densite,minimum_des_densites,maximum_des_densites));
                                        /* Et renormalisation...                                                                     */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               CALi(IupdateF_image(nom_imageR,fonction_de_densite));

               EDEFV(imageF,fonction_de_densite);
                                        /* Definition de la fonction de densite.                                                     */
               Eblock
          ATes
               Bblock

#define   nom_albumR                                                                                                                    \
                    nom_imageR

               BDEFV(albumF,fonction_de_densite);
                                        /* Definition de la fonction de densite.                                                     */

               CALS(dAFinitialisation(fonction_de_densite,FZERO));
                                        /* Initialisation de la fonction de densite.                                                 */

               begin_album
                    Bblock
                    CALCUL_DE_LA_DENSITE(_____cNORMALISE_OZ(Z));

                    AstoreF_point(densite_courante,fonction_de_densite,X,Y,Z);
                    Eblock
               end_album

               Test(IL_FAUT(renormaliser_les_densites))
                                        /* Test introduit le 20100504145037...                                                       */
                    Bblock
                    CALS(AFnormalisation(fonction_de_densite,fonction_de_densite,minimum_des_densites,maximum_des_densites));
                                        /* Et renormalisation...                                                                     */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               CALi(dAupdateF_album(nom_albumR
                                   ,nom_postfixe
                                   ,premiere_image
                                   ,pas_des_images
                                   ,fonction_de_densite
                                   ,nombre_de_chiffres
                                   ,FAUX
                                    )
                    );
                                        /* L'argument 'Inv' ('FAUX') a ete introduit le 20100624091948...                            */

               EDEFV(albumF,fonction_de_densite);
                                        /* Definition de la fonction de densite.                                                     */

#undef    nom_albumR

               Eblock
          ETes
          Eblock
     end_nouveau_block

     lGENERATION_D_UN_FICHIER(liste_initiale_des_MODULATION_DE_PHI,MODULATION_DE_PHI_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_MODULATION_DE_OMEGA,MODULATION_DE_OMEGA_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_MODULATION_DU_FACTEUR_DE_LA_DISTANCE
                             ,MODULATION_DU_FACTEUR_DE_LA_DISTANCE_DANS_L_EXPONENTIELLE_IMPLICITE
                              );
     lGENERATION_D_UN_FICHIER(liste_initiale_des_Z,Z_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_Y,Y_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_X,X_IMPLICITE);

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.