_______________________________________________________________________________________________________________________________________
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R I M I T I V E S   D E   C O M B I N A I S O N   D E   P I X E L S                                                      */
/*        S O U S   F O R M E   D E   " F O N C T I O N S "  :                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Dans ce fichier se trouvent toutes les                                                                         */
/*                  primitives de combinaisons des pixels d'une                                                                      */
/*                  image raster ; elles sont exprimees                                                                              */
/*                  sous forme de fonctions ce qui fait                                                                              */
/*                  que la duree d'execution par rapport                                                                             */
/*                  aux "defines" est tres allongee...                                                                               */
/*                    Mais l'avantage, c'est qu'elle                                                                                 */
/*                  peuvent etre referencees comme argument                                                                          */
/*                  'Vf' des operations de 'store_point'                                                                             */
/*                  sous la forme :                                                                                                  */
/*                                                                                                                                   */
/*                                      Vf(ancien_niveau,nouveau_niveau);                                                            */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  Ainsi, on pourra combiner la valeur                                                                              */
/*                  anterieure d'un point, avec la nouvelle                                                                          */
/*                  que l'on vient de calculer, pour les                                                                             */
/*                  fonctions 'Vf' autre que 'NEUTRE2'.                                                                              */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        N O T A T I O N S  :                                                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    On notera 'imageA' les images Arguments,                                                                       */
/*                  et 'imageR' les images Resultats ; 'arg'                                                                         */
/*                  designera des arguments, et 'Vf' une                                                                             */
/*                  fonction "variable"...                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xiipf/fonction.2$FON' :                                                                                        */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19870000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E N V O I   D U   P R E M I E R   A R G U M E N T  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FNEUTRE1(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(arg1);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E N V O I   D U   D E U X I E M E   A R G U M E N T  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FNEUTRE2(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(arg2);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E N V O I   D U   D E U X I E M E   A R G U M E N T   ( P L U S   S I M P L E )  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FNEUTRE(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(FNEUTRE2(arg1,arg2));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A D D I T I O N   D E   D E U X   V A L E U R S  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FADD(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(NIVA(ADD2(NIVR(arg1),NIVR(arg2))));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        " B A R Y C E N T R E "   D E   D E U X   N I V E A U X  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(FBARY_____ponderation_de_la_fonction,FDU)));
                                        /* Afin que toutes ces fonctions aient le meme nombre d'Arguments (2), les Arguments         */
                                        /* "exceptionnels", tels 'FBARY_____ponderation_de_la_fonction', sont transmis differemment. */
DEFV(Common,DEFV(FonctionP,FBARY(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(GENP(NIVA(BARY(FLOT(NIVR(arg1)),FLOT(NIVR(arg2)),FBARY_____ponderation_de_la_fonction))));
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  (1-lambda).arg1+lambda.arg2                                              */
                                        /*                                                                                           */
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M O Y E N N E   D E   D E U X   V A L E U R S  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FMOYENNE(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(NIVA(MOYE(NIVR(arg1),NIVR(arg2))));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S O U S T R A C T I O N   D E   D E U X   V A L E U R S  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FSUB(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(NIVA(SOUS(NIVR(arg1),NIVR(arg2))));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M U L T I P L I C A T I O N   D E   D E U X   V A L E U R S  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FMUL(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(NIVA(MUL2(NIVR(arg1),NIVR(arg2))));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M U L T I P L I C A T I O N   D E   D E U X   V A L E U R S   ( F L O T T A N T E   E T   E N T I E R E )  :               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FMULF(arg1,arg2)))
DEFV(Argument,DEFV(Float,arg1));
                                        /* Premier argument (flottant).                                                              */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument (entier).                                                               */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(NIVA(MUL2(arg1,NIVR(arg2))));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I V I S I O N   D E   D E U X   V A L E U R S  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FDIV(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument (dividende).                                                             */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument (diviseur).                                                             */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(genere_p,INIT(resultat,NIVEAU_UNDEF));
                                        /* Variable de manoeuvre.                                                                    */
     /*..............................................................................................................................*/
     Test(IZEQ(NIVR(arg2)))
          Bblock
          PRINT_ATTENTION("division par zero");
          EGAL(resultat,NIVEAU_UNDEF);
          Eblock
     ATes
          Bblock
          Eblock
     ETes
     Test(IZNE(NIVR(arg2)))
          Bblock
          EGAL(resultat,NIVA(DIVI(NIVR(arg1),NIVR(arg2))));
          Eblock
     ATes
          Bblock
          Eblock
     ETes
     RETU(resultat);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A X I M U M   D E   D E U X   V A L E U R S   ( " O U "   F L O U )  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FMAX(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(MAX2(arg1,arg2));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M I N I M U M   D E   D E U X   V A L E U R S   ( " E T "   F L O U )  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FMIN(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(MIN2(arg1,arg2));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        " O U "   E X C L U S I F   F L O U   D E   D E U X   V A L E U R S  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FMINMAX(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(FMAX(FMIN(arg1,FCOMP(arg2)),FMIN(FCOMP(arg1),arg2)));
     Eblock

EFonctionP

#if       ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        ' O R '   D E   D E U X   V A L E U R S  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FOR(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(OUIN(arg1,arg2));
     Eblock

EFonctionP

#Aif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
#Eif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */

#if       ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        ' A N D '   D E   D E U X   V A L E U R S  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FAND(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(ETLO(arg1,arg2));
     Eblock

EFonctionP

#Aif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
#Eif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */

#if       ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        ' E O R '   D E   D E U X   V A L E U R S  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FEOR(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(OUEX(arg1,arg2));
     Eblock

EFonctionP

#Aif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
#Eif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E L A I   V E R S   L A   F O N C T I O N   D E   C O M B I N A I S O N   C O U R A N T E  :                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Les fonctions du type "VNEUTRE", qui                                                                           */
/*                  permettent de combiner les niveaux a                                                                             */
/*                  ecrire et ne niveau anterieur, peuvent                                                                           */
/*                  etre referencees indirectement, via                                                                              */
/*                  le relai que l'on definit ici.                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BPointeurFonctionP

#ifdef    SYSTEME_CRAY2_UNICOS                                                                           /* Common,DEFV(Fonction,) : */
                                        /* Introduit le 20180427190259...                                                            */
DEFV(Common,DEFV(PointeurFonctionP,INIT(afPOINTEUR_2p(Fvariable),aFONCTION(__FNEUTRE))));
#Aifdef   SYSTEME_CRAY2_UNICOS                                                                           /* Common,DEFV(Fonction,) : */
                                        /* Introduit le 20180427190259...                                                            */
DEFV(Common,DEFV(PointeurFonctionP,INIT(afPOINTEUR_2p(Fvariable),aFONCTION(FNEUTRE))));
#Eifdef   SYSTEME_CRAY2_UNICOS                                                                           /* Common,DEFV(Fonction,) : */

                                        /* Le pointeur 'Fvariable' contient en permanence l'adresse                                  */
                                        /* de la fonction de combinaison de la valeur a marquer, et                                  */
                                        /* de la valeur anterieure d'un point d'une image ; il est initialise                        */
                                        /* sur l'operation neutre, c'est-a-dire celle qui ecrase la valeur                           */
                                        /* anterieure en forcant la nouvelle valeur.                                                 */
                                        /*                                                                                           */
                                        /* ATTENTION : on notera le '__FNEUTRE' qui n'est en fait utile que sur le CRAY2, et qui     */
                                        /* inhibe le test du nombre des arguments...                                                 */
                                        /*                                                                                           */
                                        /* Le 20040618153050, je suis passe de 'genere_p,INIT(afPOINTEUR' a la version actuelle      */
                                        /* a cause de 'DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_02', les pointeurs   */
                                        /* de fonction devant alors avoir aussi des arguments...                                     */

EPointeurFonctionP

                                        /* Ceci a ete introduit le 20051125212040 ('v $xcc/cpp$Z .xccp.PASSE_4.NomF')...             */

#if       ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N   U N I V E R S E L L E   D E   C O M B I N A I S O N   D E   D E U X   V A L E U R S  :                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

#define   EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_fonction,fonction)                                                \
                    Ca1e(code_fonction)                                                                                                 \
                         Bblock                                                                                                         \
                         EGAL(niveau_resultant_de_la_combinaison_universelle,fonction(arg1,arg2));                                      \
                         Eblock                                                                                                         \
                    ECa1

DEFV(Common,DEFV(Int,SINT(Fcombinaison_universelle_de_deux_niveaux_____code,code_FNEUTRE)));

DEFV(Common,DEFV(FonctionP,Fcombinaison_universelle_de_deux_niveaux(arg1,arg2)))
                                        /* Fonction introduite le 20170714185144...                                                  */
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(genere_p,INIT(niveau_resultant_de_la_combinaison_universelle,NIVEAU_UNDEF));
     /*..............................................................................................................................*/
     Choi(Fcombinaison_universelle_de_deux_niveaux_____code)
          Bblock
          EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FNEUTRE1,FNEUTRE1)
          EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FNEUTRE2,FNEUTRE2)
          EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FNEUTRE,FNEUTRE)
          EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FADD,FADD)
          EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FBARY,FBARY)
          EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FMOYENNE,FMOYENNE)
          EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FSUB,FSUB)
          EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FMUL,FMUL)
                                        /* On notera l'absence de :                                                                  */
                                        /*                                                                                           */
                                        /*   EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FMULF,FMULF)                */
                                        /*                                                                                           */
                                        /* parce que pour cette fonction 'arg1' est de type 'Float'...                               */
          EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FDIV,FDIV)
          EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FMAX,FMAX)
          EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FMIN,FMIN)
          EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FMINMAX,FMINMAX)
          EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FOR,FOR)
          EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FAND,FAND)
          EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX(code_FEOR,FEOR)
          Defo
               Bblock
               PRINT_ERREUR("la fonction de combinaison des points n'existe pas");
               Eblock
          EDef
          Eblock
     ECho

     RETU(niveau_resultant_de_la_combinaison_universelle);
     Eblock

EFonctionP

#undef    EXECUTION_D_UNE_COMBINAISON_QUELCONQUE_DE_DEUX_NIVEAUX

#Aif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
#Eif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P E R I O D I S A T I O N   D E S   A X E S  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
=define   PERIODISER_SYMETRISER_PROLONGER(axe)                                                                                          \
                                        /* ATTENTION : cette procedure prend la valeur d'une variable 'axe' (soit 'X' ou 'Y') et     */ \
                                        /* renvoie la valeur calculee dans une variable 'coordonnee`axe' (soit 'coordonnee_X' ou     */ \
                                        /* 'coordonnee_Y').                                                                          */ \
                    Bblock                                                                                                              \
                    EGAL(coordonnee`axe                                                                                                 \
                        ,COND(IL_FAUT(periodiser`axe)                                                                                   \
                             ,HORS`axe`PERIODIQUE(axe)                                                                                  \
                             ,COND(IL_FAUT(symetriser`axe)                                                                              \
                                  ,HORS`axe`SYMETRIQUE(axe)                                                                             \
                                  ,COND(IL_FAUT(prolonger`axe)                                                                          \
                                       ,HORS`axe`PROLONGEMENT(axe)                                                                      \
                                       ,HORS`axe`FORCER(axe)                                                                            \
                                        )                                                                                               \
                                   )                                                                                                    \
                              )                                                                                                         \
                         );                                                                                                             \
                    Eblock
                                        /* Eventuellement pour l'axe 'coordonnee', periodisation et prolongement tel qu'il etait     */
                                        /* au bord.                                                                                  */
                                        /*                                                                                           */
                                        /* Resume de la signification des options :                                                  */
                                        /*                                                                                           */
                                        /*                  periodiser          HORS_?_PERIODIQUE(c)                    MOD?(c)      */
                                        /*                  symetriser          HORS_?_SYMETRIQUE(c)                    SYM?(c)      */
                                        /*                  prolonger           HORS_?_PROLONGEMENT(c)                  TRO?(c)      */
                                        /*                  "rien"              HORS_?_FORCER(c)                        NEUT(c)      */
                                        /*                                                                                           */
                                        /* ou '?' et 'c' designent une coordonnee {X,Y,Z} quelconque...                              */
                                        /*                                                                                           */
                                        /* L'option de symetrisation a ete introduite le 20050720190202...                           */
#define   VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser,symetriser,prolonger_)                                \
                    I3OU(IFET(IL_FAUT(periodiser),IL_FAUT(symetriser))                                                                  \
                        ,IFET(IL_FAUT(symetriser),IL_FAUT(prolonger_))                                                                  \
                        ,IFET(IL_FAUT(prolonger_),IL_FAUT(periodiser))                                                                  \
                         )                                                                                                              \
                                        /* Afin de verifier qu'une seule des trois options {periodiser,symetriser,prolonger} est     */
                                        /* VRAI...                                                                                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " S T A N D A R D "   D ' U N E   I M A G E  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,Fload_point(imageA
                                      ,X,Y
                                      ,periodiser_X,periodiser_Y
                                      ,symetriser_X,symetriser_Y
                                      ,prolonger_X,prolonger_Y
                                      ,niveau_hors_image
                                       )
                 )
     )
DEFV(Argument,DEFV(image,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est periodique ou pas.                        */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est symetrique ou pas. Ceci a ete             */
                                        /* introduit le 20050721103203...                                                            */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] doit etre prolonge a l'exterieur comme il     */
                                        /* est au bord...                                                                            */
DEFV(Argument,DEFV(genere_p,niveau_hors_image));
                                        /* Niveau a forcer au cas ou les coordonnees transformees seraient "hors-image".             */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Int,INIT(coordonnee_X,UNDEF));
     DEFV(Int,INIT(coordonnee_Y,UNDEF));
                                        /* Coordonnees {X,Y} du point argument apres d'eventuelles transformations...                */
     DEFV(genere_p,INIT(point,niveau_hors_image));
                                        /* Valeur du point courant initialise a priori sur la situation "hors-image".                */
     /*..............................................................................................................................*/
     Test(IFOU(VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_X,symetriser_X,prolonger_X)
              ,VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_Y,symetriser_Y,prolonger_Y)
               )
          )
          Bblock
          PRINT_ATTENTION("une seule des options {periodiser,symetriser,prolonger} peut etre VRAI -la premiere 'VRAI' l'emporte-");
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     PERIODISER_SYMETRISER_PROLONGER(X);
     PERIODISER_SYMETRISER_PROLONGER(Y);
                                        /* Eventuellement, periodisation et prolongement des axes...                                 */

     Test(TEST_DANS_L_IMAGE(coordonnee_X,coordonnee_Y))
          Bblock
          EGAL(point,load_point(imageA,coordonnee_X,coordonnee_Y));
                                        /* Acces au point recherche apres ses eventuelles transformations...                         */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETU(point);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N E   I M A G E  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,FFload_point(imageA
                                       ,X,Y
                                       ,periodiser_X,periodiser_Y
                                       ,symetriser_X,symetriser_Y
                                       ,prolonger_X,prolonger_Y
                                       ,niveau_hors_image
                                        )
                 )
     )
DEFV(Argument,DEFV(imageF,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est periodique ou pas.                        */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est symetrique ou pas. Ceci a ete             */
                                        /* introduit le 20050721103203...                                                            */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] doit etre prolonge a l'exterieur comme il     */
                                        /* est au bord...                                                                            */
DEFV(Argument,DEFV(genere_Float,niveau_hors_image));
                                        /* Niveau a forcer au cas ou les coordonnees transformees seraient "hors-image".             */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Int,INIT(coordonnee_X,UNDEF));
     DEFV(Int,INIT(coordonnee_Y,UNDEF));
                                        /* Coordonnees {X,Y} du point argument apres d'eventuelles transformations...                */
     DEFV(genere_Float,INIT(point,niveau_hors_image));
                                        /* Valeur du point courant initialise a priori sur la situation "hors-image".                */
     /*..............................................................................................................................*/
     Test(IFOU(VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_X,symetriser_X,prolonger_X)
              ,VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_Y,symetriser_Y,prolonger_Y)
               )
          )
          Bblock
          PRINT_ATTENTION("une seule des options {periodiser,symetriser,prolonger} peut etre VRAI -la premiere 'VRAI' l'emporte-");
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     PERIODISER_SYMETRISER_PROLONGER(X);
     PERIODISER_SYMETRISER_PROLONGER(Y);
                                        /* Eventuellement, periodisation et prolongement des axes...                                 */

     Test(TEST_DANS_L_IMAGE(coordonnee_X,coordonnee_Y))
          Bblock
          EGAL(point,loadF_point(imageA,coordonnee_X,coordonnee_Y));
                                        /* Acces au point recherche apres ses eventuelles transformations...                         */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETU(point);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N E   I M A G E                                    */
/*        A V E C   C O O R D O N N E E S   F L O T T A N T E S  :                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*             *     * * * * * *   * * * * * *   * * * * * *   *         *   * * * * * *   *   * * * * * *   *         *             */
/*                        *             *        *             **        *        *        *   *         *   **        *             */
/*            * *         *             *        *             * *       *        *        *   *         *   * *       *             */
/*                        *             *        *             *  *      *        *        *   *         *   *  *      *             */
/*           *   *        *             *        *             *   *     *        *        *   *         *   *   *     *             */
/*                        *             *        * * *         *    *    *        *        *   *         *   *    *    *             */
/*          * * * *       *             *        *             *     *   *        *        *   *         *   *     *   *             */
/*                        *             *        *             *      *  *        *        *   *         *   *      *  *             */
/*         *       *      *             *        *             *       * *        *        *   *         *   *       * *             */
/*                        *             *        *             *        **        *        *   *         *   *        **             */
/*        *         *     *             *        * * * * * *   *         *        *        *   * * * * * *   *         *             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        ATTENTION :                                                                                                                */
/*                                                                                                                                   */
/*                    Je note le 20060601101800 lors du travail sur                                                                  */
/*                  l'image 'v $xiirs/SPHE.92' que tout cela fonctionne                                                              */
/*                  tres bien, sauf s'il y une discontinuite dans l'image.                                                           */
/*                  Cela se voit par exemple, si l'image represente un                                                               */
/*                  angle auquel cas une discontinuite possible sera un                                                              */
/*                  passage de 2.pi a 0 ce qui ne se voit pas en tant que tel                                                        */
/*                  si cet angle est ensuite l'argument d'une fonction periodique                                                    */
/*                  de periode 2.pi (tel 'COSX(...)' ou 'SINX(...)'...).                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#define   NomFonctionCourant                                                                                                            \
                    NomDeLaFonctionCourante                                                                                             \
                                        /* Afin de raccourcir certaines lignes a venir...                                            */

                                        /* Introduit le 20080805102158 afin d'ameliorer la presentation de la valeur par defaut des  */
                                        /* matrices de transformation 'FFload_point_coordonnees_01_____matrice_de_transformation'    */
                                        /* et 'FFAload_point_coordonnees_01_____matrice_de_transformation'...                        */
                                        /*                                                                                           */
                                        /* Le 20120520122707, 'FU___' a ete mise dans 'v $xil/defi_K2$vv$DEF 20120520122554'...      */

DEFV(Common,DEFV(Logical,PINT(bILOAD_POINT_COORDONNEES_01_____eviter_les_fortes_discontinuites,FAUX)));
DEFV(Common,DEFV(Float,PINT(bILOAD_POINT_COORDONNEES_01_____epsilon_detection_des_fortes_discontinuites,tgEPSILON)));
                                        /* Dispositif introduit le 20170228182517 destine a eviter les trop fortes disconinuites     */
                                        /* dans les acces a un champ 'imageA'...                                                     */

#define   bILOAD_POINT_COORDONNEES_01                                                                                                   \
                                        /* Le 20120309180208, 'ILOAD_POINT_COORDONNEES_01' est devenu 'bILOAD_POINT_COORDONNEES_01'  */ \
                                        /* ("b" pour "Basic") par "symetrie" avec ce qui est fait pour les albums                    */ \
                                        /* ('v $xiipf/fonction.2$FON ALOAD_POINT_COORDONNEES_01'...                                  */ \
                    Bblock                                                                                                              \
                    DEFV(genere_Float,INIT(niveau_sans_interpolation_du_point_de_coordonnees_01,FLOT__NIVEAU_UNDEF));                   \
                                                                                                                                        \
                    VOISINAGE_POINT_SIMPLE(Xf_effective                                                                                 \
                                          ,Yf_effective                                                                                 \
                                          ,BLOC(VIDE;)                                                                                  \
                                          ,BLOC(VIDE;)                                                                                  \
                                          ,genere_Float                                                                                 \
                                          ,FLOT__NIVEAU_UNDEF                                                                           \
                                          ,FZERO                                                                                        \
                                          ,FZERO                                                                                        \
                                          ,NEUT                                                                                         \
                                           );                                                                                           \
                    EGAL(niveau_sans_interpolation_du_point_de_coordonnees_01,niveau_du_point_de_coordonnees_01);                       \
                                        /* Sauvegarde du niveau du point courant sans interpolation (introduit le 20080926132449).   */ \
                                                                                                                                        \
                    Test(IL_FAUT(NomFonctionCourant QD@@__ _____interpoler_bilineairement_ou_bicubiquement))                            \
                                        /* Test introduit le 20080926132449...                                                       */ \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(NomFonctionCourant QD@@__ _____utiliser_l_interpolation_bilineaire))                              \
                              Bblock                                                                                                    \
                              VOISINAGE_POINT_BILINEAIRE(Xf_effective                                                                   \
                                                        ,Yf_effective                                                                   \
                                                        ,BLOC(VIDE;)                                                                    \
                                                        ,BLOC(VIDE;)                                                                    \
                                                        ,genere_Float                                                                   \
                                                        ,FLOT__NIVEAU_UNDEF                                                             \
                                                        ,FZERO                                                                          \
                                                        ,FZERO                                                                          \
                                                        ,NEUT                                                                           \
                                                        ,NomFonctionCourant QD@@__ _____ponderation_du_barycentre_d_interpolation_X     \
                                                        ,NomFonctionCourant QD@@__ _____ponderation_du_barycentre_d_interpolation_Y     \
                                                         );                                                                             \
                                        /* 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.                                                                    */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              VOISINAGE_POINT_BICUBIQUE(Xf_effective                                                                    \
                                                       ,Yf_effective                                                                    \
                                                       ,BLOC(VIDE;)                                                                     \
                                                       ,BLOC(VIDE;)                                                                     \
                                                       ,genere_Float                                                                    \
                                                       ,FLOT__NIVEAU_UNDEF                                                              \
                                                       ,FZERO                                                                           \
                                                       ,FZERO                                                                           \
                                                       ,NomFonctionCourant QD@@__ _____ponderation_du_barycentre_d_interpolation_X      \
                                                       ,NomFonctionCourant QD@@__ _____ponderation_du_barycentre_d_interpolation_Y      \
                                                        );                                                                              \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         Test(IL_FAUT(bILOAD_POINT_COORDONNEES_01_____eviter_les_fortes_discontinuites))                                \
                                        /* Test introduit le 20170228182517...                                                       */ \
                              Bblock                                                                                                    \
                              Test(IFEQ_a_peu_pres_absolu(niveau_du_point_de_coordonnees_01                                             \
                                                         ,niveau_sans_interpolation_du_point_de_coordonnees_01                          \
                                                         ,bILOAD_POINT_COORDONNEES_01_____epsilon_detection_des_fortes_discontinuites   \
                                                          )                                                                             \
                                   )                                                                                                    \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   EGAL(niveau_du_point_de_coordonnees_01,niveau_sans_interpolation_du_point_de_coordonnees_01);        \
                                        /* Dans le cas ou il y a une trop forte discontinuite, on "oublie" l'interpolation...        */ \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         EGAL(niveau_du_point_de_coordonnees_01,niveau_sans_interpolation_du_point_de_coordonnees_01);                  \
                                        /* La possibilite de ne pas interpoler a ete introduite le 20080926132449...                 */ \
                                        /*                                                                                           */ \
                                        /* Mis sous cette forme le 20170301073336 : le deplacement de 'VOISINAGE_POINT_SIMPLE(...)'  */ \
                                        /* en tete de cette procedure est destine a detecter les discontinuites...                   */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Eblock                                                                                                              \
                                        /* Procedure introduite le 20091202184549 dans le but de generer plusieurs fonctions         */ \
                                        /* realisant cette operation, mais avec des types d'images differents...                     */

