/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   D E   B A S E   A   D E U X   I M A G E S  :                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Ce fichier contient toutes les definitions                                                                     */
/*                  de base de gestion et de manipulation d'une                                                                      */
/*                  image raster, quelle que soit la definition.                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xiii/di_image$DEF' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19880000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E P L A C E M E N T   D ' U N E   I M A G E  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   iMOVE(imageR,imageA)                                                                                                          \
                    Bblock                                                                                                              \
                    begin_image                                                                                                         \
                         Bblock                                                                                                         \
                         store_point(load_point(imageA,X,Y),imageR,X,Y,FVARIABLE);                                                      \
                         Eblock                                                                                                         \
                    end_image                                                                                                           \
                    Eblock                                                                                                              \
                                        /* Deplacement d'une image (le plus simple possible). ATTENTION, cette procedure a ete       */ \
                                        /* introduite car en effet, autrefois dans le meme bloc '$a' que la fonction 'Imove(...)',   */ \
                                        /* on trouvait aussi 'Itransformation_image(...)' et 'Itransformation_inverse_image(...)'    */ \
                                        /* (ces deux dernieres utilisant la premiere). Or le bloc '$a' correspondant faisait alors   */ \
                                        /* pas loin de 900000 octets. Ainsi, tout programme demandant 'Imove(...)', c'est-a-dire     */ \
                                        /* pratiquement tous, voyait sa taille augmenter demesurement. D'ou la solution de creer     */ \
                                        /* cette procedure. On notera qu'elle est placee dans '$xiii/di_image$DEF' et non pas dans   */ \
                                        /* '$xiii/di_image$FON' afin d'eviter une imbrication illogique entre les limiteurs de blocs */ \
                                        /* independants et les couples {#define,#undef}...                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S L A T I O N   D ' U N E   I M A G E   Q U E L C O N Q U E  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gItranslation(les_images_sont_standards,imageR,FimageR,imageA,FimageA,translation,tore_horizontal,tore_vertical)              \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Itranslation(imageR,imageA,translation,tore_horizontal,tore_vertical)                                         \
                         ,IFtranslation(FimageR,FimageA,translation,tore_horizontal,tore_vertical)                                      \
                          )                                                                                                             \
                                        /* Translation d'une image quelconque ("standard" ou "flottante"). Ceci a ete introduit      */ \
                                        /* le 20041111155919.                                                                        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E P L A C E M E N T   D ' U N E   I M A G E   Q U E L C O N Q U E  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gImove(les_images_sont_standards,imageR,FimageR,imageA,FimageA)                                                               \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Imove(imageR,imageA)                                                                                          \
                         ,IFmove(FimageR,FimageA)                                                                                       \
                          )                                                                                                             \
                                        /* Deplacement d'une image quelconque ("standard" ou "flottante").                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R O N C A T I O N   D E S   N I V E A U X   D ' U N E   I M A G E   Q U E L C O N Q U E  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gItroncation(les_images_sont_standards,imageR,FimageR,imageA,FimageA,seuil_inf,Fseuil_inf,seuil_sup,Fseuil_sup)               \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Itroncation(imageR,imageA,seuil_inf,seuil_sup)                                                                \
                         ,IFtroncation(FimageR,FimageA,Fseuil_inf,Fseuil_sup)                                                           \
                          )                                                                                                             \
                                        /* Troncation d'une image quelconque ("standard" ou "flottante").                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M O D U L O   D E S   N I V E A U X   D ' U N E   I M A G E   Q U E L C O N Q U E  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gImodulo(les_images_sont_standards,imageR,FimageR,imageA,FimageA,seuil_inf,Fseuil_inf,seuil_sup,Fseuil_sup)                   \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Imodulo(imageR,imageA,seuil_inf,seuil_sup)                                                                    \
                         ,IFmodulo(FimageR,FimageA,Fseuil_inf,Fseuil_sup)                                                               \
                          )                                                                                                             \
                                        /* Modulo d'une image quelconque ("standard" ou "flottante").                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   " S I G M O I D E "     D ' U N E   I M A G E   Q U E L C O N Q U E  :                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIsigmoide(les_images_sont_standards,imageR,FimageR,imageA,FimageA,echelle,Fechelle)                                          \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Isigmoide(imageR,imageA,echelle)                                                                              \
                         ,IFsigmoide(FimageR,FimageA,Fechelle)                                                                          \
                          )                                                                                                             \
                                        /* Sigmoide d'une image quelconque ("standard" ou "flottante") introduit le 20240703081806.  */


/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E P L A C E M E N T   D ' U N E   I M A G E   Q U E L C O N Q U E                                                        */
/*        A V E C   M A R Q U A G E   D ' U N   P O I N T   V A L I D E  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gImove_avec_store_point_valide(les_images_sont_standards,imageR,FimageR,imageA,FimageA,niv_p,niv_float,abscisse,ordonnee)     \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Imove_avec_store_point_valide(imageR,imageA,niv_p,abscisse,ordonnee)                                          \
                         ,IFmove_avec_store_point_valide(FimageR,FimageA,niv_float,abscisse,ordonnee)                                   \
                          )                                                                                                             \
                                        /* Deplacement d'une image quelconque ("standard" ou "flottante"). Cette procedure a ete     */ \
                                        /* introduite le 20050920123926 pour 'v $xci/S_point$K gImove_avec_store_point_valide'...    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E P L A C E M E N T   D ' U N E   I M A G E   " F L O T T A N T E "   A V E C   S U B S T I T U T I O N  :               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   NOMBRE_DE_PASSES_DE_LISSAGE_DANS_IFmove_avec_substitution                                                                     \
                    UN                                                                                                                  \
                                        /* Indique le nombre de passes de lissage par defaut ("plus on lisse, plus c'est lisse..."). */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D ' U N   P S E U D O - H I S T O G R A M M E   " P L A T "  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   GENERATION_D_UN_PSEUDO_HISTOGRAMME_PLAT(histogramme_plat)                                                                     \
                    Bblock                                                                                                              \
                    Test(EST_INVALIDE(Iegalisation_d_histogrammme_plat_____etat_de_l_histogramme_plat))                                 \
                         Bblock                                                                                                         \
                         DEFV(Float,INIT(nombre_de_points_par_niveau,DIVI(FLOT(dimXY),FLOT(COULEURS))));                                \
                                        /* Nombre de points par niveau pour un histogramme "plat"...                                 */ \
                         DEFV(Positive,INIT(nombre_de_points,ZERO));                                                                    \
                                        /* Nombre de points apres la premiere passe de construction de l'histogramme "plat"...       */ \
                         DEFV(Positive,INIT(nombre_de_points_manquants,UNDEF));                                                         \
                                        /* Nombre de points manquants apres la premiere passe de construction de l'histogramme       */ \
                                        /* "plat"...                                                                                 */ \
                                                                                                                                        \
                         BoIn(niveau,NOIR,BLANC,PAS_COULEURS)                                                                           \
                              Bblock                                                                                                    \
                              EGAL(ITb1(histogramme_plat,INDX(niveau,NOIR)),INTE(nombre_de_points_par_niveau));                         \
                                        /* Premiere passe de construction de l'histogramme "plat"...                                 */ \
                              INCR(nombre_de_points,ITb1(histogramme_plat,INDX(niveau,NOIR)));                                          \
                                        /* Nombre de points apres la premiere passe de construction de l'histogramme "plat"...       */ \
                              Eblock                                                                                                    \
                         EBoI                                                                                                           \
                                                                                                                                        \
                         EGAL(nombre_de_points_manquants,SOUS(dimXY,nombre_de_points));                                                 \
                         CLIR(nombre_de_points);                                                                                        \
                                                                                                                                        \
                         BoIn(niveau,NOIR,BLANC,PAS_COULEURS)                                                                           \
                              Bblock                                                                                                    \
                              Test(IFLT(NIVR(niveau),nombre_de_points_manquants))                                                       \
                                   Bblock                                                                                               \
                                   INCR(ITb1(histogramme_plat,INDX(niveau,NOIR)),I);                                                    \
                                        /* Seconde passe de construction de l'histogramme "plat" par ajout des points manquants, ce  */ \
                                        /* qui fait qu'a priori au debut de l'histogramme "plat" chaque niveau aura une population   */ \
                                        /* de 'nombre_de_points_par_niveau+1' et a la fin seulement 'nombre_de_points_par_niveau'... */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                                                                                                                                        \
                              INCR(nombre_de_points,ITb1(histogramme_plat,INDX(niveau,NOIR)));                                          \
                                        /* Nombre de points apres la seconde passe de construction de l'histogramme "plat"...        */ \
                              Eblock                                                                                                    \
                         EBoI                                                                                                           \
                                                                                                                                        \
                         Test(IFNE(nombre_de_points,dimXY))                                                                             \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("probleme de generation d'un histogramme 'plat'");                                           \
                              CAL1(Prer1("(NombreDePoints=%d)\n",nombre_de_points));                                                    \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         EGAL(Iegalisation_d_histogrammme_plat_____etat_de_l_histogramme_plat,VALIDE);                                  \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Procedure introduite le 20081008091631...                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D ' U N   P S E U D O - H I S T O G R A M M E                                                        */
/*        A   P A R T I R   D ' U N E   L I S T E   D E   S U B S T I T U T I O N  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   CONVERSION_D_UNE_LISTE_DE_SUBSTITUTION_EN_UN_HISTOGRAMME(L_SUBSTITUTION_XX,histogramme_de_substitution)                       \
                    Bblock                                                                                                              \
                    DEFV(Positive,INIT(cumul_de_L_SUBSTITUTION_XX,ZERO));                                                               \
                                        /* Cumul de la liste de substitution courante...                                             */ \
                                        /* "plat"...                                                                                 */ \
                    DEFV(Float,INIT(facteur_de_conversion,FLOT__UNDEF));                                                                \
                                        /* Facteur de passage de la liste de substitution courante a l'histogramme...                */ \
                    DEFV(Positive,INIT(nombre_de_points,ZERO));                                                                         \
                                        /* Nombre de points contenu dans l'histogramme dit "de substitution"...                      */ \
                    DEFV(Positive,INIT(nombre_de_points_manquants,UNDEF));                                                              \
                                        /* Nombre de points manquants apres la premiere passe de construction de l'histogramme       */ \
                                        /* dit "de substitution"...                                                                  */ \
                                                                                                                                        \
                    BoIn(niveau,NOIR,BLANC,PAS_COULEURS)                                                                                \
                         Bblock                                                                                                         \
                         INCR(cumul_de_L_SUBSTITUTION_XX,ACCES_listes_de_substitution(L_SUBSTITUTION_XX,niveau));                       \
                                        /* Nombre "fictif" de points dans la liste de substitution ("fictif" parce qu'une liste      */ \
                                        /* de substitution n'est pas un histogramme...).                                             */ \
                         Eblock                                                                                                         \
                    EBoI                                                                                                                \
                                                                                                                                        \
                    EGAL(facteur_de_conversion,DIVI(FLOT(dimXY),FLOT(cumul_de_L_SUBSTITUTION_XX)));                                     \
                                                                                                                                        \
                    BoIn(niveau,NOIR,BLANC,PAS_COULEURS)                                                                                \
                         Bblock                                                                                                         \
                         EGAL(ITb1(histogramme_de_substitution,INDX(niveau,NOIR))                                                       \
                             ,INTE(MUL2(facteur_de_conversion,FLOT(ACCES_listes_de_substitution(L_SUBSTITUTION_XX,niveau))))            \
                              );                                                                                                        \
                                        /* Premiere passe de construction de l'histogramme dit "de substitution"...                  */ \
                         INCR(nombre_de_points,ITb1(histogramme_de_substitution,INDX(niveau,NOIR)));                                    \
                                        /* Nombre de points apres la premiere passe de construction de l'histogramme dit             */ \
                                        /* "de substitution"...                                                                      */ \
                         Eblock                                                                                                         \
                    EBoI                                                                                                                \
                                                                                                                                        \
                    EGAL(nombre_de_points_manquants,SOUS(dimXY,nombre_de_points));                                                      \
                                                                                                                                        \
                    Tant(IZGT(nombre_de_points_manquants))                                                                              \
                         Bblock                                                                                                         \
                         BoIn(niveau,NOIR,BLANC,PAS_COULEURS)                                                                           \
                              Bblock                                                                                                    \
                              Test(IZGT(nombre_de_points_manquants))                                                                    \
                                   Bblock                                                                                               \
                                   INCR(ITb1(histogramme_de_substitution,INDX(niveau,NOIR)),I);                                         \
                                        /* Seconde passe de construction de l'histogramme dit "de substitution" par ajout progressif */ \
                                        /* des points manquants...                                                                   */ \
                                   DECR(nombre_de_points_manquants,I);                                                                  \
                                   INCR(nombre_de_points,I);                                                                            \
                                        /* Compte et decompte des points...                                                          */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         EBoI                                                                                                           \
                         Eblock                                                                                                         \
                    ETan                                                                                                                \
                                                                                                                                        \
                    Test(IFNE(nombre_de_points,dimXY))                                                                                  \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("probleme de generation d'un histogramme dit 'de substitution'");                                 \
                         CAL1(Prer1("(NombreDePoints=%d)\n",nombre_de_points));                                                         \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Test(aIFID(histogramme_de_substitution,histogramme_plat))                                                      \
                              Bblock                                                                                                    \
                              EGAL(Iegalisation_d_histogrammme_plat_____etat_de_l_histogramme_plat,VALIDE);                             \
                                        /* Introduit le 20081008163223...                                                            */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Procedure introduite le 20081008152514...                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E G A L I S A T I O N   D ' H I S T O G R A M M E   D ' U N E   U N E   I M A G E  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIegalisation_d_histogrammme(les_images_sont_standards,imageR,FimageR,imageA,FimageA)                                         \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Iegalisation_d_histogrammme(imageR,imageA)                                                                    \
                         ,IFegalisation_d_histogrammme(FimageR,FimageA)                                                                 \
                          )                                                                                                             \
                                        /* Egalisation de l'histogramme d'une image quelconque ("standard" ou "flottante"). Cette    */ \
                                        /* procedure a ete introduite le 20081001165943...                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E E C H A N T I L L O N N A G E   D ' U N E   I M A G E  :                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   LE_FORMAT_RESULTAT_EST_DIFFERENT_DU_FORMAT_ARGUMENT(XminR,XmaxR,YminR,YmaxR,XminA,XmaxA,YminA,YmaxA)                          \
                                        /* Les arguments ont ete introduits le 20170316095821...                                     */ \
               IFOU(IFOU(IFNE(XminR,XminA)                                                                                              \
                        ,IFNE(XmaxR,XmaxA)                                                                                              \
                         )                                                                                                              \
                   ,IFOU(IFNE(YminR,YminA)                                                                                              \
                        ,IFNE(YmaxR,YmaxA)                                                                                              \
                         )                                                                                                              \
                    )                                                                                                                   \
                                        /* Procedure introduite le 20170315183858 et mise ici le 20170316080639...                   */


#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )
#    define    ACCES_AUX_POINTS_LORS_D_UN_ECHANTILLONNAGE_DE_L_IMAGE_VERSION_01                                                         \
                                        /* Ceci a ete introduit le 20030829234243. Cette definition inutile pour le module           */ \
                                        /* 'v $xiii/di_image$FON ACCES_AUX_POINTS_LORS_D_UN_ECHANTILLONNAGE_DE_L_IMAGE_VERSION_01'   */ \
                                        /* ne sert qu'a simplifier la programmation de la commande                                   */ \
                                        /* 'v $xci/deforme.01$K ACCES_AUX_POINTS_LORS_D_UN_ECHANTILLONNAGE_DE_L_IMAGE_VERSION_01'    */ \
                                        /* afin de ne pas avoir a y tester 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_0?'...              */
#Aif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )
#Eif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )
#    nodefine  ACCES_AUX_POINTS_LORS_D_UN_ECHANTILLONNAGE_DE_L_IMAGE_VERSION_01                                                         \
                                        /* Utilisation de 'load_point_valide(...)' et 'loadF_point_valide(...)'...                   */

#    define    ACCES_AUX_POINTS_LORS_D_UN_ECHANTILLONNAGE_DE_L_IMAGE_VERSION_02                                                         \
                                        /* Utilisation de 'Fload_point(...)' et 'FFload_point(...)' (version du 20030826102734).     */
#Aif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )
#Eif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )

DenumeT13(REECHANTILLONNAGE_PAR_REPLICATION_ET_DESTRUCTION
         ,REECHANTILLONNAGE_PAR_INTERPOLATION_BILINEAIRE
         ,REECHANTILLONNAGE_PAR_INTERPOLATION_BICUBIQUE
                                        /* ATTENTION, dans '$Fdivers' est definie la variable suivante :                             */
                                        /*                                                                                           */
                                        /*                  setenv    MdefRedim 2                                                    */
                                        /*                                                                                           */
                                        /* il est donc imperatif que 'REECHANTILLONNAGE_PAR_INTERPOLATION_BICUBIQUE' vaille aussi    */
                                        /* la valeur 2 puisque '$MdefRedim' correspond a la meilleure methode definie...             */
         ,REECHANTILLONNAGE_SANS_REECHANTILLONNAGE_AVEC_MISE_DANS_LE_COIN_BAS_GAUCHE
         ,REECHANTILLONNAGE_SANS_REECHANTILLONNAGE_AVEC_MISE_DANS_LE_COIN_BAS_DROITE
         ,REECHANTILLONNAGE_SANS_REECHANTILLONNAGE_AVEC_MISE_DANS_LE_COIN_HAUT_DROITE
         ,REECHANTILLONNAGE_SANS_REECHANTILLONNAGE_AVEC_MISE_DANS_LE_COIN_HAUT_GAUCHE
         ,REECHANTILLONNAGE_SANS_REECHANTILLONNAGE_AVEC_MISE_AU_CENTRE
         ,REECHANTILLONNAGE_SANS_REECHANTILLONNAGE_AVEC_POSITIONNEMENT_QUELCONQUE
         ,REECHANTILLONNAGE_SANS_REECHANTILLONNAGE_AVEC_COINCIDENCE_DES_MILIEUX_INFERIEURS
         ,REECHANTILLONNAGE_SANS_REECHANTILLONNAGE_AVEC_COINCIDENCE_DES_MILIEUX_DROITES
         ,REECHANTILLONNAGE_SANS_REECHANTILLONNAGE_AVEC_COINCIDENCE_DES_MILIEUX_SUPERIEURS
         ,REECHANTILLONNAGE_SANS_REECHANTILLONNAGE_AVEC_COINCIDENCE_DES_MILIEUX_GAUCHES
         ,types_de_methode_de_redimensionnement
          )
                                        /* Liste des methodes disponibles :                                                          */
                                        /*                                                                                           */
                                        /*   0  = par replication (ou destruction suivant le rapport des tailles imageR/imageA),     */
                                        /*   1  = par interpolation bilineaire (sur 4 voisins),                                      */
                                        /*   2  = par interpolation bicubique (sur 12 voisins),                                      */
                                        /*   3  = par mise en coincidence des coins "bas-gauche" des images Argument et              */
                                        /*        Resultat, et en rajoutant du 'NOIR' s'il manque des points, ou en en               */
                                        /*        supprimant s'il y en a trop,                                                       */
                                        /*   4  = par mise en coincidence des coins "bas-droite" des images Argument et              */
                                        /*        Resultat, et en rajoutant du 'NOIR' s'il manque des points, ou en en               */
                                        /*        supprimant s'il y en a trop,                                                       */
                                        /*   5  = par mise en coincidence des coins "haut-droite" des images Argument et             */
                                        /*        Resultat, et en rajoutant du 'NOIR' s'il manque des points, ou en en               */
                                        /*        supprimant s'il y en a trop,                                                       */
                                        /*   6  = par mise en coincidence des coins "haut-gauche" des images Argument et             */
                                        /*        Resultat, et en rajoutant du 'NOIR' s'il manque des points, ou en en               */
                                        /*        supprimant s'il y en a trop,                                                       */
                                        /*   7  = par mise en coincidence des centres des images Argument et Resultat, et en         */
                                        /*        rajoutant du 'NOIR' s'il manque des points, ou en en supprimant s'il y en          */
                                        /*        trop,                                                                              */
                                        /*   8  = par translation quelconque de l'images Argument dans l'image Resultat, et en       */
                                        /*        rajoutant du 'NOIR' s'il manque des points, ou en en supprimant s'il y en          */
                                        /*        trop,                                                                              */
                                        /*   9  = par mise en coincidence des mlieux des cotes inferieurs,                           */
                                        /*   10 = par mise en coincidence des mlieux des cotes droites,                              */
                                        /*   11 = par mise en coincidence des mlieux des cotes superieurs,                           */
                                        /*   12 = par mise en coincidence des mlieux des cotes gauches.                              */
                                        /*                                                                                           */
                                        /* ('NOIR' etant en fait 'REECHANTILLONNAGE_GENERAL_____niveau_manquant', ce niveau de       */
                                        /* "compensation" etant donc variable...).                                                   */
                                        /*                                                                                           */
                                        /* Nota : ces definitions ne sont pas liees a 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_02'      */
                                        /* afin de simplifier les commandes qui les utilisent...                                     */
                                        /*                                                                                           */
                                        /* De plus, on notera que theoriquement seul est utile 'BAS_GAUCHE' (par exemple), les       */
                                        /* trois autres s'en deduisant par une combinaison astucieuse de symetries ; ainsi :         */
                                        /*                                                                                           */
                                        /*                  BAS_DROITE(...)  == Sy(BAS_GAUCHE(Sy(...)))                              */
                                        /*                  HAUT_DROITE(...) == Sx(Sy(BAS_GAUCHE(Sy(Sx(...)))))                      */
                                        /*                  HAUT_GAUCHE(...) == Sx(BAS_GAUCHE(Sx(...)))                              */
                                        /*                                                                                           */
                                        /* mais, en definissant les quatre possibilites, on simplifie son utilisation dans la        */
                                        /* commande '$xci/display_RVB$K'...                                                          */
                                        /*                                                                                           */
                                        /* Les 4 methodes de mise en coincidence des milieux des cotes ont ete introduites le        */
                                        /* 20240527145236, sans changer le numero des methodes plus anciennes afin de garantir la    */
                                        /* compatibilite anterieure...                                                               */

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )
#Aif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )
#Eif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )
#    define    NIVEAU_MANQUANT_POUR_LE_REECHANTILLONNAGE                                                                                \
                         NOIR                                                                                                           \
                                        /* Niveau utilise par 'REECHANTILLONNAGE_SANS_REECHANTILLONNAGE_AVEC_MISE_DANS_UN_COIN' et   */ \
                                        /* par 'REECHANTILLONNAGE_SANS_REECHANTILLONNAGE_AVEC_MISE_AU_CENTRE' lorsqu'il n'y a pas    */ \
                                        /* assez de point dans l'image Argument pour generer l'image Resultat.                       */
#Aif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )
#Eif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )

#define   METHODE_IMPLICITE_DE_REECHANTILLONNAGE                                                                                        \
                    REECHANTILLONNAGE_PAR_INTERPOLATION_BILINEAIRE                                                                      \
                                        /* Choix de la methode implicite de reechantillonnage des images. C'est l'interpolation      */ \
                                        /* bilineaire qui est choisie car, en effet, elle est un bon compromis entre la qualite      */ \
                                        /* et le temps de calcul (sachant que les temps d'execution des trois methodes sont          */ \
                                        /* approximativement dans le "rapport" {1,2,8} ainsi que le montre '$xci/display_RVB$X').    */ \
                                        /*                                                                                           */ \
                                        /* Nota : cette definition n'est pas liee a 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_02'        */ \
                                        /* afin de simplifier les commandes qui les utilisent...                                     */

                                        /* Les definitions qui suivent ont ete deplacees depuis 'v $xiii/di_image$FON' le            */
                                        /* 20041107192647...                                                                         */

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )
#Aif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )
#Eif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )
#    define    X_apres_reechantillonnage                                                                                                \
                         X
#    define    Y_apres_reechantillonnage                                                                                                \
                         Y
                                        /* Coordonnees {X,Y} apres le reechantillonnage...                                           */

#    define    DONNEES_UTILES_AUX_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE(type_du_niveau,niveau_indefini)                                \
                         DEFV(Float,INIT(Xf_avant_reechantillonnage,FLOT__UNDEF));                                                      \
                         DEFV(Float,INIT(Yf_avant_reechantillonnage,FLOT__UNDEF));                                                      \
                                        /* Coordonnees {X,Y} avant le reechantillonnage avec toute la precision,                     */ \
                         DEFV(Int,INIT(X_approche_avant_reechantillonnage,UNDEF));                                                      \
                         DEFV(Int,INIT(Y_approche_avant_reechantillonnage,UNDEF));                                                      \
                                        /* Et leur valeurs approchees sur une grille entiere...                                      */ \
                         DEFV(type_du_niveau,INIT(niveau_interpole_avant_le_reechantillonnage,niveau_indefini));                        \
                                        /* Et le niveau en ce point {X,Y}...                                                         */ \
                                                                                                                                        \
                         DEFV(Float,INIT(Xf_apres_reechantillonnage,_____cNORMALISE_OX(X_apres_reechantillonnage)));                    \
                         DEFV(Float,INIT(Yf_apres_reechantillonnage,_____cNORMALISE_OY(Y_apres_reechantillonnage)));                    \
                                        /* Coordonnees {X,Y} apres le reechantillonnage et dans [0,1[...                             */ \
                                                                                                                                        \
                                        /* Donnees utiles aux operations...                                                          */
#    define    gINITIALISATION_DES_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE(Xf_apres_r,Yf_apres_r,tX,tY,utiliser_pasX_pasY,pas_X,pas_Y)   \
                                        /* Les arguments {tX,tY} ont ete introduits le 20030825110246.                               */ \
                         Bblock                                                                                                         \
                                        /* ATTENTION, l'absence de 'Eblock' a la fin est due au 'PUSH_ECHANTILLONNAGE' qui suit...   */ \
                                                                                                                                        \
                         EGAL(Xf_avant_reechantillonnage,SOUS(F__cDENORMALISE_OX(Xf_apres_r),tX));                                      \
                         EGAL(Yf_avant_reechantillonnage,SOUS(F__cDENORMALISE_OY(Yf_apres_r),tY));                                      \
                                        /* Afin d'evaluer les coordonnees {X,Y} avant le reechantillonnage et en gardant toute       */ \
                                        /* la precision...                                                                           */ \
                                        /*                                                                                           */ \
                                        /* Le 20030826102734, je suis passe de 'ADD2(...)' a 'SOUS(...)' ci-dessus ce qui est plus   */ \
                                        /* logique. En effet, en faisant l'hypothese que {tX,tY} sont positifs, avec 'ADD2(...)'     */ \
                                        /* on va chercher un point qui est a droite et en haut du point courant, ce qui donc en      */ \
                                        /* quelque sorte va provoquer un mouvement vers le bas et a gauche de ce dernier, ce qui     */ \
                                        /* est un peu en contradiction avec les habitudes de translations {tX,tY} positives...       */ \
                                                                                                                                        \
                         Test(IL_FAUT(gINITIALISATION_DES_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE_____compatibilite_20090225))           \
                              Bblock                                                                                                    \
                              EGAL(X_approche_avant_reechantillonnage,ENTE(Xf_avant_reechantillonnage));                                \
                              EGAL(Y_approche_avant_reechantillonnage,ENTE(Yf_avant_reechantillonnage));                                \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              EGAL(X_approche_avant_reechantillonnage,ANTE(Xf_avant_reechantillonnage));                                \
                              EGAL(Y_approche_avant_reechantillonnage,ANTE(Yf_avant_reechantillonnage));                                \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                        /* Et leur approximation sur une grille "entiere"...                                         */ \
                                        /*                                                                                           */ \
                                        /* Le 20030825162845 il a fallu remplacer 'INTE(...)' par 'ENTE(...)' (suite a               */ \
                                        /* l'introduction des arguments {tX,tY} le 20030825110246) car, en effet, a partir de cette  */ \
                                        /* date les {Xf_avant_reechantillonnage,Yf_avant_reechantillonnage} peuvent etre negatifs... */ \
                                        /*                                                                                           */ \
                                        /* Le 20090225114137 il a fallu remplacer 'ENTE(...)' par 'ANTE(...)' pour garantir que :    */ \
                                        /*                                                                                           */ \
                                        /*                  Pal                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  $xci/lineaire$X                                                       \  */ \
                                        /*                                      A=1 B=0 C=0                                       \  */ \
                                        /*                                      standard=FAUX                                     \  */ \
                                        /*                                                                    $formatI       |    \  */ \
                                        /*                  $xci/normalise.01$X                                                   \  */ \
                                        /*                                      R=$xTV/DEFORMATION$COORD_X                        \  */ \
                                        /*                                                                    $formatI               */ \
                                        /*                                                                                           */ \
                                        /*                  $xci/lineaire$X                                                       \  */ \
                                        /*                                      A=0 B=1 C=0                                       \  */ \
                                        /*                                      standard=FAUX                                     \  */ \
                                        /*                                                                    $formatI       |    \  */ \
                                        /*                  $xci/normalise.01$X                                                   \  */ \
                                        /*                                      R=$xTV/DEFORMATION$COORD_Y                        \  */ \
                                        /*                                                                    $formatI               */ \
                                        /*                                                                                           */ \
                                        /*                  $xci/deformi.01$X                                                     \  */ \
                                        /*                                      A=...                                             \  */ \
                                        /*                                      DX=$xTV/DEFORMATION$COORD_X                       \  */ \
                                        /*                                      DY=$xTV/DEFORMATION$COORD_Y                       \  */ \
                                        /*                                      interpoler=FAUX                                   \  */ \
                                        /*                                      R=...                                             \  */ \
                                        /*                                                                    $formatI               */ \
                                        /*                                                                                           */ \
                                        /* donne une image Resultat identique a l'image Argument...                                  */ \
                                                                                                                                        \
                         PUSH_ECHANTILLONNAGE;                                                                                          \
                         SET_ECHANTILLONNAGE(COND(IL_FAUT(utiliser_pasX_pasY)                                                           \
                                                 ,pasX                                                                                  \
                                                 ,pas_X                                                                                 \
                                                  )                                                                                     \
                                            ,COND(IL_FAUT(utiliser_pasX_pasY)                                                           \
                                                 ,pasY                                                                                  \
                                                 ,pas_Y                                                                                 \
                                                  )                                                                                     \
                                             );                                                                                         \
                                        /* Mise en place des pas d'echantillonnage...                                                */ \
                                                                                                                                        \
                                        /* ATTENTION, l'absence de 'Eblock' est due au 'PUSH_ECHANTILLONNAGE' qui precede...         */ \
                                                                                                                                        \
                                        /* Initialisation des operations et definition des donnees utiles...                         */

#    define    TOUJOURS_MARQUER_A_LA_FIN_DES_INTERPOLATIONS_LINEAIRE_BILINEAIRE_ET_BICUBIQUE                                            \
                         VRAI                                                                                                           \
                                        /* A la fin des "vraies" interpolations, on marque toujours les points...                    */
#    define    FIN_DES_INTERPOLATIONS_LINEAIRE_BILINEAIRE_ET_BICUBIQUE(niveau_interpole,marquer_le_point)                               \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(marquer_le_point))                                                                                \
                              Bblock                                                                                                    \
                              RANGEMENT_DU_NIVEAU_INTERPOLE(niveau_interpole                                                            \
                                                           ,imageR                                                                      \
                                                           ,X_apres_reechantillonnage,Y_apres_reechantillonnage                         \
                                                            );                                                                          \
                                        /* Renvoi du niveau interpole...                                                             */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Fin generale des operations avec en particulier le renvoi du niveau interpole...          */
#    define    FIN_DES_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE(niveau_interpole,marquer_le_point)                                        \
                                                                                                                                        \
                                        /* ATTENTION, l'absence de 'Bblock' est due au 'PULL_ECHANTILLONNAGE' qui suit...            */ \
                                                                                                                                        \
                         PULL_ECHANTILLONNAGE;                                                                                          \
                                        /* Restauration des pas d'echantillonnage...                                                 */ \
                                                                                                                                        \
                         FIN_DES_INTERPOLATIONS_LINEAIRE_BILINEAIRE_ET_BICUBIQUE(niveau_interpole,marquer_le_point);                    \
                         Eblock                                                                                                         \
                                        /* Fin des operations avec en particulier le renvoi du niveau interpole...                   */

#    define    NE_PAS_BLOQUER_L_INTERPOLATION_X                                                                                         \
                         FU
#    define    NE_PAS_BLOQUER_L_INTERPOLATION_Y                                                                                         \
                         FU
#    define    NE_PAS_BLOQUER_L_INTERPOLATION_Z                                                                                         \
                         FU
                                        /* Afin de parametrer 'X_barycentrique(...)' et 'Y_barycentrique(...)'. On notera le         */
                                        /* 'NE_PAS_BLOQUER_L_INTERPOLATION_Z' a priori inutile (ici), mais utilise dans              */
                                        /* 'v $xiipf/fonction.2$FON NE_PAS_BLOQUER_L_INTERPOLATION_.'...                             */
#    define    BLOQUER_L_INTERPOLATION_X                                                                                                \
                         FZERO
#    define    BLOQUER_L_INTERPOLATION_Y                                                                                                \
                         FZERO
#    define    BLOQUER_L_INTERPOLATION_Z                                                                                                \
                         FZERO
                                        /* Introduit le 20081001093101 par symetrie avec 'NE_PAS_BLOQUER_L_INTERPOLATION_?'...       */

#    define    X_barycentrique(facteur,operateur)                                                                                       \
                         MUL2(facteur,SOUS(Xf_avant_reechantillonnage,FLOT(operateur(X_approche_avant_reechantillonnage))))
#    define    Y_barycentrique(facteur,operateur)                                                                                       \
                         MUL2(facteur,SOUS(Yf_avant_reechantillonnage,FLOT(operateur(Y_approche_avant_reechantillonnage))))
                                        /* Coordonnees {X,Y} barycentriques...                                                       */
                                        /*                                                                                           */
                                        /* Le 20080930162107 fut introduit 'facteur' afin de pouvoir controler independemment        */
                                        /* les interpolations selon 'X' et 'Y'...                                                    */
                                        /*                                                                                           */
                                        /* Le 20081001085829 fut introduit 'operateur' afin de permettre d'utiliser ces deux         */
                                        /* definitions dans 'VOISINAGE_POINT_BILINEAIRE(...)' et ainsi de pouvoir y controler        */
                                        /* independemment les interpolations selon 'X' et 'Y'...                                     */

#    define    DERIVATION_NUMERIQUE_POUR_L_INTERPOLATION_BICUBIQUE(fonction_origine,fonction_extremite,pas_du_maillage)                 \
                         MUL2(VOISINAGE_POINT_BICUBIQUE_____facteur_des_derivees_numeriques                                             \
                             ,DERIVATION_PARTIELLE(fonction_origine                                                                     \
                                                  ,fonction_extremite                                                                   \
                                                  ,pas_du_maillage                                                                      \
                                                   )                                                                                    \
                              )                                                                                                         \
                                        /* Calcul de la derivee numerique d'une fonction.                                            */

#    define    VOISINAGE_POINT_SIMPLE(FXf_apres_reechantillonnage,FYf_apres_reechantillonnage,Savant,Sapres,Tn,Ni,tX,tY,gG)             \
                         Bblock                                                                                                         \
                         DONNEES_UTILES_AUX_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE(Tn,Ni)                                               \
                                        /* ATTENTION, a la fin de 'DONNEES_UTILES_AUX_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE' il     */ \
                                        /* n'y a pas de ";" au cas ou d'autres donnees devraient suivre...                           */ \
                         DEFV(Float,INIT(niveau_avant_correction,FLOT__UNDEF));                                                         \
                                        /* Niveau apres interpolation et avant la correction destinee a prendre en compte les        */ \
                                        /* problemes d'arrondi...                                                                    */ \
                                                                                                                                        \
                         BLOC(Savant);                                                                                                  \
                                        /* Mise en place du dimensionnement de l'image Argument.                                     */ \
                                                                                                                                        \
                         INITIALISATION_DES_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE(FXf_apres_reechantillonnage                          \
                                                                                  ,FYf_apres_reechantillonnage                          \
                                                                                  ,tX                                                   \
                                                                                  ,tY                                                   \
                                                                                   );                                                   \
                                        /* Debut des operations avec en particulier definition des donnees utiles...                 */ \
                                                                                                                                        \
                         EGAL(niveau_avant_correction                                                                                   \
                             ,ECHANTILLONNAGE_DENORMALISE_DE_L_IMAGE(X_approche_avant_reechantillonnage                                 \
                                                                    ,Y_approche_avant_reechantillonnage                                 \
                                                                     )                                                                  \
                              );                                                                                                        \
                                        /* Niveau au point {X,Y} sans interpolation...                                               */ \
                                                                                                                                        \
                         EGAL(niveau_interpole_avant_le_reechantillonnage,gG(niveau_avant_correction));                                 \
                                        /* Puis corrige afin de prendre en compte les erreurs d'arrondi...                           */ \
                                                                                                                                        \
                         BLOC(Sapres);                                                                                                  \
                                        /* Remise en place du dimensionnement de l'image Resultat.                                   */ \
                                                                                                                                        \
                         FIN_DES_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE                                                                 \
                             (niveau_interpole_avant_le_reechantillonnage                                                               \
                             ,TOUJOURS_MARQUER_A_LA_FIN_DES_INTERPOLATIONS_LINEAIRE_BILINEAIRE_ET_BICUBIQUE                             \
                              );                                                                                                        \
                                        /* Fin des operations, avec rangement du niveau interpole en particulier...                  */ \
                         Eblock                                                                                                         \
                                        /* Reechantillonnage sans reechantillonnage (dit "simple") introduit le 20080926133046.      */