#define   GENERATION_DE_L_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01                                                                      \
                    GENERATION_DE_L_ACCELERATEUR_DE_FONCTIONS_A_N_ARGUMENTS                                                             \
                        (S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01                                                                     \
                                        /* On notera que l'on utilise le nom 'S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01' pour       */ \
                                        /* les donnees de l'accelerateur et non pas 'ACCELERATEUR__ILOAD_POINT_COORDONNEES_01'       */ \
                                        /* car, en effet, ce dernier nom est aussi celui de la procedure d'acceleration et donc      */ \
                                        /* si ce nom etait utilise, il y aurait substitution par la definition de l'accelerateur     */ \
                                        /* a suivre...                                                                               */ \
                        ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                                     \
                        ,DEFV(Local,DEFV(Float,DdTb1(POINTERf                                                                           \
                                                    ,S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____Argument_1                          \
                                                    ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                         \
                                                    ,ADRESSE_NON_ENCORE_DEFINIE                                                         \
                                                     )                                                                                  \
                                         )                                                                                              \
                              );                                                                                                        \
                         DEFV(Local,DEFV(Float,DdTb1(POINTERf                                                                           \
                                                    ,S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____Argument_2                          \
                                                    ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                         \
                                                    ,ADRESSE_NON_ENCORE_DEFINIE                                                         \
                                                     )                                                                                  \
                                         )                                                                                              \
                              );                                                                                                        \
                                        /* Donne les deux arguments de l'entree courante (si elle est valide...).                    */ \
                         )                                                                                                              \
                                        /* Donnees de l'accelerateur a deux arguments...                                             */

#define   ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                                                    \
                    TRON(DIVI(dimXY,GRO2(CENT)),CENT,CENT_MILLE)
#define   ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__PREMIERE_ENTREE                                                                     \
                    ACCELERATEUR_DE_FONCTIONS_A_N_ARGUMENTS__PREMIERE_ENTREE
#define   ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__DERNIERE_ENTREE                                                                     \
                    LSTX(ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__PREMIERE_ENTREE                                                      \
                        ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                                     \
                         )
#define   ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__PONDERATEUR                                                                         \
                    ACCELERATEUR_DE_FONCTIONS_A_N_ARGUMENTS__PONDERATEUR
                                        /* Parametres fondamentaux.                                                                  */
                                        /*                                                                                           */
                                        /* Jusqu'au 20120930085841 c'etait 'dimXYZ' qui figurait ci-dessus : cela venait du fait     */
                                        /* que 'ACCELERATEUR__ILOAD_POINT_COORDONNEES_01(...)' ici genere etait en fait une "copie"  */
                                        /* de 'ACCELERATEUR__ALOAD_POINT_COORDONNEES_01(...)', l'adaptation faite le 20120619132452, */
                                        /* ayant oublie ce remplacement. Ainsi, le 20120930085841 'dimXY' a remplace 'dimXYZ'...     */

#define   ACCELERATEUR__ILOAD_POINT_COORDONNEES_01(valeur_fonction,calcul_fonction,Argument_1,Argument_2,fonction,objet)                \
                                        /* Procedure introduite le 20120619132452...                                                 */ \
                    Bblock                                                                                                              \
                    ACCELERATEUR_DE_FONCTIONS_A_N_ARGUMENTS                                                                             \
                        (S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01                                                                     \
                        ,S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____utiliser_l_accelerateur                                         \
                        ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                                     \
                        ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__PREMIERE_ENTREE                                                      \
                        ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__DERNIERE_ENTREE                                                      \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              MdTb1(S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____Argument_1                                           \
                                   ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                          \
                                   ,Float,ADRESSE_NON_ENCORE_DEFINIE                                                                    \
                                    );                                                                                                  \
                              MdTb1(S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____Argument_2                                           \
                                   ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                          \
                                   ,Float,ADRESSE_NON_ENCORE_DEFINIE                                                                    \
                                    );                                                                                                  \
                                        /* Allocation de la memoire des listes d'Arguments.                                          */ \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              EGAL(IdTb1(S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____Argument_1                                      \
                                        ,INDX(index_d_initialisation,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__PREMIERE_ENTREE)         \
                                        ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                     \
                                         )                                                                                              \
                                  ,FLOT__UNDEF                                                                                          \
                                   );                                                                                                   \
                              EGAL(IdTb1(S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____Argument_2                                      \
                                        ,INDX(index_d_initialisation,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__PREMIERE_ENTREE)         \
                                        ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                     \
                                         )                                                                                              \
                                  ,FLOT__UNDEF                                                                                          \
                                   );                                                                                                   \
                                        /* Initialisation des listes d'Arguments.                                                    */ \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,HORNER_1_01(ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__PONDERATEUR                                              \
                                    ,Argument_1                                                                                         \
                                    ,Argument_2                                                                                         \
                                     )                                                                                                  \
                                        /* Calcul d'une fonction des deux arguments :                                                */ \
                                        /*                                                                                           */ \
                                        /*                             1              0                                              */ \
                                        /*                  Argument1.P  + Argument2.P                                               */ \
                                        /*                                                                                           */ \
                                        /* ou 'P' represente le 'PONDERATEUR' (arbitraire...).                                       */ \
                                        /*                                                                                           */ \
                                        /* Cette methode repose sur le programme 'v $xtc/HashCode.01$c'...                           */ \
                        ,IFET(IFEQ(IdTb1(S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____Argument_1                                      \
                                        ,index_d_acceleration                                                                           \
                                        ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                     \
                                         )                                                                                              \
                                  ,Argument_1                                                                                           \
                                   )                                                                                                    \
                             ,IFEQ(IdTb1(S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____Argument_2                                      \
                                        ,index_d_acceleration                                                                           \
                                        ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                     \
                                         )                                                                                              \
                                  ,Argument_2                                                                                           \
                                   )                                                                                                    \
                              )                                                                                                         \
                                        /* Est-ce la liste {Argument_1,Argument_2} memorisee ?                                       */ \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              EGAL(IdTb1(S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____Argument_1                                      \
                                        ,index_d_acceleration                                                                           \
                                        ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                     \
                                         )                                                                                              \
                                  ,Argument_1                                                                                           \
                                   );                                                                                                   \
                              EGAL(IdTb1(S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____Argument_2                                      \
                                        ,index_d_acceleration                                                                           \
                                        ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                     \
                                         )                                                                                              \
                                  ,Argument_2                                                                                           \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              FdTb1(S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____Argument_2                                           \
                                   ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                          \
                                   ,Float,ADRESSE_NON_ENCORE_DEFINIE                                                                    \
                                    );                                                                                                  \
                              FdTb1(S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____Argument_1                                           \
                                   ,ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                          \
                                   ,Float,ADRESSE_NON_ENCORE_DEFINIE                                                                    \
                                    );                                                                                                  \
                                        /* Desallocation de la memoire des listes d'Arguments.                                       */ \
                                        /*                                                                                           */ \
                                        /* On notera qu'a priori on n'utilisera jamais cette sequence puisqu'en effet, on ne sait    */ \
                                        /* jamais que c'est la derniere fois. C'est introduit malgre tout par "symetrie"...          */ \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,valeur_fonction                                                                                                \
                        ,BLOC(calcul_fonction)                                                                                          \
                        ,fonction                                                                                                       \
                        ,objet                                                                                                          \
                         )                                                                                                              \
                    Eblock

DEFV(Common,DEFV(Logical,PINT(S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____utiliser_l_accelerateur,FAUX)));
                                        /* Indique si l'accelerateur doit etre utilise ou pas...                                     */
                                        /*                                                                                           */
                                        /* Le 20120619134249, l'accelerateur est desactive par defaut suite a des tests faits a      */
                                        /* l'aide de 'v $xci/GenDeform.01$K' qui montrent un ralentissement d'un facteur 1.3,        */
                                        /* mais cela est tout a fait normal car en effet 'FFload_point_coordonnees_01(...)' n'y est  */
                                        /* appele qu'une seule fois pour chaque couple {X,Y} ; et donc le ralentissment est le       */
                                        /* "cout" de l'accelerateur...                                                               */
DEFV(Common,DEFV(Logical,PINT(S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____fermer_l_accelerateur,FAUX)));
                                        /* Indique si l'accelerateur doit etre ferme...                                              */
                                        /*                                                                                           */
                                        /* Ainsi, pour fermer l'accelerateur, il suffirait de faire :                                */
                                        /*                                                                                           */
                                        /*        EGAL(S_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01_____fermer_l_accelerateur,VRAI);   */
                                        /*                                                                                           */
                                        /* puis d'appeler (une derniere fois...) :                                                   */
                                        /*                                                                                           */
                                        /*        FAload_point_coordonnees_01(...)                                                   */
                                        /*                                                                                           */
                                        /* ou encore :                                                                               */
                                        /*                                                                                           */
                                        /*        FFAload_point_coordonnees_01(...)                                                  */
                                        /*                                                                                           */
                                        /* (qui utilisent 'ILOAD_POINT_COORDONNEES_01(...)') avec des parametres dont la valeur      */
                                        /* a peu d'importance (a condition evidemment qu'ils soient licites...). Mais cela ne serait */
                                        /* pas tres "elegant" car, en effet, cela obligerait a mettre la sequence qui precede dans   */
                                        /* dans le code de tous les appelants des fonctions 'FAload_point_coordonnees_01(...)'       */
                                        /* et 'FFAload_point_coordonnees_01(...)', ce qui rendrait "visible" de l'exterieur          */
                                        /* l'accelerateur, alors que l'idee est qu'il soit justement "invisible". Or enfin et de     */
                                        /* nouveau, on ne peut rendre cette "fermeture" automatique car, en effet, il n'y a aucune   */
                                        /* facon, en toute generalite, de connaitre le dernier appel a ces fonctions...              */
GENERATION_DE_L_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01;
                                        /* Generation des donnees utiles a l'accelerateur.                                           */
#define   ILOAD_POINT_COORDONNEES_01                                                                                                    \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(NomFonctionCourant QD@@__ _____appliquer_une_matrice_de_transformation))                               \
                         Bblock                                                                                                         \
                         EGAL(Xf_effective,TRANSFORMATION_GEOMETRIQUE_2D_Xf(Xf,Yf));                                                    \
                         EGAL(Yf_effective,TRANSFORMATION_GEOMETRIQUE_2D_Yf(Xf,Yf));                                                    \
                                        /* La possibilite de transformer {Xf,Yf} fut introduite le 20080802120636...                 */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    ACCELERATEUR__ILOAD_POINT_COORDONNEES_01(niveau_du_point_de_coordonnees_01                                          \
                                                            ,BLOC(                                                                      \
                                                                  bILOAD_POINT_COORDONNEES_01;                                          \
                                                                  )                                                                     \
                                                            ,Xf_effective                                                               \
                                                            ,Yf_effective                                                               \
                                                            ,NomDeLaFonctionCourante QD@@__                                             \
                                                            ,imageA                                                                     \
                                                             );                                                                         \
                                        /* Utilisation de l'accelerateur...                                                          */ \
                                        /*                                                                                           */ \
                                        /* Le 20120929165544, {Xf_effective,Yf_effective} a remplace {Xf,Yf}                         */ \
                                        /* suite au probleme 'v $xig/fonct$vv$DEF 20120929145125'...                                 */ \
                    Eblock                                                                                                              \
                                        /* Acces a un point de coordonnees dans [0,1]...                                             */

#define   TRANSFORMATION_GEOMETRIQUE_2D_Xf(Xf,Yf)                                                                                       \
                    gTRANSFORMATION_GEOMETRIQUE_3D_Fxyz(NomFonctionCourant QD@@__ _____matrice_de_transformation                        \
                                                       ,SOUS(Xf,NomFonctionCourant QD@@__ _____PreAntiTranslation_Xf)                   \
                                                       ,SOUS(Yf,NomFonctionCourant QD@@__ _____PreAntiTranslation_Yf)                   \
                                                       ,NomFonctionCourant QD@@__ _____Zf                                               \
                                                       ,cx                                                                              \
                                                       ,NomFonctionCourant QD@@__ _____Post___Translation_Xf                            \
                                                        )
#define   TRANSFORMATION_GEOMETRIQUE_2D_Yf(Xf,Yf)                                                                                       \
                    gTRANSFORMATION_GEOMETRIQUE_3D_Fxyz(NomFonctionCourant QD@@__ _____matrice_de_transformation                        \
                                                       ,SOUS(Xf,NomFonctionCourant QD@@__ _____PreAntiTranslation_Xf)                   \
                                                       ,SOUS(Yf,NomFonctionCourant QD@@__ _____PreAntiTranslation_Yf)                   \
                                                       ,NomFonctionCourant QD@@__ _____Zf                                               \
                                                       ,cy                                                                              \
                                                       ,NomFonctionCourant QD@@__ _____Post___Translation_Yf                            \
                                                        )

#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    INITIALISATION_DES_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE(Xf_apres_reechantillonnage,Yf_apres_reechantillonnage,tX,tY)   \
                                        /* ATTENTION, l'absence de 'Bblock' et de 'Eblock' est due au 'PUSH_ECHANTILLONNAGE' qui     */ \
                                        /* suit...                                                                                   */ \
                                                                                                                                        \
                         gINITIALISATION_DES_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE                                                     \
                             (Xf_apres_reechantillonnage                                                                                \
                             ,Yf_apres_reechantillonnage                                                                                \
                             ,FZERO                                                                                                     \
                             ,FZERO                                                                                                     \
                             ,NomFonctionCourant QD@@__ _____utiliser_pasX_et_pasY                                                      \
                             ,NomFonctionCourant QD@@__ _____pasX                                                                       \
                             ,NomFonctionCourant QD@@__ _____pasY                                                                       \
                              );                                                                                                        \
                                                                                                                                        \
                                        /* ATTENTION, l'absence de 'Bblock' et de 'Eblock' est due au 'PUSH_ECHANTILLONNAGE' qui     */ \
                                        /* suit...                                                                                   */ \
                                                                                                                                        \
                                        /* Initialisation des operations et definition des donnees utiles...                         */

#    define    __DENORMALISE_DU_NIVEAU_INTERPOLE(niveau_interpole)                                                                      \
                         NEUT(niveau_interpole)                                                                                         \
                                        /* Normalisation_du_niveau interpole.                                                        */
#    define    RANGEMENT_DU_NIVEAU_INTERPOLE(niveau_interpole,imageR,X_apres_reechantillonnage,Y_apres_reechantillonnage)               \
                         Bblock                                                                                                         \
                         EGAL(niveau_du_point_de_coordonnees_01,niveau_interpole_avant_le_reechantillonnage);                           \
                         Eblock                                                                                                         \
                                        /* Renvoi du niveau interpole...                                                             */

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N E   I M A G E   " S T A N D A R D "              */
/*        A V E C   C O O R D O N N E E S   F L O T T A N T E S  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )
#    define    ECHANTILLONNAGE_DENORMALISE_DE_L_IMAGE(x,y)                                                                              \
                         FLOT(Fload_point(imageA                                                                                        \
                                         ,x,y                                                                                           \
                                         ,periodiser_X                                                                                  \
                                         ,periodiser_Y                                                                                  \
                                         ,symetriser_X                                                                                  \
                                         ,symetriser_Y                                                                                  \
                                         ,prolonger_X                                                                                   \
                                         ,prolonger_Y                                                                                   \
                                         ,niveau_hors_image                                                                             \
                                          )                                                                                             \
                              )                                                                                                         \
                                        /* Fonction d'echantillonage "entier" de l'image dans [0,1[.                                 */
#    define    ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE(x,y)                                                                                \
                         FLOT(Fload_point(imageA                                                                                        \
                                         ,x,y                                                                                           \
                                         ,periodiser_X                                                                                  \
                                         ,periodiser_Y                                                                                  \
                                         ,symetriser_X                                                                                  \
                                         ,symetriser_Y                                                                                  \
                                         ,prolonger_X                                                                                   \
                                         ,prolonger_Y                                                                                   \
                                         ,niveau_hors_image                                                                             \
                                          )                                                                                             \
                              )                                                                                                         \
                                        /* Fonction d'echantillonage "entier" de l'image dans [0,1[.                                 */
#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))                                                                  \
           )

DEFV(Common,DEFV(Logical,SINT(Fload_point_coordonnees_01_____appliquer_une_matrice_de_transformation,FAUX)));
DEFV(Common,DEFV(matrixF_3D,SINS(Fload_point_coordonnees_01_____matrice_de_transformation
                                ,IstructH103(IstructL03(FU___,FZERO,FZERO)
                                            ,IstructL03(FZERO,FU___,FZERO)
                                            ,IstructL03(FZERO,FZERO,FU___)
                                             )
                                 )
                 )
     );
DEFV(Common,DEFV(Float,SINT(Fload_point_coordonnees_01_____PreAntiTranslation_Xf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(Fload_point_coordonnees_01_____Post___Translation_Xf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(Fload_point_coordonnees_01_____PreAntiTranslation_Yf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(Fload_point_coordonnees_01_____Post___Translation_Yf,NEUT(FDU))));
                                        /* Definition d'une eventuelle matrice de transformation neutre par defaut...                */
                                        /* neutre par defaut...                                                                      */
                                        /*                                                                                           */
                                        /* On notera la notation "PreAnti" qui signifie que les translations de ce type sont en      */
                                        /* fait appliquees via un 'SOUS(...)', alors que les translations de type "Post" passent     */
                                        /* par un 'ADD2(...)' ('v $xiii/vecteurs$DEF gTRANSFORMATION_GEOMETRIQUE_3D_Fxyz') via un    */
                                        /* 'LIN3(...)'.                                                                              */
DEFV(Common,DEFV(Float,SINT(Fload_point_coordonnees_01_____Zf,FZmin)));
                                        /* Coordonnee 'Zf' a priori inutile, on ne sait jamais...                                    */

DEFV(Common,DEFV(Logical,SINT(Fload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement,VRAI)));
                                        /* Pour choisir entre interpoler ('VRAI' et alors suivant l'indicateur de choix suivant      */
                                        /* 'Fload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire') ou pas ('FAUX').    */
DEFV(Common,DEFV(Float,SINT(Fload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_X
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_X
                            )
                 )
     );
DEFV(Common,DEFV(Float,SINT(Fload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_Y
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_Y
                            )
                 )
     );
                                        /* Parametres d'interpolation des coordonnees barycentriques.                                */
                                        /*                                                                                           */
                                        /* Ils permettent d'etre plus selectifs que le paramatre global definit ci-dessus            */
                                        /* ('Fload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement').            */
                                        /*                                                                                           */
                                        /* On notera que cette possibilite a ete introduite ici par symetrie avec                    */
                                        /* 'FFAload_point_coordonnees_01(...)', plus que par interet ou utilite...                   */
DEFV(Common,DEFV(Logical,SINT(Fload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire,FAUX)));
                                        /* Pour choisir entre 'VOISINAGE_POINT_BILINEAIRE(...)' et 'VOISINAGE_POINT_BICUBIQUE(...)'. */
DEFV(Common,DEFV(Logical,SINT(Fload_point_coordonnees_01_____utiliser_pasX_et_pasY,VRAI)));
                                        /* Meme remarque que 'Fload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire'    */
DEFV(Common,DEFV(Int,SINT(Fload_point_coordonnees_01_____pasX,PasX)));
DEFV(Common,DEFV(Int,SINT(Fload_point_coordonnees_01_____pasY,PasY)));
                                        /* Si 'IL_NE_FAUT_PAS(Fload_point_coordonnees_01_____utiliser_pasX_et_pasY), donne           */
                                        /* {pasX,pasY} a utiliser...                                                                 */

DEFV(Common,DEFV(FonctionP,Fload_point_coordonnees_01(imageA
                                                     ,Xf,Yf
                                                     ,periodiser_X,periodiser_Y
                                                     ,symetriser_X,symetriser_Y
                                                     ,prolonger_X,prolonger_Y
                                                     ,niveau_hors_image
                                                      )
                 )
     )
                                        /* Fonction introduite le 20091203092546...                                                  */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
                                        /* Coordonnees {Xf,Yf} du point argument dans [0,1[.                                         */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est periodique ou pas.                        */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est symetrique ou pas.                        */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] doit etre prolonge a l'exterieur comme il     */
                                        /* est au bord...                                                                            */
DEFV(Argument,DEFV(genere_p,niveau_hors_image));
                                        /* Niveau a forcer au cas ou les coordonnees transformees seraient "hors-image".             */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(Xf_effective,Xf));
     DEFV(Float,INIT(Yf_effective,Yf));
                                        /* Coordonnees effectives...                                                                 */

     DEFV(genere_Float,INIT(niveau_du_point_de_coordonnees_01,FLOT__NIVEAU_UNDEF));
                                        /* Niveau du point {Xf,Yf}.                                                                  */
     /*..............................................................................................................................*/
     ILOAD_POINT_COORDONNEES_01;

     RETU(GENP(niveau_du_point_de_coordonnees_01));
     Eblock

#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))                                                                  \
           )
#    undef     ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE
#    undef     ECHANTILLONNAGE_DENORMALISE_DE_L_IMAGE
#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))                                                                  \
           )

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N E   I M A G E   " N O N   S T A N D A R D "      */
/*        A V E C   C O O R D O N N E E S   F L O T T A N T E S  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )
#    define    ECHANTILLONNAGE_DENORMALISE_DE_L_IMAGE(x,y)                                                                              \
                         FFload_point(imageA                                                                                            \
                                     ,x,y                                                                                               \
                                     ,periodiser_X                                                                                      \
                                     ,periodiser_Y                                                                                      \
                                     ,symetriser_X                                                                                      \
                                     ,symetriser_Y                                                                                      \
                                     ,prolonger_X                                                                                       \
                                     ,prolonger_Y                                                                                       \
                                     ,niveau_hors_image                                                                                 \
                                      )                                                                                                 \
                                        /* Fonction d'echantillonage "entier" de l'image dans [0,1[.                                 */
#    define    ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE(x,y)                                                                                \
                         FFload_point(imageA                                                                                            \
                                     ,x,y                                                                                               \
                                     ,periodiser_X                                                                                      \
                                     ,periodiser_Y                                                                                      \
                                     ,symetriser_X                                                                                      \
                                     ,symetriser_Y                                                                                      \
                                     ,prolonger_X                                                                                       \
                                     ,prolonger_Y                                                                                       \
                                     ,niveau_hors_image                                                                                 \
                                      )                                                                                                 \
                                        /* Fonction d'echantillonage "entier" de l'image dans [0,1[.                                 */
#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))                                                                  \
           )

DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_____appliquer_une_matrice_de_transformation,FAUX)));
DEFV(Common,DEFV(matrixF_3D,SINS(FFload_point_coordonnees_01_____matrice_de_transformation
                                ,IstructH103(IstructL03(FU___,FZERO,FZERO)
                                            ,IstructL03(FZERO,FU___,FZERO)
                                            ,IstructL03(FZERO,FZERO,FU___)
                                             )
                                 )
                 )
     );
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_____PreAntiTranslation_Xf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_____Post___Translation_Xf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_____PreAntiTranslation_Yf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_____Post___Translation_Yf,NEUT(FDU))));
                                        /* Definition d'une eventuelle matrice de transformation (introduite le 20080802115907),     */
                                        /* neutre par defaut...                                                                      */
                                        /*                                                                                           */
                                        /* Les "Pre" et "Post" translations ont ete introduites le 20080803093325. On notera la      */
                                        /* notation "PreAnti" qui signifie que les translations de ce type sont en fait appliquees   */
                                        /* via un 'SOUS(...)', alors que les translations de type "Post" passent par un 'ADD2(...)'  */
                                        /* via un 'LIN3(...)' ('v $xiii/vecteurs$DEF gTRANSFORMATION_GEOMETRIQUE_3D_Fxyz').          */
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_____Zf,FZmin)));
                                        /* Coordonnee 'Zf' a priori inutile introduite le 20080805102942, on ne sait jamais...       */

DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement,VRAI)));
                                        /* Pour choisir entre interpoler ('VRAI' et alors suivant l'indicateur de choix suivant      */
                                        /* 'FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire') ou pas ('FAUX').   */
                                        /* Cet indicateur a ete introduit le 20080926132449...                                       */
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_X
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_X
                            )
                 )
     );
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_Y
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_Y
                            )
                 )
     );
                                        /* Parametres d'interpolation des coordonnees barycentriques introduits le 20080930163349.   */
                                        /* Ils permettent d'etre plus selectifs que le paramatre global definit ci-dessus            */
                                        /* ('FFload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement').           */
                                        /*                                                                                           */
                                        /* On notera que cette possibilite a ete introduite ici par symetrie avec                    */
                                        /* 'FFAload_point_coordonnees_01(...)', plus que par interet ou utilite...                   */
                                        /*                                                                                           */
                                        /* Le 20081001092211, cette possibilite a ete etendue a 'VOISINAGE_POINT_BILINEAIRE(...)'    */
                                        /* alors qu'avant cette date, elle etait limitee a 'VOISINAGE_POINT_BICUBIQUE(...)'...       */
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire,FAUX)));
                                        /* Pour choisir entre 'VOISINAGE_POINT_BILINEAIRE(...)' et 'VOISINAGE_POINT_BICUBIQUE(...)'  */
                                        /* (introduit le 20050322112315). Le choix par defaut correspond a la compatibilite avec ce  */
                                        /* existait anterieurement a cette date...                                                   */
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_____utiliser_pasX_et_pasY,VRAI)));
                                        /* Meme remarque que 'FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire'   */
                                        /* (introduit le 20041107175457 car manquait...).                                            */
DEFV(Common,DEFV(Int,SINT(FFload_point_coordonnees_01_____pasX,PasX)));
DEFV(Common,DEFV(Int,SINT(FFload_point_coordonnees_01_____pasY,PasY)));
                                        /* Si 'IL_NE_FAUT_PAS(FFload_point_coordonnees_01_____utiliser_pasX_et_pasY), donne          */
                                        /* {pasX,pasY} a utiliser...                                                                 */

DEFV(Common,DEFV(FonctionF,FFload_point_coordonnees_01(imageA
                                                      ,Xf,Yf
                                                      ,periodiser_X,periodiser_Y
                                                      ,symetriser_X,symetriser_Y
                                                      ,prolonger_X,prolonger_Y
                                                      ,niveau_hors_image
                                                       )
                 )
     )
DEFV(Argument,DEFV(imageF,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
                                        /* Coordonnees {Xf,Yf} du point argument dans [0,1[.                                         */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est periodique ou pas.                        */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est symetrique ou pas. Ceci a ete             */
                                        /* introduit le 20050721103203...                                                            */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] doit etre prolonge a l'exterieur comme il     */
                                        /* est au bord...                                                                            */
DEFV(Argument,DEFV(genere_Float,niveau_hors_image));
                                        /* Niveau a forcer au cas ou les coordonnees transformees seraient "hors-image".             */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(Xf_effective,Xf));
     DEFV(Float,INIT(Yf_effective,Yf));
                                        /* Coordonnees effectives introduites le 20080728211430...                                   */

     DEFV(genere_Float,INIT(niveau_du_point_de_coordonnees_01,FLOT__NIVEAU_UNDEF));
                                        /* Niveau du point {Xf,Yf}.                                                                  */
     /*..............................................................................................................................*/
     ILOAD_POINT_COORDONNEES_01;

     RETU(niveau_du_point_de_coordonnees_01);
     Eblock

#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))                                                                  \
           )
#    undef     ECHANTILLONNAGE_NORMALISE_DE_L_IMAGE
#    undef     ECHANTILLONNAGE_DENORMALISE_DE_L_IMAGE
#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))                                                                  \
           )

EFonctionF

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )
#    undef     RANGEMENT_DU_NIVEAU_INTERPOLE
#    undef     __DENORMALISE_DU_NIVEAU_INTERPOLE

#    undef     INITIALISATION_DES_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE
#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))                                                                  \
           )

#undef    TRANSFORMATION_GEOMETRIQUE_2D_Yf
#undef    TRANSFORMATION_GEOMETRIQUE_2D_Xf

#undef    ILOAD_POINT_COORDONNEES_01

#undef    ACCELERATEUR__ILOAD_POINT_COORDONNEES_01
#undef    ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__PONDERATEUR
#undef    ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__DERNIERE_ENTREE
#undef    ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__PREMIERE_ENTREE
#undef    ACCELERATEUR__ILOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES

#undef    GENERATION_DE_L_ACCELERATEUR__ILOAD_POINT_COORDONNEES_01

#undef    bILOAD_POINT_COORDONNEES_01

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N E   I M A G E                                    */
/*        A V E C   C O O R D O N N E E S   F L O T T A N T E S   I N D I R E C T E S  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

                                        /* ATTENTION : on notera que toutes les variables qui suivent (jusqu'a celles qui sont       */
                                        /* relatives a 'imageAX' et a 'imageAY') ont un nom qui se termine par un "_". Ceci est      */
                                        /* du a l'usage qui est fait de ces noms dans :                                              */
                                        /*                                                                                           */
                                        /*                  SAUVEGARDES_POUR_ACCES_INDIRECT_AUX_COORDONNEES(VIDE); ---------------   */
                                        /*                                                                                        |  */
                                        /* En effet, lors des :                                                                   |  */
                                        /*                                                                                        |  */
                                        /*                  SAUVEGARDES_POUR_ACCES_INDIRECT_AUX_COORDONNEES(Im); -------          |  */
                                        /*                                                                              |         |  */
                                        /* les concatenations suivantes :                                               |         |  */
                                        /*                                                                              |         |  */
                                        /*                  ..._ ## Im                                                  |         |  */
                                        /*                                                                              |         |  */
                                        /* sont faites et generent donc des variables du type :                         |         |  */
                                        /*                                                                              |         |  */
                                        /*                  ..._imageAX <-----------------------------------------------|         |  */
                                        /*                  ..._imageAY <-----------------------------------------------          |  */
                                        /*                                                                                        |  */
                                        /* ou ainsi 'imageAX' et a 'imageAY' sont isoles de ce qui precede par un "_", d'ou       |  */
                                        /* les "_" terminaux ci-apres qui correspondent donc a des variables du type :            |  */
                                        /*                                                                                        |  */
                                        /*                  ..._VIDE <------------------------------------------------------------   */
                                        /*                                                                                           */
                                        /* ou "VIDE" est vide...                                                                     */

DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____periodiser_X_,FAUX)));
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____periodiser_Y_,FAUX)));
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____symetriser_X_,FAUX)));
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____symetriser_Y_,FAUX)));
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____prolonger_X_,FAUX)));
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____prolonger_Y_,FAUX)));
DEFV(Common,DEFV(genere_Float,SINT(FFload_point_coordonnees_01_indirectes_____niveau_hors_image_,FXmin)));
                                        /* Parametrage de l'acces a 'imageAX' via 'FFload_point_coordonnees_01(...).                 */

DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____appliquer_une_matrice_de_transformation_
                             ,FAUX
                              )
                 )
     );
DEFV(Common,DEFV(matrixF_3D,SINS(FFload_point_coordonnees_01_indirectes_____matrice_de_transformation_
                                ,IstructH103(IstructL03(FU___,FZERO,FZERO)
                                            ,IstructL03(FZERO,FU___,FZERO)
                                            ,IstructL03(FZERO,FZERO,FU___)
                                             )
                                 )
                 )
     );
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____PreAntiTranslation_Xf_,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____Post___Translation_Xf_,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____PreAntiTranslation_Yf_,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____Post___Translation_Yf_,NEUT(FDU))));
                                        /* Definition d'une eventuelle matrice de transformation neutre par defaut...                */
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____Zf_,FZmin)));
                                        /* Coordonnee 'Zf' a priori inutile, mais on ne sait jamais...                               */

DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____interpoler_bilineairement_ou_bicubiquement_
                             ,VRAI
                              )
                 )
     );
                                        /* Pour choisir entre interpoler ('VRAI' et alors suivant l'indicateur de choix suivant      */
                                        /* 'FFload_point_coordonnees_01_indirectes_____utiliser_l_interpolation_bilineaire_') ou pas */
                                        /* ('FAUX').                                                                                 */
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____ponderation_du_barycentre_d_interpolation_X_
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_X
                            )
                 )
     );
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____ponderation_du_barycentre_d_interpolation_Y_
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_Y
                            )
                 )
     );
                                        /* Parametres d'interpolation des coordonnees barycentriques.                                */
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____utiliser_l_interpolation_bilineaire_,VRAI)));
                                        /* Pour choisir entre 'VOISINAGE_POINT_BILINEAIRE(...)' et 'VOISINAGE_POINT_BICUBIQUE(...)'. */
                                        /*                                                                                           */
                                        /* Le 20090508182032 la valeur par defaut est passee de 'FAUX' a 'VRAI' afin d'eviter les    */
                                        /* problemes de rebond. On notera que l'on ne peut en faire autant avec l'indicateur         */
                                        /* 'FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire' pour des raisons    */
                                        /* de compatibilite anterieure...                                                            */
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____utiliser_pasX_et_pasY_,VRAI)));
DEFV(Common,DEFV(Int,SINT(FFload_point_coordonnees_01_indirectes_____pasX_,PasX)));
DEFV(Common,DEFV(Int,SINT(FFload_point_coordonnees_01_indirectes_____pasY_,PasY)));
                                        /* Si 'IL_NE_FAUT_PAS(FFload_point_coordonnees_01_indirectes_____utiliser_pasX_et_pasY_),    */
                                        /* donne {pasX,pasY} a utiliser...                                                           */

DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____periodiser_X_imageAX,FAUX)));
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____periodiser_Y_imageAX,FAUX)));
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____symetriser_X_imageAX,FAUX)));
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____symetriser_Y_imageAX,FAUX)));
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____prolonger_X_imageAX,FAUX)));
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____prolonger_Y_imageAX,FAUX)));
DEFV(Common,DEFV(genere_Float,SINT(FFload_point_coordonnees_01_indirectes_____niveau_hors_image_imageAX,FXmin)));
                                        /* Parametrage de l'acces a 'imageAX' via 'FFload_point_coordonnees_01(...).                 */

DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____appliquer_une_matrice_de_transformation_imageAX
                             ,FAUX
                              )
                 )
     );
DEFV(Common,DEFV(matrixF_3D,SINS(FFload_point_coordonnees_01_indirectes_____matrice_de_transformation_imageAX
                                ,IstructH103(IstructL03(FU___,FZERO,FZERO)
                                            ,IstructL03(FZERO,FU___,FZERO)
                                            ,IstructL03(FZERO,FZERO,FU___)
                                             )
                                 )
                 )
     );
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____PreAntiTranslation_Xf_imageAX,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____Post___Translation_Xf_imageAX,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____PreAntiTranslation_Yf_imageAX,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____Post___Translation_Yf_imageAX,NEUT(FDU))));
                                        /* Definition d'une eventuelle matrice de transformation neutre par defaut...                */
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____Zf_imageAX,FZmin)));
                                        /* Coordonnee 'Zf' a priori inutile, mais on ne sait jamais...                               */

DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____interpoler_bilineairement_ou_bicubiquement_imageAX
                             ,VRAI
                              )
                 )
     );
                                        /* Pour choisir entre interpoler ('VRAI' et alors suivant l'indicateur de choix suivant      */
                                        /* 'FFload_point_coordonnees_01_indirectes_____utiliser_l_interpolation_bilineaire') ou pas  */
                                        /* ('FAUX').                                                                                 */
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____ponderation_du_barycentre_d_interpolation_X_imageAX
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_X
                            )
                 )
     );
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____ponderation_du_barycentre_d_interpolation_Y_imageAX
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_Y
                            )
                 )
     );
                                        /* Parametres d'interpolation des coordonnees barycentriques.                                */
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____utiliser_l_interpolation_bilineaire_imageAX,VRAI)));
                                        /* Pour choisir entre 'VOISINAGE_POINT_BILINEAIRE(...)' et 'VOISINAGE_POINT_BICUBIQUE(...)'. */
                                        /*                                                                                           */
                                        /* Le 20090508182032 la valeur par defaut est passee de 'FAUX' a 'VRAI' afin d'eviter les    */
                                        /* problemes de rebond.                                                                      */
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____utiliser_pasX_et_pasY_imageAX,VRAI)));
DEFV(Common,DEFV(Int,SINT(FFload_point_coordonnees_01_indirectes_____pasX_imageAX,PasX)));
DEFV(Common,DEFV(Int,SINT(FFload_point_coordonnees_01_indirectes_____pasY_imageAX,PasY)));
                                        /* Si 'IL_NE_FAUT_PAS(FFload_point_coordonnees_01_indirectes_____utiliser_pasX_et_pasY_...), */
                                        /* donne {pasX,pasY} a utiliser...                                                           */

DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____periodiser_X_imageAY,FAUX)));
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____periodiser_Y_imageAY,FAUX)));
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____symetriser_X_imageAY,FAUX)));
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____symetriser_Y_imageAY,FAUX)));
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____prolonger_X_imageAY,FAUX)));
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____prolonger_Y_imageAY,FAUX)));
DEFV(Common,DEFV(genere_Float,SINT(FFload_point_coordonnees_01_indirectes_____niveau_hors_image_imageAY,FYmin)));
                                        /* Parametrage de l'acces a 'imageAY' via 'FFload_point_coordonnees_01(...).                 */

DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____appliquer_une_matrice_de_transformation_imageAY
                             ,FAUX
                              )
                 )
     );
DEFV(Common,DEFV(matrixF_3D,SINS(FFload_point_coordonnees_01_indirectes_____matrice_de_transformation_imageAY
                                ,IstructH103(IstructL03(FU___,FZERO,FZERO)
                                            ,IstructL03(FZERO,FU___,FZERO)
                                            ,IstructL03(FZERO,FZERO,FU___)
                                             )
                                 )
                 )
     );
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____PreAntiTranslation_Xf_imageAY,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____Post___Translation_Xf_imageAY,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____PreAntiTranslation_Yf_imageAY,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____Post___Translation_Yf_imageAY,NEUT(FDU))));
                                        /* Definition d'une eventuelle matrice de transformation neutre par defaut...                */
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____Zf_imageAY,FZmin)));
                                        /* Coordonnee 'Zf' a priori inutile, mais on ne sait jamais...                               */

DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____interpoler_bilineairement_ou_bicubiquement_imageAY
                             ,VRAI
                              )
                 )
     );
                                        /* Pour choisir entre interpoler ('VRAI' et alors suivant l'indicateur de choix suivant      */
                                        /* 'FFload_point_coordonnees_01_indirectes_____utiliser_l_interpolation_bilineaire') ou pas  */
                                        /* ('FAUX').                                                                                 */
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____ponderation_du_barycentre_d_interpolation_X_imageAY
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_X
                            )
                 )
     );
DEFV(Common,DEFV(Float,SINT(FFload_point_coordonnees_01_indirectes_____ponderation_du_barycentre_d_interpolation_Y_imageAY
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_Y
                            )
                 )
     );
                                        /* Parametres d'interpolation des coordonnees barycentriques.                                */
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____utiliser_l_interpolation_bilineaire_imageAY,VRAI)));
                                        /* Pour choisir entre 'VOISINAGE_POINT_BILINEAIRE(...)' et 'VOISINAGE_POINT_BICUBIQUE(...)'. */
                                        /*                                                                                           */
                                        /* Le 20090508182032 la valeur par defaut est passee de 'FAUX' a 'VRAI' afin d'eviter les    */
                                        /* problemes de rebond.                                                                      */
DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____utiliser_pasX_et_pasY_imageAY,VRAI)));
DEFV(Common,DEFV(Int,SINT(FFload_point_coordonnees_01_indirectes_____pasX_imageAY,PasX)));
DEFV(Common,DEFV(Int,SINT(FFload_point_coordonnees_01_indirectes_____pasY_imageAY,PasY)));
                                        /* Si 'IL_NE_FAUT_PAS(FFload_point_coordonnees_01_indirectes_____utiliser_pasX_et_pasY_...)  */
                                        /* donne {pasX,pasY} a utiliser...                                                           */