#    define    VOISINAGE_POINT_BILINEAIRE(FXf_apres_reechantillonnage,FYf_apres_reechantillonnage,Savant,Sapres,Tn,Ni,tX,tY,gG,kX,kY)   \
                         Bblock                                                                                                         \
                         DONNEES_UTILES_AUX_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE(Tn,Ni)                                               \
                                        /* ATTENTION, a la fin de 'DONNEES_UTILES_AUX_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE' il     */ \
                                        /* n'y a pas de ";" au cas ou d'autres donnees devraient suivre...                           */ \
                         DEFV(Float,INIT(coefficient_NEUT_NEUT,FLOT__UNDEF));                                                           \
                         DEFV(Float,INIT(coefficient_SUCX_NEUT,FLOT__UNDEF));                                                           \
                         DEFV(Float,INIT(coefficient_SUCX_SUCY,FLOT__UNDEF));                                                           \
                         DEFV(Float,INIT(coefficient_NEUT_SUCY,FLOT__UNDEF));                                                           \
                                        /* Coefficients de l'interpolation bilineaire. Chacun d'eux est en fait egal a l'aire du     */ \
                                        /* rectangle "complementaire" dans le pave [0,1[x[0,1[ courant ; le terme "complementaire"   */ \
                                        /* designe le rectangle "oppose par le sommet" constitue par le point courant. Enfin, on     */ \
                                        /* notera que la somme de ces quatre coefficients est egale a 1 exactement...                */ \
                         DEFV(Float,INIT(niveau_avant_correction,FLOT__UNDEF));                                                         \
                                        /* Niveau apres interpolation et avant la correction destinee a prendre en compte les        */ \
                                        /* problemes d'arrondi...                                                                    */ \
                         BLOC(Savant);                                                                                                  \
                                        /* Mise en place du dimensionnement de l'image Argument.                                     */ \
                                                                                                                                        \
                         INITIALISATION_DES_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE(FXf_apres_reechantillonnage                          \
                                                                                  ,FYf_apres_reechantillonnage                          \
                                                                                  ,tX                                                   \
                                                                                  ,tY                                                   \
                                                                                   );                                                   \
                                        /* Debut des operations avec en particulier definition des donnees utiles...                 */ \
                                                                                                                                        \
                         BSaveModifyVariable(Int                                                                                        \
                                            ,pasX                                                                                       \
                                            ,VOISINAGE_POINT_BILINEAIRE_____pasX                                                        \
                                             );                                                                                         \
                         BSaveModifyVariable(Int                                                                                        \
                                            ,pasY                                                                                       \
                                            ,VOISINAGE_POINT_BILINEAIRE_____pasY                                                        \
                                             );                                                                                         \
                                        /* La possible modification de {pasX,pasY} a ete introduite le 20160329120845...             */ \
                                                                                                                                        \
                         EGAL(coefficient_NEUT_NEUT                                                                                     \
                             ,MUL2(COMP(DIVI(NEUT(X_barycentrique(kX,NEUT))                                                             \
                                            ,FLOT(pasX)                                                                                 \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,COMP(DIVI(NEUT(Y_barycentrique(kY,NEUT))                                                             \
                                            ,FLOT(pasY)                                                                                 \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                              );                                                                                                        \
                         EGAL(coefficient_SUCX_NEUT                                                                                     \
                             ,MUL2(COMP(DIVI(ABSO(X_barycentrique(kX,SUCX))                                                             \
                                            ,FLOT(pasX)                                                                                 \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,COMP(DIVI(NEUT(Y_barycentrique(kY,NEUT))                                                             \
                                            ,FLOT(pasY)                                                                                 \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                              );                                                                                                        \
                         EGAL(coefficient_SUCX_SUCY                                                                                     \
                             ,MUL2(COMP(DIVI(ABSO(X_barycentrique(kX,SUCX))                                                             \
                                            ,FLOT(pasX)                                                                                 \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,COMP(DIVI(ABSO(Y_barycentrique(kY,SUCY))                                                             \
                                            ,FLOT(pasY)                                                                                 \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                              );                                                                                                        \
                         EGAL(coefficient_NEUT_SUCY                                                                                     \
                             ,MUL2(COMP(DIVI(NEUT(X_barycentrique(kX,NEUT))                                                             \
                                            ,FLOT(pasX)                                                                                 \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,COMP(DIVI(ABSO(Y_barycentrique(kY,SUCY))                                                             \
                                            ,FLOT(pasY)                                                                                 \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                              );                                                                                                        \
                                        /* Calcul des coefficients de l'interpolation bilineaire.                                    */ \
                                        /*                                                                                           */ \
                                        /* Rappelons que :                                                                           */ \
                                        /*                                                                                           */ \
                                        /*                  [(1-u)*(1-v)]                                                            */ \
                                        /*                  +[u*(1-v)]                                                               */ \
                                        /*                  +[u*v]                                                                   */ \
                                        /*                  +[(1-u)*v] = 1.                                                          */ \
                                        /*                                                                                           */ \
                                        /* {u,v} designant les coordonnees barycentriques du point {Xf_effective,Yf_effective}       */ \
                                        /* dans le carre courant.                                                                    */ \
                                                                                                                                        \
                         EGAL(niveau_avant_correction                                                                                   \
                             ,NIVA(LIZ4(coefficient_NEUT_NEUT                                                                           \
                                       ,ECHANTILLONNAGE_DENORMALISE_DE_L_IMAGE(NEUT(X_approche_avant_reechantillonnage)                 \
                                                                              ,NEUT(Y_approche_avant_reechantillonnage)                 \
                                                                               )                                                        \
                                       ,coefficient_SUCX_NEUT                                                                           \
                                       ,ECHANTILLONNAGE_DENORMALISE_DE_L_IMAGE(SUCX(X_approche_avant_reechantillonnage)                 \
                                                                              ,NEUT(Y_approche_avant_reechantillonnage)                 \
                                                                               )                                                        \
                                       ,coefficient_SUCX_SUCY                                                                           \
                                       ,ECHANTILLONNAGE_DENORMALISE_DE_L_IMAGE(SUCX(X_approche_avant_reechantillonnage)                 \
                                                                              ,SUCY(Y_approche_avant_reechantillonnage)                 \
                                                                               )                                                        \
                                       ,coefficient_NEUT_SUCY                                                                           \
                                       ,ECHANTILLONNAGE_DENORMALISE_DE_L_IMAGE(NEUT(X_approche_avant_reechantillonnage)                 \
                                                                              ,SUCY(Y_approche_avant_reechantillonnage)                 \
                                                                               )                                                        \
                                        )                                                                                               \
                                   )                                                                                                    \
                              );                                                                                                        \
                                        /* Et le niveau en ce point interpole aux quatre plus proches voisins entiers...             */ \
                                        /*                                                                                           */ \
                                        /* Le 20160329132750, lors de la mise de l'image 'v $xiirC/OBJC.I19__1_______.11' au         */ \
                                        /* format 'Sud', je note que le resultat est une image toute noire. En effet, la methode     */ \
                                        /* precedente revient, pour calculer 'niveau_avant_correction', a selectionner des points    */ \
                                        /* regulierement repartis aux noeuds d'une grille 4x4 (4=1204/256=Sdu/Sud) et par            */ \
                                        /* malchance tous ces points tombent dans les zones noires de la courbe de Hilbert...        */ \
                                        /* Les pas {VOISINAGE_POINT_BILINEAIRE_____pasX,VOISINAGE_POINT_BILINEAIRE_____pasY}         */ \
                                        /* specifiques introduits a cette occasion n'ont evidemment rien change puisqu'en effet      */ \
                                        /* 256 divise exactement 1024...                                                             */ \
                         EGAL(niveau_interpole_avant_le_reechantillonnage,gG(niveau_avant_correction));                                 \
                                        /* Puis corrige afin de prendre en compte les erreurs d'arrondi...                           */ \
                                                                                                                                        \
                         ESaveModifyVariable(Int                                                                                        \
                                            ,pasY                                                                                       \
                                             );                                                                                         \
                         ESaveModifyVariable(Int                                                                                        \
                                            ,pasX                                                                                       \
                                             );                                                                                         \
                                        /* La possible modification de {pasX,pasY} a ete introduite le 20160329120845...             */ \
                                                                                                                                        \
                         BLOC(Sapres);                                                                                                  \
                                        /* Remise en place du dimensionnement de l'image Resultat.                                   */ \
                         FIN_DES_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE                                                                 \
                             (niveau_interpole_avant_le_reechantillonnage                                                               \
                             ,TOUJOURS_MARQUER_A_LA_FIN_DES_INTERPOLATIONS_LINEAIRE_BILINEAIRE_ET_BICUBIQUE                             \
                              );                                                                                                        \
                                        /* Fin des operations, avec rangement du niveau interpole en particulier...                  */ \
                         Eblock                                                                                                         \
                                        /* Reechantillonnage bilineaire du point courant {X,Y} introduit le 20050322111532,          */

#    define    VOISINAGE_POINT_BICUBIQUE(FXf_apres_reechantillonnage,FYf_apres_reechantillonnage,Savant,Sapres,Tn,Ni,tX,tY,kX,kY)       \
                                        /* Les arguments {tX,tY} ont ete introduits le 20030825110246.                               */ \
                                        /*                                                                                           */ \
                                        /* On notera le 20050313175632 le changement des noms de deux parametres 'Ty,In' en 'Tn,Ni'  */ \
                                        /* plus logiques mnemoniquement ("Tn" pour "Type Niveau" et "Ni" pour "Niveau Indefini"...). */ \
                                        /*                                                                                           */ \
                                        /* Le 20080930162107 furent introduits {kX,kY} afin de controler independemment, si besoin   */ \
                                        /* est, les interpolations selon 'X' et 'Y'...                                               */ \
                                                                                                                                        \
                                        /* On notera que ce code est tres inspire de celui de la fonction 'Ifractal_2D(...)' de      */ \
                                        /* 'v $xiii/aleat.2$vv$FON'.                                                                 */ \
                         Bblock                                                                                                         \
                         DEFV(Float,INIT(fonction___au_point_entier_u0v0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point "entier" (u=0,v=0),                                        */ \
                         DEFV(Float,INIT(fonction___au_point_entier_u1v0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point "entier" (u=+1,v=0),                                       */ \
                         DEFV(Float,INIT(fonction___au_point_entier_u0v1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point "entier" (u=0,v=+1),                                       */ \
                         DEFV(Float,INIT(fonction___au_point_entier_u1v1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point "entier" (u=+1,v=+1).                                      */ \
                                                                                                                                        \
                         DEFV(Float,INIT(fonction___au_point_entier_u9v0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point "entier" (u=-1,v=0),                                       */ \
                         DEFV(Float,INIT(fonction___au_point_entier_u2v0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point "entier" (u=+2,v=0),                                       */ \
                         DEFV(Float,INIT(fonction___au_point_entier_u9v1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point "entier" (u=-1,v=+1),                                      */ \
                         DEFV(Float,INIT(fonction___au_point_entier_u2v1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point "entier" (u=+2,v=+1).                                      */ \
                         DEFV(Float,INIT(fonction___au_point_entier_u0v9,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point "entier" (u=0,v=-1),                                       */ \
                         DEFV(Float,INIT(fonction___au_point_entier_u1v9,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point "entier" (u=+1,v=-1),                                      */ \
                         DEFV(Float,INIT(fonction___au_point_entier_u0v2,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point "entier" (u=0,v=+2),                                       */ \
                         DEFV(Float,INIT(fonction___au_point_entier_u1v2,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point "entier" (u=+1,v=+2).                                      */ \
                         DEFV(Float,INIT(fonction___au_point_uUv0,FLOT__UNDEF));                                                        \
                                        /* Valeur de la fonction au point "entier" (u=U,v=0),                                        */ \
                         DEFV(Float,INIT(fonction___au_point_uUv1,FLOT__UNDEF));                                                        \
                                        /* Valeur de la fonction au point "entier" (u=U,v=+1).                                       */ \
                         DEFV(Float,INIT(fonction___au_point_uUvV,FLOT__UNDEF));                                                        \
                                        /* Valeur de la fonction aleatoire au noeud (u=U,v=V).                                       */ \
                                                                                                                                        \
                         DEFV(Float,INIT(derivee_Du_au_point_entier_u0v0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'u' de la fonction au point "entier" (u=0,v=0),         */ \
                         DEFV(Float,INIT(derivee_Du_au_point_entier_u1v0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'u' de la fonction au point "entier" (u=+1,v=0),        */ \
                         DEFV(Float,INIT(derivee_Du_au_point_entier_u0v1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'u' de la fonction au point "entier" (u=0,v=+1),        */ \
                         DEFV(Float,INIT(derivee_Du_au_point_entier_u1v1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'u' de la fonction au point "entier" (u=+1,v=+1).       */ \
                         DEFV(Float,INIT(derivee_Dv_au_point_entier_u0v0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point "entier" (u=0,v=0),         */ \
                         DEFV(Float,INIT(derivee_Dv_au_point_entier_u1v0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point "entier" (u=+1,v=0),        */ \
                         DEFV(Float,INIT(derivee_Dv_au_point_entier_u0v1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point "entier" (u=0,v=+1),        */ \
                         DEFV(Float,INIT(derivee_Dv_au_point_entier_u1v1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point "entier" (u=+1,v=+1).       */ \
                         DEFV(Float,INIT(derivee_Dv_au_point_uUv0,FLOT__UNDEF));                                                        \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point (u=U,v=0),                  */ \
                         DEFV(Float,INIT(derivee_Dv_au_point_uUv1,FLOT__UNDEF));                                                        \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point (u=U,v=+1).                 */ \
                                                                                                                                        \
                         DONNEES_UTILES_AUX_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE(Tn,Ni)                                               \
                                        /* ATTENTION, a la fin de 'DONNEES_UTILES_AUX_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE' il     */ \
                                        /* n'y a pas de ";" au cas ou d'autres donnees devraient suivre...                           */ \
                                                                                                                                        \
                         BLOC(Savant);                                                                                                  \
                                        /* Mise en place du dimensionnement de l'image Argument.                                     */ \
                                                                                                                                        \
                         INITIALISATION_DES_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE(FXf_apres_reechantillonnage                          \
                                                                                  ,FYf_apres_reechantillonnage                          \
                                                                                  ,tX                                                   \
                                                                                  ,tY                                                   \
                                                                                   );                                                   \
                                        /* Debut des operations avec en particulier definition des donnees utiles...                 */ \
                                                                                                                                        \
                         BSaveModifyVariable(Int                                                                                        \
                                            ,pasX                                                                                       \
                                            ,VOISINAGE_POINT_BICUBIQUE_____pasX                                                         \
                                             );                                                                                         \
                         BSaveModifyVariable(Int                                                                                        \
                                            ,pasY                                                                                       \
                                            ,VOISINAGE_POINT_BICUBIQUE_____pasY                                                         \
                                             );                                                                                         \
                                        /* La possible modification de {pasX,pasY} a ete introduite le 20160329120845...             */ \
                                                                                                                                        \
                         EGAL(fonction___au_point_entier_u0v0                                                                           \
                             ,ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE(NEUT(NEUT(X_approche_avant_reechantillonnage))                       \
                                                                  ,NEUT(NEUT(Y_approche_avant_reechantillonnage))                       \
                                                                   )                                                                    \
                              );                                                                                                        \
                         EGAL(fonction___au_point_entier_u1v0                                                                           \
                             ,ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE(NEUT(SUCX(X_approche_avant_reechantillonnage))                       \
                                                                  ,NEUT(NEUT(Y_approche_avant_reechantillonnage))                       \
                                                                   )                                                                    \
                              );                                                                                                        \
                         EGAL(fonction___au_point_entier_u1v1                                                                           \
                             ,ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE(NEUT(SUCX(X_approche_avant_reechantillonnage))                       \
                                                                  ,NEUT(SUCY(Y_approche_avant_reechantillonnage))                       \
                                                                   )                                                                    \
                              );                                                                                                        \
                         EGAL(fonction___au_point_entier_u0v1                                                                           \
                             ,ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE(NEUT(NEUT(X_approche_avant_reechantillonnage))                       \
                                                                  ,NEUT(SUCY(Y_approche_avant_reechantillonnage))                       \
                                                                   )                                                                    \
                              );                                                                                                        \
                                                                                                                                        \
                         EGAL(fonction___au_point_entier_u9v0                                                                           \
                             ,ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE(NEUT(PREX(X_approche_avant_reechantillonnage))                       \
                                                                  ,NEUT(NEUT(Y_approche_avant_reechantillonnage))                       \
                                                                   )                                                                    \
                              );                                                                                                        \
                         EGAL(fonction___au_point_entier_u0v9                                                                           \
                             ,ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE(NEUT(NEUT(X_approche_avant_reechantillonnage))                       \
                                                                  ,NEUT(PREY(Y_approche_avant_reechantillonnage))                       \
                                                                   )                                                                    \
                              );                                                                                                        \
                         EGAL(fonction___au_point_entier_u1v9                                                                           \
                             ,ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE(NEUT(SUCX(X_approche_avant_reechantillonnage))                       \
                                                                  ,NEUT(PREY(Y_approche_avant_reechantillonnage))                       \
                                                                   )                                                                    \
                              );                                                                                                        \
                         EGAL(fonction___au_point_entier_u2v0                                                                           \
                             ,ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE(SUCX(SUCX(X_approche_avant_reechantillonnage))                       \
                                                                  ,NEUT(NEUT(Y_approche_avant_reechantillonnage))                       \
                                                                   )                                                                    \
                              );                                                                                                        \
                         EGAL(fonction___au_point_entier_u2v1                                                                           \
                             ,ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE(SUCX(SUCX(X_approche_avant_reechantillonnage))                       \
                                                                  ,NEUT(SUCY(Y_approche_avant_reechantillonnage))                       \
                                                                   )                                                                    \
                              );                                                                                                        \
                         EGAL(fonction___au_point_entier_u1v2                                                                           \
                             ,ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE(NEUT(SUCX(X_approche_avant_reechantillonnage))                       \
                                                                  ,SUCY(SUCY(Y_approche_avant_reechantillonnage))                       \
                                                                   )                                                                    \
                              );                                                                                                        \
                         EGAL(fonction___au_point_entier_u0v2                                                                           \
                             ,ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE(NEUT(NEUT(X_approche_avant_reechantillonnage))                       \
                                                                  ,SUCY(SUCY(Y_approche_avant_reechantillonnage))                       \
                                                                   )                                                                    \
                              );                                                                                                        \
                         EGAL(fonction___au_point_entier_u9v1                                                                           \
                             ,ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE(NEUT(PREX(X_approche_avant_reechantillonnage))                       \
                                                                  ,NEUT(SUCY(Y_approche_avant_reechantillonnage))                       \
                                                                   )                                                                    \
                              );                                                                                                        \
                                        /* Calcul des valeurs de la fonction aux noeuds entourant le carre de base, afin de pouvoir  */ \
                                        /* calculer ci-apres les derivees partielles en chacun de ses noeuds par des differences     */ \
                                        /* finies...                                                                                 */ \
                                                                                                                                        \
                         EGAL(derivee_Du_au_point_entier_u0v0                                                                           \
                             ,DERIVATION_NUMERIQUE_POUR_L_INTERPOLATION_BICUBIQUE(fonction___au_point_entier_u9v0                       \
                                                                                 ,fonction___au_point_entier_u1v0                       \
                                                                                 ,FLOT(DOUB(pasX))                                      \
                                                                                  )                                                     \
                              );                                                                                                        \
                         EGAL(derivee_Du_au_point_entier_u1v0                                                                           \
                             ,DERIVATION_NUMERIQUE_POUR_L_INTERPOLATION_BICUBIQUE(fonction___au_point_entier_u0v0                       \
                                                                                 ,fonction___au_point_entier_u2v0                       \
                                                                                 ,FLOT(DOUB(pasX))                                      \
                                                                                  )                                                     \
                              );                                                                                                        \
                         EGAL(derivee_Du_au_point_entier_u1v1                                                                           \
                             ,DERIVATION_NUMERIQUE_POUR_L_INTERPOLATION_BICUBIQUE(fonction___au_point_entier_u0v1                       \
                                                                                 ,fonction___au_point_entier_u2v1                       \
                                                                                 ,FLOT(DOUB(pasX))                                      \
                                                                                  )                                                     \
                              );                                                                                                        \
                         EGAL(derivee_Du_au_point_entier_u0v1                                                                           \
                             ,DERIVATION_NUMERIQUE_POUR_L_INTERPOLATION_BICUBIQUE(fonction___au_point_entier_u9v1                       \
                                                                                 ,fonction___au_point_entier_u1v1                       \
                                                                                 ,FLOT(DOUB(pasX))                                      \
                                                                                  )                                                     \
                              );                                                                                                        \
                         EGAL(derivee_Dv_au_point_entier_u0v0                                                                           \
                             ,DERIVATION_NUMERIQUE_POUR_L_INTERPOLATION_BICUBIQUE(fonction___au_point_entier_u0v9                       \
                                                                                 ,fonction___au_point_entier_u0v1                       \
                                                                                 ,FLOT(DOUB(pasY))                                      \
                                                                                  )                                                     \
                              );                                                                                                        \
                         EGAL(derivee_Dv_au_point_entier_u1v0                                                                           \
                             ,DERIVATION_NUMERIQUE_POUR_L_INTERPOLATION_BICUBIQUE(fonction___au_point_entier_u1v9                       \
                                                                                 ,fonction___au_point_entier_u1v1                       \
                                                                                 ,FLOT(DOUB(pasY))                                      \
                                                                                  )                                                     \
                              );                                                                                                        \
                         EGAL(derivee_Dv_au_point_entier_u1v1                                                                           \
                             ,DERIVATION_NUMERIQUE_POUR_L_INTERPOLATION_BICUBIQUE(fonction___au_point_entier_u1v0                       \
                                                                                 ,fonction___au_point_entier_u1v2                       \
                                                                                 ,FLOT(DOUB(pasY))                                      \
                                                                                  )                                                     \
                              );                                                                                                        \
                         EGAL(derivee_Dv_au_point_entier_u0v1                                                                           \
                             ,DERIVATION_NUMERIQUE_POUR_L_INTERPOLATION_BICUBIQUE(fonction___au_point_entier_u0v0                       \
                                                                                 ,fonction___au_point_entier_u0v2                       \
                                                                                 ,FLOT(DOUB(pasY))                                      \
                                                                                  )                                                     \
                              );                                                                                                        \
                                        /* Calcul des derivees partielles en 'u' et 'v' aux noeuds du carre de base par des          */ \
                                        /* differences finies a l'aide des differentes valeurs aux noeuds du maillage...             */ \
                         EGAL(derivee_Dv_au_point_uUv0                                                                                  \
                             ,INTERPOLATION_LINEAIRE(derivee_Dv_au_point_entier_u0v0                                                    \
                                                    ,derivee_Dv_au_point_entier_u1v0                                                    \
                                                    ,X_barycentrique(kX,NEUT)                                                           \
                                                     )                                                                                  \
                              );                                                                                                        \
                         EGAL(derivee_Dv_au_point_uUv1                                                                                  \
                             ,INTERPOLATION_LINEAIRE(derivee_Dv_au_point_entier_u0v1                                                    \
                                                    ,derivee_Dv_au_point_entier_u1v1                                                    \
                                                    ,X_barycentrique(kX,NEUT)                                                           \
                                                     )                                                                                  \
                              );                                                                                                        \
                                        /* Calcul des derivees partielles en 'u' et 'v' sur les aretes horizontales du carre de      */ \
                                        /* base par des interpolations lineaires a partir des sommets voisins (on notera que l'on    */ \
                                        /* ne peut utiliser d'interpolation cubique, puisqu'on ne connait pas encore les derivees).  */ \
                                                                                                                                        \
                         EGAL(fonction___au_point_uUv0                                                                                  \
                             ,INTERPOLATION_CUBIQUE(fonction___au_point_entier_u0v0                                                     \
                                                   ,derivee_Du_au_point_entier_u0v0                                                     \
                                                   ,fonction___au_point_entier_u1v0                                                     \
                                                   ,derivee_Du_au_point_entier_u1v0                                                     \
                                                   ,X_barycentrique(kX,NEUT)                                                            \
                                                    )                                                                                   \
                              );                                                                                                        \
                         EGAL(fonction___au_point_uUv1                                                                                  \
                             ,INTERPOLATION_CUBIQUE(fonction___au_point_entier_u0v1                                                     \
                                                   ,derivee_Du_au_point_entier_u0v1                                                     \
                                                   ,fonction___au_point_entier_u1v1                                                     \
                                                   ,derivee_Du_au_point_entier_u1v1                                                     \
                                                   ,X_barycentrique(kX,NEUT)                                                            \
                                                    )                                                                                   \
                              );                                                                                                        \
                                        /* Calcul de la valeur de la fonction sur les aretes horizontales du carre de base...        */ \
                         EGAL(fonction___au_point_uUvV                                                                                  \
                             ,INTERPOLATION_CUBIQUE(fonction___au_point_uUv0                                                            \
                                                   ,derivee_Dv_au_point_uUv0                                                            \
                                                   ,fonction___au_point_uUv1                                                            \
                                                   ,derivee_Dv_au_point_uUv1                                                            \
                                                   ,Y_barycentrique(kY,NEUT)                                                            \
                                                    )                                                                                   \
                              );                                                                                                        \
                                        /* Ordre des interpolations cubiques ('-1' est note '9') :                                   */ \
                                        /*                                                                                           */ \
                                        /*                                                                                           */ \
                                        /*                 v=2                   (0,2) - - - - - - (1,2)                             */ \
                                        /*                                        /|                 |\                              */ \
                                        /*                                      /                       \                            */ \
                                        /*                                    /    |                 |    \                          */ \
                                        /*                                  /                               \                        */ \
                                        /*                                /        |                 |        \                      */ \
                                        /*                              /                                       \                    */ \
                                        /*                            /            |                 |            \                  */ \
                                        /*                          /                        [1]                    \                */ \
                                        /*                        /                |                 |                \              */ \
                                        /*                 v=1 (9,1) - - - - - - (0,1)------(U,1)--(1,1) - - - - - - (2,1)           */ \
                                        /*                       |                 |          .      |                 |             */ \
                                        /*                                         |          .      |                               */ \
                                        /*                       |                 |          .      |                 |             */ \
                                        /*                                         |          .      |                               */ \
                                        /*                       |                 |          .      |                 |             */ \
                                        /*                                         |    [2] (U,V)    |                               */ \
                                        /*                       |                 |          .      |                 |             */ \
                                        /*                                         |          .      |                               */ \
                                        /*                       |                 |          .      |                 |             */ \
                                        /*                 v=0 (9,0) - - -<- - - (0,0)------(U,0)--(1,0) - - - - - - (2,0)           */ \
                                        /*                        \                |                 |                /              */ \
                                        /*                          \                        [1]                    /                */ \
                                        /*                            \            |                 |            /                  */ \
                                        /*                              \                                       /                    */ \
                                        /*                                \        |                 |        /                      */ \
                                        /*                                  \                               /                        */ \
                                        /*                                    \    |                 |    /                          */ \
                                        /*                                      \                       /                            */ \
                                        /*                                        \|                 |/                              */ \
                                        /*                 v=-1                  (0,9) - - - - - - (1,9)                             */ \
                                        /*                                                                                           */ \
                                        /*                      u=-1              u=0               u=1               u=2            */ \
                                        /*                                                                                           */ \
                                        /*                                                                                           */ \
                                        /*                v ^                                                                        */ \
                                        /*                  |                                                                        */ \
                                        /*                  |                                                                        */ \
                                        /*                  o---->                                                                   */ \
                                        /*                       u                                                                   */ \
                                        /*                                                                                           */ \
                                                                                                                                        \
                         EGAL(niveau_interpole_avant_le_reechantillonnage                                                               \
                             ,__DENORMALISE_DU_NIVEAU_INTERPOLE(fonction___au_point_uUvV)                                               \
                              );                                                                                                        \
                                        /* Et le niveau en ce point interpole aux douze plus proches voisins entiers...              */ \
                                                                                                                                        \
                         ESaveModifyVariable(Int                                                                                        \
                                            ,pasY                                                                                       \
                                             );                                                                                         \
                         ESaveModifyVariable(Int                                                                                        \
                                            ,pasX                                                                                       \
                                             );                                                                                         \
                                        /* La possible modification de {pasX,pasY} a ete introduite le 20160329120845...             */ \
                                                                                                                                        \
                         BLOC(Sapres);                                                                                                  \
                                        /* Remise en place du dimensionnement de l'image Resultat.                                   */ \
                                                                                                                                        \
                         FIN_DES_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE                                                                 \
                             (niveau_interpole_avant_le_reechantillonnage                                                               \
                             ,TOUJOURS_MARQUER_A_LA_FIN_DES_INTERPOLATIONS_LINEAIRE_BILINEAIRE_ET_BICUBIQUE                             \
                              );                                                                                                        \
                                        /* Fin des operations, avec rangement du niveau interpole en particulier...                  */ \
                         Eblock                                                                                                         \
                                        /* Reechantillonnage bicubique du point courant {X,Y}.                                       */
#Aif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )
#Eif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   D ' U N E   I M A G E   P A R   D E P L A C E M E N T                                        */
/*        D E S   C O O R D O N N E E S   V I A   D E U X   A U T R E S   I M A G E S  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIdistorsion_par_un_champ(les_images_sont_standards                                                                           \
                                   ,imageR,FimageR                                                                                      \
                                   ,imageA,FimageA                                                                                      \
                                   ,facteurX,imageX,FimageX,anti_translationX,Fanti_translationX                                        \
                                   ,facteurY,imageY,FimageY,anti_translationY,Fanti_translationY                                        \
                                   ,methode                                                                                             \
                                    )                                                                                                   \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Idistorsion_par_un_champ(imageR                                                                               \
                                                  ,imageA                                                                               \
                                                  ,facteurX,imageX,anti_translationX                                                    \
                                                  ,facteurY,imageY,anti_translationY                                                    \
                                                  ,methode                                                                              \
                                                   )                                                                                    \
                         ,IFdistorsion_par_un_champ(FimageR                                                                             \
                                                   ,FimageA                                                                             \
                                                   ,facteurX,FimageX,Fanti_translationX                                                 \
                                                   ,facteurY,FimageY,Fanti_translationY                                                 \
                                                   ,methode                                                                             \
                                                    )                                                                                   \
                          )                                                                                                             \
                                        /* Distorsion d'une image quelconque ("standard" ou "flottante") a l'aide de deux autres     */ \
                                        /* images (procedure introduite le 20210603103206).                                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E M O N T E E   D U   N I V E A U   D E   N O I R   D ' U N E   I M A G E  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   FACTEUR_D_ECHELLE_POUR_LA_REMONTEE_DU_NIVEAU_DE_NOIR(niveau_de_NOIR_remonte)                                                  \
                    DIVI(SOUS(FLOT(NIVR(BLANC)),FLOT(NIVR(niveau_de_NOIR_remonte)))                                                     \
                        ,SOUS(FLOT(NIVR(BLANC)),FLOT(NIVR(NOIR)))                                                                       \
                         )                                                                                                              \
                                        /* Facteur d'echelle pour remonter le niveau de NOIR.                                        */
#define   FACTEUR_DE_TRANSLATION_POUR_LA_REMONTEE_DU_NIVEAU_DE_NOIR(niveau_de_NOIR_remonte)                                             \
                    MUL2(DIVI(SOUS(FLOT(NIVR(niveau_de_NOIR_remonte)),FLOT(NIVR(NOIR)))                                                 \
                             ,SOUS(FLOT(NIVR(BLANC)),FLOT(NIVR(NOIR)))                                                                  \
                              )                                                                                                         \
                        ,FLOT(NIVR(BLANC))                                                                                              \
                         )                                                                                                              \
                                        /* Facteur de translation pour remonter le niveau de NOIR.                                   */
#define   REMONTEE_D_UN_NIVEAU_EN_FONCTION_DU_NIVEAU_DE_NOIR(niveau,niveau_de_NOIR_remonte)                                             \
                    TRNF(AXPB(FACTEUR_D_ECHELLE_POUR_LA_REMONTEE_DU_NIVEAU_DE_NOIR(niveau_de_NOIR_remonte)                              \
                             ,FLOT(niveau)                                                                                              \
                             ,FACTEUR_DE_TRANSLATION_POUR_LA_REMONTEE_DU_NIVEAU_DE_NOIR(niveau_de_NOIR_remonte)                         \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Remontee d'un niveau en fonction d'un nouveau niveau de NOIR (dit "remonte").             */
#define   REMONTEE_DU_NIVEAU_DE_NOIR(imageR,imageA,niveau_de_NOIR_remonte)                                                              \
                    Bblock                                                                                                              \
                    VALIDATION_NIVEAU(niveau_de_NOIR_remonte                                                                            \
                                     ,BLOC(VIDE;)                                                                                       \
                                     ,BLOC(PRINT_ERREUR("le 'niveau de NOIR remonte' demande est inexistant");                          \
                                           CAL1(Prer1("ce NIVEAU est %08X\n",niveau_de_NOIR_remonte));                                  \
                                           )                                                                                            \
                                      );                                                                                                \
                    Test(IFNE(niveau_de_NOIR_remonte,NOIR))                                                                             \
                         Bblock                                                                                                         \
                         CALS(Iscale(imageR                                                                                             \
                                    ,FACTEUR_D_ECHELLE_POUR_LA_REMONTEE_DU_NIVEAU_DE_NOIR(niveau_de_NOIR_remonte)                       \
                                    ,imageA                                                                                             \
                                    ,FACTEUR_DE_TRANSLATION_POUR_LA_REMONTEE_DU_NIVEAU_DE_NOIR(niveau_de_NOIR_remonte)                  \
                                     )                                                                                                  \
                              );                                                                                                        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Remontee du niveau de NOIR d'une image :                                                  */ \
                                        /*                                                                                           */ \
                                        /*                       B - N        N  - N                                                 */ \
                                        /*                            2        2    1                                                */ \
                                        /*                  y = --------.x + ---------.B                                             */ \
                                        /*                       B - N         B - N                                                 */ \
                                        /*                            1             1                                                */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  N  designe le vrai NOIR,                                                 */ \
                                        /*                   1                                                                       */ \
                                        /*                                                                                           */ \
                                        /*                  N  designe le NOIR remonte,                                              */ \
                                        /*                   2                                                                       */ \
                                        /*                                                                                           */ \
                                        /*                  B  designe le BLANC,                                                     */ \
                                        /*                  x  un niveau Argument,                                                   */ \
                                        /*                  y  un niveau Resultat.                                                   */ \
                                        /*                                                                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S Y M E T R I E   D ' A X E   H O R I Z O N T A L   ( O X )   D ' U N E   I M A G E   Q U E L C O N Q U E  :               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIx_symetrie(les_images_sont_standards,imageR,FimageR,imageA,FimageA)                                                         \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Ix_symetrie(imageR,imageA)                                                                                    \
                         ,IFx_symetrie(FimageR,FimageA)                                                                                 \
                          )                                                                                                             \
                                        /* Symetrie d'axe horizontal d'une image quelconque ("standard" ou "flottante").             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S Y M E T R I E   D ' A X E   V E R T I C A L   ( O Y )   D ' U N E   I M A G E   Q U E L C O N Q U E  :                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIy_symetrie(les_images_sont_standards,imageR,FimageR,imageA,FimageA)                                                         \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Iy_symetrie(imageR,imageA)                                                                                    \
                         ,IFy_symetrie(FimageR,FimageA)                                                                                 \
                          )                                                                                                             \
                                        /* Symetrie d'axe vertical d'une image quelconque ("standard" ou "flottante").               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P E R I O D I S A T I O N   D ' U N E   I M A G E   Q U E L C O N Q U E  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIperiodisation(les_images_sont_standards,imageR,FimageR,imageA,FimageA)                                                      \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Iperiodisation(imageR,imageA)                                                                                 \
                         ,IFperiodisation(FimageR,FimageA)                                                                              \
                          )                                                                                                             \
                                        /* Symetrie d'axe vertical d'une image quelconque ("standard" ou "flottante"). Ceci fut      */
                                        /* introduit le 20150603150137...                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N V E R S I O N   ( A U   S E N S   G E O M E T R I Q U E   D U   T E R M E )  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   INVG(x,pole,puissance)                                                                                                        \
                    AXPB(puissance,INVZ(SOUS(x,pole)),pole)                                                                             \
                                        /* Inversion de 'x' suivant le pole 'pole' et la puissance 'puissance' (introduit le         */ \
                                        /* 20060425163759) suivant la definition :                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  (X1 - pole)x(X2 - pole) = puissance                                      */ \
                                        /*                                                                                           */ \
                                        /* soit :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                        puissance                                                          */ \
                                        /*                  X2 = ----------- + pole                                                  */ \
                                        /*                        X1 - pole                                                          */ \
                                        /*                                                                                           */ \
                                        /* ce qui correspond a la definition de l'inversion geometrique...                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O M P L E M E N T A T I O N   D ' U N E   I M A G E   Q U E L C O N Q U E  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIcomplementation(les_images_sont_standards,imageR,FimageR,imageA,FimageA)                                                    \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Icomplementation(imageR,imageA)                                                                               \
                         ,IFcomplementation(FimageR,FimageA)                                                                            \
                          )                                                                                                             \
                                        /* Complementation d'une image quelconque ("standard" ou "flottante").                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M I S E   A   L ' E C H E L L E   D ' U N E   I M A G E   Q U E L C O N Q U E  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIscale(les_images_sont_standards,imageR,FimageR,facteur_d_echelle,imageA,FimageA,facteur_de_translation)                     \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Iscale(imageR,facteur_d_echelle,imageA,facteur_de_translation)                                                \
                         ,IFscale(FimageR,facteur_d_echelle,FimageA,facteur_de_translation)                                             \
                          )                                                                                                             \
                                        /* Mise a l'echelle d'une image quelconque ("standard" ou "flottante").                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        N O R M A L I S A T I O N   D ' U N E   I M A G E   F L O T T A N T E  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   EPSILON_DE_SEUILLAGE_INFERIEUR_PAR_RAPPORT_AU_NIVEAU_ORIGINE_POUR_IFnormalisation                                             \
                    D_EPSILON                                                                                                           \
                                        /* Pour eviter des "underflows" dans 'IFnormalisation(...)' via un 'NORM(...)' (introduit    */ \
                                        /* le 20001003175237 en s'inspirant du probleme 'v $xiii/conversion$FON 20000929102058').    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I L T R A G E   P A S S E _ B A N D E   D ' U N E   I M A G E  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   NIVEAU_PASSE_BANDE_INFERIEUR                                                                                                  \
                    NOIR                                                                                                                \
                                        /* Niveau a attribuer eventuellement aux points de niveaux inferieurs a la bande, et ce      */ \
                                        /* par valeur inferieure.                                                                    */
#define   NIVEAU_PASSE_BANDE_SUPERIEUR                                                                                                  \
                    NOIR                                                                                                                \
                                        /* Niveau a attribuer eventuellement aux points de niveaux inferieurs a la bande, et ce      */ \
                                        /* par valeur superieure.                                                                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I L T R A G E   C O U P E _ B A N D E   D ' U N E   I M A G E  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   NIVEAU_COUPE_BANDE                                                                                                            \
                    NOIR                                                                                                                \
                                        /* Niveau a attribuer eventuellement aux points de niveaux compris dans la bande.            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S P O S I T I O N   D ' U N E   I M A G E   Q U E L C O N Q U E  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gItransposition(les_images_sont_standards,imageR,FimageR,imageA,FimageA)                                                      \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Itransposition(imageR,imageA)                                                                                 \
                         ,IFtransposition(FimageR,FimageA)                                                                              \
                          )                                                                                                             \
                                        /* Transposition d'une image quelconque ("standard" ou "flottante").                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M O D I F I C A T I O N   D ' U N E   I M A G E   P A R   U N E   F O N C T I O N  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   MODIFICATION_D_UN_CHAMP(amplificateur_fonction,Acces,Fonction,translateur_fonction,niveau,x,y,ASID1,trans_champ,scale)        \
                    AXPB(amplificateur_fonction                                                                                         \
                        ,Acces(Fonction)(niveau                                                                                         \
                                        ,ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D(x,y,Zf_ARGUMENT_INUTILE,Tf_ARGUMENT_INUTILE              \
                                                                              ,ASID1                                                    \
                                                                              ,trans_champ,scale                                        \
                                                                               )                                                        \
                                        ,ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D(x,y,Zf_ARGUMENT_INUTILE,Tf_ARGUMENT_INUTILE              \
                                                                              ,ASID1                                                    \
                                                                              ,trans_champ,scale                                        \
                                                                               )                                                        \
                                         )                                                                                              \
                        ,translateur_fonction                                                                                           \
                         )                                                                                                              \
                                        /* Macro de modification d'un point donne {x,y} d'un champ suivant une translation definie   */ \
                                        /* par 'trans_champ' accedee par 'ASID1' ('ASI1' ou 'ASD1'). La fonction modifiant           */ \
                                        /* le champ est definie par 'Fonction' et accedee par 'Acces' ('RIEN' ou 'fPOINTEUR'). On    */ \
                                        /* notera le 'SCAL(...,dimY,dimX)' destine a faire que les axes soient orthonormes, meme si  */ \
                                        /* l'image generee n'est pas carree (voir par exemple 'Pal')...                              */ \
                                        /*                                                                                           */ \
                                        /* L'usage de 'ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D(...)' fut introduit le 20060627120850.  */ \
                                        /* On notera au passage que la coordonnee 'Z' (representee par 'FLOT(Zmin)') ne sert en fait */ \
                                        /* a rien. Le 20100209095945 fut introduite la coordonnee 'T' ('Tf_ARGUMENT_INUTILE' la      */ \
                                        /* representant, 'Zf_ARGUMENT_INUTILE' ayant remplace 'FLOT(Zmin)' a cette occasion...).     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N V O L U T I O N   D ' U N   P O I N T   P A R   U N   N O Y A U  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   EDITER_LES_MESSAGES_DU_CALCUL_D_UN_NOYAU_DE_CONVOLUTION_VARIABLE                                                              \
                    VRAI
#define   NE_PAS_EDITER_LES_MESSAGES_DU_CALCUL_D_UN_NOYAU_DE_CONVOLUTION_VARIABLE                                                       \
                    NOTL(EDITER_LES_MESSAGES_DU_CALCUL_D_UN_NOYAU_DE_CONVOLUTION_VARIABLE)
                                        /* Afin de savoir s'il faut editer ou pas les messages d'erreur de generation d'un           */
                                        /* noyau de convolution variable...                                                          */

#define   TAILLE_MAXIMALE_D_UN_NOYAU_DE_CONVOLUTION                                                                                     \
                    MUL2(KK___dimX,KK___dimY)                                                                                           \
                                        /* Taille maximale d'un noyau de convolution ; on notera la definition a partir du couple    */ \
                                        /* ('KK___dimX','KK___dimY') et non pas a partir de ('dimX','dimY') afin de ne pas avoir de  */ \
                                        /* probleme de syntaxe lors de la definition des noyaux de convolution...                    */

#if       (         (defined(BUG_SYSTEME_APC_GCC_tableaux_statiques_trop_volumineux_1))                                                 \
          ||        (defined(BUG_SYSTEME_APC_GCC_too_large_stack_frames))                                                               \
           )
#    undef     TAILLE_MAXIMALE_D_UN_NOYAU_DE_CONVOLUTION
#    define    TAILLE_MAXIMALE_D_UN_NOYAU_DE_CONVOLUTION                                                                                \
                         FRA4(FRA4(MUL2(KK___dimX,KK___dimY)))                                                                          \
                                        /* Taille maximale d'un noyau de convolution ; on notera la definition a partir du couple    */ \
                                        /* ('KK___dimX','KK___dimY') et non pas a partir de ('dimX','dimY') afin de ne pas avoir de  */ \
                                        /* probleme de syntaxe lors de la definition des noyaux de convolution...                    */
#Aif      (         (defined(BUG_SYSTEME_APC_GCC_tableaux_statiques_trop_volumineux_1))                                                 \
          ||        (defined(BUG_SYSTEME_APC_GCC_too_large_stack_frames))                                                               \
           )
#Eif      (         (defined(BUG_SYSTEME_APC_GCC_tableaux_statiques_trop_volumineux_1))                                                 \
          ||        (defined(BUG_SYSTEME_APC_GCC_too_large_stack_frames))                                                               \
           )

#if       (         (defined(BUG_SYSTEME_DECALPHA_OSF1_CC_large_stack_frames_not_yet_supported))                                        \
           )
#    undef     TAILLE_MAXIMALE_D_UN_NOYAU_DE_CONVOLUTION
#    define    TAILLE_MAXIMALE_D_UN_NOYAU_DE_CONVOLUTION                                                                                \
                         FRA16(FRA16(MUL2(KK___dimX,KK___dimY)))                                                                        \
                                        /* Taille maximale d'un noyau de convolution ; on notera la definition a partir du couple    */ \
                                        /* ('KK___dimX','KK___dimY') et non pas a partir de ('dimX','dimY') afin de ne pas avoir de  */ \
                                        /* probleme de syntaxe lors de la definition des noyaux de convolution...                    */
#Aif      (         (defined(BUG_SYSTEME_DECALPHA_OSF1_CC_large_stack_frames_not_yet_supported))                                        \
           )
#Eif      (         (defined(BUG_SYSTEME_DECALPHA_OSF1_CC_large_stack_frames_not_yet_supported))                                        \
           )

#define   PREMIER_POINT                                                                                                                 \
                    PREMIERE_ITERATION_D_UN_Komp                                                                                        \
                                        /* Premier point d'une liste. Le 20001218141354, la definition anterieure (via un 'UN') a    */ \
                                        /* ete remplacee par 'PREMIERE_ITERATION_D_UN_Komp' afin d'etre sur du fonctionnement des    */ \
                                        /* procedures du type 'v $xrv/champs_5.11$I ACCES_LISTE.liste.index.'.                       */
#define   POINT_INEXISTANT                                                                                                              \
                    PRED(PREMIER_POINT)                                                                                                 \
                                        /* Introduit le 20210315114204 pour 'v $xiii/di_image$FON 20210315105035'...                 */

#define   EXPOSANT_DE_LA_FONCTION_DE_TRANSFERT_UNITE_APRES_CONVOLUTION                                                                  \
                    FU                                                                                                                  \
                                        /* Lorsque le cumul est normalise apres calcul, il lui est applique une fonction de          */ \
                                        /* transfert "unite" a priori...                                                             */

#define   NOMBRE_DE_POINTS_EFFECTIF_D_UN_NOYAU_DE_CONVOLUTION_PARCOURU_CIRCULAIREMENT(npn)                                              \
                    COND(IL_NE_FAUT_PAS(Pconvolution_____adapter_le_nombre_de_points_lors_du_parcours_circulaire_des_spirales_carrees)  \
                        ,npn                                                                                                            \
                        ,COND(IL_FAUT(Pconvolution_____compatibilite_2014082110)                                                        \
                             ,INTE(SCAL(EXP2(DOUP(SUCC(ARRI(MOYS(RACX(SCAL(FLOT(npn),PI,FQUATRE))                                       \
                                                                ,FU                                                                     \
                                                                 )                                                                      \
                                                            )                                                                           \
                                                       )                                                                                \
                                                  )                                                                                     \
                                             )                                                                                          \
                                       ,FQUATRE                                                                                         \
                                       ,PI                                                                                              \
                                        )                                                                                               \
                                   )                                                                                                    \
                             ,DOUB(npn)                                                                                                 \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Procedure introduite le 20070104110243 convertissant le nombre de points demandes 'npn'   */ \
                                        /* pour un noyau en le nombre (en general superieur) necessaire pour un parcours circulaire  */ \
                                        /* de ce noyau...                                                                            */ \
                                        /*                                                                                           */ \
                                        /* Le 20140821104017, la formmule precedente a ete simplifiee. En effet, soit un cercle ;    */ \
                                        /* l'aire d'un carre qui lui est circonscrit est le double de l'aire d'un carre qui lui      */ \
                                        /* est inscrit, cela venant du racine de 2 qui permet de passer du cote d'un carre a sa      */ \
                                        /* diagonale, cette racine etant ensuite elevee au carre pour calculer l'aire...             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N V O L U T I O N   D ' U N E   I M A G E  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIconvolution(les_images_sont_standards,imageR,FimageR,facteur,imageA,FimageA,traiter,cumuler,points,noyau,inhiber,renorm)    \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Iconvolution_avec_renormalisation(imageR                                                                      \
                                                           ,facteur                                                                     \
                                                           ,imageA                                                                      \
                                                           ,traiter,cumuler                                                             \
                                                           ,points,noyau,inhiber                                                        \
                                                           ,renorm                                                                      \
                                                            )                                                                           \
                         ,IFFconvolution(FimageR                                                                                        \
                                        ,facteur                                                                                        \
                                        ,FimageA                                                                                        \
                                        ,points,noyau,inhiber                                                                           \
                                         )                                                                                              \
                          )                                                                                                             \
                                        /* Convolution d'une image quelconque ("standard" ou "flottante").                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N V O L U T I O N   D ' U N E   I M A G E   P A R   U N   N O Y A U   V A R I A B L E  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIconvolution_variable(les_images_sont_standards                                                                              \
                                ,imageR,FimageR                                                                                         \
                                ,facteur                                                                                                \
                                ,imageA,FimageA                                                                                         \
                                ,niveaux_a_traiter,niveaux_cumulables                                                                   \
                                ,facteur_du_nombre_de_points                                                                            \
                                ,image_donnant_le_nombre_de_points_du_noyau                                                             \
                                ,image_definissant_la_valeur_du_noyau                                                                   \
                                ,image_inhibant_la_valeur_du_noyau                                                                      \
                                ,seuil_d_inhibition_du_noyau                                                                            \
                                 )                                                                                                      \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Iconvolution_variable(imageR                                                                                  \
                                               ,facteur_multiplicatif                                                                   \
                                               ,imageA                                                                                  \
                                               ,niveaux_a_traiter,niveaux_cumulables                                                    \
                                               ,facteur_du_nombre_de_points                                                             \
                                               ,image_donnant_le_nombre_de_points_du_noyau                                              \
                                               ,image_definissant_la_valeur_du_noyau                                                    \
                                               ,image_inhibant_la_valeur_du_noyau                                                       \
                                               ,seuil_d_inhibition_du_noyau                                                             \
                                                )                                                                                       \
                         ,IFFconvolution_variable(imageR                                                                                \
                                                 ,facteur_multiplicatif                                                                 \
                                                 ,imageA                                                                                \
                                                 ,niveaux_a_traiter,niveaux_cumulables                                                  \
                                                 ,facteur_du_nombre_de_points                                                           \
                                                 ,image_donnant_le_nombre_de_points_du_noyau                                            \
                                                 ,image_definissant_la_valeur_du_noyau                                                  \
                                                 ,image_inhibant_la_valeur_du_noyau                                                     \
                                                 ,seuil_d_inhibition_du_noyau                                                           \
                                                  )                                                                                     \
                          )                                                                                                             \
                                        /* Convolution variable d'une image quelconque ("standard" ou "flottante") introduite        */ \
                                        /* le 20240826134210...                                                                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        L A P L A C I E N   G E N E R A L I S E   D ' U N E   I M A G E                                                            */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIlaplacien_generalise(les_images_sont_standards,imageR,FimageR,fact,imageA,FimageA,traiter,cumuler,points,noyau,inhiber,ren) \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Ilaplacien_generalise(imageR                                                                                  \
                                               ,fact                                                                                    \
                                               ,imageA                                                                                  \
                                               ,traiter,cumuler                                                                         \
                                               ,points,noyau,inhiber                                                                    \
                                               ,ren                                                                                     \
                                                )                                                                                       \
                         ,IFlaplacien_generalise(FimageR                                                                                \
                                                ,fact                                                                                   \
                                                ,FimageA                                                                                \
                                                ,traiter,cumuler                                                                        \
                                                ,points,noyau,inhiber                                                                   \
                                                 )                                                                                      \
                          )                                                                                                             \
                                        /* Laplacien generalise d'une image quelconque ("standard" ou "flottante"). Ceci fut         */
                                        /* introduit le 20210225115942...                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A S S A G E   A   U N E   D Y N A M I Q U E   L O G A R I T H M I Q U E                                                  */
/*        P O U R   U N E   I M A G E   F L O T T A N T E   S A N S   T R A N S L A T I O N   D Y N A M I Q U E  :                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   POUR_OBTENIR_UN_LOGARITHME_POSITIF                                                                                            \
                    EXPB(FZERO)                                                                                                         \
                                        /* Pour un obtenir un logarithme positif...                                                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' I N E R T I E   D ' U N E   I M A G E  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   CALCUL_GENERAL_DE_L_INERTIE_D_UNE_IMAGE(calculer,Ixx,Ixyx,Iyy,translation)                                                    \
                    Bblock                                                                                                              \
                    EGAL(Pconvolution_____calculer_l_inertie,calculer);                                                                 \
                                                                                                                                        \
                    EGAL(Pconvolution_____coefficient_de_Ixx,Ixx);                                                                      \
                    EGAL(Pconvolution_____coefficient_de_Ixyx,Ixyx);                                                                    \
                    EGAL(Pconvolution_____coefficient_de_Iyy,Iyy);                                                                      \
                    EGAL(Pconvolution_____translation_des_I,translation);                                                               \
                    Eblock                                                                                                              \
                                        /* Convolution d'une image sans ou avec calcul d'inertie...                                  */

#define   NE_PAS_CALCULER_L_INERTIE                                                                                                     \
                    FZERO
#define   CALCULER_L_INERTIE                                                                                                            \
                    FU
                                        /* Valeurs standards pour ne pas calculer (respectivement calculer) un des trois moments...  */

#define   CONVOLUER_UNE_IMAGE                                                                                                           \
                    Bblock                                                                                                              \
                    CALCUL_GENERAL_DE_L_INERTIE_D_UNE_IMAGE(FAUX                                                                        \
                                                           ,NE_PAS_CALCULER_L_INERTIE                                                   \
                                                           ,NE_PAS_CALCULER_L_INERTIE                                                   \
                                                           ,NE_PAS_CALCULER_L_INERTIE                                                   \
                                                           ,CALCULER_L_INERTIE                                                          \
                                                            );                                                                          \
                    Eblock                                                                                                              \
                                        /* Convolution d'une image sans calcul d'inertie (correspond a l'etat implicite...).         */

#define   CALCUL_DE_L_INERTIE_Ixx_D_UNE_IMAGE                                                                                           \
                    Bblock                                                                                                              \
                    CALCUL_GENERAL_DE_L_INERTIE_D_UNE_IMAGE(VRAI                                                                        \
                                                           ,CALCULER_L_INERTIE                                                          \
                                                           ,NE_PAS_CALCULER_L_INERTIE                                                   \
                                                           ,NE_PAS_CALCULER_L_INERTIE                                                   \
                                                           ,NE_PAS_CALCULER_L_INERTIE                                                   \
                                                            );                                                                          \
                    Eblock                                                                                                              \
                                        /* Convolution d'une image avec le calcul d'inertie 'Ixx'.                                   */
#define   CALCUL_DE_L_INERTIE_Ixyx_D_UNE_IMAGE                                                                                          \
                    Bblock                                                                                                              \
                    CALCUL_GENERAL_DE_L_INERTIE_D_UNE_IMAGE(VRAI                                                                        \
                                                           ,NE_PAS_CALCULER_L_INERTIE                                                   \
                                                           ,CALCULER_L_INERTIE                                                          \
                                                           ,NE_PAS_CALCULER_L_INERTIE                                                   \
                                                           ,NE_PAS_CALCULER_L_INERTIE                                                   \
                                                            );                                                                          \
                    Eblock                                                                                                              \
                                        /* Convolution d'une image avec le calcul d'inertie 'Ixy'='Iyx'.                             */
#define   CALCUL_DE_L_INERTIE_Iyy_D_UNE_IMAGE                                                                                           \
                    Bblock                                                                                                              \
                    CALCUL_GENERAL_DE_L_INERTIE_D_UNE_IMAGE(VRAI                                                                        \
                                                           ,NE_PAS_CALCULER_L_INERTIE                                                   \
                                                           ,NE_PAS_CALCULER_L_INERTIE                                                   \
                                                           ,CALCULER_L_INERTIE                                                          \
                                                           ,NE_PAS_CALCULER_L_INERTIE                                                   \
                                                            );                                                                          \
                    Eblock                                                                                                              \
                                        /* Convolution d'une image avec le calcul d'inertie 'Iyy'.                                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I L T R A G E   D E S   P O I N T S   I S O L E S   D ' U N E   I M A G E   Q U E L C O N Q U E  :                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIfiltrage_des_points_isoles(les_images_sont_standards,imageR,FimageR,imageA,FimageA,nat,nc,npn,noyau,inhibition,seuil)       \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Ifiltrage_des_points_isoles(imageR                                                                            \
                                                     ,imageA                                                                            \
                                                     ,nat,nc                                                                            \
                                                     ,npn                                                                               \
                                                     ,noyau,inhibition                                                                  \
                                                     ,seuil                                                                             \
                                                      )                                                                                 \
                         ,IFfiltrage_des_points_isoles(FimageR                                                                          \
                                                      ,FimageA                                                                          \
                                                      ,npn                                                                              \
                                                      ,noyau,inhibition                                                                 \
                                                      ,seuil                                                                            \
                                                       )                                                                                \
                          )                                                                                                             \
                                        /* Filtrage des points isoles d'une image quelconque ("standard" ou "flottante").            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E R O S I O N   O U   D I L A T A T I O N   D ' U N E   I M A G E   Q U E L C O N Q U E  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIerosion_ou_dilatation(les_images_sont_standards,imageR,FimageR,imageA,FimageA,nivoT,nivoC,npoints,noyau,inhibe,dilater)     \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Ierosion_ou_dilatation(imageR,imageA,nivoT,nivoC,npoints,noyau,inhibe,dilater)                                \
                         ,IFerosion_ou_dilatation(FimageR,FimageA,nivoT,nivoC,npoints,noyau,inhibe,dilater)                             \
                          )                                                                                                             \
                                        /* Erosion ou dilatation d'une image quelconque ("standard" ou "flottante"). Ceci a ete      */ \
                                        /* introduit le 20101019141234.                                                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        J E U   D E   L A   V I E   S T A N D A R D  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   NOMBRE_MINIMAL_DE_VOISINS_DE_Ijeu_de_la_vie                                                                                   \
                    ZERO
#define   NOMBRE_MAXIMAL_DE_VOISINS_DE_Ijeu_de_la_vie                                                                                   \
                    INTE(SOUS(PUIX(TROIS,BI_DIMENSIONNEL),UN))
                                        /* Nombre maximal de voisins (introduit le 20120229152112).                                  */

#define   CONSERVER_L_ETAT_D_UNE_CELLULE_DU_JEU_DE_LA_VIE                                                                               \
                    K_0
#define   CHANGER___L_ETAT_D_UNE_CELLULE_DU_JEU_DE_LA_VIE                                                                               \
                    K_1
                                        /* Caracteres utiles a la definition des listes de seuil (introduits le 20120229164142).     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        J E U   D E   L A   V I E   G E N E R A L I S E  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIjeu_de_la_vie_generalise(les_images_sont_standards,imageR,FimageR,imageA,FimageA)                                           \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Ijeu_de_la_vie_generalise(imageR,imageA)                                                                      \
                         ,IFjeu_de_la_vie_generalise(FimageR,FimageA)                                                                   \
                          )                                                                                                             \
                                        /* Introduit le 20240826141916...                                                            */
#define   gIjeu_de_la_vie_generalise_variable(les_images_sont_standards                                                                 \
                                             ,imageR,FimageR                                                                            \
                                             ,facteur_multiplicatif                                                                     \
                                             ,imageA,FimageA                                                                            \
                                             ,facteur_du_nombre_de_points                                                               \
                                             ,image_donnant_le_nombre_de_points_du_noyau                                                \
                                             ,image_definissant_la_valeur_du_noyau                                                      \
                                             ,image_inhibant_la_valeur_du_noyau                                                         \
                                             ,seuil_d_inhibition_du_noyau                                                               \
                                              )                                                                                         \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Ijeu_de_la_vie_generalise_variable(imageR                                                                     \
                                                            ,facteur_multiplicatif                                                      \
                                                            ,imageA                                                                     \
                                                            ,facteur_du_nombre_de_points                                                \
                                                            ,image_donnant_le_nombre_de_points_du_noyau                                 \
                                                            ,image_definissant_la_valeur_du_noyau                                       \
                                                            ,image_inhibant_la_valeur_du_noyau                                          \
                                                            ,seuil_d_inhibition_du_noyau                                                \
                                                             )                                                                          \
                         ,IFjeu_de_la_vie_generalise_variable(FimageR                                                                   \
                                                             ,facteur_multiplicatif                                                     \
                                                             ,FimageA                                                                   \
                                                             ,facteur_du_nombre_de_points                                               \
                                                             ,image_donnant_le_nombre_de_points_du_noyau                                \
                                                             ,image_definissant_la_valeur_du_noyau                                      \
                                                             ,image_inhibant_la_valeur_du_noyau                                         \
                                                             ,seuil_d_inhibition_du_noyau                                               \
                                                              )                                                                         \
                          )                                                                                                             \
                                        /* Introduit le 20240826141916...                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M O D E L E   D E   I S I N G   B I D I M E N S I O N N E L  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   VALEUR_ABSOLUE_DU_SPIN_DU_MODELE_D_ISING                                                                                      \
                    FDU                                                                                                                 \
                                        /* Valeur absolue du spin pour le modele d'Ising bidimensionnel et tridimensionnel.          */
                                        /*                                                                                           */
                                        /* Le 20050825111821, lors de la realisation de l'image 'v $xiirk/ISIN.91', j'ai note que    */
                                        /* la temperature critique liee a mon implementation valait :                                */
                                        /*                                                                                           */
                                        /*                                1                                                          */
                                        /*                  Tc = -------------------                                                 */
                                        /*                                     ___                                                   */
                                        /*                        2.A.ln(1 + \/ N )                                                  */
                                        /*                                                                                           */
                                        /* soit 0.2836481642766278 ce qui est une valeur quatre fois plus petite que la valeur       */
                                        /* habituellement utilisee. Cela vient de 'VALEUR_ABSOLUE_DU_SPIN_DU_MODELE_D_ISING' qui     */
                                        /* fait que (par defaut) mes spins sont {-1/2,+1/2} alors qu'en general, les autres          */
                                        /* utilisent des spins {-1,+1}. Etant donne que le calcul fait intervenir un produit de      */
                                        /* spins divise par une temperature ce qui revient a dire que la ou les autres ont 1/T,      */
                                        /* moi, j'ai 1/(4T) ; leurs temperatures sont donc egales a 4 fois les miennes. On notera    */
                                        /* que je pourrai changer cela, mais cela ferait perdre la compatibilite anterieure. Malgre  */
                                        /* tout, {Imodele_d_Ising_2D_____spin_negatif,Imodele_d_Ising_2D_____spin_positif} et        */
                                        /* {Amodele_d_Ising_3D_____spin_negatif,Amodele_d_Ising_3D_____spin_positif} sont            */
                                        /* accessibles et modifiables...                                                             */

#define   DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Imodele_d_Ising_2D                                                                      \
                    UN
#define   DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_Imodele_d_Ising_2D                                                                      \
                    TROIS
#define   DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Imodele_d_Ising_2D                                                                      \
                    SOIXANTE_QUATRE
                                        /* Demi-dimensions (arbitraire) du noyau de 'Imodele_d_Ising_2D(...)'.                       */
#define   DimNo_Imodele_d_Ising_2D                                                                                                      \
                    DOUP(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Imodele_d_Ising_2D)                                                      \
                                        /* Dimension (arbitraire) du noyau "quelconque" de 'Imodele_d_Ising_2D(...)'.                */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : le nom 'DIMENSION_DU_NOYAU_DANS_Imodele_d_Ising_2D' ne peut etre              */ \
                                        /* utilise (d'ou 'DimNo_Imodele_d_Ising_2D') a cause de la procedure '$xcg/gen.ext$Z'        */ \
                                        /* ('v $xiii/di_image$FON DimNo_Imodele_d_Ising_2D').                                        */

#define   PONDERATION_D_UN_POINT_DANS_Imodele_d_Ising_2D                                                                                \
                    FU                                                                                                                  \
                                        /* Definition du facteur par defaut des points du voisinage du point courant {X,Y}.          */

#define   Imodele_d_Ising_2D_____XYmin                                                                                                  \
                    NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Imodele_d_Ising_2D)
#define   Imodele_d_Ising_2D_____XYmax                                                                                                  \
                    NEUT(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Imodele_d_Ising_2D)
                                        /* Dimension des axes {X,Y} necessaires a la lecture de fichiers contenant un noyau          */
                                        /* ('v $xci/Ising_2D.11$K Imodele_d_Ising_2D_____noyau').                                    */
#define   Imodele_d_Ising_2D_____XYmin_effectif                                                                                         \
                    NEGA(Imodele_d_Ising_2D_____demi_dimension_effective_du_noyau)
#define   Imodele_d_Ising_2D_____XYmax_effectif                                                                                         \
                    NEUT(Imodele_d_Ising_2D_____demi_dimension_effective_du_noyau)
                                        /* Extremites effectives des axes {X,Y}.                                                     */

#define   ACCES_NOYAU_DANS_Imodele_d_Ising_2D(x,y)                                                                                      \
                    ITb2(Imodele_d_Ising_2D_____noyau                                                                                   \
                        ,INDX(y,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Imodele_d_Ising_2D))                                         \
                        ,INDX(x,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Imodele_d_Ising_2D))                                         \
                         )                                                                                                              \
                                        /* Acces a l'element {x,y} du noyau de 'Imodele_d_Ising_2D(...)'. ATTENTION a l'odre         */ \
                                        /* des deux coordonnees identique a celui de 'v $xiii/Images$DEF IMAGE.image.x.y.'.          */
#define   INITIALISATION_ELEMENT_NOYAU_DANS_Imodele_d_Ising_2D(x,y,valeur)                                                              \
                    Bblock                                                                                                              \
                    EGAL(ACCES_NOYAU_DANS_Imodele_d_Ising_2D(x,y)                                                                       \
                        ,valeur                                                                                                         \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Initialisation de l'element {x,y}.                                                        */
#define   INITIALISATION_EVENTUELLE_DU_NOYAU_DANS_Imodele_d_Ising_2D                                                                    \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(Imodele_d_Ising_2D_____utiliser_un_noyau))                                                             \
                         Bblock                                                                                                         \
                         Test(IFINff(Imodele_d_Ising_2D_____demi_dimension_effective_du_noyau                                           \
                                    ,DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Imodele_d_Ising_2D                                           \
                                    ,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Imodele_d_Ising_2D                                           \
                                     )                                                                                                  \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("les dimensions du noyau du modele d'Ising bidimensionnel sont incorrectes");                \
                              CAL1(Prer1("%d est demande\n",Imodele_d_Ising_2D_____demi_dimension_effective_du_noyau));                 \
                              CAL1(Prer2("alors que seul [%d,%d] est possible\n"                                                        \
                                        ,DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Imodele_d_Ising_2D                                       \
                                        ,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Imodele_d_Ising_2D                                       \
                                         )                                                                                              \
                                   );                                                                                                   \
                                                                                                                                        \
                              EGAL(Imodele_d_Ising_2D_____demi_dimension_effective_du_noyau                                             \
                                  ,DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_Imodele_d_Ising_2D                                             \
                                   );                                                                                                   \
                                                                                                                                        \
                              CAL1(Prer1("%d est donc force\n",Imodele_d_Ising_2D_____demi_dimension_effective_du_noyau));              \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         Test(IL_FAUT(Imodele_d_Ising_2D_____initialiser_le_noyau))                                                     \
                              Bblock                                                                                                    \
                              begin_imageQ(DoIn,Imodele_d_Ising_2D_____XYmin_effectif,Imodele_d_Ising_2D_____XYmax_effectif,PasY        \
                                          ,DoIn,Imodele_d_Ising_2D_____XYmin_effectif,Imodele_d_Ising_2D_____XYmax_effectif,PasX        \
                                           )                                                                                            \
                                   Bblock                                                                                               \
                                   INITIALISATION_ELEMENT_NOYAU_DANS_Imodele_d_Ising_2D(X,Y                                             \
                                                                                       ,PONDERATION_D_UN_POINT_DANS_Imodele_d_Ising_2D  \
                                                                                        );                                              \
                                        /* Initialisation de l'element courant {X,Y}.                                                */ \
                                   Eblock                                                                                               \
                              end_imageQ(EDoI,EDoI)                                                                                     \
                                                                                                                                        \
                              EGAL(Imodele_d_Ising_2D_____initialiser_le_noyau,FAUX);                                                   \
                                        /* Et l'initialisation n'est plus a faire (jusqu'a la prochaine fois...).                    */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Initialisation eventuelle du noyau de 'Imodele_d_Ising_2D(...)'.                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I F F U S I O N   B I D I M E N S I O N N E L L E   A   T E M P E R A T U R E   L O C A L E  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   Idiffusion_2D_a_temperatures_locales_____NIVEAU_DE_LA___MER                                                                   \
                    GRIS_0
#define   Idiffusion_2D_a_temperatures_locales_____MARQUEUR_DES_CASES_DE_LA___MER                                                       \
                    Idiffusion_2D_a_temperatures_locales_____NIVEAU_DE_LA___MER
#define   Idiffusion_2D_a_temperatures_locales_____NIVEAU_DE_LA___MER_NOUVELLE_NEE                                                      \
                    GRIS_1
#define   Idiffusion_2D_a_temperatures_locales_____NIVEAU_DE_LA_TERRE_NOUVELLE_NEE                                                      \
                    GRIS_7
#define   Idiffusion_2D_a_temperatures_locales_____NIVEAU_DE_LA_TERRE                                                                   \
                    GRIS_8
                                        /* Niveaux "speciaux" (introduits le 20070207151915, le 20070208151737 pour les              */
                                        /* "nouvelle nee"s et le 20070308093947 pour le marqueur de la mer...).                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M O D E L E   D E   C O T E S   B I D I M E N S I O N N E L   A V E C   E R O S I O N  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#nodefine LONGUEUR_DE_LA_COTE_D_ERODE______COTES_2D_VERSION_01                                                                          \
                                        /* Cette facon de mesurer la longueur utilise 'IFFconvolution(...)'. Elle presente un        */ \
                                        /* gros defaut : en effet, le niveau convolue obtenu ne donne pas, comme je le croyais       */ \
                                        /* naivement initialement, la frontiere entre la "terre" et la "mer" car cela n'est vrai     */ \
                                        /* que si la repartition "terre"/"mer" et de 50%/50% dans le domaine de convolution (ce      */ \
                                        /* qui n'est qu'exceptionnellemnt vrai). Une nouvelle version ('VERSION_02') a donc ete      */ \
                                        /* introduite afin de travailler sur les extrema, en les seuillant de plus...                */
#define   LONGUEUR_DE_LA_COTE_D_ERODE______COTES_2D_VERSION_02                                                                          \
                                        /* Cette facon de mesurer la longueur utilise 'IFFconvolution_de_seuillage(...)' ; elle      */ \
                                        /* a ete introduite le 20011214102608.                                                       */

#nodefine CONVOLUTION_DE_imageA_D_ERODE______COTES_2D_VERSION_01                                                                        \
                                        /* Cette facon de convoluer 'imageA' n'utilise que 'imageA_convoluee_courante'.              */
#define   CONVOLUTION_DE_imageA_D_ERODE______COTES_2D_VERSION_02                                                                        \
                                        /* Cette facon de convoluer 'imageA' utilise simultanement 'imageA_convoluee_courante' et    */ \
                                        /* 'Ierode__CoastLines_2D_____imageA_convoluee_initiale' (introduite le 20011218092742).     */

#define   NIVEAU_DE_LA___MER_DANS_Ierode__CoastLines_2D                                                                                 \
                    NEUT(FU)
#define   NIVEAU_DE_LA_TERRE_DANS_Ierode__CoastLines_2D                                                                                 \
                    NEGA(FU)
                                        /* Niveaux respectifs de la "mer" et de la "terre" a priori...                               */

#define   DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D                                                                   \
                    UN
#define   DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_Ierode__CoastLines_2D                                                                   \
                    TROIS
#define   DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D                                                                   \
                    SOIXANTE_QUATRE
                                        /* Demi-dimensions (arbitraire) du noyau de 'Ierode__CoastLines_2D(...)'.                    */
#define   DimNo_Ierode__CoastLines_2D                                                                                                   \
                    DOUP(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D)                                                   \
                                        /* Dimension (arbitraire) du noyau "quelconque" de 'Ierode__CoastLines_2D(...)'.             */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : le nom 'DIMENSION_DU_NOYAU_DANS_Ierode__CoastLines_2D' ne peut etre           */ \
                                        /* utilise (d'ou 'DimNo_Ierode__CoastLines_2D') a cause de la procedure '$xcg/gen.ext$Z'     */ \
                                        /* ('v $xiii/di_image$FON DimNo_Ierode__CoastLines_2D').                                     */

#define   PONDERATION_D_UN_POINT_DANS_Ierode__CoastLines_2D                                                                             \
                    FU                                                                                                                  \
                                        /* Definition du facteur par defaut des points du voisinage du point courant {X,Y}.          */

#define   Ierode__CoastLines_2D_____XYmin                                                                                               \
                    NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D)
#define   Ierode__CoastLines_2D_____XYmax                                                                                               \
                    NEUT(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D)
                                        /* Dimension des axes {X,Y} necessaires a la lecture de fichiers contenant un noyau          */
                                        /* ('v $xci/CoastL_2D.11$K Ierode__CoastLines_2D_____noyau').                                */
#define   Ierode__CoastLines_2D_____XYmin_effectif                                                                                      \
                    NEGA(Ierode__CoastLines_2D_____demi_dimension_effective_du_noyau)
#define   Ierode__CoastLines_2D_____XYmax_effectif                                                                                      \
                    NEUT(Ierode__CoastLines_2D_____demi_dimension_effective_du_noyau)
                                        /* Extremites effectives des axes {X,Y}.                                                     */

#define   ACCES_NOYAU_DANS_Ierode__CoastLines_2D(x,y)                                                                                   \
                    ITb2(Ierode__CoastLines_2D_____noyau                                                                                \
                        ,INDX(y,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D))                                      \
                        ,INDX(x,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D))                                      \
                         )                                                                                                              \
                                        /* Acces a l'element {x,y} du noyau de 'Ierode__CoastLines_2D(...)'. ATTENTION a l'odre      */ \
                                        /* des deux coordonnees identique a celui de 'v $xiii/Images$DEF IMAGE.image.x.y.'.          */
#define   INITIALISATION_ELEMENT_NOYAU_DANS_Ierode__CoastLines_2D(x,y,valeur)                                                           \
                    Bblock                                                                                                              \
                    EGAL(ACCES_NOYAU_DANS_Ierode__CoastLines_2D(x,y)                                                                    \
                        ,valeur                                                                                                         \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Initialisation de l'element {x,y}.                                                        */
#define   INITIALISATION_EVENTUELLE_DU_NOYAU_DANS_Ierode__CoastLines_2D                                                                 \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(Ierode__CoastLines_2D_____utiliser_un_noyau))                                                          \
                         Bblock                                                                                                         \
                         Test(IFINff(Ierode__CoastLines_2D_____demi_dimension_effective_du_noyau                                        \
                                    ,DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D                                        \
                                    ,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D                                        \
                                     )                                                                                                  \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("les dimensions du noyau du modele de cotes bidimensionnel sont incorrectes");               \
                              CAL1(Prer1("%d est demande\n",Ierode__CoastLines_2D_____demi_dimension_effective_du_noyau));              \
                              CAL1(Prer2("alors que seul [%d,%d] est possible\n"                                                        \
                                        ,DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D                                    \
                                        ,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D                                    \
                                         )                                                                                              \
                                   );                                                                                                   \
                                                                                                                                        \
                              EGAL(Ierode__CoastLines_2D_____demi_dimension_effective_du_noyau                                          \
                                  ,DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_Ierode__CoastLines_2D                                          \
                                   );                                                                                                   \
                                                                                                                                        \
                              CAL1(Prer1("%d est donc force\n",Ierode__CoastLines_2D_____demi_dimension_effective_du_noyau));           \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         Test(IL_FAUT(Ierode__CoastLines_2D_____initialiser_le_noyau))                                                  \
                              Bblock                                                                                                    \
                              begin_imageQ(DoIn                                                                                         \
                                          ,Ierode__CoastLines_2D_____XYmin_effectif,Ierode__CoastLines_2D_____XYmax_effectif,PasY       \
                                          ,DoIn                                                                                         \
                                          ,Ierode__CoastLines_2D_____XYmin_effectif,Ierode__CoastLines_2D_____XYmax_effectif,PasX       \
                                           )                                                                                            \
                                   Bblock                                                                                               \
                                   INITIALISATION_ELEMENT_NOYAU_DANS_Ierode__CoastLines_2D                                              \
                                       (X,Y                                                                                             \
                                       ,PONDERATION_D_UN_POINT_DANS_Ierode__CoastLines_2D                                               \
                                        );                                                                                              \
                                        /* Initialisation de l'element courant {X,Y}.                                                */ \
                                   Eblock                                                                                               \
                              end_imageQ(EDoI,EDoI)                                                                                     \
                                                                                                                                        \
                              EGAL(Ierode__CoastLines_2D_____initialiser_le_noyau,FAUX);                                                \
                                        /* Et l'initialisation n'est plus a faire (jusqu'a la prochaine fois...).                    */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Initialisation eventuelle du noyau de 'Ierode__CoastLines_2D(...)'.                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M O D E L E   D E   C O T E S   B I D I M E N S I O N N E L   A V E C   " E T C H I N G "  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   NIVEAU_DE_LA___MER_DANS_Ietche__CoastLines_2D                                                                                 \
                    NEUT(FU)
#define   NIVEAU_DE_LA_TERRE_DANS_Ietche__CoastLines_2D                                                                                 \
                    NEGA(FU)
                                        /* Niveaux respectifs de la "mer" et de la "terre" a priori...                               */

#define   DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Ietche__CoastLines_2D                                                                   \
                    UN
#define   DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_Ietche__CoastLines_2D                                                                   \
                    TROIS
#define   DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ietche__CoastLines_2D                                                                   \
                    SOIXANTE_QUATRE
                                        /* Demi-dimensions (arbitraire) du noyau de 'Ietche__CoastLines_2D(...)'.                    */
#define   DimNo_Ietche__CoastLines_2D                                                                                                   \
                    DOUP(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ietche__CoastLines_2D)                                                   \
                                        /* Dimension (arbitraire) du noyau "quelconque" de 'Ietche__CoastLines_2D(...)'.             */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : le nom 'DIMENSION_DU_NOYAU_DANS_Ietche__CoastLines_2D' ne peut etre           */ \
                                        /* utilise (d'ou 'DimNo_Ietche__CoastLines_2D') a cause de la procedure '$xcg/gen.ext$Z'     */ \
                                        /* ('v $xiii/di_image$FON DimNo_Ietche__CoastLines_2D').                                     */

#define   PONDERATION_D_UN_POINT_DANS_Ietche__CoastLines_2D                                                                             \
                    FU                                                                                                                  \
                                        /* Definition du facteur par defaut des points du voisinage du point courant {X,Y}.          */

#define   Ietche__CoastLines_2D_____XYmin                                                                                               \
                    NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ietche__CoastLines_2D)
#define   Ietche__CoastLines_2D_____XYmax                                                                                               \
                    NEUT(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ietche__CoastLines_2D)
                                        /* Dimension des axes {X,Y} necessaires a la lecture de fichiers contenant un noyau          */
                                        /* ('v $xci/CoastL_2D.11$K Ietche__CoastLines_2D_____noyau').                                */
#define   Ietche__CoastLines_2D_____XYmin_effectif                                                                                      \
                    NEGA(Ietche__CoastLines_2D_____demi_dimension_effective_du_noyau)
#define   Ietche__CoastLines_2D_____XYmax_effectif                                                                                      \
                    NEUT(Ietche__CoastLines_2D_____demi_dimension_effective_du_noyau)
                                        /* Extremites effectives des axes {X,Y}.                                                     */

#define   ACCES_NOYAU_DANS_Ietche__CoastLines_2D(x,y)                                                                                   \
                    ITb2(Ietche__CoastLines_2D_____noyau                                                                                \
                        ,INDX(y,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ietche__CoastLines_2D))                                      \
                        ,INDX(x,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ietche__CoastLines_2D))                                      \
                         )                                                                                                              \
                                        /* Acces a l'element {x,y} du noyau de 'Ietche__CoastLines_2D(...)'. ATTENTION a l'odre      */ \
                                        /* des deux coordonnees identique a celui de 'v $xiii/Images$DEF IMAGE.image.x.y.'.          */
#define   INITIALISATION_ELEMENT_NOYAU_DANS_Ietche__CoastLines_2D(x,y,valeur)                                                           \
                    Bblock                                                                                                              \
                    EGAL(ACCES_NOYAU_DANS_Ietche__CoastLines_2D(x,y)                                                                    \
                        ,valeur                                                                                                         \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Initialisation de l'element {x,y}.                                                        */
#define   INITIALISATION_EVENTUELLE_DU_NOYAU_DANS_Ietche__CoastLines_2D                                                                 \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(Ietche__CoastLines_2D_____utiliser_un_noyau))                                                          \
                         Bblock                                                                                                         \
                         Test(IFINff(Ietche__CoastLines_2D_____demi_dimension_effective_du_noyau                                        \
                                    ,DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Ietche__CoastLines_2D                                        \
                                    ,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ietche__CoastLines_2D                                        \
                                     )                                                                                                  \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("les dimensions du noyau du modele de cotes bidimensionnel sont incorrectes");               \
                              CAL1(Prer1("%d est demande\n",Ietche__CoastLines_2D_____demi_dimension_effective_du_noyau));              \
                              CAL1(Prer2("alors que seul [%d,%d] est possible\n"                                                        \
                                        ,DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Ietche__CoastLines_2D                                    \
                                        ,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ietche__CoastLines_2D                                    \
                                         )                                                                                              \
                                   );                                                                                                   \
                                                                                                                                        \
                              EGAL(Ietche__CoastLines_2D_____demi_dimension_effective_du_noyau                                          \
                                  ,DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_Ietche__CoastLines_2D                                          \
                                   );                                                                                                   \
                                                                                                                                        \
                              CAL1(Prer1("%d est donc force\n",Ietche__CoastLines_2D_____demi_dimension_effective_du_noyau));           \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         Test(IL_FAUT(Ietche__CoastLines_2D_____initialiser_le_noyau))                                                  \
                              Bblock                                                                                                    \
                              begin_imageQ(DoIn                                                                                         \
                                          ,Ietche__CoastLines_2D_____XYmin_effectif,Ietche__CoastLines_2D_____XYmax_effectif,PasY       \
                                          ,DoIn                                                                                         \
                                          ,Ietche__CoastLines_2D_____XYmin_effectif,Ietche__CoastLines_2D_____XYmax_effectif,PasX       \
                                           )                                                                                            \
                                   Bblock                                                                                               \
                                   INITIALISATION_ELEMENT_NOYAU_DANS_Ietche__CoastLines_2D                                              \
                                       (X,Y                                                                                             \
                                       ,PONDERATION_D_UN_POINT_DANS_Ietche__CoastLines_2D                                               \
                                        );                                                                                              \
                                        /* Initialisation de l'element courant {X,Y}.                                                */ \
                                   Eblock                                                                                               \
                              end_imageQ(EDoI,EDoI)                                                                                     \
                                                                                                                                        \
                              EGAL(Ietche__CoastLines_2D_____initialiser_le_noyau,FAUX);                                                \
                                        /* Et l'initialisation n'est plus a faire (jusqu'a la prochaine fois...).                    */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Initialisation eventuelle du noyau de 'Ietche__CoastLines_2D(...)'.                       */

#define   gTAUX_D_ETCHE______COTES_ND(concentration,frequence,fonction_energie_temperature)                                             \
                    MUL3(concentration                                                                                                  \
                        ,frequence                                                                                                      \
                        ,fonction_energie_temperature                                                                                   \
                         )                                                                                                              \
                                        /* Definition generale du taux d'"etching".                                                  */
#define   MINIMUM_FONCTION_ENERGIE_TEMPERATURE_DE_TAUX_D_ETCHE______COTES_ND                                                            \
                    FZERO
#define   MAXIMUM_FONCTION_ENERGIE_TEMPERATURE_DE_TAUX_D_ETCHE______COTES_ND                                                            \
                    FU
                                        /* Extrema de 'fonction_energie_temperature' selon :                                         */
                                        /*                                                                                           */
                                        /*                   0                                                                       */
                                        /*                  e        = 1        (maximum),                                           */
                                        /*                                                                                           */
                                        /*                   -infini                                                                 */
                                        /*                  e        = 0        (minimum),                                           */
                                        /*                                                                                           */
#define   TAUX_D_ETCHE______COTES_ND(concentration,frequence,energie_minimale,energie_maximale,lambda,Boltzmann,temperature)            \
                    gTAUX_D_ETCHE______COTES_ND(concentration                                                                           \
                                               ,frequence                                                                               \
                                               ,EXPX(NEGA(DIVZ(BARY(energie_minimale,energie_maximale,lambda)                           \
                                                              ,MUL2(Boltzmann,temperature)                                              \
                                                               )                                                                        \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                )                                                                                       \
                                        /* Definition du taux d'"etching". On notera que le minimum de cette fonction est atteint    */ \
                                        /* pour :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*        lambda = COORDONNEE_BARYCENTRIQUE_MAXIMALE  ==>   taux faible d'"etching", ce qui  */ \
                                        /*                                                          demande une energie d'activation */ \
                                        /*                                                          'energie_maximale',              */ \
                                        /*                                                                                           */ \
                                        /* et le maximum pour :                                                                      */ \
                                        /*                                                                                           */ \
                                        /*        lambda = COORDONNEE_BARYCENTRIQUE_MINIMALE  ==>   taux eleve d'"etching", ce qui   */ \
                                        /*                                                          demande une energie d'activation */ \
                                        /*                                                          'energie_minimale',              */ \
                                        /*                                                                                           */ \
                                        /* ce qui est du au fait que la fonction 'EXPX(NEGA(...))' est decroissante.                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E D U C T I O N   D E   M O I T I E   D ' U N E   I M A G E  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DEMI_FENETRE_XY_TRANSLATIONS(demi_trans_OX,multiple_OX,demi_trans_OY,multiple_OY)                                             \
                                        /* ATTENTION : il ne faut pas de 'Bblock' puisqu'il ne peut pas y avoir de 'Eblock'          */ \
                                        /* puisque cette procedure definit les variables locales 'demi_translation' et               */ \
                                        /* 'dimensions_maximales' utilisees ailleurs (par exemple dans 'DEMI_FENETRE_XY(...)'.       */ \
                                                                                                                                        \
                    DEFV(deltaF_2D,demi_translation);                                                                                   \
                                        /* Afin de positionner correctement les demi-images.                                         */ \
                    DEFV(deltaI_2D,dimensions_maximales);                                                                               \
                                        /* Afin de ne pas deborder lorsque les dimensions sont "exotiques" (voir 'Pal'...).          */ \
                                                                                                                                        \
                    INITIALISATION_ACCROISSEMENT_2D(demi_translation                                                                    \
                                                   ,_____lNORMALISE_OX(COND(IFEQ(multiple_OX                                            \
                                                                                ,ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES         \
                                                                                 )                                                      \
                                                                           ,demi_trans_OX                                               \
                                                                           ,MULD(demi_trans_OX,QUOD(dimX,multiple_OX))                  \
                                                                            )                                                           \
                                                                       )                                                                \
                                                   ,_____lNORMALISE_OY(COND(IFEQ(multiple_OY                                            \
                                                                                ,ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES         \
                                                                                 )                                                      \
                                                                           ,demi_trans_OY                                               \
                                                                           ,MULD(demi_trans_OY,QUOD(dimY,multiple_OY))                  \
                                                                            )                                                           \
                                                                       )                                                                \
                                                    );                                                                                  \
                    INITIALISATION_ACCROISSEMENT_2D(dimensions_maximales                                                                \
                                                   ,MULD(dimX,multiple_OX)                                                              \
                                                   ,MULD(dimY,multiple_OY)                                                              \
                                                    );                                                                                  \
                                        /* ATTENTION : il ne faut pas de 'Eblock puisque cette procedure definit les variables       */ \
                                        /* locales 'demi_translation' et 'dimensions_maximales' utilisees ailleurs (par exemple      */ \
                                        /* dans 'DEMI_FENETRE_XY(...)'.                                                              */ \
                                                                                                                                        \
                                        /* Definition des translations d'un positionnement quelconque...                             */
#define   DEMI_FENETRE_XY(imageR,imageA,demi_trans_OX,multiple_OX,demi_trans_OY,multiple_OY,calcul_moyenne,calcul_maximum,Freduction)   \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY_TRANSLATIONS(demi_trans_OX,multiple_OX,demi_trans_OY,multiple_OY);                                  \
                                        /* Definition des translations necessaires a 'DEMI_FENETRE_XY(...)'.                         */ \
                                                                                                                                        \
                    CALS(Freduction(imageR                                                                                              \
                                   ,imageA                                                                                              \
                                   ,ADRESSE(demi_translation)                                                                           \
                                   ,ADRESSE(dimensions_maximales)                                                                       \
                                   ,FAUX,FAUX                                                                                           \
                                   ,calcul_moyenne,calcul_maximum                                                                       \
                                    )                                                                                                   \
                         );                                                                                                             \
                                        /* La possibilite de choisir entre 'Ireduction_moitie(...)' et 'IFreduction_moitie(...)' a   */ \
                                        /* ete introduite le 20020116142836 (principalement pour 'v $xci/reduction_04$K standard'.   */ \
                    Eblock                                                                                                              \
                                        /* Positionnement quelconque...                                                              */

#define   CALCUL_DU_MAXIMUM_DANS_UNE_DEMI_FENETRE                                                                                       \
                    VRAI                                                                                                                \
                                        /* Valeur de l'argument 'calcul_du_maximum' de la fonction 'Ireduction_moitie(...)' qui      */ \
                                        /* permet de savoir, lorsque 'calcul_de_la_moyenne' est FAUX, si l'on prend le maximum       */ \
                                        /* ('VRAI') ou un point au hasard ('FAUX') qui est en fait le point courant (procede         */ \
                                        /* parfait lorsque l'on traite des images en vraies couleurs ; voir a ce propos les          */ \
                                        /* commentaires de 'v $xci/reduction$Z').                                                    */

#define   ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                                                                \
                    UN                                                                                                                  \
                                        /* Valeur a donner a 'multiple_OX' et 'multiple_OY' pour que le positionnement des fenetres  */ \
                                        /* ne se fasse pas sur des sous-multiples des dimensions 'dimX' et 'dimY'...                 */
#define   MULTIPLICITE_2x2_POUR_LES_DEMI_FENETRES                                                                                       \
                    DEUX                                                                                                                \
                                        /* Valeur a donner a 'multiple_OX' et 'multiple_OY' pour des mosaiques d'images 2x2.         */
#define   MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES                                                                                       \
                    QUATRE                                                                                                              \
                                        /* Valeur a donner a 'multiple_OX' et 'multiple_OY' pour des mosaiques d'images 4x4.         */
#define   MULTIPLICITE_8x8_POUR_LES_DEMI_FENETRES                                                                                       \
                    HUIT                                                                                                                \
                                        /* Valeur a donner a 'multiple_OX' et 'multiple_OY' pour des mosaiques d'images 8x8.         */

#define   DEMI_FENETRE_BG_MULTIPLE(imageR,imageA,multiple_OX,multiple_OY,calcul_de_la_moyenne,calcul_du_maximum)                        \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(imageR,imageA                                                                                       \
                                   ,COXR(Xmin),multiple_OX                                                                              \
                                   ,COYR(Ymin),multiple_OY                                                                              \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,Ireduction_moitie                                                                                   \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en bas a gauche en des "sous-multiples" de 'dimX' et 'dimY' ce qui permet  */ \
                                        /* d'eviter des problemes avec la fonction 'IXanimation(...)' de '$xiidX' lorsque les images */ \
                                        /* n'ont pas comme dimension des puissances de 2 (cas de 'Pal' par exemple...).              */
#define   DEMI_FENETRE_BD_MULTIPLE(imageR,imageA,multiple_OX,multiple_OY,calcul_de_la_moyenne,calcul_du_maximum)                        \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(imageR,imageA                                                                                       \
                                   ,COXR(Xcentre),multiple_OX                                                                           \
                                   ,COYR(Ymin),multiple_OY                                                                              \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,Ireduction_moitie                                                                                   \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en bas a droite en des "sous-multiples" de 'dimX' et 'dimY' ce qui permet  */ \
                                        /* d'eviter des problemes avec la fonction 'IXanimation(...)' de '$xiidX' lorsque les images */ \
                                        /* n'ont pas comme dimension des puissances de 2 (cas de 'Pal' par exemple...).              */
#define   DEMI_FENETRE_HG_MULTIPLE(imageR,imageA,multiple_OX,multiple_OY,calcul_de_la_moyenne,calcul_du_maximum)                        \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(imageR,imageA                                                                                       \
                                   ,COXR(Xmin),multiple_OX                                                                              \
                                   ,COYR(Ycentre),multiple_OY                                                                           \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,Ireduction_moitie                                                                                   \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en haut a gauche en des "sous-multiples" de 'dimX' et 'dimY' ce qui permet */ \
                                        /* d'eviter des problemes avec la fonction 'IXanimation(...)' de '$xiidX' lorsque les images */ \
                                        /* n'ont pas comme dimension des puissances de 2 (cas de 'Pal' par exemple...).              */
#define   DEMI_FENETRE_HD_MULTIPLE(imageR,imageA,multiple_OX,multiple_OY,calcul_de_la_moyenne,calcul_du_maximum)                        \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(imageR,imageA                                                                                       \
                                   ,COXR(Xcentre),multiple_OX                                                                           \
                                   ,COYR(Ycentre),multiple_OY                                                                           \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,Ireduction_moitie                                                                                   \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en haut a droite en des "sous-multiples" de 'dimX' et 'dimY' ce qui permet */ \
                                        /* d'eviter des problemes avec la fonction 'IXanimation(...)' de '$xiidX' lorsque les images */ \
                                        /* n'ont pas comme dimension des puissances de 2 (cas de 'Pal' par exemple...).              */

#define   DEMI_FENETRE_BG(imageR,imageA,calcul_de_la_moyenne,calcul_du_maximum)                                                         \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(imageR,imageA                                                                                       \
                                   ,COXR(Xmin),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                           \
                                   ,COYR(Ymin),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                           \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,Ireduction_moitie                                                                                   \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en bas a gauche.                                                           */
#define   DEMI_FENETRE_BD(imageR,imageA,calcul_de_la_moyenne,calcul_du_maximum)                                                         \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(imageR,imageA                                                                                       \
                                   ,COXR(Xcentre),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                        \
                                   ,COYR(Ymin),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                           \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,Ireduction_moitie                                                                                   \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en bas a droite.                                                           */
#define   DEMI_FENETRE_HG(imageR,imageA,calcul_de_la_moyenne,calcul_du_maximum)                                                         \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(imageR,imageA                                                                                       \
                                   ,COXR(Xmin),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                           \
                                   ,COYR(Ycentre),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                        \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,Ireduction_moitie                                                                                   \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en haut a gauche.                                                          */
#define   DEMI_FENETRE_HD(imageR,imageA,calcul_de_la_moyenne,calcul_du_maximum)                                                         \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(imageR,imageA                                                                                       \
                                   ,COXR(Xcentre),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                        \
                                   ,COYR(Ycentre),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                        \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,Ireduction_moitie                                                                                   \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en haut a droite.                                                          */

#define   F_DEMI_FENETRE_BG_MULTIPLE(FimageR,FimageA,multiple_OX,multiple_OY,calcul_de_la_moyenne,calcul_du_maximum)                    \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(FimageR,FimageA                                                                                     \
                                   ,COXR(Xmin),multiple_OX                                                                              \
                                   ,COYR(Ymin),multiple_OY                                                                              \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,IFreduction_moitie                                                                                  \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en bas a gauche en des "sous-multiples" de 'dimX' et 'dimY'.               */
#define   F_DEMI_FENETRE_BD_MULTIPLE(FimageR,FimageA,multiple_OX,multiple_OY,calcul_de_la_moyenne,calcul_du_maximum)                    \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(FimageR,FimageA                                                                                     \
                                   ,COXR(Xcentre),multiple_OX                                                                           \
                                   ,COYR(Ymin),multiple_OY                                                                              \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,IFreduction_moitie                                                                                  \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en bas a droite en des "sous-multiples" de 'dimX' et 'dimY'.               */
#define   F_DEMI_FENETRE_HG_MULTIPLE(FimageR,FimageA,multiple_OX,multiple_OY,calcul_de_la_moyenne,calcul_du_maximum)                    \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(FimageR,FimageA                                                                                     \
                                   ,COXR(Xmin),multiple_OX                                                                              \
                                   ,COYR(Ycentre),multiple_OY                                                                           \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,IFreduction_moitie                                                                                  \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en haut a gauche en des "sous-multiples" de 'dimX' et 'dimY'.              */
#define   F_DEMI_FENETRE_HD_MULTIPLE(FimageR,FimageA,multiple_OX,multiple_OY,calcul_de_la_moyenne,calcul_du_maximum)                    \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(FimageR,FimageA                                                                                     \
                                   ,COXR(Xcentre),multiple_OX                                                                           \
                                   ,COYR(Ycentre),multiple_OY                                                                           \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,IFreduction_moitie                                                                                  \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en haut a droite en des "sous-multiples" de 'dimX' et 'dimY'.              */

#define   F_DEMI_FENETRE_BG(FimageR,FimageA,calcul_de_la_moyenne,calcul_du_maximum)                                                     \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(FimageR,FimageA                                                                                     \
                                   ,COXR(Xmin),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                           \
                                   ,COYR(Ymin),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                           \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,IFreduction_moitie                                                                                  \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en bas a gauche.                                                           */
#define   F_DEMI_FENETRE_BD(FimageR,FimageA,calcul_de_la_moyenne,calcul_du_maximum)                                                     \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(FimageR,FimageA                                                                                     \
                                   ,COXR(Xcentre),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                        \
                                   ,COYR(Ymin),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                           \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,IFreduction_moitie                                                                                  \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en bas a droite.                                                           */
#define   F_DEMI_FENETRE_HG(FimageR,FimageA,calcul_de_la_moyenne,calcul_du_maximum)                                                     \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(FimageR,FimageA                                                                                     \
                                   ,COXR(Xmin),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                           \
                                   ,COYR(Ycentre),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                        \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,IFreduction_moitie                                                                                  \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en haut a gauche.                                                          */
#define   F_DEMI_FENETRE_HD(FimageR,FimageA,calcul_de_la_moyenne,calcul_du_maximum)                                                     \
                    Bblock                                                                                                              \
                    DEMI_FENETRE_XY(FimageR,FimageA                                                                                     \
                                   ,COXR(Xcentre),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                        \
                                   ,COYR(Ycentre),ABSENCE_DE_MULTIPLICITE_POUR_LES_DEMI_FENETRES                                        \
                                   ,calcul_de_la_moyenne,calcul_du_maximum                                                              \
                                   ,IFreduction_moitie                                                                                  \
                                    );                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Positionnement en haut a droite.                                                          */

#define   gIreduction_moitie(les_images_sont_standards,imageR,FimageR,imageA,FimageA,trans,dimensions,tore_h,tore_v,moyenne,maximum)    \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Ireduction_moitie(imageR                                                                                      \
                                           ,imageA                                                                                      \
                                           ,trans                                                                                       \
                                           ,dimensions                                                                                  \
                                           ,tore_h,tore_v                                                                               \
                                           ,moyenne                                                                                     \
                                           ,maximum                                                                                     \
                                            )                                                                                           \
                         ,IFreduction_moitie(FimageR                                                                                    \
                                            ,FimageA                                                                                    \
                                            ,trans                                                                                      \
                                            ,dimensions                                                                                 \
                                            ,tore_h,tore_v                                                                              \
                                            ,moyenne                                                                                    \
                                            ,maximum                                                                                    \
                                             )                                                                                          \
                          )                                                                                                             \
                                        /* Reduction de moitie d'une image quelconque ("standard" ou "flottante").                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A G R A N D I S S E M E N T   D ' U N E   I M A G E   P A R   D O U B L E M E N T  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DOUBLE_FENETRE_XY(imageR,imageA,demi_translation_OX,demi_translation_OY,il_faut_interpoler)                                   \
                    Bblock                                                                                                              \
                    DEFV(deltaF_2D,demi_translation);                                                                                   \
                                        /* Afin de positionner correctement les demi-images.                                         */ \
                                                                                                                                        \
                    INITIALISATION_ACCROISSEMENT_2D(demi_translation                                                                    \
                                                   ,_____lNORMALISE_OX(demi_translation_OX)                                             \
                                                   ,_____lNORMALISE_OY(demi_translation_OY)                                             \
                                                    );                                                                                  \
                                                                                                                                        \
                    CALS(Iagrandissement_par_doublement(imageR                                                                          \
                                                       ,imageA                                                                          \
                                                       ,ADRESSE(demi_translation)                                                       \
                                                       ,FAUX,FAUX                                                                       \
                                                       ,il_faut_interpoler                                                              \
                                                        )                                                                               \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Extraction quelconque...                                                                  */
#define   DOUBLE_FENETRE_BG(imageR,imageA,il_faut_interpoler)                                                                           \
                    Bblock                                                                                                              \
                    DOUBLE_FENETRE_XY(imageR,imageA                                                                                     \
                                     ,COXR(Xmin)                                                                                        \
                                     ,COYR(Ymin)                                                                                        \
                                     ,il_faut_interpoler                                                                                \
                                      );                                                                                                \
                    Eblock                                                                                                              \
                                        /* Extraction du bas a gauche.                                                               */
#define   DOUBLE_FENETRE_BD(imageR,imageA,il_faut_interpoler)                                                                           \
                    Bblock                                                                                                              \
                    DOUBLE_FENETRE_XY(imageR,imageA                                                                                     \
                                     ,COXR(Xcentre)                                                                                     \
                                     ,COYR(Ymin)                                                                                        \
                                     ,il_faut_interpoler                                                                                \
                                      );                                                                                                \
                    Eblock                                                                                                              \
                                        /* Extraction du bas a droite.                                                               */
#define   DOUBLE_FENETRE_HG(imageR,imageA,il_faut_interpoler)                                                                           \
                    Bblock                                                                                                              \
                    DOUBLE_FENETRE_XY(imageR,imageA                                                                                     \
                                     ,COXR(Xmin)                                                                                        \
                                     ,COYR(Ycentre)                                                                                     \
                                     ,il_faut_interpoler                                                                                \
                                      );                                                                                                \
                    Eblock                                                                                                              \
                                        /* Extraction du haut a gauche.                                                              */
#define   DOUBLE_FENETRE_HD(imageR,imageA,il_faut_interpoler)                                                                           \
                    Bblock                                                                                                              \
                    DOUBLE_FENETRE_XY(imageR,imageA                                                                                     \
                                     ,COXR(Xcentre)                                                                                     \
                                     ,COYR(Ycentre)                                                                                     \
                                     ,il_faut_interpoler                                                                                \
                                      );                                                                                                \
                    Eblock                                                                                                              \
                                        /* Extraction du haut a droite.                                                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R O T A T I O N   D ' U N E   I M A G E   D E   P L U S   O U   M O I N S   P I   S U R   2  :                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gIrotation_de_plus_ou_moins_pi_sur_2(les_images_sont_standards,imageR,FimageR,imageA,FimageA,sens_trigonometrique)            \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Irotation_de_plus_ou_moins_pi_sur_2(imageR,imageA,sens_trigonometrique)                                       \
                         ,IFrotation_de_plus_ou_moins_pi_sur_2(FimageR,FimageA,sens_trigonometrique)                                    \
                          )                                                                                                             \
                                        /* Rotation de plus ou moins pi sur 2 d'une image quelconque ("standard" ou "flottante").    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R O T A T I O N   D ' U N E   I M A G E  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   X_A_R_TRANSLATION_POUR_ROTATION                                                                                               \
                    MOIT(_____lNORMALISE_OX(dimX))                                                                                      \
                                        /* Amplitude de la translation horizontale standard,                                         */
#define   Y_A_R_TRANSLATION_POUR_ROTATION                                                                                               \
                    MOIT(_____lNORMALISE_OY(dimY))                                                                                      \
                                        /* Amplitude de la translation verticale standard.                                           */

#define   X_A_TRANSLATION_POUR_ROTATION                                                                                                 \
                    X_A_R_TRANSLATION_POUR_ROTATION                                                                                     \
                                        /* Amplitude de la translation horizontale standard de l'image Argument,                     */
#define   Y_A_TRANSLATION_POUR_ROTATION                                                                                                 \
                    Y_A_R_TRANSLATION_POUR_ROTATION                                                                                     \
                                        /* Amplitude de la translation verticale standard de l'image Argument.                       */

#define   X_RA_TRANSLATION_POUR_ROTATION                                                                                                \
                    X_A_R_TRANSLATION_POUR_ROTATION                                                                                     \
                                        /* Amplitude de la translation horizontale standard de l'image Resultat lors de l'acces a    */ \
                                        /* a l'image Argument.                                                                       */
#define   Y_RA_TRANSLATION_POUR_ROTATION                                                                                                \
                    Y_A_R_TRANSLATION_POUR_ROTATION                                                                                     \
                                        /* Amplitude de la translation verticale standard de l'image Resultat lors de l'acces a      */ \
                                        /* a l'image Argument.                                                                       */

#define   X_RR_TRANSLATION_POUR_ROTATION                                                                                                \
                    FZERO                                                                                                               \
                                        /* Amplitude de la translation horizontale standard de l'image Resultat,                     */
#define   Y_RR_TRANSLATION_POUR_ROTATION                                                                                                \
                    FZERO                                                                                                               \
                                        /* Amplitude de la translation verticale standard de l'image Resultat.                       */

#define   gIrotation_image(les_images_sont_standards,imageR,FimageR,imageA,FimageA,nettoyer,RRtrans,RAtrans,Atrans,angle,interpoler)    \
                    gCALC(EST_VRAI(les_images_sont_standards)                                                                           \
                         ,Irotation_image(imageR,imageA,nettoyer,RRtrans,RAtrans,Atrans,angle,interpoler)                               \
                         ,IFrotation_image(FimageR,FimageA,nettoyer,RRtrans,RAtrans,Atrans,angle,interpoler)                            \
                          )                                                                                                             \
                                        /* Rotation d'un angle quelconque d'une image quelconque ("standard" ou "flottante"). Cette  */
                                        /* procedure a ete introduite le 20200123095816...                                           */


/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P E R M U T A T I O N   D E   R E G R O U P E M E N T                                                                      */
/*        D E S   B I T S   D E   M E M E   P O I D S   D ' U N E   I M A G E  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   TAILLE_PAR_DEFAUT_DES_PAQUETS_DE_PERMUTATION_DES_BITS                                                                         \
                    UN
#define   TRANSLATION_PAR_DEFAUT_DES_INDEX_DE_BITS                                                                                      \
                    ZERO
                                        /* Parametres par defaut des permutations directe et inverse des bits d'une image. Cela      */
                                        /* a ete transfere depuis 'v $xiii/di_image$FON 20130707181124' le 20130707181135...         */




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