#define   SAUVEGARDES_POUR_ACCES_INDIRECT_AUX_COORDONNEES(Im)                                                                           \
                                        /* Procedure introduite le 20090508131612.                                                   */ \
                    Bblock                                                                                                              \
                    BSaveModifyVariable(Float                                                                                           \
                                       ,FFload_point_coordonnees_01_____PreAntiTranslation_Xf                                           \
                                       ,FFload_point_coordonnees_01_indirectes_____PreAntiTranslation_Xf_ ## Im                         \
                                        );                                                                                              \
                    BSaveModifyVariable(Float                                                                                           \
                                       ,FFload_point_coordonnees_01_____Post___Translation_Xf                                           \
                                       ,FFload_point_coordonnees_01_indirectes_____Post___Translation_Xf_ ## Im                         \
                                        );                                                                                              \
                    BSaveModifyVariable(Float                                                                                           \
                                       ,FFload_point_coordonnees_01_____PreAntiTranslation_Yf                                           \
                                       ,FFload_point_coordonnees_01_indirectes_____PreAntiTranslation_Yf_ ## Im                         \
                                        );                                                                                              \
                    BSaveModifyVariable(Float                                                                                           \
                                       ,FFload_point_coordonnees_01_____Post___Translation_Yf                                           \
                                       ,FFload_point_coordonnees_01_indirectes_____Post___Translation_Yf_ ## Im                         \
                                        );                                                                                              \
                    BSaveModifyVariable(Float                                                                                           \
                                       ,FFload_point_coordonnees_01_____Zf                                                              \
                                       ,FFload_point_coordonnees_01_indirectes_____Zf_ ## Im                                            \
                                        );                                                                                              \
                    BSaveModifyVariable(Logical                                                                                         \
                                       ,FFload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement                      \
                                       ,FFload_point_coordonnees_01_indirectes_____interpoler_bilineairement_ou_bicubiquement_ ## Im    \
                                        );                                                                                              \
                    BSaveModifyVariable(Float                                                                                           \
                                       ,FFload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_X                     \
                                       ,FFload_point_coordonnees_01_indirectes_____ponderation_du_barycentre_d_interpolation_X_ ## Im   \
                                        );                                                                                              \
                    BSaveModifyVariable(Float                                                                                           \
                                       ,FFload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_Y                     \
                                       ,FFload_point_coordonnees_01_indirectes_____ponderation_du_barycentre_d_interpolation_Y_ ## Im   \
                                        );                                                                                              \
                    BSaveModifyVariable(Logical                                                                                         \
                                       ,FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire                             \
                                       ,FFload_point_coordonnees_01_indirectes_____utiliser_l_interpolation_bilineaire_ ## Im           \
                                        );                                                                                              \
                    BSaveModifyVariable(Logical                                                                                         \
                                       ,FFload_point_coordonnees_01_____utiliser_pasX_et_pasY                                           \
                                       ,FFload_point_coordonnees_01_indirectes_____utiliser_pasX_et_pasY_ ## Im                         \
                                        );                                                                                              \
                    BSaveModifyVariable(Int                                                                                             \
                                       ,FFload_point_coordonnees_01_____pasX                                                            \
                                       ,FFload_point_coordonnees_01_indirectes_____pasX_ ## Im                                          \
                                        );                                                                                              \
                    BSaveModifyVariable(Int                                                                                             \
                                       ,FFload_point_coordonnees_01_____pasY                                                            \
                                       ,FFload_point_coordonnees_01_indirectes_____pasY_ ## Im                                          \
                                        );                                                                                              \
                    BSaveModifyVariable(Logical                                                                                         \
                                       ,FFload_point_coordonnees_01_____appliquer_une_matrice_de_transformation                         \
                                       ,FFload_point_coordonnees_01_indirectes_____appliquer_une_matrice_de_transformation_ ## Im       \
                                        );                                                                                              \
                                                                                                                                        \
                    begin_nouveau_block                                                                                                 \
                         Bblock                                                                                                         \
                         DEFV(matrixF_3D,EnTete_de_sauvegardM ## FFload_point_coordonnees_01_____matrice_de_transformation);            \
                         TRANSFERT_MATRICE_3D(EnTete_de_sauvegardM ## FFload_point_coordonnees_01_____matrice_de_transformation         \
                                             ,FFload_point_coordonnees_01_____matrice_de_transformation                                 \
                                              );                                                                                        \
                         TRANSFERT_MATRICE_3D(FFload_point_coordonnees_01_____matrice_de_transformation                                 \
                                             ,FFload_point_coordonnees_01_indirectes_____matrice_de_transformation_ ## Im               \
                                              );                                                                                        \
                                        /* Parametrage des arguments "implicites" de 'FFload_point_coordonnees_01(...)' avec         */ \
                                        /* sauvegarde preliminaire...                                                                */
#define   RESTAURATIONS_POUR_ACCES_INDIRECT_AUX_COORDONNEES                                                                             \
                                        /* Procedure introduite le 20090508131612.                                                   */ \
                         TRANSFERT_MATRICE_3D(FFload_point_coordonnees_01_____matrice_de_transformation                                 \
                                             ,EnTete_de_sauvegardM ## FFload_point_coordonnees_01_____matrice_de_transformation         \
                                              );                                                                                        \
                                                                                                                                        \
                         Eblock                                                                                                         \
                    end_nouveau_block                                                                                                   \
                                                                                                                                        \
                    ESaveModifyVariable(Logical                                                                                         \
                                       ,FFload_point_coordonnees_01_____appliquer_une_matrice_de_transformation                         \
                                        );                                                                                              \
                    ESaveModifyVariable(Int                                                                                             \
                                       ,FFload_point_coordonnees_01_____pasY                                                            \
                                        );                                                                                              \
                    ESaveModifyVariable(Int                                                                                             \
                                       ,FFload_point_coordonnees_01_____pasX                                                            \
                                        );                                                                                              \
                    ESaveModifyVariable(Logical                                                                                         \
                                       ,FFload_point_coordonnees_01_____utiliser_pasX_et_pasY                                           \
                                        );                                                                                              \
                    ESaveModifyVariable(Logical                                                                                         \
                                       ,FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire                             \
                                        );                                                                                              \
                    ESaveModifyVariable(Float                                                                                           \
                                       ,FFload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_Y                     \
                                        );                                                                                              \
                    ESaveModifyVariable(Float                                                                                           \
                                       ,FFload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_X                     \
                                        );                                                                                              \
                    ESaveModifyVariable(Logical                                                                                         \
                                       ,FFload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement                      \
                                        );                                                                                              \
                    ESaveModifyVariable(Float                                                                                           \
                                       ,FFload_point_coordonnees_01_____Zf                                                              \
                                        );                                                                                              \
                    ESaveModifyVariable(Float                                                                                           \
                                       ,FFload_point_coordonnees_01_____Post___Translation_Yf                                           \
                                        );                                                                                              \
                    ESaveModifyVariable(Float                                                                                           \
                                       ,FFload_point_coordonnees_01_____PreAntiTranslation_Yf                                           \
                                        );                                                                                              \
                    ESaveModifyVariable(Float                                                                                           \
                                       ,FFload_point_coordonnees_01_____Post___Translation_Xf                                           \
                                        );                                                                                              \
                    ESaveModifyVariable(Float                                                                                           \
                                       ,FFload_point_coordonnees_01_____PreAntiTranslation_Xf                                           \
                                        );                                                                                              \
                                        /* Restauration des arguments "implicites" de 'FFload_point_coordonnees_01(...)'.            */ \
                    Eblock                                                                                                              \
                                        /* Procedure introduite le 20090506125515.                                                   */

#define   ACCES_INDIRECT_AUX_COORDONNEES(XYf_indirecte,Im,Xf,Yf)                                                                        \
                    Bblock                                                                                                              \
                    SAUVEGARDES_POUR_ACCES_INDIRECT_AUX_COORDONNEES(Im);                                                                \
                                                                                                                                        \
                    EGAL(XYf_indirecte                                                                                                  \
                        ,FFload_point_coordonnees_01(Im                                                                                 \
                                                    ,Xf                                                                                 \
                                                    ,Yf                                                                                 \
                                                    ,FFload_point_coordonnees_01_indirectes_____periodiser_X_ ## Im                     \
                                                    ,FFload_point_coordonnees_01_indirectes_____periodiser_Y_ ## Im                     \
                                                    ,FFload_point_coordonnees_01_indirectes_____symetriser_X_ ## Im                     \
                                                    ,FFload_point_coordonnees_01_indirectes_____symetriser_Y_ ## Im                     \
                                                    ,FFload_point_coordonnees_01_indirectes_____prolonger_X_ ## Im                      \
                                                    ,FFload_point_coordonnees_01_indirectes_____prolonger_Y_ ## Im                      \
                                                    ,FFload_point_coordonnees_01_indirectes_____niveau_hors_image_ ## Im                \
                                                     )                                                                                  \
                         );                                                                                                             \
                                        /* Acces indirect a l'une des coordonnees 'X' ou 'Y'...                                      */ \
                                                                                                                                        \
                    RESTAURATIONS_POUR_ACCES_INDIRECT_AUX_COORDONNEES;                                                                  \
                    Eblock                                                                                                              \
                                        /* Procedure introduite le 20090506125515.                                                   */

DEFV(Common,DEFV(Logical,SINT(FFload_point_coordonnees_01_indirectes_____iterer_l_indirection,FAUX)));
DEFV(Common,DEFV(Int,SINT(FFload_point_coordonnees_01_indirectes_____nombre_d_iterations_de_l_indirection,ZERO)));
                                        /* Introduit le 20090510221521 afin que 'FFload_point_coordonnees_01_indirectes(...)'        */
                                        /* soit plus que la "succession" de trois 'FFload_point_coordonnees_01(...)'.                */
                                        /*                                                                                           */
                                        /* Le 20200510103543, "__________nombre_d_iterations_de_l_indirection" incomprehensible a    */
                                        /* ete remplace par "_____nombre_d_iterations_de_l_indirection" plus "habituel"...           */

DEFV(Common,DEFV(FonctionF,FFload_point_coordonnees_01_indirectes(imageA
                                                                 ,Xf,Yf
                                                                 ,imageAX,imageAY
                                                                 ,periodiser_X,periodiser_Y
                                                                 ,symetriser_X,symetriser_Y
                                                                 ,prolonger_X,prolonger_Y
                                                                 ,niveau_hors_image
                                                                  )
                 )
     )
                                        /* Fonction introduite le 20090506104004.                                                    */
DEFV(Argument,DEFV(imageF,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
                                        /* Coordonnees {Xf,Yf} du point argument dans [0,1[.                                         */
DEFV(Argument,DEFV(imageF,imageAX));
DEFV(Argument,DEFV(imageF,imageAY));
                                        /* Images contenant la definition de l'adressage indirect pour les coordonnees 'X' et 'Y'... */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est periodique ou pas.                        */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est symetrique ou pas.                        */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] doit etre prolonge a l'exterieur comme il     */
                                        /* est au bord...                                                                            */
DEFV(Argument,DEFV(genere_Float,niveau_hors_image));
                                        /* Niveau a forcer au cas ou les coordonnees transformees seraient "hors-image".             */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(genere_Float,INIT(Xf_indirecte,Xf));
     DEFV(genere_Float,INIT(Yf_indirecte,Yf));
                                        /* Coordonnees indirectes. Le 20090510221521, les valeurs initiales 'FLOT__UNDEF' ont ete    */
                                        /* emplacees par {Xf,Yf} a cause de la possibilite d'iterations de l'indirection...          */
     DEFV(genere_Float,INIT(niveau_du_point_de_coordonnees_01_indirectes,FLOT__NIVEAU_UNDEF));
                                        /* Niveau du point {Xf_indirecte,Yf_indirecte}.                                              */
     /*..............................................................................................................................*/
     Test(IL_NE_FAUT_PAS(FFload_point_coordonnees_01_indirectes_____iterer_l_indirection))
          Bblock
          ACCES_INDIRECT_AUX_COORDONNEES(Xf_indirecte,imageAX,Xf,Yf)
          ACCES_INDIRECT_AUX_COORDONNEES(Yf_indirecte,imageAY,Xf,Yf)
                                        /* Acces indirect aux coordonnees.                                                           */
          Eblock
     ATes
          Bblock
          Repe(FFload_point_coordonnees_01_indirectes_____nombre_d_iterations_de_l_indirection)
               Bblock
               DEFV(Float,INIT(Xf_itere,FLOT__UNDEF));
               DEFV(Float,INIT(Yf_itere,FLOT__UNDEF));

               ACCES_INDIRECT_AUX_COORDONNEES(Xf_itere,imageAX,Xf_indirecte,Yf_indirecte)
               ACCES_INDIRECT_AUX_COORDONNEES(Yf_itere,imageAY,Xf_indirecte,Yf_indirecte)
                                        /* Acces indirect aux coordonnees.                                                           */
               EGAL(Xf_indirecte,Xf_itere);
               EGAL(Yf_indirecte,Yf_itere);
               Eblock
          ERep
          Eblock
     ETes

     SAUVEGARDES_POUR_ACCES_INDIRECT_AUX_COORDONNEES(VIDE);

     EGAL(niveau_du_point_de_coordonnees_01_indirectes
         ,FFload_point_coordonnees_01(imageA
                                     ,Xf_indirecte,Yf_indirecte
                                     ,periodiser_X,periodiser_Y
                                     ,symetriser_X,symetriser_Y
                                     ,prolonger_X,prolonger_Y
                                     ,niveau_hors_image
                                      )
          );

     RESTAURATIONS_POUR_ACCES_INDIRECT_AUX_COORDONNEES;

     RETU(niveau_du_point_de_coordonnees_01_indirectes);
     Eblock

#undef    RESTAURATIONS_POUR_ACCES_INDIRECT_AUX_COORDONNEES
#undef    ACCES_INDIRECT_AUX_COORDONNEES
#undef    SAUVEGARDES_POUR_ACCES_INDIRECT_AUX_COORDONNEES

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N E   I M A G E   " N O N   S T A N D A R D "      */
/*        A V E C   C O O R D O N N E E S   F L O T T A N T E S                                                                      */
/*        E T   A V E C   C O N T R O L E   D E S   I N T E R P O L A T I O N S  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,gFFload_point_coordonnees_01(imageA
                                                       ,Xf,Yf
                                                       ,periodiser_X,periodiser_Y
                                                       ,symetriser_X,symetriser_Y
                                                       ,prolonger_X,prolonger_Y
                                                       ,niveau_hors_image
                                                       ,interpoler_bilineairement_ou_bicubiquement
                                                       ,utiliser_l_interpolation_bilineaire
                                                        )
                 )
     )
                                        /* Fonction introduite le 20150528101138...                                                  */
DEFV(Argument,DEFV(imageF,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
                                        /* Coordonnees {Xf,Yf} du point argument dans [0,1[.                                         */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est periodique ou pas.                        */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est symetrique ou pas. Ceci a ete             */
                                        /* introduit le 20050721103203...                                                            */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] doit etre prolonge a l'exterieur comme il     */
                                        /* est au bord...                                                                            */
DEFV(Argument,DEFV(genere_Float,niveau_hors_image));
                                        /* Niveau a forcer au cas ou les coordonnees transformees seraient "hors-image".             */
DEFV(Argument,DEFV(Logical,interpoler_bilineairement_ou_bicubiquement));
DEFV(Argument,DEFV(Logical,utiliser_l_interpolation_bilineaire));
                                        /* Controle des interpolations...                                                            */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(genere_Float,INIT(niveau_du_point_de_coordonnees_01,FLOT__NIVEAU_UNDEF));
                                        /* Niveau du point {Xf,Yf}.                                                                  */
     /*..............................................................................................................................*/
     BSaveModifyVariable(Logical
                        ,FFload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement
                        ,interpoler_bilineairement_ou_bicubiquement
                         );
     BSaveModifyVariable(Logical
                        ,FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire
                        ,utiliser_l_interpolation_bilineaire
                         );

     EGAL(niveau_du_point_de_coordonnees_01
         ,FFload_point_coordonnees_01(imageA
                                     ,Xf,Yf
                                     ,periodiser_X,periodiser_Y
                                     ,symetriser_X,symetriser_Y
                                     ,prolonger_X,prolonger_Y
                                     ,niveau_hors_image
                                      )
          );

     ESaveModifyVariable(Logical
                        ,FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire
                         );
     ESaveModifyVariable(Logical
                        ,FFload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement
                         );

     RETU(niveau_du_point_de_coordonnees_01);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N E   I M A G E   " N O N   S T A N D A R D "      */
/*        A V E C   C O O R D O N N E E S   F L O T T A N T E S                                                                      */
/*        E T   A V E C   S U P E R - C O N T R O L E   D E S   I N T E R P O L A T I O N S  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,sgFFload_point_coordonnees_01(imageA
                                                        ,Xf,Yf
                                                        ,periodiser_X,periodiser_Y
                                                        ,symetriser_X,symetriser_Y
                                                        ,prolonger_X,prolonger_Y
                                                        ,niveau_hors_image
                                                        ,interpoler_bilineairement_ou_bicubiquement
                                                        ,utiliser_l_interpolation_bilineaire
                                                        ,eviter_les_fortes_discontinuites
                                                        ,epsilon_detection_des_fortes_discontinuites
                                                         )
                 )
     )
                                        /* Fonction introduite le 20170301142825...                                                  */
DEFV(Argument,DEFV(imageF,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
                                        /* Coordonnees {Xf,Yf} du point argument dans [0,1[.                                         */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est periodique ou pas.                        */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est symetrique ou pas.                        */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] doit etre prolonge a l'exterieur comme il     */
                                        /* est au bord...                                                                            */
DEFV(Argument,DEFV(genere_Float,niveau_hors_image));
                                        /* Niveau a forcer au cas ou les coordonnees transformees seraient "hors-image".             */
DEFV(Argument,DEFV(Logical,interpoler_bilineairement_ou_bicubiquement));
DEFV(Argument,DEFV(Logical,utiliser_l_interpolation_bilineaire));
                                        /* Controle des interpolations...                                                            */
DEFV(Argument,DEFV(Logical,eviter_les_fortes_discontinuites));
DEFV(Argument,DEFV(Float,epsilon_detection_des_fortes_discontinuites));
                                        /* Super-controle des interpolations...                                                      */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(genere_Float,INIT(niveau_du_point_de_coordonnees_01,FLOT__NIVEAU_UNDEF));
                                        /* Niveau du point {Xf,Yf}.                                                                  */
     /*..............................................................................................................................*/
     BSaveModifyVariable(Logical
                        ,bILOAD_POINT_COORDONNEES_01_____eviter_les_fortes_discontinuites
                        ,eviter_les_fortes_discontinuites
                         );
     BSaveModifyVariable(Float
                        ,bILOAD_POINT_COORDONNEES_01_____epsilon_detection_des_fortes_discontinuites
                        ,epsilon_detection_des_fortes_discontinuites
                         );

     EGAL(niveau_du_point_de_coordonnees_01
         ,gFFload_point_coordonnees_01(imageA
                                      ,Xf,Yf
                                      ,periodiser_X,periodiser_Y
                                      ,symetriser_X,symetriser_Y
                                      ,prolonger_X,prolonger_Y
                                      ,niveau_hors_image
                                      ,interpoler_bilineairement_ou_bicubiquement
                                      ,utiliser_l_interpolation_bilineaire
                                       )
          );

     ESaveModifyVariable(Float
                        ,bILOAD_POINT_COORDONNEES_01_____epsilon_detection_des_fortes_discontinuites
                         );
     ESaveModifyVariable(Logical
                        ,bILOAD_POINT_COORDONNEES_01_____eviter_les_fortes_discontinuites
                         );

     RETU(niveau_du_point_de_coordonnees_01);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " S T A N D A R D "   D ' U N   A L B U M  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FAload_point(albumA
                                       ,X,Y,Z
                                       ,periodiser_X,periodiser_Y,periodiser_Z
                                       ,symetriser_X,symetriser_Y,symetriser_Z
                                       ,prolonger_X,prolonger_Y,prolonger_Z
                                       ,niveau_hors_album
                                        )
                 )
     )
DEFV(Argument,DEFV(album,albumA));
                                        /* Album contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
DEFV(Argument,DEFV(Int,Z));
                                        /* Coordonnees {X,Y,Z} du point argument. On notera qu'avec :                                */
                                        /*                                                                                           */
                                        /*                  Z=Zmin                                                                   */
                                        /*                                                                                           */
                                        /* un 'album' peut simuler une 'image'...                                                    */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
DEFV(Argument,DEFV(Logical,periodiser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est periodique ou pas.            */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
DEFV(Argument,DEFV(Logical,symetriser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est symetrique ou pas.            */
                                        /* Ceci a ete introduit le 20050721103203...                                                 */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
DEFV(Argument,DEFV(Logical,prolonger_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] doit etre prolonge a l'exterieur  */
                                        /* comme il est au bord...                                                                   */
DEFV(Argument,DEFV(genere_p,niveau_hors_album));
                                        /* Niveau a forcer au cas ou les coordonnees transformees seraient "hors-album".             */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Int,INIT(coordonnee_X,UNDEF));
     DEFV(Int,INIT(coordonnee_Y,UNDEF));
     DEFV(Int,INIT(coordonnee_Z,UNDEF));
                                        /* Coordonnees {X,Y,Z} du point argument apres d'eventuelles transformations...              */
     DEFV(genere_p,INIT(point,niveau_hors_album));
                                        /* Valeur du point courant initialise a priori sur la situation "hors-album".                */
     /*..............................................................................................................................*/
     Test(I3OU(VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_X,symetriser_X,prolonger_X)
              ,VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_Y,symetriser_Y,prolonger_Y)
              ,VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_Z,symetriser_Z,prolonger_Z)
               )
          )
          Bblock
          PRINT_ATTENTION("une seule des options {periodiser,symetriser,prolonger} peut etre VRAI -la premiere 'VRAI' l'emporte-");
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     PERIODISER_SYMETRISER_PROLONGER(X);
     PERIODISER_SYMETRISER_PROLONGER(Y);
     PERIODISER_SYMETRISER_PROLONGER(Z);
                                        /* Eventuellement, periodisation et prolongement des axes...                                 */

     Test(TEST_DANS_L_ALBUM(coordonnee_X,coordonnee_Y,coordonnee_Z))
          Bblock
          EGAL(point,Aload_point(albumA,coordonnee_X,coordonnee_Y,coordonnee_Z));
                                        /* Acces au point recherche apres ses eventuelles transformations...                         */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETU(point);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N   A L B U M  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,FFAload_point(albumA
                                        ,X,Y,Z
                                        ,periodiser_X,periodiser_Y,periodiser_Z
                                        ,symetriser_X,symetriser_Y,symetriser_Z
                                        ,prolonger_X,prolonger_Y,prolonger_Z
                                        ,niveau_hors_album
                                         )
                 )
     )
DEFV(Argument,DEFV(albumF,albumA));
                                        /* Album contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
DEFV(Argument,DEFV(Int,Z));
                                        /* Coordonnees {X,Y,Z} du point argument. On notera qu'avec :                                */
                                        /*                                                                                           */
                                        /*                  Z=Zmin                                                                   */
                                        /*                                                                                           */
                                        /* un 'album' peut simuler une 'image'...                                                    */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
DEFV(Argument,DEFV(Logical,periodiser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est periodique ou pas.            */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
DEFV(Argument,DEFV(Logical,symetriser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est symetrique ou pas.            */
                                        /* Ceci a ete introduit le 20050721103203...                                                 */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
DEFV(Argument,DEFV(Logical,prolonger_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] doit etre prolonge a l'exterieur  */
                                        /* comme il est au bord...                                                                   */
DEFV(Argument,DEFV(genere_Float,niveau_hors_album));
                                        /* Niveau a forcer au cas ou les coordonnees transformees seraient "hors-album".             */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Int,INIT(coordonnee_X,UNDEF));
     DEFV(Int,INIT(coordonnee_Y,UNDEF));
     DEFV(Int,INIT(coordonnee_Z,UNDEF));
                                        /* Coordonnees {X,Y,Z} du point argument apres d'eventuelles transformations...              */
     DEFV(genere_Float,INIT(point,niveau_hors_album));
                                        /* Valeur du point courant initialise a priori sur la situation "hors-album".                */
     /*..............................................................................................................................*/
     Test(I3OU(VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_X,symetriser_X,prolonger_X)
              ,VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_Y,symetriser_Y,prolonger_Y)
              ,VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_Z,symetriser_Z,prolonger_Z)
               )
          )
          Bblock
          PRINT_ATTENTION("une seule des options {periodiser,symetriser,prolonger} peut etre VRAI -la premiere 'VRAI' l'emporte-");
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     PERIODISER_SYMETRISER_PROLONGER(X);
     PERIODISER_SYMETRISER_PROLONGER(Y);
     PERIODISER_SYMETRISER_PROLONGER(Z);
                                        /* Eventuellement, periodisation et prolongement des axes...                                 */

     Test(TEST_DANS_L_ALBUM(coordonnee_X,coordonnee_Y,coordonnee_Z))
          Bblock
          EGAL(point,AloadF_point(albumA,coordonnee_X,coordonnee_Y,coordonnee_Z));
                                        /* Acces au point recherche apres ses eventuelles transformations...                         */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETU(point);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N   A L B U M                                      */
/*        A V E C   C O O R D O N N E E S   F L O T T A N T E S  :                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*             *     * * * * * *   * * * * * *   * * * * * *   *         *   * * * * * *   *   * * * * * *   *         *             */
/*                        *             *        *             **        *        *        *   *         *   **        *             */
/*            * *         *             *        *             * *       *        *        *   *         *   * *       *             */
/*                        *             *        *             *  *      *        *        *   *         *   *  *      *             */
/*           *   *        *             *        *             *   *     *        *        *   *         *   *   *     *             */
/*                        *             *        * * *         *    *    *        *        *   *         *   *    *    *             */
/*          * * * *       *             *        *             *     *   *        *        *   *         *   *     *   *             */
/*                        *             *        *             *      *  *        *        *   *         *   *      *  *             */
/*         *       *      *             *        *             *       * *        *        *   *         *   *       * *             */
/*                        *             *        *             *        **        *        *   *         *   *        **             */
/*        *         *     *             *        * * * * * *   *         *        *        *   * * * * * *   *         *             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        ATTENTION :                                                                                                                */
/*                                                                                                                                   */
/*                    Je note le 20060601101800 lors du travail sur                                                                  */
/*                  l'album 'v $xiirs/SPHE.93.2D' que tout cela fonctionne                                                           */
/*                  tres bien, sauf s'il y une discontinuite dans l'album.                                                           */
/*                  Cela se voit par exemple, si l'album represente un                                                               */
/*                  angle auquel cas une discontinuite possible sera un                                                              */
/*                  passage de 2.pi a 0 ce qui ne se voit pas en tant que tel                                                        */
/*                  si cet angle est ensuite l'argument d'une fonction periodique                                                    */
/*                  de periode 2.pi (tel 'COSX(...)' ou 'SINX(...)'...).                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#define   QREX(x)                                                                                                                       \
                    nPREX(x,pasX_effectif)
#define   QREY(y)                                                                                                                       \
                    nPREY(y,pasY_effectif)
#define   QREZ(Z)                                                                                                                       \
                    nPREZ(Z,pasZ_effectif)
                                        /* Procedures introduites le 20180508190107 en choisissant des noms ressemblant a            */
                                        /* 'PRE[XYZ]' en prenant comme premiere lettre ("Q") la suivante alphabetique de "P"...      */
                                        /* Ces noms peuvent paraitre "etranges", mais ils sont destines a ne pas "perturber" les     */
                                        /* lignes les utilisant...                                                                   */

#define   TUCX(x)                                                                                                                       \
                    nSUCX(x,pasX_effectif)
#define   TUCY(y)                                                                                                                       \
                    nSUCY(y,pasY_effectif)
#define   TUCZ(Z)                                                                                                                       \
                    nSUCZ(Z,pasZ_effectif)
                                        /* Procedures introduites le 20180508190107 en choisissant des noms ressemblant a            */
                                        /* 'SUC[XYZ]' en prenant comme premiere lettre ("T") la suivante alphabetique de "S"...      */
                                        /* Ces noms peuvent paraitre "etranges", mais ils sont destines a ne pas "perturber" les     */
                                        /* lignes les utilisant...                                                                   */

#define   bALOAD_POINT_COORDONNEES_01(mi,mi_initial,Ma,MA_initial)                                                                      \
                                        /* Les arguments {mi,Ma} furent introduits le 20100702143507...                              */ \
                                        /*                                                                                           */ \
                                        /* Je note le 20101129165756 que les coordonnees {Xf,Yf,Zf} doivent etre dans l'espace       */ \
                                        /* [0,1]x[0,1]x[0,1] et que si ce n'est pas le cas, 'CALCUL_POINT_ENTIER_COURANT(...)'       */ \
                                        /* renvoie le 'niveau_hors_album'. C'est ce qui fut la source du probleme rencontre lors     */ \
                                        /* du calcul des stereogrammes 'v $xiac/INTE.41.2$R16', 'v $xiac/LYAP.91.2$R16',             */ \
                                        /* 'v $xiac/LYAP.B1.2$R16' et 'v $xiac/LYAP.E5.2$R16'...                                     */ \
                                        /*                                                                                           */ \
                                        /* Le 20120309180208, 'ALOAD_POINT_COORDONNEES_01' est devenu 'bALOAD_POINT_COORDONNEES_01'  */ \
                                        /* ("b" pour "Basic") pour preparer la mise en place d'un eventuel accelerateur utilisant    */ \
                                        /* du "hash-coding"...                                                                       */ \
                    Bblock                                                                                                              \
                    DEFV(Int,INIT(X,UNDEF));                                                                                            \
                    DEFV(Int,INIT(Y,UNDEF));                                                                                            \
                    DEFV(Int,INIT(Z,UNDEF));                                                                                            \
                                        /* Coordonnees entieres {X,Y,Z} "par defaut"...                                              */ \
                                                                                                                                        \
                    DEFV(Int,INIT(pasX_effectif,UNDEF));                                                                                \
                    DEFV(Int,INIT(pasY_effectif,UNDEF));                                                                                \
                    DEFV(Int,INIT(pasZ_effectif,UNDEF));                                                                                \
                                        /* {pasX,pasY,pasZ} effectifs...                                                             */ \
                                                                                                                                        \
                    DEFV(Float,INIT(fonction___au_point_uUvVwW,FLOT__UNDEF));                                                           \
                                        /* Valeur de la fonction au point (u=U,v=V,w=W).                                             */ \
                                                                                                                                        \
                    EGAL(mi,mi_initial);                                                                                                \
                    EGAL(Ma,MA_initial);                                                                                                \
                                        /* Initialisation de la recherche des extrema...                                             */ \
                                                                                                                                        \
                    EGAL(X,_cDENORMALISE_OX(Xf_effective));                                                                             \
                    EGAL(Y,_cDENORMALISE_OY(Yf_effective));                                                                             \
                    EGAL(Z,_cDENORMALISE_OZ(Zf_effective));                                                                             \
                                        /* Coordonnees entieres {X,Y,Z} "par defaut" calculee ici le 20080728211430...               */ \
                                        /*                                                                                           */ \
                                        /* Je rappelle le 20101207164145 que ce passage en entier se fait via les procedures         */ \
                                        /* '_cDENORMALISE_AXES(...)', 'gINTE(...)' et 'FLIN(...)'. Alors le parametre "programmable" */ \
                                        /* 'v $xiii/Images$STR DENORMALISE_AXES_____epsilon' joue un role peut-etre fondamental      */ \
                                        /* ('v $xiii/di_album$FON 20101207144433')...                                                */ \
                                                                                                                                        \
                    Test(IL_FAUT(NomFonctionCourant QD@@__ _____utiliser_pasX_et_pasY_et_pasZ))                                         \
                         Bblock                                                                                                         \
                         EGAL(pasX_effectif,pasX);                                                                                      \
                         EGAL(pasY_effectif,pasY);                                                                                      \
                         EGAL(pasZ_effectif,pasZ);                                                                                      \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         EGAL(pasX_effectif,NomFonctionCourant QD@@__ _____pasX);                                                       \
                         EGAL(pasY_effectif,NomFonctionCourant QD@@__ _____pasY);                                                       \
                         EGAL(pasZ_effectif,NomFonctionCourant QD@@__ _____pasZ);                                                       \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(NomFonctionCourant QD@@__ _____interpoler_bilineairement_ou_bicubiquement))                            \
                                        /* Test introduit le 20080930141651...                                                       */ \
                         Bblock                                                                                                         \
                         DEFV(pointF_3D,barycentre);                                                                                    \
                                        /* Pour calculer les coordonnees barycentriques du point flottant {Xf,Yf,Zf} par rapport     */ \
                                        /* a son voisin entier {X,Y,Z} "par defaut"...                                               */ \
                                        /* voisins entiers...                                                                        */ \
                                                                                                                                        \
                         DEFV(Float,INIT(fonction___au_point_u0v0w0,FLOT__UNDEF));                                                      \
                                        /* Valeur de la fonction au point (u=0,v=0,w=0),                                             */ \
                         DEFV(Float,INIT(fonction___au_point_u1v0w0,FLOT__UNDEF));                                                      \
                                        /* Valeur de la fonction au point (u=+1,v=0,w=0),                                            */ \
                         DEFV(Float,INIT(fonction___au_point_u0v1w0,FLOT__UNDEF));                                                      \
                                        /* Valeur de la fonction au point (u=0,v=+1,w=0),                                            */ \
                         DEFV(Float,INIT(fonction___au_point_u1v1w0,FLOT__UNDEF));                                                      \
                                        /* Valeur de la fonction au point (u=+1,v=+1,w=0),                                           */ \
                         DEFV(Float,INIT(fonction___au_point_u0v0w1,FLOT__UNDEF));                                                      \
                                        /* Valeur de la fonction au point (u=0,v=0,w=+1),                                            */ \
                         DEFV(Float,INIT(fonction___au_point_u1v0w1,FLOT__UNDEF));                                                      \
                                        /* Valeur de la fonction au point (u=+1,v=0,w=+1),                                           */ \
                         DEFV(Float,INIT(fonction___au_point_u0v1w1,FLOT__UNDEF));                                                      \
                                        /* Valeur de la fonction au point (u=0,v=+1,w=+1),                                           */ \
                         DEFV(Float,INIT(fonction___au_point_u1v1w1,FLOT__UNDEF));                                                      \
                                        /* Valeur de la fonction au point (u=+1,v=+1,w=+1).                                          */ \
                                                                                                                                        \
                         DEFV(Float,INIT(fonction___au_point_uUv0w0,FLOT__UNDEF));                                                      \
                                        /* Valeur de la fonction au point (u=U,v=0,w=0),                                             */ \
                         DEFV(Float,INIT(fonction___au_point_uUv1w0,FLOT__UNDEF));                                                      \
                                        /* Valeur de la fonction au point (u=U,v=+1,w=0),                                            */ \
                         DEFV(Float,INIT(fonction___au_point_uUv0w1,FLOT__UNDEF));                                                      \
                                        /* Valeur de la fonction au point (u=U,v=0,w=+1),                                            */ \
                         DEFV(Float,INIT(fonction___au_point_uUv1w1,FLOT__UNDEF));                                                      \
                                        /* Valeur de la fonction au point (u=U,v=+1,w=+1),                                           */ \
                                                                                                                                        \
                         DEFV(Float,INIT(fonction___au_point_uUvVw0,FLOT__UNDEF));                                                      \
                                        /* Valeur de la fonction au point (u=U,v=V,w=0),                                             */ \
                         DEFV(Float,INIT(fonction___au_point_uUvVw1,FLOT__UNDEF));                                                      \
                                        /* Valeur de la fonction au point (u=U,v=V,w=+1).                                            */ \
                                                                                                                                        \
                         INITIALISATION_POINT_3D(barycentre                                                                             \
                                                ,MUL2(NomFonctionCourant QD@@__ _____ponderation_du_barycentre_d_interpolation_X        \
                                                     ,DIVI(SOUS(F__cDENORMALISE_OX(Xf_effective),FLOT(X))                               \
                                                          ,FLOT(pasX_effectif)                                                          \
                                                           )                                                                            \
                                                      )                                                                                 \
                                                ,MUL2(NomFonctionCourant QD@@__ _____ponderation_du_barycentre_d_interpolation_Y        \
                                                     ,DIVI(SOUS(F__cDENORMALISE_OY(Yf_effective),FLOT(Y))                               \
                                                          ,FLOT(pasY_effectif)                                                          \
                                                           )                                                                            \
                                                      )                                                                                 \
                                                ,MUL2(NomFonctionCourant QD@@__ _____ponderation_du_barycentre_d_interpolation_Z        \
                                                     ,DIVI(SOUS(F__cDENORMALISE_OZ(Zf_effective),FLOT(Z))                               \
                                                          ,FLOT(pasZ_effectif)                                                          \
                                                           )                                                                            \
                                                      )                                                                                 \
                                                 );                                                                                     \
                                        /* Calcul des coordonnees barycentriques {u,v,w} alias                                       */ \
                                        /* {ASD1(barycentre,x),ASD1(barycentre,y),ASD1(barycentre,z)} du point {X,Y,Z} courant       */ \
                                        /* par rapport a la maille courante ; on n'oubliera pas que :                                */ \
                                        /*                                                                                           */ \
                                        /*                  [(1-u)*(1-v)*(1-w)]                                                      */ \
                                        /*                  +[u*(1-v)*(1-w)]                                                         */ \
                                        /*                  +[u*v*(1-w)]                                                             */ \
                                        /*                  +[(1-u)*v*(1-w)]                                                         */ \
                                        /*                  +[(1-u)*(1-v)*w]                                                         */ \
                                        /*                  +[u*(1-v)*w]                                                             */ \
                                        /*                  +[u*v*w]                                                                 */ \
                                        /*                  +[(1-u)*v*w] = 1.                                                        */ \
                                        /*                                                                                           */ \
                                        /* Les ponderations introduites le 20080930155146 permettent de jouer independemment sur     */ \
                                        /* les trois coordonnees : ainsi, par exemple, le triplet {1,1,0} bloquera l'interpolation   */ \
                                        /* selon 'Z'...                                                                              */ \
                                                                                                                                        \
                         CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u0v0w0,NEUT(NEUT(X)),NEUT(NEUT(Y)),NEUT(NEUT(Z)),mi,Ma);       \
                         CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u1v0w0,NEUT(TUCX(X)),NEUT(NEUT(Y)),NEUT(NEUT(Z)),mi,Ma);       \
                         CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u1v1w0,NEUT(TUCX(X)),NEUT(TUCY(Y)),NEUT(NEUT(Z)),mi,Ma);       \
                         CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u0v1w0,NEUT(NEUT(X)),NEUT(TUCY(Y)),NEUT(NEUT(Z)),mi,Ma);       \
                         CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u0v0w1,NEUT(NEUT(X)),NEUT(NEUT(Y)),NEUT(TUCZ(Z)),mi,Ma);       \
                         CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u1v0w1,NEUT(TUCX(X)),NEUT(NEUT(Y)),NEUT(TUCZ(Z)),mi,Ma);       \
                         CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u1v1w1,NEUT(TUCX(X)),NEUT(TUCY(Y)),NEUT(TUCZ(Z)),mi,Ma);       \
                         CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u0v1w1,NEUT(NEUT(X)),NEUT(TUCY(Y)),NEUT(TUCZ(Z)),mi,Ma);       \
                                                                                                                                        \
                         Test(IL_FAUT(NomFonctionCourant QD@@__ _____utiliser_l_interpolation_bilineaire))                              \
                                        /* L'interpolation bilineaire a finalement ete introduite le 20050621112633...               */ \
                              Bblock                                                                                                    \
                              EGAL(fonction___au_point_uUv0w0                                                                           \
                                  ,INTERPOLATION_LINEAIRE(fonction___au_point_u0v0w0                                                    \
                                                         ,fonction___au_point_u1v0w0                                                    \
                                                         ,ASD1(barycentre,x)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                              EGAL(fonction___au_point_uUv1w0                                                                           \
                                  ,INTERPOLATION_LINEAIRE(fonction___au_point_u0v1w0                                                    \
                                                         ,fonction___au_point_u1v1w0                                                    \
                                                         ,ASD1(barycentre,x)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                              EGAL(fonction___au_point_uUv0w1                                                                           \
                                  ,INTERPOLATION_LINEAIRE(fonction___au_point_u0v0w1                                                    \
                                                         ,fonction___au_point_u1v0w1                                                    \
                                                         ,ASD1(barycentre,x)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                              EGAL(fonction___au_point_uUv1w1                                                                           \
                                  ,INTERPOLATION_LINEAIRE(fonction___au_point_u0v1w1                                                    \
                                                         ,fonction___au_point_u1v1w1                                                    \
                                                         ,ASD1(barycentre,x)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                                        /* Calcul de la valeur de la fonction sur des aretes horizontales du cube de base...         */ \
                              EGAL(fonction___au_point_uUvVw0                                                                           \
                                  ,INTERPOLATION_LINEAIRE(fonction___au_point_uUv0w0                                                    \
                                                         ,fonction___au_point_uUv1w0                                                    \
                                                         ,ASD1(barycentre,y)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                              EGAL(fonction___au_point_uUvVw1                                                                           \
                                  ,INTERPOLATION_LINEAIRE(fonction___au_point_uUv0w1                                                    \
                                                         ,fonction___au_point_uUv1w1                                                    \
                                                         ,ASD1(barycentre,y)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                                        /* Calcul de la valeur de la fonction sur des segments verticaux du cube de base...          */ \
                              EGAL(fonction___au_point_uUvVwW                                                                           \
                                  ,INTERPOLATION_LINEAIRE(fonction___au_point_uUvVw0                                                    \
                                                         ,fonction___au_point_uUvVw1                                                    \
                                                         ,ASD1(barycentre,z)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              DEFV(Float,INIT(fonction___au_point_u9v0w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=-1,v=0,w=0),                                            */ \
                              DEFV(Float,INIT(fonction___au_point_u2v0w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=+2,v=0,w=0),                                            */ \
                              DEFV(Float,INIT(fonction___au_point_u9v1w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=-1,v=+1,w=0),                                           */ \
                              DEFV(Float,INIT(fonction___au_point_u2v1w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=+2,v=+1,w=0),                                           */ \
                              DEFV(Float,INIT(fonction___au_point_u9v0w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=-1,v=0,w=+1),                                           */ \
                              DEFV(Float,INIT(fonction___au_point_u2v0w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=+2,v=0,w=+1),                                           */ \
                              DEFV(Float,INIT(fonction___au_point_u9v1w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=-1,v=+1,w=+1),                                          */ \
                              DEFV(Float,INIT(fonction___au_point_u2v1w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=+2,v=+1,w=+1).                                          */ \
                              DEFV(Float,INIT(fonction___au_point_u0v9w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=0,v=-1,w=0),                                            */ \
                              DEFV(Float,INIT(fonction___au_point_u1v9w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=+1,v=-1,w=0),                                           */ \
                              DEFV(Float,INIT(fonction___au_point_u0v2w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=0,v=+2,w=0),                                            */ \
                              DEFV(Float,INIT(fonction___au_point_u1v2w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=+1,v=+2,w=0),                                           */ \
                              DEFV(Float,INIT(fonction___au_point_u0v9w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=0,v=-1,w=+1),                                           */ \
                              DEFV(Float,INIT(fonction___au_point_u1v9w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=+1,v=-1,w=+1),                                          */ \
                              DEFV(Float,INIT(fonction___au_point_u0v2w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=0,v=+2,w=+1),                                           */ \
                              DEFV(Float,INIT(fonction___au_point_u1v2w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=+1,v=+2,w=+1).                                          */ \
                              DEFV(Float,INIT(fonction___au_point_u0v0w9,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=0,v=0,w=-1),                                            */ \
                              DEFV(Float,INIT(fonction___au_point_u1v0w9,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=+1,v=0,w=-1),                                           */ \
                              DEFV(Float,INIT(fonction___au_point_u0v1w9,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=0,v=+1,w=-1),                                           */ \
                              DEFV(Float,INIT(fonction___au_point_u1v1w9,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=+1,v=+1,w=-1),                                          */ \
                              DEFV(Float,INIT(fonction___au_point_u0v0w2,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=0,v=0,w=+2),                                            */ \
                              DEFV(Float,INIT(fonction___au_point_u1v0w2,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=+1,v=0,w=+2),                                           */ \
                              DEFV(Float,INIT(fonction___au_point_u0v1w2,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=0,v=+1,w=+2),                                           */ \
                              DEFV(Float,INIT(fonction___au_point_u1v1w2,FLOT__UNDEF));                                                 \
                                        /* Valeur de la fonction au point (u=+1,v=+1,w=+2).                                          */ \
                                                                                                                                        \
                              DEFV(Float,INIT(derivee_Du_au_point_u0v0w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'u' de la fonction au point (u=0,v=0,w=0),              */ \
                              DEFV(Float,INIT(derivee_Du_au_point_u1v0w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'u' de la fonction au point (u=+1,v=0,w=0),             */ \
                              DEFV(Float,INIT(derivee_Du_au_point_u0v1w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'u' de la fonction au point (u=0,v=+1,w=0),             */ \
                              DEFV(Float,INIT(derivee_Du_au_point_u1v1w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'u' de la fonction au point (u=+1,v=+1,w=0),            */ \
                              DEFV(Float,INIT(derivee_Du_au_point_u0v0w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'u' de la fonction au point (u=0,v=0,w=+1),             */ \
                              DEFV(Float,INIT(derivee_Du_au_point_u1v0w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'u' de la fonction au point (u=+1,v=0,w=+1),            */ \
                              DEFV(Float,INIT(derivee_Du_au_point_u0v1w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'u' de la fonction au point (u=0,v=+1,w=+1),            */ \
                              DEFV(Float,INIT(derivee_Du_au_point_u1v1w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'u' de la fonction au point (u=+1,v=+1,w=+1).           */ \
                                                                                                                                        \
                              DEFV(Float,INIT(derivee_Dv_au_point_u0v0w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point (u=0,v=0,w=0),              */ \
                              DEFV(Float,INIT(derivee_Dv_au_point_u1v0w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point (u=+1,v=0,w=0),             */ \
                              DEFV(Float,INIT(derivee_Dv_au_point_u0v1w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point (u=0,v=+1,w=0),             */ \
                              DEFV(Float,INIT(derivee_Dv_au_point_u1v1w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point (u=+1,v=+1,w=0),            */ \
                              DEFV(Float,INIT(derivee_Dv_au_point_u0v0w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point (u=0,v=0,w=+1),             */ \
                              DEFV(Float,INIT(derivee_Dv_au_point_u1v0w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point (u=+1,v=0,w=+1),            */ \
                              DEFV(Float,INIT(derivee_Dv_au_point_u0v1w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point (u=0,v=+1,w=+1),            */ \
                              DEFV(Float,INIT(derivee_Dv_au_point_u1v1w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point (u=+1,v=+1,w=+1).           */ \
                              DEFV(Float,INIT(derivee_Dv_au_point_uUv0w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point (u=U,v=0,w=0),              */ \
                              DEFV(Float,INIT(derivee_Dv_au_point_uUv1w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point (u=U,v=+1,w=0),             */ \
                              DEFV(Float,INIT(derivee_Dv_au_point_uUv0w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point (u=U,v=0,w=+1),             */ \
                              DEFV(Float,INIT(derivee_Dv_au_point_uUv1w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'v' de la fonction au point (u=U,v=+1,w=+1).            */ \
                                                                                                                                        \
                              DEFV(Float,INIT(derivee_Dw_au_point_u0v0w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'w' de la fonction au point (u=0,v=0,w=0),              */ \
                              DEFV(Float,INIT(derivee_Dw_au_point_u1v0w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'w' de la fonction au point (u=+1,v=0,w=0),             */ \
                              DEFV(Float,INIT(derivee_Dw_au_point_u0v1w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'w' de la fonction au point (u=0,v=+1,w=0),             */ \
                              DEFV(Float,INIT(derivee_Dw_au_point_u1v1w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'w' de la fonction au point (u=+1,v=+1,w=0),            */ \
                              DEFV(Float,INIT(derivee_Dw_au_point_u0v0w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'w' de la fonction au point (u=0,v=0,w=+1),             */ \
                              DEFV(Float,INIT(derivee_Dw_au_point_u1v0w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'w' de la fonction au point (u=+1,v=0,w=+1),            */ \
                              DEFV(Float,INIT(derivee_Dw_au_point_u0v1w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'w' de la fonction au point (u=0,v=+1,w=+1),            */ \
                              DEFV(Float,INIT(derivee_Dw_au_point_u1v1w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'w' de la fonction au point (u=+1,v=+1,w=+1).           */ \
                              DEFV(Float,INIT(derivee_Dw_au_point_uUv0w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'w' de la fonction au point (u=U,v=0,w=0),              */ \
                              DEFV(Float,INIT(derivee_Dw_au_point_uUv1w0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'w' de la fonction au point (u=U,v=+1,w=0),             */ \
                              DEFV(Float,INIT(derivee_Dw_au_point_uUv0w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'w' de la fonction au point (u=U,v=0,w=+1),             */ \
                              DEFV(Float,INIT(derivee_Dw_au_point_uUv1w1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'w' de la fonction au point (u=U,v=+1,w=+1).            */ \
                              DEFV(Float,INIT(derivee_Dw_au_point_uUvVw0,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'w' de la fonction au point (u=U,v=V,w=0),              */ \
                              DEFV(Float,INIT(derivee_Dw_au_point_uUvVw1,FLOT__UNDEF));                                                 \
                                        /* Valeur de la derivee partielle en 'w' de la fonction au point (u=U,v=V,w=+1).             */ \
                                                                                                                                        \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u0v0w9,NEUT(NEUT(X)),NEUT(NEUT(Y)),NEUT(QREZ(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u1v0w9,NEUT(TUCX(X)),NEUT(NEUT(Y)),NEUT(QREZ(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u1v1w9,NEUT(TUCX(X)),NEUT(TUCY(Y)),NEUT(QREZ(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u0v1w9,NEUT(NEUT(X)),NEUT(TUCY(Y)),NEUT(QREZ(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u9v0w0,NEUT(QREX(X)),NEUT(NEUT(Y)),NEUT(NEUT(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u0v9w0,NEUT(NEUT(X)),NEUT(QREY(Y)),NEUT(NEUT(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u1v9w0,NEUT(TUCX(X)),NEUT(QREY(Y)),NEUT(NEUT(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u2v0w0,TUCX(TUCX(X)),NEUT(NEUT(Y)),NEUT(NEUT(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u2v1w0,TUCX(TUCX(X)),NEUT(TUCY(Y)),NEUT(NEUT(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u1v2w0,NEUT(TUCX(X)),TUCY(TUCY(Y)),NEUT(NEUT(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u0v2w0,NEUT(NEUT(X)),TUCY(TUCY(Y)),NEUT(NEUT(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u9v1w0,NEUT(QREX(X)),NEUT(TUCY(Y)),NEUT(NEUT(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u9v0w1,NEUT(QREX(X)),NEUT(NEUT(Y)),NEUT(TUCZ(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u0v9w1,NEUT(NEUT(X)),NEUT(QREY(Y)),NEUT(TUCZ(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u1v9w1,NEUT(TUCX(X)),NEUT(QREY(Y)),NEUT(TUCZ(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u2v0w1,TUCX(TUCX(X)),NEUT(NEUT(Y)),NEUT(TUCZ(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u2v1w1,TUCX(TUCX(X)),NEUT(TUCY(Y)),NEUT(TUCZ(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u1v2w1,NEUT(TUCX(X)),TUCY(TUCY(Y)),NEUT(TUCZ(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u0v2w1,NEUT(NEUT(X)),TUCY(TUCY(Y)),NEUT(TUCZ(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u9v1w1,NEUT(QREX(X)),NEUT(TUCY(Y)),NEUT(TUCZ(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u0v0w2,NEUT(NEUT(X)),NEUT(NEUT(Y)),TUCZ(TUCZ(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u1v0w2,NEUT(TUCX(X)),NEUT(NEUT(Y)),TUCZ(TUCZ(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u1v1w2,NEUT(TUCX(X)),NEUT(TUCY(Y)),TUCZ(TUCZ(Z)),mi,Ma);  \
                              CALCUL_POINT_ENTIER_COURANT(fonction___au_point_u0v1w2,NEUT(NEUT(X)),NEUT(TUCY(Y)),TUCZ(TUCZ(Z)),mi,Ma);  \
                                        /* Calcul des valeurs de la fonction aux points entiers voisins du point flottant...         */ \
                                        /* finies...                                                                                 */ \
                                                                                                                                        \
                              DERIVATION_NUMERIQUE(derivee_Du_au_point_u0v0w0                                                           \
                                                  ,fonction___au_point_u9v0w0                                                           \
                                                  ,fonction___au_point_u1v0w0                                                           \
                                                  ,pasX_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Du_au_point_u1v0w0                                                           \
                                                  ,fonction___au_point_u0v0w0                                                           \
                                                  ,fonction___au_point_u2v0w0                                                           \
                                                  ,pasX_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Du_au_point_u1v1w0                                                           \
                                                  ,fonction___au_point_u0v1w0                                                           \
                                                  ,fonction___au_point_u2v1w0                                                           \
                                                  ,pasX_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Du_au_point_u0v1w0                                                           \
                                                  ,fonction___au_point_u9v1w0                                                           \
                                                  ,fonction___au_point_u1v1w0                                                           \
                                                  ,pasX_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Du_au_point_u0v0w1                                                           \
                                                  ,fonction___au_point_u9v0w1                                                           \
                                                  ,fonction___au_point_u1v0w1                                                           \
                                                  ,pasX_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Du_au_point_u1v0w1                                                           \
                                                  ,fonction___au_point_u0v0w1                                                           \
                                                  ,fonction___au_point_u2v0w1                                                           \
                                                  ,pasX_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Du_au_point_u1v1w1                                                           \
                                                  ,fonction___au_point_u0v1w1                                                           \
                                                  ,fonction___au_point_u2v1w1                                                           \
                                                  ,pasX_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Du_au_point_u0v1w1                                                           \
                                                  ,fonction___au_point_u9v1w1                                                           \
                                                  ,fonction___au_point_u1v1w1                                                           \
                                                  ,pasX_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dv_au_point_u0v0w0                                                           \
                                                  ,fonction___au_point_u0v9w0                                                           \
                                                  ,fonction___au_point_u0v1w0                                                           \
                                                  ,pasY_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dv_au_point_u1v0w0                                                           \
                                                  ,fonction___au_point_u1v9w0                                                           \
                                                  ,fonction___au_point_u1v1w0                                                           \
                                                  ,pasY_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dv_au_point_u1v1w0                                                           \
                                                  ,fonction___au_point_u1v0w0                                                           \
                                                  ,fonction___au_point_u1v2w0                                                           \
                                                  ,pasY_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dv_au_point_u0v1w0                                                           \
                                                  ,fonction___au_point_u0v0w0                                                           \
                                                  ,fonction___au_point_u0v2w0                                                           \
                                                  ,pasY_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dv_au_point_u0v0w1                                                           \
                                                  ,fonction___au_point_u0v9w1                                                           \
                                                  ,fonction___au_point_u0v1w1                                                           \
                                                  ,pasY_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dv_au_point_u1v0w1                                                           \
                                                  ,fonction___au_point_u1v9w1                                                           \
                                                  ,fonction___au_point_u1v1w1                                                           \
                                                  ,pasY_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dv_au_point_u1v1w1                                                           \
                                                  ,fonction___au_point_u1v0w1                                                           \
                                                  ,fonction___au_point_u1v2w1                                                           \
                                                  ,pasY_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dv_au_point_u0v1w1                                                           \
                                                  ,fonction___au_point_u0v0w1                                                           \
                                                  ,fonction___au_point_u0v2w1                                                           \
                                                  ,pasY_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dw_au_point_u0v0w0                                                           \
                                                  ,fonction___au_point_u0v0w9                                                           \
                                                  ,fonction___au_point_u0v0w1                                                           \
                                                  ,pasZ_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dw_au_point_u1v0w0                                                           \
                                                  ,fonction___au_point_u1v0w9                                                           \
                                                  ,fonction___au_point_u1v0w1                                                           \
                                                  ,pasZ_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dw_au_point_u1v1w0                                                           \
                                                  ,fonction___au_point_u1v1w9                                                           \
                                                  ,fonction___au_point_u1v1w1                                                           \
                                                  ,pasZ_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dw_au_point_u0v1w0                                                           \
                                                  ,fonction___au_point_u0v1w9                                                           \
                                                  ,fonction___au_point_u0v1w1                                                           \
                                                  ,pasZ_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dw_au_point_u0v0w1                                                           \
                                                  ,fonction___au_point_u0v0w0                                                           \
                                                  ,fonction___au_point_u0v0w2                                                           \
                                                  ,pasZ_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dw_au_point_u1v0w1                                                           \
                                                  ,fonction___au_point_u1v0w0                                                           \
                                                  ,fonction___au_point_u1v0w2                                                           \
                                                  ,pasZ_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dw_au_point_u1v1w1                                                           \
                                                  ,fonction___au_point_u1v1w0                                                           \
                                                  ,fonction___au_point_u1v1w2                                                           \
                                                  ,pasZ_effectif                                                                        \
                                                   );                                                                                   \
                              DERIVATION_NUMERIQUE(derivee_Dw_au_point_u0v1w1                                                           \
                                                  ,fonction___au_point_u0v1w0                                                           \
                                                  ,fonction___au_point_u0v1w2                                                           \
                                                  ,pasZ_effectif                                                                        \
                                                   );                                                                                   \
                                        /* Calcul des derivees partielles en 'u', 'v' et 'w' aux points du cube de base par des      */ \
                                        /* differences finies a l'aide des differentes valeurs aux points du maillage...             */ \
                                                                                                                                        \
                              EGAL(derivee_Dv_au_point_uUv0w0                                                                           \
                                  ,INTERPOLATION_LINEAIRE(derivee_Dv_au_point_u0v0w0                                                    \
                                                         ,derivee_Dv_au_point_u1v0w0                                                    \
                                                         ,ASD1(barycentre,x)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                              EGAL(derivee_Dv_au_point_uUv1w0                                                                           \
                                  ,INTERPOLATION_LINEAIRE(derivee_Dv_au_point_u0v1w0                                                    \
                                                         ,derivee_Dv_au_point_u1v1w0                                                    \
                                                         ,ASD1(barycentre,x)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                              EGAL(derivee_Dv_au_point_uUv0w1                                                                           \
                                  ,INTERPOLATION_LINEAIRE(derivee_Dv_au_point_u0v0w1                                                    \
                                                         ,derivee_Dv_au_point_u1v0w1                                                    \
                                                         ,ASD1(barycentre,x)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                              EGAL(derivee_Dv_au_point_uUv1w1                                                                           \
                                  ,INTERPOLATION_LINEAIRE(derivee_Dv_au_point_u0v1w1                                                    \
                                                         ,derivee_Dv_au_point_u1v1w1                                                    \
                                                         ,ASD1(barycentre,x)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                              EGAL(derivee_Dw_au_point_uUv0w0                                                                           \
                                  ,INTERPOLATION_LINEAIRE(derivee_Dw_au_point_u0v0w0                                                    \
                                                         ,derivee_Dw_au_point_u1v0w0                                                    \
                                                         ,ASD1(barycentre,x)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                              EGAL(derivee_Dw_au_point_uUv1w0                                                                           \
                                  ,INTERPOLATION_LINEAIRE(derivee_Dw_au_point_u0v1w0                                                    \
                                                         ,derivee_Dw_au_point_u1v1w0                                                    \
                                                         ,ASD1(barycentre,x)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                              EGAL(derivee_Dw_au_point_uUv0w1                                                                           \
                                  ,INTERPOLATION_LINEAIRE(derivee_Dw_au_point_u0v0w1                                                    \
                                                         ,derivee_Dw_au_point_u1v0w1                                                    \
                                                         ,ASD1(barycentre,x)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                              EGAL(derivee_Dw_au_point_uUv1w1                                                                           \
                                  ,INTERPOLATION_LINEAIRE(derivee_Dw_au_point_u0v1w1                                                    \
                                                         ,derivee_Dw_au_point_u1v1w1                                                    \
                                                         ,ASD1(barycentre,x)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                                        /* Calcul des derivees partielles en 'u', 'v' et 'w' sur des aretes horizontales du cube 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(derivee_Dw_au_point_uUvVw0                                                                           \
                                  ,INTERPOLATION_LINEAIRE(derivee_Dw_au_point_uUv0w0                                                    \
                                                         ,derivee_Dw_au_point_uUv1w0                                                    \
                                                         ,ASD1(barycentre,y)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                              EGAL(derivee_Dw_au_point_uUvVw1                                                                           \
                                  ,INTERPOLATION_LINEAIRE(derivee_Dw_au_point_uUv0w1                                                    \
                                                         ,derivee_Dw_au_point_uUv1w1                                                    \
                                                         ,ASD1(barycentre,y)                                                            \
                                                          )                                                                             \
                                   );                                                                                                   \
                                        /* Calcul des derivees partielles en 'u', 'v' et 'w' sur des segments verticaux du cube 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_uUv0w0                                                                           \
                                  ,INTERPOLATION_CUBIQUE(fonction___au_point_u0v0w0                                                     \
                                                        ,derivee_Du_au_point_u0v0w0                                                     \
                                                        ,fonction___au_point_u1v0w0                                                     \
                                                        ,derivee_Du_au_point_u1v0w0                                                     \
                                                        ,ASD1(barycentre,x)                                                             \
                                                         )                                                                              \
                                   );                                                                                                   \
                              EGAL(fonction___au_point_uUv1w0                                                                           \
                                  ,INTERPOLATION_CUBIQUE(fonction___au_point_u0v1w0                                                     \
                                                        ,derivee_Du_au_point_u0v1w0                                                     \
                                                        ,fonction___au_point_u1v1w0                                                     \
                                                        ,derivee_Du_au_point_u1v1w0                                                     \
                                                        ,ASD1(barycentre,x)                                                             \
                                                         )                                                                              \
                                   );                                                                                                   \
                              EGAL(fonction___au_point_uUv0w1                                                                           \
                                  ,INTERPOLATION_CUBIQUE(fonction___au_point_u0v0w1                                                     \
                                                        ,derivee_Du_au_point_u0v0w1                                                     \
                                                        ,fonction___au_point_u1v0w1                                                     \
                                                        ,derivee_Du_au_point_u1v0w1                                                     \
                                                        ,ASD1(barycentre,x)                                                             \
                                                         )                                                                              \
                                   );                                                                                                   \
                              EGAL(fonction___au_point_uUv1w1                                                                           \
                                  ,INTERPOLATION_CUBIQUE(fonction___au_point_u0v1w1                                                     \
                                                        ,derivee_Du_au_point_u0v1w1                                                     \
                                                        ,fonction___au_point_u1v1w1                                                     \
                                                        ,derivee_Du_au_point_u1v1w1                                                     \
                                                        ,ASD1(barycentre,x)                                                             \
                                                         )                                                                              \
                                   );                                                                                                   \
                                        /* Calcul de la valeur de la fonction sur des aretes horizontales du cube de base...         */ \
                                                                                                                                        \
                              EGAL(fonction___au_point_uUvVw0                                                                           \
                                  ,INTERPOLATION_CUBIQUE(fonction___au_point_uUv0w0                                                     \
                                                        ,derivee_Dv_au_point_uUv0w0                                                     \
                                                        ,fonction___au_point_uUv1w0                                                     \
                                                        ,derivee_Dv_au_point_uUv1w0                                                     \
                                                        ,ASD1(barycentre,y)                                                             \
                                                         )                                                                              \
                                   );                                                                                                   \
                              EGAL(fonction___au_point_uUvVw1                                                                           \
                                  ,INTERPOLATION_CUBIQUE(fonction___au_point_uUv0w1                                                     \
                                                        ,derivee_Dv_au_point_uUv0w1                                                     \
                                                        ,fonction___au_point_uUv1w1                                                     \
                                                        ,derivee_Dv_au_point_uUv1w1                                                     \
                                                        ,ASD1(barycentre,y)                                                             \
                                                         )                                                                              \
                                   );                                                                                                   \
                                        /* Calcul de la valeur de la fonction sur des segments verticaux du cube de base...          */ \
                                                                                                                                        \
                              EGAL(fonction___au_point_uUvVwW                                                                           \
                                  ,INTERPOLATION_CUBIQUE(fonction___au_point_uUvVw0                                                     \
                                                        ,derivee_Dw_au_point_uUvVw0                                                     \
                                                        ,fonction___au_point_uUvVw1                                                     \
                                                        ,derivee_Dw_au_point_uUvVw1                                                     \
                                                        ,ASD1(barycentre,z)                                                             \
                                                         )                                                                              \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         CALCUL_POINT_ENTIER_COURANT(fonction___au_point_uUvVwW,NEUT(NEUT(X)),NEUT(NEUT(Y)),NEUT(NEUT(Z)),mi,Ma);       \
                                        /* La possibilite de ne pas interpoler a ete introduite le 20080930141651...                 */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    EGAL(niveau_du_point_de_coordonnees_01,fonction___au_point_uUvVwW);                                                 \
                                        /* Et enfin, niveau cherche...                                                               */ \
                    Eblock                                                                                                              \
                                        /* Procedure introduite le 20091202184549 dans le but de generer plusieurs fonctions         */ \
                                        /* realisant cette operation, mais avec des types d'albums differents...                     */

#define   GENERATION_DE_L_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01                                                                      \
                    GENERATION_DE_L_ACCELERATEUR_DE_FONCTIONS_A_N_ARGUMENTS                                                             \
                        (S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01                                                                     \
                                        /* On notera que l'on utilise le nom 'S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01' pour       */ \
                                        /* les donnees de l'accelerateur et non pas 'ACCELERATEUR__ALOAD_POINT_COORDONNEES_01'       */ \
                                        /* car, en effet, ce dernier nom est aussi celui de la procedure d'acceleration et donc      */ \
                                        /* si ce nom etait utilise, il y aurait substitution par la definition de l'accelerateur     */ \
                                        /* a suivre...                                                                               */ \
                        ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                                     \
                        ,DEFV(Local,DEFV(Float,DdTb1(POINTERf                                                                           \
                                                    ,S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_1                          \
                                                    ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                         \
                                                    ,ADRESSE_NON_ENCORE_DEFINIE                                                         \
                                                     )                                                                                  \
                                         )                                                                                              \
                              );                                                                                                        \
                         DEFV(Local,DEFV(Float,DdTb1(POINTERf                                                                           \
                                                    ,S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_2                          \
                                                    ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                         \
                                                    ,ADRESSE_NON_ENCORE_DEFINIE                                                         \
                                                     )                                                                                  \
                                         )                                                                                              \
                              );                                                                                                        \
                         DEFV(Local,DEFV(Float,DdTb1(POINTERf                                                                           \
                                                    ,S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_3                          \
                                                    ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                         \
                                                    ,ADRESSE_NON_ENCORE_DEFINIE                                                         \
                                                     )                                                                                  \
                                         )                                                                                              \
                              );                                                                                                        \
                                        /* Donne les trois arguments de l'entree courante (si elle est valide...).                   */ \
                         )                                                                                                              \
                                        /* Donnees de l'accelerateur a trois arguments...                                            */

#define   ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                                                    \
                    TRON(DIVI(dimXYZ,GRO2(CENT)),CENT,CENT_MILLE)
#define   ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__PREMIERE_ENTREE                                                                     \
                    ACCELERATEUR_DE_FONCTIONS_A_N_ARGUMENTS__PREMIERE_ENTREE
#define   ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__DERNIERE_ENTREE                                                                     \
                    LSTX(ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__PREMIERE_ENTREE                                                      \
                        ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                                     \
                         )
#define   ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__PONDERATEUR                                                                         \
                    ACCELERATEUR_DE_FONCTIONS_A_N_ARGUMENTS__PONDERATEUR
                                        /* Parametres fondamentaux.                                                                  */ \
                                        /*                                                                                           */ \
                                        /* Le 20120314091930, je fais des chronometrages concernant 'HORNER_1_02(...)' pour etudier  */ \
                                        /* l'influence de la valeur de 'ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__PONDERATEUR' (dit  */ \
                                        /* "PONDERATEUR". Ces chronometrages sont fait avec 'time' sur une seule occurence de        */ \
                                        /* '$xci/accumule.42$X' dans le calcul de l'image 'v $xiirk/JWIG.32.2'. On notera (et c'est  */ \
                                        /* l'objet de ce test) qu'une valeur unite pour 'PONDERATEUR' remplace donc le calcul d'un   */ \
                                        /* polynome par une simple somme :                                                           */ \
                                        /*                                                                                           */ \
                                        /*        AccelerateurALoadPoint=FAUX                       34.330u 0.110s 0:34.68 99.3%     */ \
                                        /*                                                                                           */ \
                                        /*        AccelerateurALoadPoint=VRAI   PONDERATEUR=7       19.830u 0.070s 0:20.11 98.9%     */ \
                                        /*        AccelerateurALoadPoint=VRAI   PONDERATEUR=1       19.070u 0.050s 0:19.52 97.9%     */ \
                                        /*                                                                                           */ \
                                        /* Il semble donc que de remplacer le polynome par la simple somme soit rentable : c'est     */ \
                                        /* donc ce qui est fait a cette date...                                                      */

#define   ACCELERATEUR__ALOAD_POINT_COORDONNEES_01(valeur_fonction,calcul_fonction,Argument_1,Argument_2,Argument_3,fonction,objet)     \
                                        /* Procedure introduite le 20120310094505...                                                 */ \
                                        /*                                                                                           */ \
                                        /* L'argument 'fonction' a ete introduit le 20120316160116.                                  */ \
                    Bblock                                                                                                              \
                    ACCELERATEUR_DE_FONCTIONS_A_N_ARGUMENTS                                                                             \
                        (S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01                                                                     \
                        ,S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____utiliser_l_accelerateur                                         \
                        ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                                     \
                        ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__PREMIERE_ENTREE                                                      \
                        ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__DERNIERE_ENTREE                                                      \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              MdTb1(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_1                                           \
                                   ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                          \
                                   ,Float,ADRESSE_NON_ENCORE_DEFINIE                                                                    \
                                    );                                                                                                  \
                              MdTb1(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_2                                           \
                                   ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                          \
                                   ,Float,ADRESSE_NON_ENCORE_DEFINIE                                                                    \
                                    );                                                                                                  \
                              MdTb1(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_3                                           \
                                   ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                          \
                                   ,Float,ADRESSE_NON_ENCORE_DEFINIE                                                                    \
                                    );                                                                                                  \
                                        /* Allocation de la memoire des listes d'Arguments.                                          */ \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              EGAL(IdTb1(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_1                                      \
                                        ,INDX(index_d_initialisation,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__PREMIERE_ENTREE)         \
                                        ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                     \
                                         )                                                                                              \
                                  ,FLOT__UNDEF                                                                                          \
                                   );                                                                                                   \
                              EGAL(IdTb1(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_2                                      \
                                        ,INDX(index_d_initialisation,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__PREMIERE_ENTREE)         \
                                        ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                     \
                                         )                                                                                              \
                                  ,FLOT__UNDEF                                                                                          \
                                   );                                                                                                   \
                              EGAL(IdTb1(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_3                                      \
                                        ,INDX(index_d_initialisation,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__PREMIERE_ENTREE)         \
                                        ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                     \
                                         )                                                                                              \
                                  ,FLOT__UNDEF                                                                                          \
                                   );                                                                                                   \
                                        /* Initialisation des listes d'Arguments.                                                    */ \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,HORNER_1_02(ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__PONDERATEUR                                              \
                                    ,Argument_1                                                                                         \
                                    ,Argument_2                                                                                         \
                                    ,Argument_3                                                                                         \
                                     )                                                                                                  \
                                        /* Calcul d'une fonction des trois arguments :                                               */ \
                                        /*                                                                                           */ \
                                        /*                             2              1              0                               */ \
                                        /*                  Argument1.P  + Argument2.P  + Argument3.P                                */ \
                                        /*                                                                                           */ \
                                        /* ou 'P' represente le 'PONDERATEUR' (arbitraire...).                                       */ \
                                        /*                                                                                           */ \
                                        /* Cette methode repose sur le programme 'v $xtc/HashCode.01$c'...                           */ \
                        ,I3ET(IFEQ(IdTb1(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_1                                      \
                                        ,index_d_acceleration                                                                           \
                                        ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                     \
                                         )                                                                                              \
                                  ,Argument_1                                                                                           \
                                   )                                                                                                    \
                             ,IFEQ(IdTb1(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_2                                      \
                                        ,index_d_acceleration                                                                           \
                                        ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                     \
                                         )                                                                                              \
                                  ,Argument_2                                                                                           \
                                   )                                                                                                    \
                             ,IFEQ(IdTb1(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_3                                      \
                                        ,index_d_acceleration                                                                           \
                                        ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                     \
                                         )                                                                                              \
                                  ,Argument_3                                                                                           \
                                   )                                                                                                    \
                              )                                                                                                         \
                                        /* Est-ce la liste {Argument_1,Argument_2,Argument_3} memorisee ?                            */ \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              EGAL(IdTb1(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_1                                      \
                                        ,index_d_acceleration                                                                           \
                                        ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                     \
                                         )                                                                                              \
                                  ,Argument_1                                                                                           \
                                   );                                                                                                   \
                              EGAL(IdTb1(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_2                                      \
                                        ,index_d_acceleration                                                                           \
                                        ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                     \
                                         )                                                                                              \
                                  ,Argument_2                                                                                           \
                                   );                                                                                                   \
                              EGAL(IdTb1(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_3                                      \
                                        ,index_d_acceleration                                                                           \
                                        ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                     \
                                         )                                                                                              \
                                  ,Argument_3                                                                                           \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              FdTb1(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_3                                           \
                                   ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                          \
                                   ,Float,ADRESSE_NON_ENCORE_DEFINIE                                                                    \
                                    );                                                                                                  \
                              FdTb1(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_2                                           \
                                   ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                          \
                                   ,Float,ADRESSE_NON_ENCORE_DEFINIE                                                                    \
                                    );                                                                                                  \
                              FdTb1(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____Argument_1                                           \
                                   ,ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES                                          \
                                   ,Float,ADRESSE_NON_ENCORE_DEFINIE                                                                    \
                                    );                                                                                                  \
                                        /* Desallocation de la memoire des listes d'Arguments (introduite le 20120311092945).        */ \
                                        /*                                                                                           */ \
                                        /* On notera qu'a priori on n'utilisera jamais cette sequence puisqu'en effet, on ne sait    */ \
                                        /* jamais que c'est la derniere fois. C'est introduit malgre tout par "symetrie"...          */ \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,valeur_fonction                                                                                                \
                        ,BLOC(calcul_fonction)                                                                                          \
                        ,fonction                                                                                                       \
                        ,objet                                                                                                          \
                         )                                                                                                              \
                    Eblock

DEFV(Common,DEFV(Logical,PINT(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____utiliser_l_accelerateur,VRAI)));
                                        /* Indique si l'accelerateur doit etre utilise ou pas (mis ici le 20120310142305 depuis      */
                                        /* 'v $xig/fonct$vv$DEF 20120310142011'...                                                   */
DEFV(Common,DEFV(Logical,PINT(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____fermer_l_accelerateur,FAUX)));
                                        /* Indique si l'accelerateur doit etre ferme (introduit le 20120311092945)...                */
                                        /*                                                                                           */
                                        /* Ainsi, pour fermer l'accelerateur, il suffirait de faire :                                */
                                        /*                                                                                           */
                                        /*        EGAL(S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____fermer_l_accelerateur,VRAI);   */
                                        /*                                                                                           */
                                        /* puis d'appeler (une derniere fois...) :                                                   */
                                        /*                                                                                           */
                                        /*        FAload_point_coordonnees_01(...)                                                   */
                                        /*                                                                                           */
                                        /* ou encore :                                                                               */
                                        /*                                                                                           */
                                        /*        FFAload_point_coordonnees_01(...)                                                  */
                                        /*                                                                                           */
                                        /* (qui utilisent 'ALOAD_POINT_COORDONNEES_01(...)') avec des parametres dont la valeur      */
                                        /* a peu d'importance (a condition evidemment qu'ils soient licites...). Mais cela ne serait */
                                        /* pas tres "elegant" car, en effet, cela obligerait a mettre la sequence qui precede dans   */
                                        /* dans le code de tous les appelants des fonctions 'FAload_point_coordonnees_01(...)'       */
                                        /* et 'FFAload_point_coordonnees_01(...)', ce qui rendrait "visible" de l'exterieur          */
                                        /* l'accelerateur, alors que l'idee est qu'il soit justement "invisible". Or enfin et de     */
                                        /* nouveau, on ne peut rendre cette "fermeture" automatique car, en effet, il n'y a aucune   */
                                        /* facon, en toute generalite, de connaitre le dernier appel a ces fonctions...              */
GENERATION_DE_L_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01;
                                        /* Generation des donnees utiles a l'accelerateur (mise en place le 20120310071434).         */
#define   ALOAD_POINT_COORDONNEES_01(mi,mi_initial,Ma,MA_initial)                                                                       \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(NomFonctionCourant QD@@__ _____appliquer_une_matrice_de_transformation))                               \
                         Bblock                                                                                                         \
                         EGAL(Xf_effective,TRANSFORMATION_GEOMETRIQUE_3D_Xf(Xf,Yf,Zf));                                                 \
                         EGAL(Yf_effective,TRANSFORMATION_GEOMETRIQUE_3D_Yf(Xf,Yf,Zf));                                                 \
                         EGAL(Zf_effective,TRANSFORMATION_GEOMETRIQUE_3D_Zf(Xf,Yf,Zf));                                                 \
                                        /* La possibilite de transformer {Xf,Yf,Zf} fut introduite le 20080802120636...              */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    ACCELERATEUR__ALOAD_POINT_COORDONNEES_01(niveau_du_point_de_coordonnees_01                                          \
                                                            ,BLOC(                                                                      \
                                                                  bALOAD_POINT_COORDONNEES_01(mi,mi_initial,Ma,MA_initial);             \
                                                                  )                                                                     \
                                                            ,Xf_effective                                                               \
                                                            ,Yf_effective                                                               \
                                                            ,Zf_effective                                                               \
                                                            ,NomDeLaFonctionCourante QD@@__                                             \
                                                            ,albumA                                                                     \
                                                             );                                                                         \
                                        /* Le 20120310071434, l'accelerateur fut mis en place...                                     */ \
                                        /*                                                                                           */ \
                                        /* On notera que 'v $xig/fonct$vv$DEF index_d_acceleration' a une bonne allure aleatoire,    */ \
                                        /* ce qui est bon pour du "hash-coding".                                                     */ \
                                        /*                                                                                           */ \
                                        /* Le 20120310095428, le chronometrage de '$xci/accumule.42$X', sur '$LACT19', pour le       */ \
                                        /* calcul de l'image 'v $xiirk/JWIG.32.2' donne les durees d'accumulation suivantes :        */ \
                                        /*                                                                                           */ \
                                        /*                  "AccelerateurFonctions=FAUX"          : 36 secondes                      */ \
                                        /*                  "AccelerateurFonctions=VRAI"          : 21 secondes                      */ \
                                        /*                                                                                           */ \
                                        /* ce qui fait une amelioration de l'ordre de 40%, ce qui est pas mal ! On notera que le     */ \
                                        /* chronometrage a ete fait avec :                                                           */ \
                                        /*                                                                                           */ \
                                        /*                  d                                                                        */ \
                                        /*                  execRVB   $xci/accumule.42$X  ...                                        */ \
                                        /*                  d                                                                        */ \
                                        /*                                                                                           */ \
                                        /* ce qui signifie que l'on inclue ainsi l'"overhead" de 'execRVB' soit environ deux         */ \
                                        /* secondes (sur '$LACT19').                                                                 */ \
                                        /*                                                                                           */ \
                                        /* Le 20120929165544, {Xf_effective,Yf_effective,Zf_effective} a remplace {Xf,Yf,Zf}         */ \
                                        /* suite au probleme 'v $xig/fonct$vv$DEF 20120929145125'...                                 */ \
                    Eblock                                                                                                              \
                                        /* Procedure introduite le 20120309180208 pour preparer la mise en place d'un eventuel       */ \
                                        /* accelerateur utilisant du "hash-coding"...                                                */

#define   TRANSFORMATION_GEOMETRIQUE_3D_Xf(Xf,Yf,Zf)                                                                                    \
                    gTRANSFORMATION_GEOMETRIQUE_3D_Fxyz(NomFonctionCourant QD@@__ _____matrice_de_transformation                        \
                                                       ,SOUS(Xf,NomFonctionCourant QD@@__ _____PreAntiTranslation_Xf)                   \
                                                       ,SOUS(Yf,NomFonctionCourant QD@@__ _____PreAntiTranslation_Yf)                   \
                                                       ,SOUS(Zf,NomFonctionCourant QD@@__ _____PreAntiTranslation_Zf)                   \
                                                       ,cx                                                                              \
                                                       ,NomFonctionCourant QD@@__ _____Post___Translation_Xf                            \
                                                        )
#define   TRANSFORMATION_GEOMETRIQUE_3D_Yf(Xf,Yf,Zf)                                                                                    \
                    gTRANSFORMATION_GEOMETRIQUE_3D_Fxyz(NomFonctionCourant QD@@__ _____matrice_de_transformation                        \
                                                       ,SOUS(Xf,NomFonctionCourant QD@@__ _____PreAntiTranslation_Xf)                   \
                                                       ,SOUS(Yf,NomFonctionCourant QD@@__ _____PreAntiTranslation_Yf)                   \
                                                       ,SOUS(Zf,NomFonctionCourant QD@@__ _____PreAntiTranslation_Zf)                   \
                                                       ,cy                                                                              \
                                                       ,NomFonctionCourant QD@@__ _____Post___Translation_Yf                            \
                                                        )
#define   TRANSFORMATION_GEOMETRIQUE_3D_Zf(Xf,Yf,Zf)                                                                                    \
                    gTRANSFORMATION_GEOMETRIQUE_3D_Fxyz(NomFonctionCourant QD@@__ _____matrice_de_transformation                        \
                                                       ,SOUS(Xf,NomFonctionCourant QD@@__ _____PreAntiTranslation_Xf)                   \
                                                       ,SOUS(Yf,NomFonctionCourant QD@@__ _____PreAntiTranslation_Yf)                   \
                                                       ,SOUS(Zf,NomFonctionCourant QD@@__ _____PreAntiTranslation_Zf)                   \
                                                       ,cz                                                                              \
                                                       ,NomFonctionCourant QD@@__ _____Post___Translation_Zf                            \
                                                        )

#define   DERIVATION_NUMERIQUE(derivee,fonction_origine,fonction_extremite,pas_du_maillage)                                             \
                    Bblock                                                                                                              \
                    EGAL(derivee                                                                                                        \
                        ,DERIVATION_PARTIELLE(fonction_origine                                                                          \
                                             ,fonction_extremite                                                                        \
                                             ,FLOT(DOUB(pas_du_maillage))                                                               \
                                              )                                                                                         \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Calcul de la derivee numerique d'une fonction...                                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N   A L B U M   " S T A N D A R D "                */
/*        A V E C   C O O R D O N N E E S   F L O T T A N T E S  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

#define   CALCUL_POINT_ENTIER_COURANT(fonction,x,y,z,minimum,maximum)                                                                   \
                                        /* Les arguments {minimum,maximum} furent introduits le 20100702143507...                    */ \
                    Bblock                                                                                                              \
                    EGAL(fonction                                                                                                       \
                        ,FLOT(FAload_point(albumA                                                                                       \
                                          ,x,y,z                                                                                        \
                                          ,periodiser_X,periodiser_Y,periodiser_Z                                                       \
                                          ,symetriser_X,symetriser_Y,symetriser_Z                                                       \
                                          ,prolonger_X,prolonger_Y,prolonger_Z                                                          \
                                          ,niveau_hors_album                                                                            \
                                           )                                                                                            \
                              )                                                                                                         \
                         );                                                                                                             \
                                        /* Calcul de la fonction.                                                                    */ \
                                                                                                                                        \
                    EGAL(minimum,MIN2(minimum,fonction));                                                                               \
                    EGAL(maximum,MAX2(maximum,fonction));                                                                               \
                                        /* Rercherche des extrema de la fonction (introduite le 20100702143507)...                   */ \
                    Eblock                                                                                                              \
                                        /* Acces au point courant de coordonnees entieres {x,y,z}.                                   */

DEFV(Common,DEFV(Logical,SINT(FAload_point_coordonnees_01_____appliquer_une_matrice_de_transformation,FAUX)));
DEFV(Common,DEFV(matrixF_3D,SINS(FAload_point_coordonnees_01_____matrice_de_transformation
                                ,IstructH103(IstructL03(FU___,FZERO,FZERO)
                                            ,IstructL03(FZERO,FU___,FZERO)
                                            ,IstructL03(FZERO,FZERO,FU___)
                                             )
                                 )
                 )
     );
DEFV(Common,DEFV(Float,SINT(FAload_point_coordonnees_01_____PreAntiTranslation_Xf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FAload_point_coordonnees_01_____Post___Translation_Xf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FAload_point_coordonnees_01_____PreAntiTranslation_Yf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FAload_point_coordonnees_01_____Post___Translation_Yf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FAload_point_coordonnees_01_____PreAntiTranslation_Zf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FAload_point_coordonnees_01_____Post___Translation_Zf,NEUT(FDU))));
                                        /* Definition d'une eventuelle matrice de transformation neutre par defaut...                */
                                        /* neutre par defaut...                                                                      */
                                        /*                                                                                           */
                                        /* On notera la notation "PreAnti" qui signifie que les translations de ce type sont en      */
                                        /* fait appliquees via un 'SOUS(...)', alors que les translations de type "Post" passent     */
                                        /* par un 'ADD2(...)' ('v $xiii/vecteurs$DEF gTRANSFORMATION_GEOMETRIQUE_3D_Fxyz') via un    */
                                        /* 'LIN3(...)'.                                                                              */

DEFV(Common,DEFV(Logical,SINT(FAload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement,VRAI)));
                                        /* Pour choisir entre interpoler ('VRAI' et alors suivant l'indicateur de choix suivant      */
                                        /* 'FAload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire') ou pas ('FAUX').   */
DEFV(Common,DEFV(Float,SINT(FAload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_X
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_X
                            )
                 )
     );
DEFV(Common,DEFV(Float,SINT(FAload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_Y
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_Y
                            )
                 )
     );
DEFV(Common,DEFV(Float,SINT(FAload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_Z
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_Z
                            )
                 )
     );
                                        /* Parametres d'interpolation des coordonnees barycentriques.                                */
                                        /*                                                                                           */
                                        /* Ils permettent d'etre plus selectifs que le paramatre global definit ci-dessus            */
                                        /* ('FAload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement'). Par       */
                                        /* exemple en utilisant le triplet {1,1,0}, il n'y aura pas interpolation selon la           */
                                        /* coordonnee 'Z' (utile pour 'v $xci/deformi.11$K interpolerX=').                           */
DEFV(Common,DEFV(Logical,SINT(FAload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire,FAUX)));
                                        /* Afin de choisir entre l'interpolation bicubique et l'interpolation bilineaire...          */
DEFV(Common,DEFV(Logical,SINT(FAload_point_coordonnees_01_____utiliser_pasX_et_pasY_et_pasZ,VRAI)));
DEFV(Common,DEFV(Int,SINT(FAload_point_coordonnees_01_____pasX,PasX)));
DEFV(Common,DEFV(Int,SINT(FAload_point_coordonnees_01_____pasY,PasY)));
DEFV(Common,DEFV(Int,SINT(FAload_point_coordonnees_01_____pasZ,PasZ)));
                                        /* Si 'IL_NE_FAUT_PAS(FAload_point_coordonnees_01_____utiliser_pasX_et_pasY_et_pasZ)',       */
                                        /* donne {pasX,pasY,pasZ} a utiliser ci-apres...                                             */

DEFV(Common,DEFV(genere_p,SINT(FAload_point_coordonnees_01_____niveau_minimal,NIVEAU_UNDEF)));
DEFV(Common,DEFV(genere_p,SINT(FAload_point_coordonnees_01_____niveau_maximal,NIVEAU_UNDEF)));
                                        /* Afin de pouvoir renvoyer les extrema (introduits le 20100702143507).                      */

DEFV(Common,DEFV(FonctionP,FAload_point_coordonnees_01(albumA
                                                      ,Xf,Yf,Zf
                                                      ,periodiser_X,periodiser_Y,periodiser_Z
                                                      ,symetriser_X,symetriser_Y,symetriser_Z
                                                      ,prolonger_X,prolonger_Y,prolonger_Z
                                                      ,niveau_hors_album
                                                       )
                 )
     )
                                        /* Fonction introduite le 20091203092546...                                                  */
DEFV(Argument,DEFV(album,albumA));
                                        /* Album contenant le point argument.                                                        */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
                                        /* Coordonnees {Xf,Yf,Zf} du point argument dans [0,1[.                                      */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
DEFV(Argument,DEFV(Logical,periodiser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est periodique ou pas.            */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
DEFV(Argument,DEFV(Logical,symetriser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est symetrique ou pas.            */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
DEFV(Argument,DEFV(Logical,prolonger_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] doit etre prolonge a l'exterieur  */
                                        /* comme il est au bord...                                                                   */
DEFV(Argument,DEFV(genere_p,niveau_hors_album));
                                        /* Niveau a forcer au cas ou les coordonnees transformees seraient "hors-album".             */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(Xf_effective,Xf));
     DEFV(Float,INIT(Yf_effective,Yf));
     DEFV(Float,INIT(Zf_effective,Zf));
                                        /* Coordonnees effectives mises ici depuis 'bALOAD_POINT_COORDONNEES_01' le 20120929165544   */
                                        /* suite au probleme 'v $xig/fonct$vv$DEF 20120929145125' qui a necessite cette "sortie"...  */

     DEFV(genere_Float,INIT(niveau_du_point_de_coordonnees_01,FLOT__NIVEAU_UNDEF));
                                        /* Niveau du point {Xf,Yf,Zf}.                                                               */
     /*..............................................................................................................................*/
     ALOAD_POINT_COORDONNEES_01(FAload_point_coordonnees_01_____niveau_minimal,BLANC
                               ,FAload_point_coordonnees_01_____niveau_maximal,NOIR
                                );

     RETU(GENP(niveau_du_point_de_coordonnees_01));
     Eblock

#undef    CALCUL_POINT_ENTIER_COURANT

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N   A L B U M   " N O N   S T A N D A R D "        */
/*        A V E C   C O O R D O N N E E S   F L O T T A N T E S  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

#define   CALCUL_POINT_ENTIER_COURANT(fonction,x,y,z,minimum,maximum)                                                                   \
                                        /* Les arguments {minimum,maximum} furent introduits le 20100702143507...                    */ \
                    Bblock                                                                                                              \
                    EGAL(fonction                                                                                                       \
                        ,FFAload_point(albumA                                                                                           \
                                      ,x,y,z                                                                                            \
                                      ,periodiser_X,periodiser_Y,periodiser_Z                                                           \
                                      ,symetriser_X,symetriser_Y,symetriser_Z                                                           \
                                      ,prolonger_X,prolonger_Y,prolonger_Z                                                              \
                                      ,niveau_hors_album                                                                                \
                                       )                                                                                                \
                         );                                                                                                             \
                                        /* Calcul de la fonction.                                                                    */ \
                                                                                                                                        \
                    EGAL(minimum,MIN2(minimum,fonction));                                                                               \
                    EGAL(maximum,MAX2(maximum,fonction));                                                                               \
                                        /* Rercherche des extrema de la fonction (introduite le 20100702143507)...                   */ \
                    Eblock                                                                                                              \
                                        /* Acces au point courant de coordonnees entieres {x,y,z}.                                   */

DEFV(Common,DEFV(Logical,SINT(FFAload_point_coordonnees_01_____appliquer_une_matrice_de_transformation,FAUX)));
DEFV(Common,DEFV(matrixF_3D,SINS(FFAload_point_coordonnees_01_____matrice_de_transformation
                                ,IstructH103(IstructL03(FU___,FZERO,FZERO)
                                            ,IstructL03(FZERO,FU___,FZERO)
                                            ,IstructL03(FZERO,FZERO,FU___)
                                             )
                                 )
                 )
     );
DEFV(Common,DEFV(Float,SINT(FFAload_point_coordonnees_01_____PreAntiTranslation_Xf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFAload_point_coordonnees_01_____Post___Translation_Xf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFAload_point_coordonnees_01_____PreAntiTranslation_Yf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFAload_point_coordonnees_01_____Post___Translation_Yf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFAload_point_coordonnees_01_____PreAntiTranslation_Zf,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(FFAload_point_coordonnees_01_____Post___Translation_Zf,NEUT(FDU))));
                                        /* Definition d'une eventuelle matrice de transformation (introduite le 20080802115907),     */
                                        /* neutre par defaut...                                                                      */
                                        /*                                                                                           */
                                        /* Les "Pre" et "Post" translations ont ete introduites le 20080803093325. On notera la      */
                                        /* notation "PreAnti" qui signifie que les translations de ce type sont en fait appliquees   */
                                        /* via un 'SOUS(...)', alors que les translations de type "Post" passent par un 'ADD2(...)'  */
                                        /* via un 'LIN3(...)' ('v $xiii/vecteurs$DEF gTRANSFORMATION_GEOMETRIQUE_3D_Fxyz').          */

DEFV(Common,DEFV(Logical,SINT(FFAload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement,VRAI)));
                                        /* Pour choisir entre interpoler ('VRAI' et alors suivant l'indicateur de choix suivant      */
                                        /* 'FFAload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire') ou pas ('FAUX').  */
                                        /* Cet indicateur a ete introduit le 20080930141651...                                       */
DEFV(Common,DEFV(Float,SINT(FFAload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_X
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_X
                            )
                 )
     );
DEFV(Common,DEFV(Float,SINT(FFAload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_Y
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_Y
                            )
                 )
     );
DEFV(Common,DEFV(Float,SINT(FFAload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_Z
                           ,NE_PAS_BLOQUER_L_INTERPOLATION_Z
                            )
                 )
     );
                                        /* Parametres d'interpolation des coordonnees barycentriques introduits le 20080930155146.   */
                                        /* Ils permettent d'etre plus selectifs que le paramatre global definit ci-dessus            */
                                        /* ('FFAload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement'). Par      */
                                        /* exemple en utilisant le triplet {1,1,0}, il n'y aura pas interpolation selon la           */
                                        /* coordonnee 'Z' (utile pour 'v $xci/deformi.11$K interpolerX=').                           */
DEFV(Common,DEFV(Logical,SINT(FFAload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire,FAUX)));
                                        /* En fait seule existe l'interpolation bicubique. Ceci est mis pour des raisons de          */
                                        /* symetrie avec 'FFload_point_coordonnees_01(...)'. Finalement, l'interpolation bilineaire  */
                                        /* fut introduite le 20050621112633...                                                       */
DEFV(Common,DEFV(Logical,SINT(FFAload_point_coordonnees_01_____utiliser_pasX_et_pasY_et_pasZ,VRAI)));
DEFV(Common,DEFV(Int,SINT(FFAload_point_coordonnees_01_____pasX,PasX)));
DEFV(Common,DEFV(Int,SINT(FFAload_point_coordonnees_01_____pasY,PasY)));
DEFV(Common,DEFV(Int,SINT(FFAload_point_coordonnees_01_____pasZ,PasZ)));
                                        /* Si 'IL_NE_FAUT_PAS(FFAload_point_coordonnees_01_____utiliser_pasX_et_pasY_et_pasZ)',      */
                                        /* donne {pasX,pasY,pasZ} a utiliser ci-apres...                                             */

DEFV(Common,DEFV(genere_Float,SINT(FFAload_point_coordonnees_01_____niveau_minimal,FLOT__NIVEAU_UNDEF)));
DEFV(Common,DEFV(genere_Float,SINT(FFAload_point_coordonnees_01_____niveau_maximal,FLOT__NIVEAU_UNDEF)));
                                        /* Afin de pouvoir renvoyer les extrema (introduits le 20100702143507).                      */

DEFV(Common,DEFV(FonctionF,FFAload_point_coordonnees_01(albumA
                                                       ,Xf,Yf,Zf
                                                       ,periodiser_X,periodiser_Y,periodiser_Z
                                                       ,symetriser_X,symetriser_Y,symetriser_Z
                                                       ,prolonger_X,prolonger_Y,prolonger_Z
                                                       ,niveau_hors_album
                                                        )
                 )
     )
                                        /* Fonction introduite le 20050605170621...                                                  */
DEFV(Argument,DEFV(albumF,albumA));
                                        /* Album contenant le point argument.                                                        */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
                                        /* Coordonnees {Xf,Yf,Zf} du point argument dans [0,1[.                                      */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
DEFV(Argument,DEFV(Logical,periodiser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est periodique ou pas.            */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
DEFV(Argument,DEFV(Logical,symetriser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est symetrique ou pas.            */
                                        /* Ceci a ete introduit le 20050721103203...                                                 */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
DEFV(Argument,DEFV(Logical,prolonger_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] doit etre prolonge a l'exterieur  */
                                        /* comme il est au bord...                                                                   */
DEFV(Argument,DEFV(genere_Float,niveau_hors_album));
                                        /* Niveau a forcer au cas ou les coordonnees transformees seraient "hors-album".             */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(Xf_effective,Xf));
     DEFV(Float,INIT(Yf_effective,Yf));
     DEFV(Float,INIT(Zf_effective,Zf));
                                        /* Coordonnees effectives mises ici depuis 'bALOAD_POINT_COORDONNEES_01' le 20120929165544   */
                                        /* suite au probleme 'v $xig/fonct$vv$DEF 20120929145125' qui a necessite cette "sortie"...  */

     DEFV(genere_Float,INIT(niveau_du_point_de_coordonnees_01,FLOT__NIVEAU_UNDEF));
                                        /* Niveau du point {Xf,Yf,Zf}.                                                               */
     /*..............................................................................................................................*/
     ALOAD_POINT_COORDONNEES_01(FFAload_point_coordonnees_01_____niveau_minimal,F_INFINI
                               ,FFAload_point_coordonnees_01_____niveau_maximal,F_MOINS_L_INFINI
                                );

     RETU(niveau_du_point_de_coordonnees_01);
     Eblock

#undef    CALCUL_POINT_ENTIER_COURANT

EFonctionF

#undef    DERIVATION_NUMERIQUE

#undef    TRANSFORMATION_GEOMETRIQUE_3D_Zf
#undef    TRANSFORMATION_GEOMETRIQUE_3D_Yf
#undef    TRANSFORMATION_GEOMETRIQUE_3D_Xf

#undef    ALOAD_POINT_COORDONNEES_01

#undef    ACCELERATEUR__ALOAD_POINT_COORDONNEES_01
#undef    ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__PONDERATEUR
#undef    ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__DERNIERE_ENTREE
#undef    ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__PREMIERE_ENTREE
#undef    ACCELERATEUR__ALOAD_POINT_COORDONNEES_01__NOMBRE_D_ENTREES

#undef    GENERATION_DE_L_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01
                                        /* Introduits le 20120311093932...                                                           */

#undef    bALOAD_POINT_COORDONNEES_01

#undef    TUCZ
#undef    TUCY
#undef    TUCX

#undef    QREZ
#undef    QREY
#undef    QREX

#undef    NomFonctionCourant

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N   A L B U M   " N O N   S T A N D A R D "        */
/*        A V E C   C O O R D O N N E E S   F L O T T A N T E S                                                                      */
/*        E T   A V E C   C O N T R O L E   D E S   I N T E R P O L A T I O N S  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,gFFAload_point_coordonnees_01(albumA
                                                        ,Xf,Yf,Zf
                                                        ,periodiser_X,periodiser_Y,periodiser_Z
                                                        ,symetriser_X,symetriser_Y,symetriser_Z
                                                        ,prolonger_X,prolonger_Y,prolonger_Z
                                                        ,niveau_hors_album
                                                        ,interpoler_bilineairement_ou_bicubiquement
                                                        ,utiliser_l_interpolation_bilineaire
                                                         )
                 )
     )
                                        /* Fonction introduite le 20150528101138...                                                  */
DEFV(Argument,DEFV(albumF,albumA));
                                        /* Album contenant le point argument.                                                        */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
                                        /* Coordonnees {Xf,Yf,Zf} du point argument dans [0,1[.                                      */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
DEFV(Argument,DEFV(Logical,periodiser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est periodique ou pas.            */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
DEFV(Argument,DEFV(Logical,symetriser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est symetrique ou pas.            */
                                        /* Ceci a ete introduit le 20050721103203...                                                 */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
DEFV(Argument,DEFV(Logical,prolonger_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] doit etre prolonge a l'exterieur  */
                                        /* comme il est au bord...                                                                   */
DEFV(Argument,DEFV(genere_Float,niveau_hors_album));
                                        /* Niveau a forcer au cas ou les coordonnees transformees seraient "hors-album".             */
DEFV(Argument,DEFV(Logical,interpoler_bilineairement_ou_bicubiquement));
DEFV(Argument,DEFV(Logical,utiliser_l_interpolation_bilineaire));
                                        /* Controle des interpolations...                                                            */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(genere_Float,INIT(niveau_du_point_de_coordonnees_01,FLOT__NIVEAU_UNDEF));
                                        /* Niveau du point {Xf,Yf,Zf}.                                                               */
     /*..............................................................................................................................*/
     BSaveModifyVariable(Logical
                        ,FFAload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement
                        ,interpoler_bilineairement_ou_bicubiquement
                         );
     BSaveModifyVariable(Logical
                        ,FFAload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire
                        ,utiliser_l_interpolation_bilineaire
                         );

     EGAL(niveau_du_point_de_coordonnees_01
         ,FFAload_point_coordonnees_01(albumA
                                      ,Xf,Yf,Zf
                                      ,periodiser_X,periodiser_Y,periodiser_Z
                                      ,symetriser_X,symetriser_Y,symetriser_Z
                                      ,prolonger_X,prolonger_Y,prolonger_Z
                                      ,niveau_hors_album
                                       )
          );

     ESaveModifyVariable(Logical
                        ,FFAload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire
                         );
     ESaveModifyVariable(Logical
                        ,FFAload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement
                         );

     RETU(niveau_du_point_de_coordonnees_01);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N   A L B U M   " N O N   S T A N D A R D "        */
/*        A V E C   C O O R D O N N E E S   F L O T T A N T E S                                                                      */
/*        E T   A V E C   S U P E R - C O N T R O L E   D E S   I N T E R P O L A T I O N S  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,sgFFAload_point_coordonnees_01(albumA
                                                         ,Xf,Yf,Zf
                                                         ,periodiser_X,periodiser_Y,periodiser_Z
                                                         ,symetriser_X,symetriser_Y,symetriser_Z
                                                         ,prolonger_X,prolonger_Y,prolonger_Z
                                                         ,niveau_hors_album
                                                         ,interpoler_bilineairement_ou_bicubiquement
                                                         ,utiliser_l_interpolation_bilineaire
                                                         ,eviter_les_fortes_discontinuites
                                                         ,epsilon_detection_des_fortes_discontinuites
                                                          )
                 )
     )
                                        /* Fonction introduite le 20150528101138...                                                  */
DEFV(Argument,DEFV(albumF,albumA));
                                        /* Album contenant le point argument.                                                        */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
                                        /* Coordonnees {Xf,Yf,Zf} du point argument dans [0,1[.                                      */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
DEFV(Argument,DEFV(Logical,periodiser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est periodique ou pas.            */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
DEFV(Argument,DEFV(Logical,symetriser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est symetrique ou pas.            */
                                        /* Ceci a ete introduit le 20050721103203...                                                 */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
DEFV(Argument,DEFV(Logical,prolonger_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] doit etre prolonge a l'exterieur  */
                                        /* comme il est au bord...                                                                   */
DEFV(Argument,DEFV(genere_Float,niveau_hors_album));
                                        /* Niveau a forcer au cas ou les coordonnees transformees seraient "hors-album".             */
DEFV(Argument,DEFV(Logical,interpoler_bilineairement_ou_bicubiquement));
DEFV(Argument,DEFV(Logical,utiliser_l_interpolation_bilineaire));
                                        /* Controle des interpolations...                                                            */
DEFV(Argument,DEFV(Logical,eviter_les_fortes_discontinuites));
DEFV(Argument,DEFV(Float,epsilon_detection_des_fortes_discontinuites));
                                        /* Super-controle des interpolations...                                                      */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(genere_Float,INIT(niveau_du_point_de_coordonnees_01,FLOT__NIVEAU_UNDEF));
                                        /* Niveau du point {Xf,Yf,Zf}.                                                               */
     /*..............................................................................................................................*/
     BSaveModifyVariable(Logical
                        ,bILOAD_POINT_COORDONNEES_01_____eviter_les_fortes_discontinuites
                        ,eviter_les_fortes_discontinuites
                         );
     BSaveModifyVariable(Float
                        ,bILOAD_POINT_COORDONNEES_01_____epsilon_detection_des_fortes_discontinuites
                        ,epsilon_detection_des_fortes_discontinuites
                         );

     EGAL(niveau_du_point_de_coordonnees_01
         ,gFFAload_point_coordonnees_01(albumA
                                       ,Xf,Yf,Zf
                                       ,periodiser_X,periodiser_Y,periodiser_Z
                                       ,symetriser_X,symetriser_Y,symetriser_Z
                                       ,prolonger_X,prolonger_Y,prolonger_Z
                                       ,niveau_hors_album
                                       ,interpoler_bilineairement_ou_bicubiquement
                                       ,utiliser_l_interpolation_bilineaire
                                        )
          );

     ESaveModifyVariable(Float
                        ,bILOAD_POINT_COORDONNEES_01_____epsilon_detection_des_fortes_discontinuites
                         );
     ESaveModifyVariable(Logical
                        ,bILOAD_POINT_COORDONNEES_01_____eviter_les_fortes_discontinuites
                         );

     RETU(niveau_du_point_de_coordonnees_01);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N   A L B U M   " S T A N D A R D "                */
/*        A V E C   C O O R D O N N E E S   F L O T T A N T E S   ( V E R S I O N   " E T E N D U E " )  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Logical,SINT(FAload_point_coordonnees_01_etendu_____renvoyer_le_niveau_maximal,FAUX)));
                                        /* Afin de pouvoir renvoyer le maximum et non pas la valeur interpolee.                      */

DEFV(Common,DEFV(FonctionP,FAload_point_coordonnees_01_etendu(albumA
                                                             ,Xf,Yf,Zf
                                                             ,periodiser_X,periodiser_Y,periodiser_Z
                                                             ,symetriser_X,symetriser_Y,symetriser_Z
                                                             ,prolonger_X,prolonger_Y,prolonger_Z
                                                             ,niveau_hors_album
                                                              )
                 )
     )
                                        /* Fonction introduite le 20100703100826...                                                  */
DEFV(Argument,DEFV(album,albumA));
                                        /* Album contenant le point argument.                                                        */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
                                        /* Coordonnees {Xf,Yf,Zf} du point argument dans [0,1[.                                      */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
DEFV(Argument,DEFV(Logical,periodiser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est periodique ou pas.            */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
DEFV(Argument,DEFV(Logical,symetriser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est symetrique ou pas.            */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
DEFV(Argument,DEFV(Logical,prolonger_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] doit etre prolonge a l'exterieur  */
                                        /* comme il est au bord...                                                                   */
DEFV(Argument,DEFV(genere_p,niveau_hors_album));
                                        /* Niveau a forcer au cas ou les coordonnees transformees seraient "hors-album".             */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(genere_p,INIT(niveau_du_point_de_coordonnees_01
                       ,FAload_point_coordonnees_01(albumA
                                                   ,Xf,Yf,Zf
                                                   ,periodiser_X,periodiser_Y,periodiser_Z
                                                   ,symetriser_X,symetriser_Y,symetriser_Z
                                                   ,prolonger_X,prolonger_Y,prolonger_Z
                                                   ,niveau_hors_album
                                                    )
                        )
          );
                                        /* Niveau du point {Xf,Yf,Zf}.                                                               */
     /*..............................................................................................................................*/
     RETU(CON01(IL_FAUT(FAload_point_coordonnees_01_etendu_____renvoyer_le_niveau_maximal)
               ,FAload_point_coordonnees_01_____niveau_maximal
               ,niveau_du_point_de_coordonnees_01
                )
          );
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N   A L B U M   " N O N   S T A N D A R D "        */
/*        A V E C   C O O R D O N N E E S   F L O T T A N T E S   ( V E R S I O N   " E T E N D U E " )  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(FFAload_point_coordonnees_01_etendu_____renvoyer_le_niveau_maximal,FAUX)));
                                        /* Afin de pouvoir renvoyer le maximum et non pas la valeur interpolee.                      */

DEFV(Common,DEFV(FonctionF,FFAload_point_coordonnees_01_etendu(albumA
                                                              ,Xf,Yf,Zf
                                                              ,periodiser_X,periodiser_Y,periodiser_Z
                                                              ,symetriser_X,symetriser_Y,symetriser_Z
                                                              ,prolonger_X,prolonger_Y,prolonger_Z
                                                              ,niveau_hors_album
                                                               )
                 )
     )
                                        /* Fonction introduite le 20100703100826...                                                  */
DEFV(Argument,DEFV(albumF,albumA));
                                        /* Album contenant le point argument.                                                        */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
                                        /* Coordonnees {Xf,Yf,Zf} du point argument dans [0,1[.                                      */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
DEFV(Argument,DEFV(Logical,periodiser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est periodique ou pas.            */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
DEFV(Argument,DEFV(Logical,symetriser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est symetrique ou pas.            */
                                        /* Ceci a ete introduit le 20050721103203...                                                 */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
DEFV(Argument,DEFV(Logical,prolonger_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] doit etre prolonge a l'exterieur  */
                                        /* comme il est au bord...                                                                   */
DEFV(Argument,DEFV(genere_Float,niveau_hors_album));
                                        /* Niveau a forcer au cas ou les coordonnees transformees seraient "hors-album".             */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(genere_Float,INIT(niveau_du_point_de_coordonnees_01
                           ,FFAload_point_coordonnees_01(albumA
                                                        ,Xf,Yf,Zf
                                                        ,periodiser_X,periodiser_Y,periodiser_Z
                                                        ,symetriser_X,symetriser_Y,symetriser_Z
                                                        ,prolonger_X,prolonger_Y,prolonger_Z
                                                        ,niveau_hors_album
                                                         )
                            )
          );
                                        /* Niveau du point {Xf,Yf,Zf}.                                                               */
     /*..............................................................................................................................*/
     RETU(CON01(IL_FAUT(FFAload_point_coordonnees_01_etendu_____renvoyer_le_niveau_maximal)
               ,FFAload_point_coordonnees_01_____niveau_maximal
               ,niveau_du_point_de_coordonnees_01
                )
          );
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R A N G E M E N T   D ' U N   P O I N T   " S T A N D A R D "   D ' U N E   I M A G E  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,Fstore_point(point
                                       ,imageA
                                       ,X,Y
                                       ,periodiser_X,periodiser_Y
                                       ,symetriser_X,symetriser_Y
                                       ,prolonger_X,prolonger_Y
                                        )
                 )
     )
                                        /* Fonction introduite le 20070207133120.                                                    */
DEFV(Argument,DEFV(genere_p,point));
                                        /* Valeur du point courant.                                                                  */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est periodique ou pas.                        */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est symetrique ou pas.                        */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] doit etre prolonge a l'exterieur comme il     */
                                        /* est au bord...                                                                            */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;

     DEFV(Int,INIT(coordonnee_X,UNDEF));
     DEFV(Int,INIT(coordonnee_Y,UNDEF));
                                        /* Coordonnees {X,Y} du point argument apres d'eventuelles transformations...                */
     /*..............................................................................................................................*/
     Test(IFOU(VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_X,symetriser_X,prolonger_X)
              ,VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_Y,symetriser_Y,prolonger_Y)
               )
          )
          Bblock
          PRINT_ATTENTION("une seule des options {periodiser,symetriser,prolonger} peut etre VRAI -la premiere 'VRAI' l'emporte-");
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     PERIODISER_SYMETRISER_PROLONGER(X);
     PERIODISER_SYMETRISER_PROLONGER(Y);
                                        /* Eventuellement, periodisation et prolongement des axes...                                 */

     Test(TEST_DANS_L_IMAGE(coordonnee_X,coordonnee_Y))
          Bblock
          store_point(point,imageA,coordonnee_X,coordonnee_Y,FVARIABLE);
                                        /* Rangement du point apres ses eventuelles transformations...                               */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETU_ERROR;
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R A N G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N E   I M A G E  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,FFstore_point(point
                                        ,imageA
                                        ,X,Y
                                        ,periodiser_X,periodiser_Y
                                        ,symetriser_X,symetriser_Y
                                        ,prolonger_X,prolonger_Y
                                         )
                 )
     )
                                        /* Fonction introduite le 20070207133120.                                                    */
DEFV(Argument,DEFV(genere_Float,point));
                                        /* Valeur du point courant.                                                                  */
DEFV(Argument,DEFV(imageF,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est periodique ou pas.                        */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] est symetrique ou pas.                        */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax] doit etre prolonge a l'exterieur comme il     */
                                        /* est au bord...                                                                            */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;

     DEFV(Int,INIT(coordonnee_X,UNDEF));
     DEFV(Int,INIT(coordonnee_Y,UNDEF));
                                        /* Coordonnees {X,Y} du point argument apres d'eventuelles transformations...                */
     /*..............................................................................................................................*/
     Test(IFOU(VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_X,symetriser_X,prolonger_X)
              ,VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_Y,symetriser_Y,prolonger_Y)
               )
          )
          Bblock
          PRINT_ATTENTION("une seule des options {periodiser,symetriser,prolonger} peut etre VRAI -la premiere 'VRAI' l'emporte-");
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     PERIODISER_SYMETRISER_PROLONGER(X);
     PERIODISER_SYMETRISER_PROLONGER(Y);
                                        /* Eventuellement, periodisation et prolongement des axes...                                 */

     Test(TEST_DANS_L_IMAGE(coordonnee_X,coordonnee_Y))
          Bblock
          storeF_point(point,imageA,coordonnee_X,coordonnee_Y);
                                        /* Rangement du point apres ses eventuelles transformations...                               */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETU_ERROR;
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R A N G E M E N T   D ' U N   P O I N T   " S T A N D A R D "   D ' U N   A L B U M  :                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,FAstore_point(point
                                        ,albumA
                                        ,X,Y,Z
                                        ,periodiser_X,periodiser_Y,periodiser_Z
                                        ,symetriser_X,symetriser_Y,symetriser_Z
                                        ,prolonger_X,prolonger_Y,prolonger_Z
                                         )
                 )
     )
                                        /* Fonction introduite le 20070208125243.                                                    */
DEFV(Argument,DEFV(genere_p,point));
                                        /* Valeur du point courant...                                                                */
DEFV(Argument,DEFV(album,albumA));
                                        /* Album contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
DEFV(Argument,DEFV(Int,Z));
                                        /* Coordonnees {X,Y,Z} du point argument. On notera qu'avec :                                */
                                        /*                                                                                           */
                                        /*                  Z=Zmin                                                                   */
                                        /*                                                                                           */
                                        /* un 'album' peut simuler une 'image'...                                                    */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
DEFV(Argument,DEFV(Logical,periodiser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est periodique ou pas.            */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
DEFV(Argument,DEFV(Logical,symetriser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est symetrique ou pas.            */
                                        /* Ceci a ete introduit le 20050721103203...                                                 */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
DEFV(Argument,DEFV(Logical,prolonger_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] doit etre prolonge a l'exterieur  */
                                        /* comme il est au bord...                                                                   */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;

     DEFV(Int,INIT(coordonnee_X,UNDEF));
     DEFV(Int,INIT(coordonnee_Y,UNDEF));
     DEFV(Int,INIT(coordonnee_Z,UNDEF));
                                        /* Coordonnees {X,Y,Z} du point argument apres d'eventuelles transformations...              */
     /*..............................................................................................................................*/
     Test(I3OU(VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_X,symetriser_X,prolonger_X)
              ,VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_Y,symetriser_Y,prolonger_Y)
              ,VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_Z,symetriser_Z,prolonger_Z)
               )
          )
          Bblock
          PRINT_ATTENTION("une seule des options {periodiser,symetriser,prolonger} peut etre VRAI -la premiere 'VRAI' l'emporte-");
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     PERIODISER_SYMETRISER_PROLONGER(X);
     PERIODISER_SYMETRISER_PROLONGER(Y);
     PERIODISER_SYMETRISER_PROLONGER(Z);
                                        /* Eventuellement, periodisation et prolongement des axes...                                 */

     Test(TEST_DANS_L_ALBUM(coordonnee_X,coordonnee_Y,coordonnee_Z))
          Bblock
          Astore_point(point,albumA,coordonnee_X,coordonnee_Y,coordonnee_Z);
                                        /* Rangement du point apres ses eventuelles transformations...                               */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETU_ERROR;
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R A N G E M E N T   D ' U N   P O I N T   " F L O T T A N T "   D ' U N   A L B U M  :                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,FFAstore_point(point
                                         ,albumA
                                         ,X,Y,Z
                                         ,periodiser_X,periodiser_Y,periodiser_Z
                                         ,symetriser_X,symetriser_Y,symetriser_Z
                                         ,prolonger_X,prolonger_Y,prolonger_Z
                                          )
                 )
     )
                                        /* Fonction introduite le 20070208125243.                                                    */
DEFV(Argument,DEFV(genere_Float,point));
                                        /* Valeur du point courant...                                                                */
DEFV(Argument,DEFV(albumF,albumA));
                                        /* Album contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
DEFV(Argument,DEFV(Int,Z));
                                        /* Coordonnees {X,Y,Z} du point argument. On notera qu'avec :                                */
                                        /*                                                                                           */
                                        /*                  Z=Zmin                                                                   */
                                        /*                                                                                           */
                                        /* un 'album' peut simuler une 'image'...                                                    */
DEFV(Argument,DEFV(Logical,periodiser_X));
DEFV(Argument,DEFV(Logical,periodiser_Y));
DEFV(Argument,DEFV(Logical,periodiser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est periodique ou pas.            */
DEFV(Argument,DEFV(Logical,symetriser_X));
DEFV(Argument,DEFV(Logical,symetriser_Y));
DEFV(Argument,DEFV(Logical,symetriser_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] est symetrique ou pas.            */
                                        /* Ceci a ete introduit le 20050721103203...                                                 */
DEFV(Argument,DEFV(Logical,prolonger_X));
DEFV(Argument,DEFV(Logical,prolonger_Y));
DEFV(Argument,DEFV(Logical,prolonger_Z));
                                        /* Indique si l'espace [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] doit etre prolonge a l'exterieur  */
                                        /* comme il est au bord...                                                                   */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;

     DEFV(Int,INIT(coordonnee_X,UNDEF));
     DEFV(Int,INIT(coordonnee_Y,UNDEF));
     DEFV(Int,INIT(coordonnee_Z,UNDEF));
                                        /* Coordonnees {X,Y,Z} du point argument apres d'eventuelles transformations...              */
     /*..............................................................................................................................*/
     Test(I3OU(VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_X,symetriser_X,prolonger_X)
              ,VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_Y,symetriser_Y,prolonger_Y)
              ,VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER(periodiser_Z,symetriser_Z,prolonger_Z)
               )
          )
          Bblock
          PRINT_ATTENTION("une seule des options {periodiser,symetriser,prolonger} peut etre VRAI -la premiere 'VRAI' l'emporte-");
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     PERIODISER_SYMETRISER_PROLONGER(X);
     PERIODISER_SYMETRISER_PROLONGER(Y);
     PERIODISER_SYMETRISER_PROLONGER(Z);
                                        /* Eventuellement, periodisation et prolongement des axes...                                 */

     Test(TEST_DANS_L_ALBUM(coordonnee_X,coordonnee_Y,coordonnee_Z))
          Bblock
          AstoreF_point(point,albumA,coordonnee_X,coordonnee_Y,coordonnee_Z);
                                        /* Rangement du point apres ses eventuelles transformations...                               */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETU_ERROR;
     Eblock

EFonctionF

#undef    VALIDATION_DES_PARAMETRES_DE_PERIODISER_SYMETRISER_PROLONGER
=undef    PERIODISER_SYMETRISER_PROLONGER

_______________________________________________________________________________________________________________________________________



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