_______________________________________________________________________________________________________________________________________
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   D E   B A S E   A   U N E   I M A G E  :                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Ce fichier contient toutes les fonctions                                                                       */
/*                  de base de gestion et de manipulation d'une                                                                      */
/*                  image raster, quelle que soit la definition.                                                                     */
/*                  Ainsi, on pourra ainsi l'initialiser...                                                                          */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xiii/mono_image$FON' :                                                                                         */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19870000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E S   " B U G S "   P R E S E N T S  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#ifdef    BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_01                    /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_01));
#Aifdef   BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_01                    /* Common,DEFV(Fonction,) : bug...                   */
#Eifdef   BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_01                    /* Common,DEFV(Fonction,) : bug...                   */

#ifdef    BUG_SYSTEME_NWS3000_NEWSOS_CC_EDITION_DE_LIENS_01                     /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_NWS3000_NEWSOS_CC_EDITION_DE_LIENS_01));
#Aifdef   BUG_SYSTEME_NWS3000_NEWSOS_CC_EDITION_DE_LIENS_01                     /* Common,DEFV(Fonction,) : bug...                   */
#Eifdef   BUG_SYSTEME_NWS3000_NEWSOS_CC_EDITION_DE_LIENS_01                     /* Common,DEFV(Fonction,) : bug...                   */

#ifdef    BUG_SYSTEME_NWS3000_NEWSOS_2CC_EDITION_DE_LIENS_01                    /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_NWS3000_NEWSOS_2CC_EDITION_DE_LIENS_01));
#Aifdef   BUG_SYSTEME_NWS3000_NEWSOS_2CC_EDITION_DE_LIENS_01                    /* Common,DEFV(Fonction,) : bug...                   */
#Eifdef   BUG_SYSTEME_NWS3000_NEWSOS_2CC_EDITION_DE_LIENS_01                    /* Common,DEFV(Fonction,) : bug...                   */

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

BFonctionP

DEFV(Common,DEFV(genere_p,SINT(Iinitialisation_____valeur_pour_gInettoyage,NOIR)));
                                        /* Introduit le 20090527110344 en particulier pour 'v $xci/scroll$K pour_gInettoyage'...     */

DEFV(Common,DEFV(FonctionP,POINTERp(Iinitialisation(imageR,valeur))))
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a initialiser.                                                             */
DEFV(Argument,DEFV(genere_p,valeur));
                                        /* Valeur initiale a donner a tous les elements de l'image resultat.                         */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR
                                                                  ,BLOC(begin_image
                                                                             Bblock
                                                                             store_point(valeur,imageR,X,Y,FVARIABLE);
                                        /* Initialisation element par element.                                                       */
                                                                             Eblock
                                                                        end_image
                                                                        )
                                                                  ,BLOC(CAL1(Prer1("niveau d'initialisation=%08X\n"
                                                                                  ,valeur
                                                                                   )
                                                                             );
                                                                        )
                                                                   );

     RETI(imageR);
     Eblock

EFonctionP

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

BFonctionP

DEFV(Common,DEFV(genere_p,SINT(Inoir_____NOIR,NOIR)));
                                        /* Introduit le 20101025184057 a priori...                                                   */

DEFV(Common,DEFV(FonctionP,POINTERp(Inoir(imageR))))
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a mettre a NOIR.                                                           */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     CALS(Iinitialisation(imageR,Inoir_____NOIR));

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M I S E   A   " B L A N C "   D ' U N E   I M A G E  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(genere_p,SINT(Iblanc_____BLANC,BLANC)));
                                        /* Introduit le 20101025184057 a priori...                                                   */

DEFV(Common,DEFV(FonctionP,POINTERp(Iblanc(imageR))))
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a mettre a BLANC.                                                          */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     CALS(Iinitialisation(imageR,Iblanc_____BLANC));

     RETI(imageR);
     Eblock

EFonctionP

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

BFonctionI

DEFV(Common,DEFV(FonctionI,POINTERI(IIinitialisation(imageR,valeur))))
DEFV(Argument,DEFV(imageI,imageR));
                                        /* Image resultat a initialiser.                                                             */
DEFV(Argument,DEFV(genere_Int,valeur));
                                        /* Valeur initiale a donner a tous les elements de l'image resultat.                         */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR
                                                                  ,BLOC(begin_image
                                                                             Bblock
                                                                             storeI_point(valeur,imageR,X,Y);
                                        /* Initialisation element par element.                                                       */
                                                                             Eblock
                                                                        end_image
                                                                        )
                                                                  ,BLOC(CAL1(Prer1("niveau d'initialisation=%d\n"
                                                                                  ,valeur
                                                                                   )
                                                                             );
                                                                        )
                                                                   );
     RETII(imageR);
     Eblock

EFonctionI

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N I T I A L I S A T I O N   D ' U N E   I M A G E   F L O T T A N T E                                                    */
/*        E T   P A R   E X E M P L E   L E   Z - B U F F E R  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Float,SINT(IFinitialisation_____increment_de_la_valeur,FZERO)));
                                        /* Afin de permettre la progression de 'valeur' dans 'IFinitialisation(...)' (introduit le   */
                                        /* 20020524142206 pour aider aux tests du probleme 'v $xig/fonct$vv$FON 20020429105701')     */
                                        /* en permettant de generer un fichier dont toutes les valeurs sont differentes (et par      */
                                        /* exemple {1,2,3,...,N}).                                                                   */
DEFV(Common,DEFV(Float,SINT(IFinitialisation_____valeur_pour_gInettoyage,FZERO)));
                                        /* Introduit le 20090527110344 en particulier pour 'v $xci/scroll$K pour_gInettoyage'...     */

DEFV(Common,DEFV(FonctionF,POINTERF(IFinitialisation(imageR,valeur))))
DEFV(Argument,DEFV(imageF,imageR));
                                        /* Image resultat a initialiser.                                                             */
DEFV(Argument,DEFV(genere_Float,valeur));
                                        /* Valeur initiale a donner a tous les elements de l'image resultat.                         */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR
                                                                  ,BLOC(DEFV(genere_Float,INIT(valeur_courante,valeur));
                                        /* Valeur courante d'initialisation de 'imageR'...                                           */

                                                                        begin_image
                                                                             Bblock
                                                                             storeF_point(valeur_courante,imageR,X,Y);
                                        /* Initialisation element par element.                                                       */

                                                                             Test(IFET(IFDI(imageR,Z_Buffer)
                                                                                      ,IFDI(imageR,Z_Buffer_accumule)
                                                                                       )
                                                                                  )
                                                                                  Bblock
                                                                                  INCR(valeur_courante
                                                                                      ,IFinitialisation_____increment_de_la_valeur
                                                                                       );
                                        /* Dans le cas d'images differentes de 'Z_Buffer' et de 'Z_Buffer_accumule', il est          */
                                        /* possible (a compter du 20020524142206) de faire evoluer la valeur...                      */
                                                                                  Eblock
                                                                             ATes
                                                                                  Bblock
                                                                                  Eblock
                                                                             ETes
                                                                             Eblock
                                                                        end_image

                                                                        Test(IFID(imageR,Z_Buffer))
                                                                             Bblock
                                                                             EGAL(Z_Buffer_____minimum,F_INFINI);
                                                                             EGAL(Z_Buffer_____maximum,F_MOINS_L_INFINI);
                                        /* Initialisation du calculateur des extrema du 'Z-Buffer'. ATTENTION, il ne faut pas        */
                                        /* utiliser 'Z_Buffer_____valeur_initiale' ici car, en effet, c'est une recherche d'extrema. */
                                                                             EGAL(Z_Buffer_____etat,VALIDE);
                                        /* Lorsque l'initialisation est terminee, et s'il s'agit du 'Z-Buffer',                      */
                                        /* on memorise que l'initialisation de ce dernier est faite.                                 */
                                                                             Eblock
                                                                        ATes
                                                                             Bblock
                                                                             Eblock
                                                                        ETes

                                                                        Test(IFID(imageR,Z_Buffer_accumule))
                                                                             Bblock
                                                                             EGAL(Z_Buffer_accumule_____minimum,F_INFINI);
                                                                             EGAL(Z_Buffer_accumule_____maximum,F_MOINS_L_INFINI);
                                        /* Initialisation du calculateur des extrema du 'Z-Buffer accumule'. ATTENTION, il ne faut   */
                                        /* pas utiliser 'Z_Buffer_____valeur_initiale' ici car, en effet, c'est une recherche        */
                                        /* d'extrema.                                                                                */
                                                                             EGAL(Z_Buffer_accumule_____etat,VALIDE);
                                        /* Lorsque l'initialisation est terminee, et s'il s'agit du 'Z-Buffer accumule',             */
                                        /* on memorise que l'initialisation de ce dernier est faite.                                 */
                                                                             Eblock
                                                                        ATes
                                                                             Bblock
                                                                             Eblock
                                                                        ETes
                                                                        )
                                                                  ,BLOC(CAL1(Prer1("niveau d'initialisation=%f\n"
                                                                                  ,valeur
                                                                                   )
                                                                             );
                                                                        )
                                                                   );
     RETIF(imageR);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N I T I A L I S A T I O N   D U   Z - B U F F E R  :                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*             *     * * * * * *   * * * * * *   * * * * * *   *         *   * * * * * *   *   * * * * * *   *         *             */
/*                        *             *        *             **        *        *        *   *         *   **        *             */
/*            * *         *             *        *             * *       *        *        *   *         *   * *       *             */
/*                        *             *        *             *  *      *        *        *   *         *   *  *      *             */
/*           *   *        *             *        *             *   *     *        *        *   *         *   *   *     *             */
/*                        *             *        * * *         *    *    *        *        *   *         *   *    *    *             */
/*          * * * *       *             *        *             *     *   *        *        *   *         *   *     *   *             */
/*                        *             *        *             *      *  *        *        *   *         *   *      *  *             */
/*         *       *      *             *        *             *       * *        *        *   *         *   *       * *             */
/*                        *             *        *             *        **        *        *   *         *   *        **             */
/*        *         *     *             *        * * * * * *   *         *        *        *   * * * * * *   *         *             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        ATTENTION :                                                                                                                */
/*                                                                                                                                   */
/*                    On notera le 20240419142725 que le 'Z-Buffer'                                                                  */
/*                  peut etre initialise par un autre moyen tel                                                                      */
/*                  'v $xrv/champs_5.12$I INITIALISATION_DU_Z_BUFFER_D_UNE_IMAGE'                                                    */
/*                  auquel cas ce n'est pas :                                                                                        */
/*                                                                                                                                   */
/*                                      ZBuffer_initial=...                                                                          */
/*                                                                                                                                   */
/*                  ('v $xrv/champs_5.1A$I Z_Buffer_____valeur_initiale')                                                            */
/*                  qu'il faut utiliser, mais :                                                                                      */
/*                                                                                                                                   */
/*                                      Z0=...                                                                                       */
/*                                                                                                                                   */
/*                  ('v $xrv/champs_5.1A$I valeur_de_la_valeur_d_initialisation_du_Z_Buffer').                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(genere_Float,ZINT(Z_Buffer_____valeur_initiale,F_MOINS_LE_PETIT_INFINI)));
                                        /* Valeur initiale de tous les points du 'Z-Buffer' ('v $xci/montagne.01$K'). On notera que  */
                                        /* l'on utilise 'F_MOINS_LE_PETIT_INFINI' et non pas 'F_MOINS_L_INFINI' afin de prevenir des */
                                        /* debordements ulterieurs (par exemple dans '$xci/acces$K').                                */

BFonctionI

DEFV(Common,DEFV(FonctionI,Iinit_Z_Buffer()))
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     CALS(IFinitialisation(Z_Buffer,Z_Buffer_____valeur_initiale));
                                        /* On fait comme si tous les points etaient tres tres tres loins...                          */
     RETU_ERROR;
     Eblock

EFonctionI

BFonctionI

DEFV(Common,DEFV(FonctionI,Iinit_Z_Buffer_accumule()))
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     CALS(IFinitialisation(Z_Buffer_accumule,Z_Buffer_____valeur_initiale));
                                        /* On fait comme si tous les points etaient tres tres tres loins...                          */
     RETU_ERROR;
     Eblock

EFonctionI

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

BFonctionD

DEFV(Common,DEFV(FonctionD,POINTERD(IDinitialisation(imageR,valeur))))
DEFV(Argument,DEFV(imageD,imageR));
                                        /* Image resultat a initialiser.                                                             */
DEFV(Argument,DEFV(genere_Double,valeur));
                                        /* Valeur initiale a donner a tous les elements de l'image resultat.                         */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR
                                                                  ,BLOC(begin_image
                                                                             Bblock
                                                                             storeD_point(valeur,imageR,X,Y);
                                        /* Initialisation element par element.                                                       */
                                                                             Eblock
                                                                        end_image
                                                                        )
                                                                  ,BLOC(CAL1(Prer1("niveau d'initialisation=%f\n"
                                                                                  ,valeur
                                                                                   )
                                                                             );
                                                                        )
                                                                   );
     RETID(imageR);
     Eblock

EFonctionD

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N I T I A L I S A T I O N   D ' U N E   I M A G E   C O M P L E X E  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionJ

DEFV(Common,DEFV(FonctionJ,POINTERJ(IJinitialisation(imageR,ARGUMENT_POINTERs(valeur)))))
DEFV(Argument,DEFV(imageJ,imageR));
                                        /* Image resultat a initialiser.                                                             */
DEFV(Argument,DEFV(complexe,POINTERs(valeur)));
                                        /* Valeur initiale a donner a tous les elements de l'image resultat.                         */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR
                                                                  ,BLOC(begin_image
                                                                             Bblock
                                                                             storeJ_point(INDIRECT(valeur),imageR,X,Y);
                                        /* Initialisation element par element.                                                       */
                                                                             Eblock
                                                                        end_image
                                                                        )
                                                                  ,BLOC(CAL1(Prer2("niveau d'initialisation=(%f,%f)\n"
                                                                                  ,Reelle(INDIRECT(valeur))
                                                                                  ,Imaginaire(INDIRECT(valeur))
                                                                                   )
                                                                             );
                                                                        )
                                                                   );
     RETIJ(imageR);
     Eblock

EFonctionJ

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N I T I A L I S A T I O N   D ' U N E   I M A G E   H Y P E R - C O M P L E X E  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BFonctionHJ
DEFV(Common,DEFV(FonctionHJ,POINTERHJ(IHJinitialisation(imageR,ARGUMENT_POINTERs(valeur)))))
DEFV(Argument,DEFV(imageHJ,imageR));
                                        /* Image resultat a initialiser.                                                             */
DEFV(Argument,DEFV(hyper_complexe,POINTERs(valeur)));
                                        /* Valeur initiale a donner a tous les elements de l'image resultat.                         */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR
                                                                  ,BLOC(begin_image
                                                                             Bblock
                                                                             storeHJ_point(INDIRECT(valeur),imageR,X,Y);
                                        /* Initialisation element par element.                                                       */
                                                                             Eblock
                                                                        end_image
                                                                        )
                                                                  ,BLOC(CAL1(Prer4("niveau d'initialisation=(%f,%f,%f,%f)\n"
                                                                                  ,HReelle(INDIRECT(valeur))
                                                                                  ,HImaginaire(INDIRECT(valeur))
                                                                                  ,HJmaginaire(INDIRECT(valeur))
                                                                                  ,HKmaginaire(INDIRECT(valeur))
                                                                                   )
                                                                             );
                                                                        )
                                                                   );
     RETIHJ(imageR);
     Eblock
EFonctionHJ

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N I T I A L I S A T I O N   D ' U N E   I M A G E   H Y P E R - H Y P E R - C O M P L E X E  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BFonctionHHJ
DEFV(Common,DEFV(FonctionHHJ,POINTERHHJ(IHHJinitialisation(imageR,ARGUMENT_POINTERs(valeur)))))
                                        /* Fonction introduite le 20150227101603...                                                  */
DEFV(Argument,DEFV(imageHHJ,imageR));
                                        /* Image resultat a initialiser.                                                             */
DEFV(Argument,DEFV(hyper_hyper_complexe,POINTERs(valeur)));
                                        /* Valeur initiale a donner a tous les elements de l'image resultat.                         */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR
                                                                  ,BLOC(begin_image
                                                                             Bblock
                                                                             storeHHJ_point(INDIRECT(valeur),imageR,X,Y);
                                        /* Initialisation element par element.                                                       */
                                                                             Eblock
                                                                        end_image
                                                                        )
                                                                  ,BLOC(CAL1(Prer8("niveau d'initialisation=(%f,%f,%f,%f)\n"
                                                                                  ,HHReelle(INDIRECT(valeur))
                                                                                  ,HHImaginaire(INDIRECT(valeur))
                                                                                  ,HHJmaginaire(INDIRECT(valeur))
                                                                                  ,HHKmaginaire(INDIRECT(valeur))
                                                                                  ,HHSmaginaire(INDIRECT(valeur))
                                                                                  ,HHTmaginaire(INDIRECT(valeur))
                                                                                  ,HHUmaginaire(INDIRECT(valeur))
                                                                                  ,HHVmaginaire(INDIRECT(valeur))
                                                                                   )
                                                                             );
                                                                        )
                                                                   );
     RETIHHJ(imageR);
     Eblock
EFonctionHHJ

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

BFonctionJ

DEFV(Common,DEFV(FonctionJ,POINTERJ(IJinitialisation_matrice_de_brouillage(imageR))))
DEFV(Argument,DEFV(imageJ,imageR));
                                        /* Image resultat a initialiser, telle que imageR[X][Y] = X+iY ('X' et 'Y' dans [0,1]).      */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(complexe,valeur_courante);
                                        /* Valeur initiale a donner a l'element courant {X,Y} de l'image Resultat.                   */
     /*..............................................................................................................................*/
     INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR
                                                                  ,BLOC(begin_image
                                                                             Bblock
                                                                             Cinitialisation(valeur_courante
                                                                                            ,_____cNORMALISE_OX(X)
                                                                                            ,_____cNORMALISE_OY(Y)
                                                                                             );
                                        /* Initialisation element par element avec la valeur X+iY.                                   */
                                                                             storeJ_point(valeur_courante,imageR,X,Y);
                                        /* Initialisation element par element.                                                       */
                                                                             Eblock
                                                                        end_image
                                                                        )
                                                                  ,BLOC(CAL1(Prer0("niveau d'initialisation variable\n"
                                                                                   )
                                                                             );
                                                                        )
                                                                   );
     RETIJ(imageR);
     Eblock

EFonctionJ

#ifdef    GESTION_DES_IMAGES_STATIQUES_VERSION_01
#    undef     INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES
#Aifdef   GESTION_DES_IMAGES_STATIQUES_VERSION_01
#Eifdef   GESTION_DES_IMAGES_STATIQUES_VERSION_01

#ifdef    GESTION_DES_IMAGES_STATIQUES_VERSION_02
#    undef     INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES
#Aifdef   GESTION_DES_IMAGES_STATIQUES_VERSION_02
#Eifdef   GESTION_DES_IMAGES_STATIQUES_VERSION_02

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L A   T R A N S F O R M A T I O N   D E S                                                      */
/*        C O O R D O N N E E S   T R I D I M E N S I O N N E L L L E S                                                              */
/*        L O R S   D E   L ' I N I T I A L I S A T I O N   D ' U N E   I M A G E   P A R   U N E   F O N C T I O N  :               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* ATTENTION : le 20080408093157, j'ai voulu mettre ici le :                                 */
                                        /*                                                                                           */
                                        /*                  BFonctionF                                                               */
                                        /*                                                                                           */
                                        /* de 'IFgenere_champ(...)'. Mais malheusement, cela n'est pas tres logique car, en effet    */
                                        /* les deux procedures 'begin_TRANSFORMATION_DES_COORDONNEES_XYZ(...)' et                    */
                                        /* 'end_TRANSFORMATION_DES_COORDONNEES_XYZ(...)' ne sont pas utilisees uniquement par la     */
                                        /* fonction 'IFgenere_champ(...)', mais aussi par les deux fonctions 'Igenere_champ(...)'    */
                                        /* et 'IJgenere_champ(...)'. D'ou le retablissement de la localisation anterieure de ce      */
                                        /* 'BFonctionF'...                                                                           */

DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____centrer_X,FAUX)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____OX,COORDONNEE_BARYCENTRIQUE_MINIMALE)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____EX,COORDONNEE_BARYCENTRIQUE_MAXIMALE)));
DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____centrer_Y,FAUX)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____OY,COORDONNEE_BARYCENTRIQUE_MINIMALE)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____EY,COORDONNEE_BARYCENTRIQUE_MAXIMALE)));
                                        /* Definition d'une fenetre de renormalisation des coordonnees {{OX,OY},{EX,EY}}             */
                                        /* introduite le 20100210082859...                                                           */
                                        /*                               .                                                           */
                                        /* Les options de centrage ont ete introduites le 20170602125747...                          */

DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____rapport_courant_du_zoom,ABSENCE_D_EFFET_DE_ZOOM)));
                                        /* Definition du rapport courant de zoom (introduit le 20060622184543).                      */
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____angle_de_ROTATION_OX,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____angle_de_ROTATION_OY,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____angle_de_ROTATION_OZ,FZERO)));
                                        /* Definition de la matrice de rotation (introduite le 20060516091854).                      */
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____translation_OX,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____translation_OY,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____translation_OZ,FZERO)));
                                        /* Definition de la translation (introduite le 20060516091854).                              */
DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____initialiser_la_matrice_avec_les_rotations,VRAI)));
DEFV(Local,DEFV(Logical,INIT(ACCES_A_UN_CHAMP_3D_____initialiser_la_matrice_de_rotation,VRAI)));
                                        /* Afin de permettre l'initialisation de la matrice de rotation...                           */
                                        /*                                                                                           */
                                        /* L'indicateur 'ACCES_A_UN_CHAMP_3D_____initialiser_la_matrice_avec_les_rotations' a ete    */
                                        /* introduit le 20060517105000...                                                            */

/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   D E S   C O O R D O N N E E S   M O D U L O  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_les_coordonnees_modulo,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_X_modulo,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Y_modulo,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Z_modulo,VRAI)));

DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_X_modulo
                           ,COORDONNEE_BARYCENTRIQUE_MINIMALE
                            )
                 )
     );
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_X_modulo
                           ,COORDONNEE_BARYCENTRIQUE_MAXIMALE
                            )
                 )
     );
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Y_modulo
                           ,COORDONNEE_BARYCENTRIQUE_MINIMALE
                            )
                 )
     );
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Y_modulo
                           ,COORDONNEE_BARYCENTRIQUE_MAXIMALE
                            )
                 )
     );
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Z_modulo
                           ,COORDONNEE_BARYCENTRIQUE_MINIMALE
                            )
                 )
     );
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Z_modulo
                           ,COORDONNEE_BARYCENTRIQUE_MAXIMALE
                            )
                 )
     );

#define   TRANSFORMATION_DES_COORDONNEES_XYZ__modulo(x,y,z,t,ASID1,trans_champ,scale)                                                   \
                                        /* Procedure introduite le 20181002114537...                                                 */ \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____calculer_les_coordonnees_modulo))                                              \
                         Bblock                                                                                                         \
                         EGAL(Xf_transformee                                                                                            \
                             ,COND(IL_NE_FAUT_PAS(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_X_modulo)                              \
                                  ,Xf_transformee                                                                                       \
                                  ,MODF(Xf_transformee                                                                                  \
                                       ,ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_X_modulo                              \
                                       ,ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_X_modulo                              \
                                        )                                                                                               \
                                   )                                                                                                    \
                              );                                                                                                        \
                         EGAL(Yf_transformee                                                                                            \
                             ,COND(IL_NE_FAUT_PAS(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Y_modulo)                              \
                                  ,Yf_transformee                                                                                       \
                                  ,MODF(Yf_transformee                                                                                  \
                                       ,ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Y_modulo                              \
                                       ,ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Y_modulo                              \
                                        )                                                                                               \
                                   )                                                                                                    \
                              );                                                                                                        \
                         EGAL(Zf_transformee                                                                                            \
                             ,COND(IL_NE_FAUT_PAS(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Z_modulo)                              \
                                  ,Zf_transformee                                                                                       \
                                  ,MODF(Zf_transformee                                                                                  \
                                       ,ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Z_modulo                              \
                                       ,ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Z_modulo                              \
                                        )                                                                                               \
                                   )                                                                                                    \
                              );                                                                                                        \
                                        /* Calcul modulo des coordonnees introduit le 20060626111858...                              */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock

/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   D E S   C O O R D O N N E E S   P A R   S Y M E T R I S A T I O N  :                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_les_coordonnees_symetriquement,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_X_symetriquement,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Y_symetriquement,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Z_symetriquement,VRAI)));

DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_X_symetrique
                           ,COORDONNEE_BARYCENTRIQUE_MINIMALE
                            )
                 )
     );
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_X_symetrique
                           ,COORDONNEE_BARYCENTRIQUE_MAXIMALE
                            )
                 )
     );
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Y_symetrique
                           ,COORDONNEE_BARYCENTRIQUE_MINIMALE
                            )
                 )
     );
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Y_symetrique
                           ,COORDONNEE_BARYCENTRIQUE_MAXIMALE
                            )
                 )
     );
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Z_symetrique
                           ,COORDONNEE_BARYCENTRIQUE_MINIMALE
                            )
                 )
     );
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Z_symetrique
                           ,COORDONNEE_BARYCENTRIQUE_MAXIMALE
                            )
                 )
     );
                                        /* Introduit le 20060626111858 pour permettre un calcul modulo des coordonnees {X,Y,Z}       */
                                        /* apres une eventuelle transformation geometrique...                                        */
                                        /*                                                                                           */
                                        /* ATTENTION : en general, les coordonnees {X,Y} sont dans les segments suivants :           */
                                        /*                                                                                           */
                                        /*                  X E [-1/2,+1/2]                                                          */
                                        /*                  Y E [-1/2,+1/2]                                                          */
                                        /*                                                                                           */
                                        /* alors que les bornes inferieures et superieures ci-dessus sont a priori {0,1}. En fait    */
                                        /* les procedures 'ACCES_A_LA_COORDONNEE_?_D_UN_CHAMP_3D(...)' mettent evidemment dans un    */
                                        /* premier temps les coordonnees dans [0,1] via '_____cNORMALISE_O?(...)' ; mais dans un     */
                                        /* second temps ces valeurs dans [0,1] subissent une "anti-translation" (via un 'SOUS(...)') */
                                        /* definie le vecteur 'trans_champ' dont les composantes sont en general egales a {1/2,1/2}  */
                                        /* ('v $xci/genere_ch.01$I ._TRANSLATION'). Ainsi, les coordonnees {X,Y} se retrouvent alors */
                                        /* en general dans [-1/2,+1/2]... Pour les bornes inferieures et superieures definies ici,   */
                                        /* on pourrait passer a [-1/2,+1/2], mais il preferable de privilegier la compatibilite      */
                                        /* anterieure. Cela signifie donc que lors de l'utilisation du "modulo" et/ou de la          */
                                        /* "symetrie", il conviendra en general de modifier certaines de ces six bornes              */
                                        /* inferieures et superieures...                                                             */
                                        /*                                                                                           */
                                        /* La possibilite de ne pas faire le "modulo" sur les trois coordonnees {X,Y,Z} a ete        */
                                        /* introduite le 20071107134417, en garantissant la compatibilite anterieure...              */
                                        /*                                                                                           */
                                        /* La possibilite de symetriser les coordonnees fut introduite le 20071107134417...          */
                                        /*                                                                                           */
                                        /* On notera que lors de l'utilisation du "modulo" et/ou de la "symetrie", on pourra         */
                                        /* utiliser les options suivantes :                                                          */
                                        /*                                                                                           */
                                        /*                  carre_X_CHAMP_3D=FAUX                                                    */
                                        /*                  carre_Y_CHAMP_3D=FAUX                                                    */
                                        /*                                                                                           */
                                        /* ('v $xig/fonct$vv$DEF carre_._CHAMP_3D=').                                                */
                                        /*                                                                                           */
                                        /* Le 20071107172302, les bornes inferieures et superieures ont ete rendues specifiques      */
                                        /* du "modulo" et/ou de la "symetrie"...                                                     */

#define   TRANSFORMATION_DES_COORDONNEES_XYZ__par_symetrisation(x,y,z,t,ASID1,trans_champ,scale)                                        \
                                        /* Procedure introduite le 20181002114537...                                                 */ \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____calculer_les_coordonnees_symetriquement))                                      \
                         Bblock                                                                                                         \
                         EGAL(Xf_transformee                                                                                            \
                             ,COND(IL_NE_FAUT_PAS(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_X_symetriquement)                      \
                                  ,Xf_transformee                                                                                       \
                                  ,SYME(Xf_transformee                                                                                  \
                                       ,ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_X_symetrique                          \
                                       ,ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_X_symetrique                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                              );                                                                                                        \
                         EGAL(Yf_transformee                                                                                            \
                             ,COND(IL_NE_FAUT_PAS(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Y_symetriquement)                      \
                                  ,Yf_transformee                                                                                       \
                                  ,SYME(Yf_transformee                                                                                  \
                                       ,ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Y_symetrique                          \
                                       ,ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Y_symetrique                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                              );                                                                                                        \
                         EGAL(Zf_transformee                                                                                            \
                             ,COND(IL_NE_FAUT_PAS(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Z_symetriquement)                      \
                                  ,Zf_transformee                                                                                       \
                                  ,SYME(Zf_transformee                                                                                  \
                                       ,ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Z_symetrique                          \
                                       ,ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Z_symetrique                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                              );                                                                                                        \
                                        /* Calcul "symetrique" des coordonnees introduit le 20071107134417...                        */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock

/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   D E S   C O O R D O N N E E S   P A R   C O M B I N A I S O N   L I N E A I R E  :           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____combiner_lineairement_les_coordonnees_XYZ,FAUX)));

DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_X,FU)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_translation,FZERO)));

DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_Y,FU)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_translation,FZERO)));

DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_Z,FU)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_translation,FZERO)));
                                        /* Introduit le 20090206100827 afin de permettre, par exemple, de permuter des coordonnees.  */
                                        /* Ainsi, par exemple :                                                                      */
                                        /*                                                                                           */
                                        /*                  pXX=0 pXZ=1                                                              */
                                        /*                  pZZ=0 pZX=1                                                              */
                                        /*                                                                                           */
                                        /* permettra de permuter les coordonnees 'X' et 'Z'. Evidemment, les valeurs par defaut      */
                                        /* garantissent la neutralite du processus et donc la compatibilite anterieure...            */
                                        /*                                                                                           */
                                        /* Le 20090915100026 furent introduites les trois translations de {X,Y,Z} afin, par exemple, */
                                        /* de pouvoir translater le resultat du modulo effectue juste avant...                       */

#define   TRANSFORMATION_DES_COORDONNEES_XYZ__par_combinaison_lineaire(x,y,z,t,ASID1,trans_champ,scale)                                 \
                                        /* Procedure introduite le 20181002114537...                                                 */ \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____combiner_lineairement_les_coordonnees_XYZ))                                    \
                         Bblock                                                                                                         \
                         DEFV(Float,INIT(Xf_permute                                                                                     \
                                        ,LIN3(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_X,Xf_transformee                    \
                                             ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_Y,Yf_transformee                    \
                                             ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_Z,Zf_transformee                    \
                                             ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_translation                         \
                                              )                                                                                         \
                                         )                                                                                              \
                              );                                                                                                        \
                         DEFV(Float,INIT(Yf_permute                                                                                     \
                                        ,LIN3(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_X,Xf_transformee                    \
                                             ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_Y,Yf_transformee                    \
                                             ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_Z,Zf_transformee                    \
                                             ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_translation                         \
                                              )                                                                                         \
                                         )                                                                                              \
                              );                                                                                                        \
                         DEFV(Float,INIT(Zf_permute                                                                                     \
                                        ,LIN3(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_X,Xf_transformee                    \
                                             ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_Y,Yf_transformee                    \
                                             ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_Z,Zf_transformee                    \
                                             ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_translation                         \
                                              )                                                                                         \
                                         )                                                                                              \
                              );                                                                                                        \
                                                                                                                                        \
                         EGAL(Xf_transformee,Xf_permute);                                                                               \
                         EGAL(Yf_transformee,Yf_permute);                                                                               \
                         EGAL(Zf_transformee,Zf_permute);                                                                               \
                                        /* Combinaison lineaire des {Xf,Yf,Zf} introduit le 20090206100827, par exemple, pour        */ \
                                        /* effectuer des permutations entre-elles...                                                 */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock

/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   D E S   C O O R D O N N E E S   P A R                                                        */
/*        A P P L I C A T I O N   D E   F O N C T I O N S   E L E M E N T A I R E S  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                             ,FAUX
                              )
                 )
     );

#ifdef    ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17                         /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'...     */
                                        /* Introduit le 20190203103030...                                                            */
DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____FfLIOH_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                             ,FAUX
                              )
                 )
     );
#Aifdef   ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17                         /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'...     */
#Eifdef   ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17                         /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'...     */

                                        /* Afin de choisir entre l'arithmetique "de base" et l'arithmetique "etendue" dans           */
                                        /* 'FfLIO17(...)' (introduit le 20080327102433).                                             */
                                        /*                                                                                           */
                                        /* Le 20190202114212 a ete introduit 'FfLIOH' en parallele a 'FfLIO17' afin d'assurer        */
                                        /* la compatibilite anterieure sans faire toutes les compilations necessaires (et cela       */
                                        /* en particulier sur '$LACT19'...).                                                         */
DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____appliquer_aux_coordonnees_des_fonctions_elementaires,FAUX)));
                                        /* Afin de controler l'application de fonctions elementaires aux coordonnees {Xf,Yf,Zf}      */
                                        /* (introduit le 20080325151034).                                                            */

DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_NEUT_X,FU)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_ACOX_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_ASIX_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_COHX_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_COSX_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CSEX_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CTGX_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CTHX_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_EXPX_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_LOGX_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_RACX_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SECX_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SICX_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SIHX_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SINX_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_TAHX_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_TANX_X,FZERO)));
                                        /* Ponderations des fonctions de la coordonnee 'X' initialise sur 'NEUT(...)' par defaut     */
                                        /* (introduit le 20080325151034).                                                            */
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_NEUT_Y,FU)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_ACOX_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_ASIX_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_COHX_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_COSX_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CSEX_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CTGX_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CTHX_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_EXPX_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_LOGX_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_RACX_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SECX_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SICX_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SIHX_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SINX_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_TAHX_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_TANX_Y,FZERO)));
                                        /* Ponderations des fonctions de la coordonnee 'Y' initialise sur 'NEUT(...)' par defaut     */
                                        /* (introduit le 20080325151034).                                                            */
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_NEUT_Z,FU)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_ACOX_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_ASIX_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_COHX_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_COSX_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CSEX_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CTGX_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CTHX_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_EXPX_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_LOGX_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_RACX_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SECX_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SICX_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SIHX_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SINX_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_TAHX_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_TANX_Z,FZERO)));
                                        /* Ponderations des fonctions de la coordonnee 'Z' initialise sur 'NEUT(...)' par defaut     */
                                        /* (introduit le 20080325151034).                                                            */

#ifdef    ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17                         /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'...     */
                                        /* Introduit le 20190203103030...                                                            */
#    define    ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue                                                      \
                         IFOU(ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base     \
                             ,ACCES_A_UN_CHAMP_3D_____FfLIOH_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base      \
                              )
#Aifdef   ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17                         /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'...     */
#    define    ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue                                                      \
                         ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
#Eifdef   ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17                         /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'...     */

                                        /* Afin de raccourcir une ligne a venir (introduit le 20090930115352...).                    */
                                        /*                                                                                           */
                                        /* Le 20190202114212 a ete introduit 'FfLIOH' en parallele a 'FfLIO17' afin d'assurer        */
                                        /* la compatibilite anterieure sans faire toutes les compilations necessaires (et cela       */
                                        /* en particulier sur '$LACT19'...).                                                         */

#define   FONCTIONS_1_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(coordonnee,nom_de_la_coordonnee)                                            \
                    FfLIO17(ACCES_A_UN_CHAMP_3D_____ponderation_NEUT`nom_de_la_coordonnee,NEUT(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_ACOX`nom_de_la_coordonnee,ACOX(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_ASIX`nom_de_la_coordonnee,ASIX(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_COHX`nom_de_la_coordonnee,COHX(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_COSX`nom_de_la_coordonnee,COSX(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_CSEX`nom_de_la_coordonnee,CSEX(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_CTGX`nom_de_la_coordonnee,CTGX(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_CTHX`nom_de_la_coordonnee,CTHX(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_EXPX`nom_de_la_coordonnee,EXPX(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_LOGX`nom_de_la_coordonnee,LOGO(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_RACX`nom_de_la_coordonnee,RACO(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_SECX`nom_de_la_coordonnee,SECX(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_SICX`nom_de_la_coordonnee,SICX(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_SIHX`nom_de_la_coordonnee,SIHX(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_SINX`nom_de_la_coordonnee,SINX(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_TAHX`nom_de_la_coordonnee,TAHX(coordonnee)                              \
                           ,ACCES_A_UN_CHAMP_3D_____ponderation_TANX`nom_de_la_coordonnee,TANX(coordonnee)                              \
                           ,FZERO                                                                                                       \
                            )                                                                                                           \
                                        /* Afin de pouvoir transformer les coordonnees a l'aide de combinaisons lineaires de         */ \
                                        /* fonctions elementaires (introduit le 20080325151034).                                     */ \
                                        /*                                                                                           */ \
                                        /* Le 20220130102633, 'LOGX(ADD2(ABSO(coordonnee),EXPX(FZERO))' et 'RACX(ABSO(coordonnee)'   */ \
                                        /* ont ete remplaces respectivement par 'LOGO(coordonnee)' et 'RACO(coordonnee)'...          */

#define   TRANSFORMATION_DES_COORDONNEES_XYZ__par_application_de_fonctions_elementaires(x,y,z,t,ASID1,trans_champ,scale)                \
                                        /* Procedure introduite le 20181002114537...                                                 */ \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____appliquer_aux_coordonnees_des_fonctions_elementaires))                         \
                         Bblock                                                                                                         \
                         BSaveModifyVariable(Logical                                                                                    \
                                            ,FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base              \
                                            ,ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue                        \
                                             );                                                                                         \
                                        /* Afin de choisir entre l'arithmetique "de base" et l'arithmetique "etendue" dans           */ \
                                        /* 'FfLIO17(...)' (introduit le 20080327102433).                                             */ \
                                                                                                                                        \
                         EGAL(Xf_transformee,FONCTIONS_1_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(Xf_transformee,X));                      \
                         EGAL(Yf_transformee,FONCTIONS_1_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(Yf_transformee,Y));                      \
                         EGAL(Zf_transformee,FONCTIONS_1_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(Zf_transformee,Z));                      \
                                        /* Dispositif introduit le 20080325151034...                                                 */ \
                                                                                                                                        \
                         ESaveModifyVariable(Logical                                                                                    \
                                            ,FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base              \
                                             );                                                                                         \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock

/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   D E S   C O O R D O N N E E S                                                                */
/*        P A R   R A P P O R T   D E   T R A N S F O R M A T I O N S   H O M O G R A P H I Q U E S  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____appliquer_aux_coordonnees_une_transformation_homographique,FAUX)));
                                        /* Afin de controler l'application d'un fonction homographique aux coordonnees {Xf,Yf,Zf}    */
                                        /* (introduit le 20180930111810).                                                            */

DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a111_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a110_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a101_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a100_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a011_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a010_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a001_X,FU)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a000_X,FZERO)));

DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a111_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a110_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a101_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a100_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a011_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a010_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a001_X,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a000_X,FU)));

DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a111_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a110_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a101_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a100_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a011_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a010_Y,FU)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a001_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a000_Y,FZERO)));

DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a111_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a110_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a101_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a100_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a011_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a010_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a001_Y,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a000_Y,FU)));

DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a111_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a110_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a101_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a100_Z,FU)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a011_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a010_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a001_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a000_Z,FZERO)));

DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a111_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a110_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a101_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a100_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a011_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a010_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a001_Z,FZERO)));
DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a000_Z,FU)));

#define   FONCTIONS_2_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(nom_de_la_coordonnee)                                                       \
                    DIVI(HORNER_3_01(Xf_avant_homographique,Yf_avant_homographique,Zf_avant_homographique                               \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a111`nom_de_la_coordonnee                         \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a110`nom_de_la_coordonnee                         \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a101`nom_de_la_coordonnee                         \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a100`nom_de_la_coordonnee                         \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a011`nom_de_la_coordonnee                         \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a010`nom_de_la_coordonnee                         \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a001`nom_de_la_coordonnee                         \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a000`nom_de_la_coordonnee                         \
                                     )                                                                                                  \
                        ,HORNER_3_01(Xf_avant_homographique,Yf_avant_homographique,Zf_avant_homographique                               \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a111`nom_de_la_coordonnee                         \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a110`nom_de_la_coordonnee                         \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a101`nom_de_la_coordonnee                         \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a100`nom_de_la_coordonnee                         \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a011`nom_de_la_coordonnee                         \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a010`nom_de_la_coordonnee                         \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a001`nom_de_la_coordonnee                         \
                                    ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a000`nom_de_la_coordonnee                         \
                                     )                                                                                                  \
                         )                                                                                                              \
                                        /* Afin de pouvoir transformer les coordonnees a l'aide de fonctions homographiques          */ \
                                        /* (introduit le 20180930111810).                                                            */

#define   TRANSFORMATION_DES_COORDONNEES_XYZ__par_rapport_de_transformations_homographiques(x,y,z,t,ASID1,trans_champ,scale)            \
                                        /* Procedure introduite le 20181002114537...                                                 */ \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____appliquer_aux_coordonnees_une_transformation_homographique))                   \
                         Bblock                                                                                                         \
                         DEFV(Float,INIT(Xf_avant_homographique,Xf_transformee));                                                       \
                         DEFV(Float,INIT(Yf_avant_homographique,Yf_transformee));                                                       \
                         DEFV(Float,INIT(Zf_avant_homographique,Zf_transformee));                                                       \
                                                                                                                                        \
                         EGAL(Xf_transformee,FONCTIONS_2_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(X));                                     \
                         EGAL(Yf_transformee,FONCTIONS_2_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(Y));                                     \
                         EGAL(Zf_transformee,FONCTIONS_2_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(Z));                                     \
                                        /* Dispositif introduit le 20180930111810...                                                 */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock

/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   D E S   C O O R D O N N E E S                                                                */
/*        P A R   P E R M U T A T I O N   C A R T E S I E N N E S - S P H E R I Q U E S  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____transformer_les_coordonnees_cartesiennes_en_coordonnees_spheriques,FAUX)));
                                        /* Afin de permettre la substitution arbitraire : {Xf,Yf,Zf} ==> {Rho_,Phi_,Theta}...        */
                                        /* (introduit le 20080922121610).                                                            */

#define   TRANSFORMATION_DES_COORDONNEES_XYZ__par_permutation_cartesiennes_spheriques(x,y,z,t,ASID1,trans_champ,scale)                  \
                                        /* Procedure introduite le 20181002114537...                                                 */ \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____transformer_les_coordonnees_cartesiennes_en_coordonnees_spheriques))           \
                                        /* Possibilite "folklorique" introduite le 20080922121610...                                 */ \
                         Bblock                                                                                                         \
                         DEFV(Float,INIT(Rho_,Rho_3D(Xf_transformee,Yf_transformee,Zf_transformee)));                                   \
                         DEFV(Float,INIT(Phi_,Phi_3D(Xf_transformee,Yf_transformee,Zf_transformee)));                                   \
                         DEFV(Float,INIT(Theta,Theta_3D(Xf_transformee,Yf_transformee,Zf_transformee)));                                \
                                        /* Calcul de {Rho,Phi,Theta}...                                                              */ \
                                                                                                                                        \
                         EGAL(Xf_transformee,SE13(Rho_,Phi_,Theta));                                                                    \
                         EGAL(Yf_transformee,SE23(Rho_,Phi_,Theta));                                                                    \
                         EGAL(Zf_transformee,SE33(Rho_,Phi_,Theta));                                                                    \
                                        /* Correspondance arbitraire {Xf,Yf,Zf} == {Rho_,Phi_,Theta}...                              */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock

/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   G E N E R A L E   D E S   C O O R D O N N E E S  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____x_Minimal,F_MOINS_L_INFINI)));
DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____x_Maximal,F_INFINI)));

DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____y_Minimal,F_MOINS_L_INFINI)));
DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____y_Maximal,F_INFINI)));

DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____z_Minimal,F_MOINS_L_INFINI)));
DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____z_Maximal,F_INFINI)));

DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____t_Minimal,F_MOINS_L_INFINI)));
DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____t_Maximal,F_INFINI)));
                                        /* Parametres introduits le 20240524144045 afin de pouvoir generer des "sous-champs"...      */
                                        /*                                                                                           */
                                        /* On notera qu'en regle generale, si "carre_X_CHAMP_3D=FAUX" :                              */
                                        /*                                                                                           */
                                        /*                  x_normalisee E [-0.5x(dimX/dimY),+0.5x(dimX/dimY)]                       */
                                        /*                  y_normalisee E [-0.5,+0.5]                                               */
                                        /*                                                                                           */
                                        /* ce qui se simplifie en :                                                                  */
                                        /*                                                                                           */
                                        /*                  x_normalisee E [-0.5,+0.5]                                               */
                                        /*                  y_normalisee E [-0.5,+0.5]                                               */
                                        /*                                                                                           */
                                        /* si les images sont carrees...                                                             */

#define   begin_TRANSFORMATION_DES_COORDONNEES_XYZ(x,y,z,t,ASID1,trans_champ,scale)                                                     \
                                        /* Le parametre 't' fut introduit le 20100209100622 et n'est a priori pas modifie ci-apres.  */ \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(x_normalisee,ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D(x,y,z,t,ASID1,trans_champ,scale)));              \
                    DEFV(Float,INIT(y_normalisee,ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D(x,y,z,t,ASID1,trans_champ,scale)));              \
                    DEFV(Float,INIT(z_normalisee,z));                                                                                   \
                    DEFV(Float,INIT(t_normalisee,t));                                                                                   \
                                        /* Definition des coordonnees {x,y,z} apres normalisation eventuelle...                      */ \
                                        /*                                                                                           */ \
                                        /* On rappelle le 20180930111217 qu'en general et par defaut, les coordonnees sont ici       */ \
                                        /* centrees ('v $xci/genere_ch.01$I _TRANSLATION'). L'origine des coordonnees {X,Y} est      */ \
                                        /* donc en general et par defaut le centre de l'image...                                     */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, je note le 20150403184751 (lors de la generation d'images obtenues via         */ \
                                        /* 'v $xiirv/.SCOS.11.1.$U') que meme si :                                                   */ \
                                        /*                                                                                           */ \
                                        /*        Tx=0                                                                               */ \
                                        /*        Ty=0                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                  trans_champ={0,0}                                                        */ \
                                        /*                                                                                           */ \
                                        /*                       ('v $xci/genere_ch.11$I ASD1.translation.dx.')                      */ \
                                        /*                                                                                           */ \
                                        /* et si :                                                                                   */ \
                                        /*                                                                                           */ \
                                        /*        TRANSLATION_OX=0                                                                   */ \
                                        /*        TRANSLATION_OY=0                                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  {Xf_transformee,Yf_transformee}Zf_transformee} ci-apres                  */ \
                                        /*                                                                                           */ \
                                        /*                       ('v $xci/genere_ch.11$I ACCES_A_UN_CHAMP_3D_____translation_O.')    */ \
                                        /*                                                                                           */ \
                                        /* on peut avoir translation des {x_normalisee,y_normalisee} et ce a cause de :              */ \
                                        /*                                                                                           */ \
                                        /*        xbg=...                                                                            */ \
                                        /*        ybg=...                                                                            */ \
                                        /*        xhd=...                                                                            */ \
                                        /*        yhd=...                                                                            */ \
                                        /*                                                                                           */ \
                                        /*                  {ACCES_A_UN_CHAMP_3D_____OX,ACCES_A_UN_CHAMP_3D_____EX}                  */ \
                                        /*                  {ACCES_A_UN_CHAMP_3D_____OY,ACCES_A_UN_CHAMP_3D_____EY}                  */ \
                                        /*                       ('v $xci/genere_ch.11$I ACCES_A_UN_CHAMP_3D_____O.')                */ \
                                        /*                                                                                           */ \
                                        /* qui par defaut sont de part et d'autre de l'origine, soit par defaut :                    */ \
                                        /*                                                                                           */ \
                                        /*        xbg=-0.5                                                                           */ \
                                        /*        ybg=-0.5                                                                           */ \
                                        /*        xhd=+0.5                                                                           */ \
                                        /*        yhd=+0.5                                                                           */ \
                                        /*                                                                                           */ \
                                        /* ce qui provoque par defaut des translations {-1/2,-1/2}...                                */ \
                    Test(I4ET(INCLff(x_normalisee                                                                                       \
                                    ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____x_Minimal                                             \
                                    ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____x_Maximal                                             \
                                     )                                                                                                  \
                             ,INCLff(y_normalisee                                                                                       \
                                    ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____y_Minimal                                             \
                                    ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____y_Maximal                                             \
                                     )                                                                                                  \
                             ,INCLff(z_normalisee                                                                                       \
                                    ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____z_Minimal                                             \
                                    ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____z_Maximal                                             \
                                     )                                                                                                  \
                             ,INCLff(t_normalisee                                                                                       \
                                    ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____t_Minimal                                             \
                                    ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____t_Maximal                                             \
                                     )                                                                                                  \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Test introduit le 20240524144045 afin de pouvoir generer des "sous-champs"...             */ \
                         Bblock                                                                                                         \
                         DEFV(Float,INIT(Xf_transformee,FLOT__UNDEF));                                                                  \
                         DEFV(Float,INIT(Yf_transformee,FLOT__UNDEF));                                                                  \
                         DEFV(Float,INIT(Zf_transformee,FLOT__UNDEF));                                                                  \
                         DEFV(Float,INIT(Tf_transformee,FLOT__UNDEF));                                                                  \
                                        /* Definition des coordonnees {Xf,Yf,Zf} apres transformation...                             */ \
                                                                                                                                        \
                         Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____initialiser_la_matrice_avec_les_rotations))                               \
                                        /* Ce test a ete introduit le 20060517105000 afin d'avoir le choix entre initialiser         */ \
                                        /* la matrice 'v $xiii/vecteurs$FON vecteurs_____matrix_3D' par un produit de rotations,     */ \
                                        /* ou bien la laisser intacte...                                                             */ \
                              Bblock                                                                                                    \
                              Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____initialiser_la_matrice_de_rotation))                                 \
                                   Bblock                                                                                               \
                                   T_ZOOM(INVZ(ACCES_A_UN_CHAMP_3D_____rapport_courant_du_zoom));                                       \
                                        /* Mise en place du rapport de zoom (introduit le 20060622184543). ATTENTION : on notera     */ \
                                        /* que c'est l'inverse du rapport de zoom argument qu'il faut utiliser. En effet, imaginons  */ \
                                        /* que l'on ait calcule un champ au point {X,Y} ; un zoom de rapport 2 (c'est-a-dire que     */ \
                                        /* l'on veut agrandir deux fois le champ) demandera que l'on calcule le champ au point       */ \
                                        /* {X/2,Y/2} ; c'est donc bien l'inverse du rapport de zoom qu'il faut utiliser...           */ \
                                                                                                                                        \
                                   GENERATION_DE_LA_MATRICE_DE_ROTATION(vecteurs_____ordre_de_la_ROTATION_0X                            \
                                                                       ,T_ROTATION_X(ACCES_A_UN_CHAMP_3D_____angle_de_ROTATION_OX);     \
                                                                       ,vecteurs_____ordre_de_la_ROTATION_0Y                            \
                                                                       ,T_ROTATION_Y(ACCES_A_UN_CHAMP_3D_____angle_de_ROTATION_OY);     \
                                                                       ,vecteurs_____ordre_de_la_ROTATION_0Z                            \
                                                                       ,T_ROTATION_Z(ACCES_A_UN_CHAMP_3D_____angle_de_ROTATION_OZ);     \
                                                                        );                                                              \
                                        /* Mise en place du produit des trois rotations relatives aux trois axes.                    */ \
                                                                                                                                        \
                                   EGAL(ACCES_A_UN_CHAMP_3D_____initialiser_la_matrice_de_rotation,FAUX);                               \
                                        /* La matrice de rotation est initialisee...                                                 */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                                        /* Dans ce cas, la matrice de rotation 'v $xiii/vecteurs$FON vecteurs_____matrix_3D' reste   */ \
                                        /* inchangee (voir par exemple 'v $xci/genere_ch.11$I vecteurs_____matrix_3D')...            */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         EGAL(Xf_transformee                                                                                            \
                             ,TRANSFORMATION_GEOMETRIQUE_3D_Fx(x_normalisee                                                             \
                                                              ,y_normalisee                                                             \
                                                              ,z_normalisee                                                             \
                                                              ,ACCES_A_UN_CHAMP_3D_____translation_OX                                   \
                                                               )                                                                        \
                              );                                                                                                        \
                         EGAL(Yf_transformee                                                                                            \
                             ,TRANSFORMATION_GEOMETRIQUE_3D_Fy(x_normalisee                                                             \
                                                              ,y_normalisee                                                             \
                                                              ,z_normalisee                                                             \
                                                              ,ACCES_A_UN_CHAMP_3D_____translation_OY                                   \
                                                               )                                                                        \
                              );                                                                                                        \
                         EGAL(Zf_transformee                                                                                            \
                             ,TRANSFORMATION_GEOMETRIQUE_3D_Fz(x_normalisee                                                             \
                                                              ,y_normalisee                                                             \
                                                              ,z_normalisee                                                             \
                                                              ,ACCES_A_UN_CHAMP_3D_____translation_OZ                                   \
                                                               )                                                                        \
                              );                                                                                                        \
                                        /* Transformation des coordonnees...                                                         */ \
                                                                                                                                        \
                         TRANSFORMATION_DES_COORDONNEES_XYZ__modulo(x,y,z,t                                                             \
                                                                   ,ASID1                                                               \
                                                                   ,trans_champ,scale                                                   \
                                                                    );                                                                  \
                                                                                                                                        \
                         TRANSFORMATION_DES_COORDONNEES_XYZ__par_symetrisation(x,y,z,t                                                  \
                                                                              ,ASID1                                                    \
                                                                              ,trans_champ,scale                                        \
                                                                               );                                                       \
                                                                                                                                        \
                         TRANSFORMATION_DES_COORDONNEES_XYZ__par_combinaison_lineaire(x,y,z,t                                           \
                                                                                     ,ASID1                                             \
                                                                                     ,trans_champ,scale                                 \
                                                                                      );                                                \
                                                                                                                                        \
                         TRANSFORMATION_DES_COORDONNEES_XYZ__par_application_de_fonctions_elementaires(x,y,z,t                          \
                                                                                                      ,ASID1                            \
                                                                                                      ,trans_champ,scale                \
                                                                                                       );                               \
                                                                                                                                        \
                         TRANSFORMATION_DES_COORDONNEES_XYZ__par_rapport_de_transformations_homographiques(x,y,z,t                      \
                                                                                                          ,ASID1                        \
                                                                                                          ,trans_champ,scale            \
                                                                                                           );                           \
                                                                                                                                        \
                         TRANSFORMATION_DES_COORDONNEES_XYZ__par_permutation_cartesiennes_spheriques(x,y,z,t                            \
                                                                                                    ,ASID1                              \
                                                                                                    ,trans_champ,scale                  \
                                                                                                     );                                 \
                                                                                                                                        \
                         begin_nouveau_block                                                                                            \
                              Bblock                                                                                                    \
                              EGAL(Tf_transformee,t_normalisee);                                                                        \
                                        /* La quatrieme coordonnee fut introduite le 20100209100622 et a priori n'est pas modifie    */ \
                                        /* puique les transformations possibles sont tridimensionnelles...                           */ \
                              Eblock                                                                                                    \
                         end_nouveau_block                                                                                              \
                                        /* Debut de la transformation des coordonnees {Xf,Yf,Zf}...                                  */

#define   end_TRANSFORMATION_DES_COORDONNEES_XYZ(x,y,z,t,ASID1,trans_champ,scale)                                                       \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Fin de la transformation des coordonnees {Xf,Yf,Zf}...                                    */

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

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Ftraitement_des_points_d_un_champ_____binariser_le_champ,FAUX)));
                                        /* Doit-on binariser le champ ('VRAI') ou pas ('FAUX'), la valeur par defaut garantissant    */
                                        /* la compatibilite anterieure...                                                            */
DEFV(Common,DEFV(Float,SINT(Ftraitement_des_points_d_un_champ_____seuil_de_binarisation,FDU)));
DEFV(Common,DEFV(Float,SINT(Ftraitement_des_points_d_un_champ_____valeur_inferieure,FZERO)));
DEFV(Common,DEFV(Float,SINT(Ftraitement_des_points_d_un_champ_____valeur_superieure,FU)));
                                        /* Parametres de la binarisation...                                                          */

DEFV(Local,DEFV(FonctionF,Ftraitement_des_points_d_un_champ(amplificateur_fonction,valeur_fonction,translateur_fonction)))
                                        /* Fonction introduite le 20150408091613...                                                  */
DEFV(Argument,DEFV(Float,amplificateur_fonction));
DEFV(Argument,DEFV(Float,valeur_fonction));
DEFV(Argument,DEFV(Float,translateur_fonction));
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(valeur_fonction_transformee,AXPB(amplificateur_fonction,valeur_fonction,translateur_fonction)));
                                        /* Valeur de la fonction apres transformation lineaire...                                    */
     /*..............................................................................................................................*/
     Test(IL_FAUT(Ftraitement_des_points_d_un_champ_____binariser_le_champ))
          Bblock
          Test(IFLE(valeur_fonction_transformee,Ftraitement_des_points_d_un_champ_____seuil_de_binarisation))
                                        /* Ce test est compatible avec celui de 'v $xiii/di_image$FON IFbinarisation_generale'...    */
               Bblock
               EGAL(valeur_fonction_transformee,Ftraitement_des_points_d_un_champ_____valeur_inferieure);
               Eblock
          ATes
               Bblock
               EGAL(valeur_fonction_transformee,Ftraitement_des_points_d_un_champ_____valeur_superieure);
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETU(valeur_fonction_transformee);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E D I T I O N   D E S   E X T R E M A   D E S   C O O R D O N N E E S   { X , Y , Z , T }  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#define   EDITION_DES_EXTREMA_DES_COORDONNEES_XYZT(editer)                                                                              \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(editer))                                                                                               \
                                        /* Possibilite introduite le 20150404082521...                                               */ \
                         Bblock                                                                                                         \
                         Test(IFOU(IFET(IFEQ(X,Xmin),IFEQ(Y,Ymin))                                                                      \
                                  ,IFET(IFEQ(X,Xmax),IFEQ(Y,Ymax))                                                                      \
                                   )                                                                                                    \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              CAL2(Prin4("extrema : Xf=%+.^^^ Yf=%+.^^^ Zf=%+.^^^ Tf=%+.^^^\n"                                          \
                                        ,Xf_transformee                                                                                 \
                                        ,Yf_transformee                                                                                 \
                                        ,Zf_transformee                                                                                 \
                                        ,Tf_transformee                                                                                 \
                                         )                                                                                              \
                                   );                                                                                                   \
                                        /* Le 20190620110245, je constate un probleme de normalisation des coordonnees {X,Y} que     */ \
                                        /* l'on voit, par exemple, avec 'v $xci/gauss$K' (sans aucun parametres) qui donne :         */ \
                                        /*                                                                                           */ \
                                        /*                  minima :  Xf=-0.5             Yf=-0.5             Zf=+0 Tf=+0            */ \
                                        /*                  maxima :  Xf=+0.498046875     Yf=+0.498046875     Zf=+0 Tf=+0            */ \
                                        /*                                                                                           */ \
                                        /* ce qui montre que l'origine n'est pas au milieu des segments des extrema...               */ \
                                        /*                                                                                           */ \
                                        /* Le 20190620122255, je note que les options :                                              */ \
                                        /*                                                                                           */ \
                                        /*                  COORDONNEES_____compatibilite_20090929=v          TX=0 TY=0              */ \
                                        /*                                                                                           */ \
                                        /* permettent d'atteindre l'origine :                                                        */ \
                                        /*                                                                                           */ \
                                        /*                  minima :  Xf=-0.5             Yf=-0.5             Zf=+0 Tf=+0            */ \
                                        /*                  maxima :  Xf=+0.5             Yf=+0.5             Zf=+0 Tf=+0            */ \
                                        /*                                                                                           */ \
                                        /* mais avec les messages 'v $xci/genere_ch.11$I peut.etre.incoherente.a.cause.de' que       */ \
                                        /* l'on fait disparaitre via "CAL1=FAUX CAL3=FAUX' en passant de 'CAL3(Prme4(...))' a        */ \
                                        /* 'CAL2(Prin4(...))'.                                                                       */ \
                                        /*                                                                                           */ \
                                        /* Cela s'est vu lors de la mise au point de l'image 'v $xiia/VASA.24.256' qui a demande une */ \
                                        /* modification des arguments 'v $xiia/$Fnota COORDONNEES_____compatibilite_20090929'...     */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Procedure introduite le 20190620104122...                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N I T I A L I S A T I O N   D ' U N E   I M A G E   F L O T T A N T E   P A R   U N E   F O N C T I O N  :               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    L'initialisation au point {X,Y} se fait                                                                        */
/*                  de la facon suivante :                                                                                           */
/*                                                                                                                                   */
/*                                      NIVEAU(X,Y) = Amplificateur*Fonction[(Ex.Xf + Tx),(Ey.Yf + Ty),Zf,Tf] + Translateur          */
/*                                                                                                                                   */
/*                  ou {Xf,Yf} designent les valeurs normalisees                                                                     */
/*                  de {X,Y} et :                                                                                                    */
/*                                                                                                                                   */
/*                                      {Ex,Ey} = echelle                                                                            */
/*                                      {Tx,Ty} = translation_du_champ                                                               */
/*                                                                                                                                   */
/*                  et ou 'Amplificateur' et 'Translateur' designent                                                                 */
/*                  'amplificateur_de_la_fonction' et 'translateur_de_la_fonction'                                                   */
/*                  respectivement...                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

                                        /* ATTENTION, a la date du 20080408093157 j'ai voulu deplacer ce 'BFonctionF' et le mettre   */
                                        /* avant l'ensemble des 'SINT(...)'s qui precedent et qui sont relatifs a la procedure       */
                                        /* 'ACCES_A_UN_CHAMP_3D(...)' principalement. Mais malheusement, cela n'est pas tres         */
                                        /* logique car, en effet les deux procedures 'begin_TRANSFORMATION_DES_COORDONNEES_XYZ(...)' */
                                        /* et 'end_TRANSFORMATION_DES_COORDONNEES_XYZ(...)' ne sont pas utilisees uniquement par la  */
                                        /* fonction 'IFgenere_champ(...)', mais aussi par les deux fonctions 'Igenere_champ(...)'    */
                                        /* et 'IJgenere_champ(...)'. D'ou le retablissement de la localisation anterieure de ce      */
                                        /* 'BFonctionF'...                                                                           */

                                        /* ATTENTION, la notion d'interieur et d'exterieur (rectangulaire...) pour un champ n'est    */
                                        /* offerte qu'a 'IFgenere_champ(...)' et pas aux autres fonctions 'Igenere_champ(...)' (sauf */
                                        /* dans le cas 'IL_FAUT(Igenere_champ_____renormaliser_le_champ_automatiquement)' ou         */
                                        /* 'Igenere_champ(...)' reference 'IFgenere_champ(...)') et 'IJgenere_champ(...)'.           */

DEFV(Common,DEFV(Logical,SINT(IFgenere_champ_____il_y_a_une_fonction_de_X_Y_a_executer_prealablement,FAUX)));
DEFV(Common,DEFV(Void,INIT(fPOINTEUR(IFgenere_champ_____fonction_de_X_Y_a_executer_prealablement)(DEFV(Argument,DEFV(Int,X))
                                                                                                 ,DEFV(Argument,DEFV(Int,Y))
                                                                                                  )
                          ,ADRESSE_NON_ENCORE_DEFINIE
                           )
                 )
     );
                                        /* Dispositif introduit le 20210117102409 afin de pouvoir, par exemple, changer les          */
                                        /* arguments implicites de la fonction 'Fxyzt(...)' pour chaque couple de coordonnees {X,Y}. */
                                        /*                                                                                           */
                                        /* ATTENTION : 'IFgenere_champ_____fonction_de_X_Y_a_executer_prealablement' et 'Common,'    */
                                        /* doivent etre sur la meme ligne a cause de 'v $xcg/gen$EXT$D/GetCommon$vv$Y __...Common'.  */
                                        /* En fait, la formulation ci-dessus et sa mise en page doivent etre strictement respectees, */
                                        /* c'est plus prudent !                                                                      */

DEFV(Common,DEFV(Logical,SINT(IFgenere_champ_____remplacer_Xf_Yf_Zf_Tf_par_Rho_Theta_Phi_Alpha,FAUX)));
                                        /* Introduit le 20231215104506 afin de permettre de remplacer brutalement {Xf,Yf} par        */
                                        /* 'Rho_2D(Xf,Yf)' et 'Theta_2D(Xf,Yf)'...                                                   */

DEFV(Common,DEFV(Logical,SINT(IFgenere_champ_____editer_les_extrema_de_Xf_Yf_Zf_Tf,FAUX)));
                                        /* Introduit le 20150404082521 afin de faciliter le parametrage de 'IFgenere_champ(...)'.    */

DEFV(Common,DEFV(Logical,SINT(IFgenere_champ_____calculer_le_champ_tronque,FAUX)));
DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____borne_inferieure_du_champ_tronque,COORDONNEE_BARYCENTRIQUE_MINIMALE)));
DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____borne_superieure_du_champ_tronque,COORDONNEE_BARYCENTRIQUE_MAXIMALE)));
                                        /* Introduit le 20061127114018 pour permettre un calcul tronque du champ calcule par         */
                                        /* 'IFgenere_champ(...)', en particulier dans 'v $xci/toroidal_2tr$K' pour lequel cela       */
                                        /* fut fait initialement...                                                                  */
DEFV(Common,DEFV(Logical,SINT(IFgenere_champ_____calculer_le_champ_modulo,FAUX)));
DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____borne_inferieure_du_champ_modulo,COORDONNEE_BARYCENTRIQUE_MINIMALE)));
DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____borne_superieure_du_champ_modulo,COORDONNEE_BARYCENTRIQUE_MAXIMALE)));
                                        /* Introduit le 20060608103107 pour permettre un calcul modulo du champ calcule par          */
                                        /* 'IFgenere_champ(...)'.                                                                    */

DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____niveau_exterieur,EXTERIEUR_D_UN_CHAMP_3D)));
DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Xmin,F_MOINS_LE_PETIT_INFINI)));
DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Xmax,F_PETIT_INFINI)));
DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Ymin,F_MOINS_LE_PETIT_INFINI)));
DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Ymax,F_PETIT_INFINI)));
DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Zmin,F_MOINS_LE_PETIT_INFINI)));
DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Zmax,F_PETIT_INFINI)));
DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Tmin,F_MOINS_LE_PETIT_INFINI)));
DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Tmax,F_PETIT_INFINI)));
                                        /* Definition de l'interieur d'un champ (a priori tout R^3) et de la valeur a attribuer      */
                                        /* a son exterieur, cette notion se limitant evidemment a une forme rectangulaire. La        */
                                        /* coordonnee 'Z' fut introduite le 20060516091854. La coordonnee 'T' fut introduite         */
                                        /* le 20100209100622...                                                                      */

                                        /* ATTENTION, la notion d'interieur et d'exterieur (rectangulaire...) pour un champ n'est    */
                                        /* offerte qu'a 'IFgenere_champ(...)' et pas aux autres fonctions 'Igenere_champ(...)' et    */
                                        /* 'IJgenere_champ(...)'.                                                                    */

DEFV(Common,DEFV(Logical,SINT(IFgenere_champ_____renormaliser_le_champ_automatiquement,FAUX)));
                                        /* Doit-on renormaliser le champ automatiquement ('VRAI') ou pas ('FAUX'). Ceci fut          */
                                        /* introduit le 20090303102818.                                                              */

DEFV(Common,DEFV(FonctionF,POINTERF(IFgenere_champ(imageR
                                                  ,amplificateur_de_la_fonction
                                                  ,ARGUMENT_FONCTION(Fxyzt)
                                                  ,translateur_de_la_fonction
                                                  ,ARGUMENT_POINTERs(translation_du_champ)
                                                  ,ARGUMENT_POINTERs(echelle)
                                                  ,Zf
                                                  ,Tf
                                                   )
                                    )
                 )
     )
                                        /* Avant le 20050903110301, la fonction 'Igenere_champ(...)' etait situee logiquement        */
                                        /* avant la fonction 'IFgenere_champ(...)'. Mais depuis l'introduction le 20050902111326     */
                                        /* de l'option 'Igenere_champ_____renormaliser_le_champ_automatiquement', il est logique     */
                                        /* que 'Igenere_champ(...)' utilise 'IFgenere_champ(...)', d'ou cet ordre nouveau, la        */
                                        /* fonction 'IFgenere_champ(...)' precedant la fonction 'Igenere_champ(...)'...              */
DEFV(Argument,DEFV(imageF,imageR));
                                        /* Image resultat a initialiser.                                                             */
DEFV(Argument,DEFV(Float,amplificateur_de_la_fonction));
                                        /* Amplificateur de la fonction.                                                             */
DEFV(Argument,DEFV(Float,afPOINTEUR(Fxyzt)));
                                        /* Fonction de calcul du niveau normalise du point courant {X,Y}.                            */
DEFV(Argument,DEFV(Float,translateur_de_la_fonction));
                                        /* Translateur de la fonction.                                                               */
DEFV(Argument,DEFV(deltaF_2D,POINTERs(translation_du_champ)));
                                        /* Translation bi-dimensionnelle du champ a generer.                                         */
                                        /*                                                                                           */
                                        /* Concernant 'translation_du_champ', voir 'v $xiii/mono_image$FON 20150403184751'...        */
DEFV(Argument,DEFV(coeffF_2D,POINTERs(echelle)));
                                        /* Echelle bi-dimensionnelle du champ a generer.                                             */
DEFV(Argument,DEFV(Float,Zf));
                                        /* Coordonnee 'Z' flottante donnant dans un segment du type [0,1] la coordonnee 'Z'          */
                                        /* utilisee eventuellement par la fonction 'Fxyzt(...)' (c'est le cas en particulier de      */
                                        /* 'Fgaussien(...)').                                                                        */
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnee 'T' flottante donnant dans un segment du type [0,1] la coordonnee 'T'.         */
                                        /* Celle-ci fut introduite le 20100209100622 et est en general inutile...                    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     begin_image
          Bblock
          begin_TRANSFORMATION_DES_COORDONNEES_XYZ(X,Y,Zf,Tf,ASI1,translation_du_champ,echelle)
               Bblock
               EDITION_DES_EXTREMA_DES_COORDONNEES_XYZT(IFgenere_champ_____editer_les_extrema_de_Xf_Yf_Zf_Tf);
                                        /* Introduit le 20190620104122...                                                            */

               begin_nouveau_block
                    Bblock
                    DEFV(Float,INIT(niveau_du_champ,FLOT__UNDEF));

                    Test(IL_FAUT(IFgenere_champ_____remplacer_Xf_Yf_Zf_Tf_par_Rho_Theta_Phi_Alpha))
                         Bblock
                         DEFV(Float,INIT(Xf_transformee_Rho__,Rho_4D(Xf_transformee,Yf_transformee,Zf_transformee,Tf_transformee)));
                         DEFV(Float,INIT(Yf_transformee_Theta,Theta_4D(Xf_transformee,Yf_transformee,Zf_transformee,Tf_transformee)));
                         DEFV(Float,INIT(Zf_transformee_Phi__,Phi_4D(Xf_transformee,Yf_transformee,Zf_transformee,Tf_transformee)));
                         DEFV(Float,INIT(Tf_transformee_Alpha,Alpha_4D(Xf_transformee,Yf_transformee,Zf_transformee,Tf_transformee)));

                         EGAL(Xf_transformee,Xf_transformee_Rho__);
                         EGAL(Yf_transformee,Yf_transformee_Theta);
                         EGAL(Zf_transformee,Zf_transformee_Phi__);
                         EGAL(Tf_transformee,Tf_transformee_Alpha);
                                        /* Dispositif introduit le 20231215104506...                                                 */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    Test(EST_VRAI(IFgenere_champ_____il_y_a_une_fonction_de_X_Y_a_executer_prealablement))
                         Bblock
                         CALS(fPOINTEUR(IFgenere_champ_____fonction_de_X_Y_a_executer_prealablement)(X,Y));
                                        /* Dispositif introduit le 20210117102409 afin de pouvoir, par exemple, changer les          */
                                        /* arguments implicites de la fonction 'Fxyzt(...)' pour chaque couple de coordonnees {X,Y}  */
                                        /* (voir 'v $xci/PolyCartesUniversel_2D$K Idefinition_des_coefficients' par exemple...).     */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    EGAL(niveau_du_champ
                        ,ACCES_A_UN_CHAMP_3D_TRANSFORME(amplificateur_de_la_fonction
                                                       ,fPOINTEUR,Fxyzt
                                                       ,translateur_de_la_fonction
                                                       ,X,Y,Zf
                                                       ,ASI1
                                                       ,translation_du_champ
                                                       ,echelle
                                                        )
                         );
                                        /* Niveau flottant calcule par la fonction. ATTENTION, on utilise ici le type 'Float' car    */
                                        /* c'est celui de la fonction d'initialisation 'Fxyzt'...                                    */
                                        /*                                                                                           */
                                        /* ATTENTION : on notera que le triplet argument {X,Y,Zf} ne sert a rien et c'est en fait    */
                                        /* le triplet {Xf_transformee,Yf_transformee,Zf_transformee} qui seul est utilise (voir      */
                                        /* 'v $xiii/mono_image$DEF ACCES_A_UN_CHAMP_3D_TRANSFORME' a ce propos...).                  */
                                        /*                                                                                           */
                                        /* Le 20100210110346 j'ai fait des experiences relatives aux coordonnees {Xf,Yf} calculees   */
                                        /* suivant les options "carre_X_CHAMP_3D=" et "carre_Y_CHAMP_3D=". Voici en mode 'Puh' les   */
                                        /* extrema des coordonnees {Xf_transformee,Yf_transformee} :                                 */
                                        /*                                                                                           */
                                        /*                  carre_X_CHAMP_3D=VRAI                   (mode par                        */
                                        /*                  carre_Y_CHAMP_3D=VRAI                             defaut)                */
                                        /*                                      [-0.676056,-0.492958]x[+0.676056,+0.492958]          */
                                        /*                                                                                           */
                                        /*                  carre_X_CHAMP_3D=VRAI                                                    */
                                        /*                  carre_Y_CHAMP_3D=FAUX                                                    */
                                        /*                                      [-0.676056,-0.492958]x[+0.676056,+0.492958]          */
                                        /*                                                                                           */
                                        /* et :                                                                                      */
                                        /*                                                                                           */
                                        /*                  carre_X_CHAMP_3D=FAUX                                                    */
                                        /*                  carre_Y_CHAMP_3D=FAUX                                                    */
                                        /*                                      [-0.494845,-0.492958]x[+0.494845,+0.492958]          */
                                        /*                                                                                           */
                                        /*                  carre_X_CHAMP_3D=FAUX                                                    */
                                        /*                  carre_Y_CHAMP_3D=VRAI                                                    */
                                        /*                                      [-0.494845,-0.492958]x[+0.494845,+0.492958]          */
                                        /*                                                                                           */
                                        /* Ainsi, les couples {VRAI,VRAI} et {VRAI,FAUX} donnent les memes extrema. Il en est de     */
                                        /* meme des couples {FAUX,FAUX} et {FAUX,VRAI}. Cela implique que la valeur de l'argument    */
                                        /* "carre_Y_CHAMP_3D=" est indifferent, seul compte "carre_X_CHAMP_3D="...                   */

                    Test(IL_FAUT(IFgenere_champ_____calculer_le_champ_tronque))
                         Bblock
                         EGAL(niveau_du_champ
                             ,TRON(niveau_du_champ
                                  ,IFgenere_champ_____borne_inferieure_du_champ_tronque
                                  ,IFgenere_champ_____borne_superieure_du_champ_tronque
                                   )
                              );
                                        /* Le calcul "tronque" du champ a ete introduit le 20061127114018...                         */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    Test(IL_FAUT(IFgenere_champ_____calculer_le_champ_modulo))
                         Bblock
                         EGAL(niveau_du_champ
                             ,MODF(niveau_du_champ
                                  ,IFgenere_champ_____borne_inferieure_du_champ_modulo
                                  ,IFgenere_champ_____borne_superieure_du_champ_modulo
                                   )
                              );
                                        /* Le calcul "modulo" du champ a ete introduit le 20060608103107...                          */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    storeF_point(COND(I4ET(IFINff(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_TRANSFORME(X,Y,Zf,Tf
                                                                                                  ,ASI1
                                                                                                  ,translation_du_champ,echelle
                                                                                                   )
                                                 ,IFgenere_champ_____Xmin
                                                 ,IFgenere_champ_____Xmax
                                                  )
                                          ,IFINff(ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_TRANSFORME(X,Y,Zf,Tf
                                                                                                  ,ASI1
                                                                                                  ,translation_du_champ,echelle
                                                                                                   )
                                                 ,IFgenere_champ_____Ymin
                                                 ,IFgenere_champ_____Ymax
                                                  )
                                          ,IFINff(ACCES_A_LA_COORDONNEE_Z_D_UN_CHAMP_3D_TRANSFORME(X,Y,Zf,Tf
                                                                                                  ,ASI1
                                                                                                  ,translation_du_champ,echelle
                                                                                                   )
                                                 ,IFgenere_champ_____Zmin
                                                 ,IFgenere_champ_____Zmax
                                                  )
                                          ,IFINff(ACCES_A_LA_COORDONNEE_T_D_UN_CHAMP_3D_TRANSFORME(X,Y,Zf,Tf
                                                                                                  ,ASI1
                                                                                                  ,translation_du_champ,echelle
                                                                                                   )
                                                 ,IFgenere_champ_____Tmin
                                                 ,IFgenere_champ_____Tmax
                                                  )
                                           )
                                     ,niveau_du_champ
                                        /* Cas des points {X,Y} interieurs au champ.                                                 */
                                     ,IFgenere_champ_____niveau_exterieur
                                        /* Cas des points {X,Y} exterieurs au champ.                                                 */
                                      )
                                ,imageR
                                ,X,Y
                                 );
                                        /* Initialisation element par element.                                                       */
                    Eblock
               end_nouveau_block
               Eblock
          end_TRANSFORMATION_DES_COORDONNEES_XYZ(X,Y,Zf,Tf,ASI1,translation_du_champ,echelle)
          Eblock
     end_image

     Test(IL_FAUT(IFgenere_champ_____renormaliser_le_champ_automatiquement))
                                        /* Test introduit le 20090303102818...                                                       */
          Bblock
          BDEFV(imageF,imageR_renormalisee);
                                        /* Image Resultat renormalisee...                                                            */

          CALS(IFnormalisation_automatique(imageR_renormalisee,imageR));
                                        /* Et renormalisation...                                                                     */
          CALS(IFmove(imageR,imageR_renormalisee));

          EDEFV(imageF,imageR_renormalisee);
                                        /* Image Resultat renormalisee...                                                            */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETIF(imageR);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N I T I A L I S A T I O N   D ' U N E   I M A G E   S T A N D A R D   P A R   U N E   F O N C T I O N  :                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    L'initialisation au point {X,Y} se fait                                                                        */
/*                  de la facon suivante :                                                                                           */
/*                                                                                                                                   */
/*                                      NIVEAU(X,Y) = Amplificateur*Fonction[(Ex.Xf + Tx),(Ey.Yf + Ty)] + Translateur                */
/*                                                                                                                                   */
/*                  ou {Xf,Yf} designent les valeurs normalisees                                                                     */
/*                  de {X,Y} et :                                                                                                    */
/*                                                                                                                                   */
/*                                      {Ex,Ey} = echelle                                                                            */
/*                                      {Tx,Ty} = translation_du_champ                                                               */
/*                                                                                                                                   */
/*                  et ou 'Amplificateur' et 'Translateur' designent                                                                 */
/*                  'amplificateur_de_la_fonction' et 'translateur_de_la_fonction'                                                   */
/*                  respectivement...                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Logical,SINT(Igenere_champ_____compatibilite_20050902,FAUX)));
                                        /* Afin d'assurer la compatibilite anterieure au 20050902111326. On notera que cela fut      */
                                        /* introduit tres tardivement (le 20080331163303) lors de la generation des images du type   */
                                        /* 'v $xiak/$xiak/REFN.82$R16' a cause de 'v $xivP/disk.000000009/face.2/.REFL$ERR.21.$U'    */
                                        /* qui utilise '$xci/module$X'...                                                            */
                                        /*                                                                                           */
                                        /* Le 20080605134909, je note (avec '$xci/gauss$X', '$xci/module$X' et '$xci/trefle$X') que  */
                                        /* cette option semble ne servir a rien, les resultats etant les memes qu'elle soit vraie    */
                                        /* ou fausse, mais en fait, il n'en est rien, la difference n'apparaissant que si la         */
                                        /* fonction est amplifiee ('v $xivP/disk.000000009/face.2/.REFL$ERR.21.$U _____AModule')...  */
DEFV(Common,DEFV(Logical,SINT(Igenere_champ_____renormaliser_le_champ_automatiquement,FAUX)));
                                        /* Doit-on renormaliser le champ automatiquement ('VRAI') ou pas ('FAUX'). Ceci fut          */
                                        /* introduit le 20050902111326. On notera le 20080331163303 que la valeur 'VRAI' n'assure    */
                                        /* pas la compatibilite anterieure, d'ou 'Igenere_champ_____compatibilite_20050902'          */
                                        /* ci-dessus introduit bien tardivement (le 20080331163303) apres avoir pris conscience      */
                                        /* de cela a cette date...                                                                   */

DEFV(Common,DEFV(Logical,SINT(Igenere_champ_____editer_les_extrema_de_Xf_Yf_Zf_Tf,FAUX)));
                                        /* Introduit le 20190620104122 afin de faciliter le parametrage de 'Igenere_champ(...)'.     */

DEFV(Common,DEFV(Logical,SINT(Igenere_champ_____calculer_le_champ_tronque,FAUX)));
DEFV(Common,DEFV(genere_p,SINT(Igenere_champ_____borne_inferieure_du_champ_tronque,NOIR)));
DEFV(Common,DEFV(genere_p,SINT(Igenere_champ_____borne_superieure_du_champ_tronque,BLANC)));
                                        /* Introduit le 20061127114018 pour permettre un calcul tronque de 'IFgenere_champ(...)'.    */
DEFV(Common,DEFV(Logical,SINT(Igenere_champ_____calculer_le_champ_modulo,FAUX)));
DEFV(Common,DEFV(genere_p,SINT(Igenere_champ_____borne_inferieure_du_champ_modulo,NOIR)));
DEFV(Common,DEFV(genere_p,SINT(Igenere_champ_____borne_superieure_du_champ_modulo,BLANC)));
                                        /* Introduit le 20060608103107 pour permettre un calcul modulo de 'IFgenere_champ(...)'.     */
                                        /*                                                                                           */
                                        /* ATTENTION : si 'IL_FAUT(Igenere_champ_____renormaliser_le_champ_automatiquement)' ce      */
                                        /* sont les options correspondantes de 'IFgenere_champ(....)' qu'il faut utiliser !          */

DEFV(Common,DEFV(Logical,SINT(Igenere_champ_____editer_le_message__hors__0_1,VRAI)));
                                        /* Inroduit le 20190602141403 pour faciliter l'usage des "arithmetique_etendue_...' avec     */
                                        /* '$xci/trefle$X arithmetique_etendue_trefle=VRAI pxADD2_ADD2=0 pxMAX2_ADD2=1 ...' par      */
                                        /* exemple...                                                                                */

DEFV(Common,DEFV(FonctionP,POINTERp(Igenere_champ(imageR
                                                 ,amplificateur_de_la_fonction
                                                 ,ARGUMENT_FONCTION(Fxyzt)
                                                 ,translateur_de_la_fonction
                                                 ,ARGUMENT_POINTERs(translation_du_champ)
                                                 ,ARGUMENT_POINTERs(echelle)
                                                 ,Zf
                                                 ,Tf
                                                  )
                                    )
                 )
     )
                                        /* Avant le 20050903110301, la fonction 'Igenere_champ(...)' etait situee logiquement        */
                                        /* avant la fonction 'IFgenere_champ(...)'. Mais depuis l'introduction le 20050902111326     */
                                        /* de l'option 'Igenere_champ_____renormaliser_le_champ_automatiquement', il est logique     */
                                        /* que 'Igenere_champ(...)' utilise 'IFgenere_champ(...)', d'ou cet ordre nouveau, la        */
                                        /* fonction 'IFgenere_champ(...)' precedant la fonction 'Igenere_champ(...)'...              */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a initialiser.                                                             */
DEFV(Argument,DEFV(Float,amplificateur_de_la_fonction));
                                        /* Amplificateur de la fonction.                                                             */
DEFV(Argument,DEFV(Float,afPOINTEUR(Fxyzt)));
                                        /* Fonction de calcul du niveau normalise du point courant {X,Y}.                            */
DEFV(Argument,DEFV(Float,translateur_de_la_fonction));
                                        /* Translateur de la fonction.                                                               */
DEFV(Argument,DEFV(deltaF_2D,POINTERs(translation_du_champ)));
                                        /* Translation bi-dimensionnelle du champ a generer.                                         */
                                        /*                                                                                           */
                                        /* Concernant 'translation_du_champ', voir 'v $xiii/mono_image$FON 20150403184751'...        */
DEFV(Argument,DEFV(coeffF_2D,POINTERs(echelle)));
                                        /* Echelle bi-dimensionnelle du champ a generer.                                             */
DEFV(Argument,DEFV(Float,Zf));
                                        /* Coordonnee 'Z' flottante donnant dans un segment du type [0,1] la coordonnee 'Z'          */
                                        /* utilisee eventuellement par la fonction 'Fxyzt(...)' (c'est le cas en particulier de      */
                                        /* 'Fgaussien(...)').                                                                        */
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnee 'T' flottante donnant dans un segment du type [0,1] la coordonnee 'T'.         */
                                        /* Celle-ci fut introduite le 20100209100622 et est en general inutile...                    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     Test(IL_FAUT(Igenere_champ_____renormaliser_le_champ_automatiquement))
                                        /* Test introduit le 20050902111326...                                                       */
          Bblock
          BDEFV(imageF,imageR_flottante);
                                        /* Image flottante Resultat...                                                               */

          BSaveModifyVariable(Float
                             ,IFgenere_champ_____renormaliser_le_champ_automatiquement
                             ,FAUX
                              );
                                        /* Afin d'utiliser la compatibilite anterieure au 20090303102818...                          */

          CALS(IFgenere_champ(imageR_flottante
                             ,amplificateur_de_la_fonction
                             ,Fxyzt
                             ,translateur_de_la_fonction
                             ,translation_du_champ
                             ,echelle
                             ,Zf
                             ,Tf
                              )
               );
                                        /* Initialisation flottante du champ. On notera qu'avant le 20050903110301, cela etait       */
                                        /* fait ici "localement" par une boucle {begin_image,end_image}. Apres cette date, l'usage   */
                                        /* logique de la fonction 'IFgenere_champ(...)' fait qu'alors les arguments implicites de    */
                                        /* cette fonction {[XY]min_pour_IFgenere_champ,[XY]max_pour_IFgenere_champ} s'appliquent     */
                                        /* alors a 'Igenere_champ(...)', mais donc uniquement dans le cas ou le champ 'imageR' est   */
                                        /* a renormaliser...                                                                         */

          CALS(Ifloat_std_avec_renormalisation(imageR,imageR_flottante));
                                        /* Conversion de l'image Resultat en une image standard...                                   */

          ESaveModifyVariable(Float
                             ,IFgenere_champ_____renormaliser_le_champ_automatiquement
                              );

          EDEFV(imageF,imageR_flottante);
                                        /* Image flottante Resultat...                                                               */
          Eblock
     ATes
          Bblock
          begin_image
               Bblock
               DEFV(Float,INIT(niveau_du_champ,FLOT__UNDEF));
                                        /* Niveau flottant calcule par la fonction ; on procede ainsi, parce que la                  */
                                        /* procedure '__DENORMALISE_NIVEAU' n'est pas tres rapide. ATTENTION, on utilise             */
                                        /* ici le type 'Float' car c'est celui de la fonction d'initialisation 'Fxyzt'...            */
               DEFV(Int,INIT(niveau_du_champ_denormalise,NIVEAU_UNDEF));
                                        /* Niveau du champ apres denormalisation. ATTENTION, on utilise ici le type 'Int' afin que   */
                                        /* la denormalisation de 'niveau_du_champ' ne nous fasse pas passer dans [NOIR,BLANC]        */
                                        /* modulo COULEURS automatiquement (comme cela serait le cas avec 'genere_p'...).            */

               begin_TRANSFORMATION_DES_COORDONNEES_XYZ(X,Y,Zf,Tf,ASI1,translation_du_champ,echelle)
                    Bblock
                    EDITION_DES_EXTREMA_DES_COORDONNEES_XYZT(Igenere_champ_____editer_les_extrema_de_Xf_Yf_Zf_Tf);
                                        /* Introduit sous cette forme le 20190620104122...                                           */

                    EGAL(niveau_du_champ
                        ,ACCES_A_UN_CHAMP_3D_TRANSFORME(amplificateur_de_la_fonction
                                                       ,fPOINTEUR,Fxyzt
                                                       ,translateur_de_la_fonction
                                                       ,X,Y,Zf
                                                       ,ASI1
                                                       ,translation_du_champ
                                                       ,echelle
                                                        )
                         );
                                        /* Valeur du champ...                                                                        */

                    EGAL(niveau_du_champ_denormalise,INTE(F___DENORMALISE_NIVEAU(niveau_du_champ)));
                                        /* Denormalisation du champ. On notera le 'INTE(F___DENORMALISE_NIVEAU(...))' destine a      */
                                        /* ne pas perdre la dynamique (comme '__DENORMALISE_NIVEAU(...)' ferait en nous faisant      */
                                        /* passer automatiquement dans [NOIR,BLANC] modulo COULEURS...).                             */

                    Test(IL_FAUT(Igenere_champ_____compatibilite_20050902))
                         Bblock
                         EGAL(niveau_du_champ_denormalise,TRNF(niveau_du_champ_denormalise));
                                        /* Compatibilite anterieure au 20050902111326 introduite le 20080331163303...                */
                         Eblock
                    ATes
                         Bblock
                         Test(IL_FAUT(Igenere_champ_____calculer_le_champ_tronque))
                              Bblock
                              EGAL(niveau_du_champ_denormalise
                                  ,TRON(niveau_du_champ_denormalise
                                       ,Igenere_champ_____borne_inferieure_du_champ_tronque
                                       ,Igenere_champ_____borne_superieure_du_champ_tronque
                                        )
                                   );
                                        /* Le calcul "tronque" du champ a ete introduit le 20061127114018...                         */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         Test(IL_FAUT(Igenere_champ_____calculer_le_champ_modulo))
                              Bblock
                              EGAL(niveau_du_champ_denormalise
                                  ,MODS(niveau_du_champ_denormalise
                                       ,Igenere_champ_____borne_inferieure_du_champ_modulo
                                       ,Igenere_champ_____borne_superieure_du_champ_modulo
                                        )
                                   );
                                        /* Le calcul "modulo" du champ a ete introduit le 20060608103107...                          */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    ETes

                    Test(IFOU(IL_FAUT(Igenere_champ_____calculer_le_champ_tronque)
                             ,IL_FAUT(Igenere_champ_____calculer_le_champ_modulo)
                              )
                         )
                         Bblock
                         Eblock
                    ATes
                         Bblock
                         Test(IFEXff(niveau_du_champ_denormalise
                                    ,NOIR
                                    ,BLANC
                                     )
                              )
                                        /* Jusqu'au 20060515101549, le test precedent etait :                                        */
                                        /*                                                                                           */
                                        /*                  Test(IZLT(niveau_du_champ))                                              */
                                        /*                                                                                           */
                                        /* ce qui manquait de precision...                                                           */
                                        /*                                                                                           */
                                        /* Jusqu'au 20080331162521, c'etait 'niveau_du_champ' qui etait test ci-dessus et non        */
                                        /* pas 'niveau_du_champ_denormalise' par erreur. De meme, les bornes utilisees               */
                                        /* {COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE} etaient aussi       */
                                        /* incorrectes et furent remplacees par {NOIR,BLANC} a cette date...                         */
                              Bblock
                              Test(IL_FAUT(Igenere_champ_____editer_le_message__hors__0_1))
                                        /* Test introduit le 20190602141403...                                                       */
                                   Bblock
                                   PRINT_ERREUR("un niveau hors [0,1] est apparu");
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    ETes

                    store_point(GENP(niveau_du_champ_denormalise)
                               ,imageR
                               ,X,Y
                               ,FVARIABLE
                                );
                                        /* Initialisation element par element.                                                       */
                    Eblock
               end_TRANSFORMATION_DES_COORDONNEES_XYZ(X,Y,Zf,Tf,ASI1,translation_du_champ,echelle)
               Eblock
          end_image
          Eblock
     ETes

     RETI(imageR);
     Eblock

EFonctionP

#undef    EDITION_DES_EXTREMA_DES_COORDONNEES_XYZT

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

BFonctionJ

                                        /* ATTENTION, le 20060516091854, a cause des nouvelles fonctionnalites introduites (en ce    */
                                        /* concerne les transformations geometriques des coordonnees {x,y,z}, la fonction            */
                                        /* 'IJgenere_champ(...)' a ete mise dans le meme bloc que 'IFgenere_champ(...)'...           */

DEFV(Common,DEFV(Logical,SINT(IJgenere_champ_____renormaliser_le_champ_automatiquement,FAUX)));
                                        /* Doit-on renormaliser le champ automatiquement ('VRAI') ou pas ('FAUX'). Ceci fut          */
                                        /* introduit le 20121114125709.                                                              */

DEFV(Common,DEFV(FonctionJ,POINTERJ(IJgenere_champ(imageR
                                                  ,amplificateur_de_la_fonction
                                                  ,ARGUMENT_FONCTION(Fx),ARGUMENT_FONCTION(Fy)
                                                  ,translateur_de_la_fonction
                                                  ,ARGUMENT_POINTERs(translation_du_champ)
                                                  ,ARGUMENT_POINTERs(echelle)
                                                  ,Zf
                                                  ,Tf
                                                   )
                                    )
                 )
     )
DEFV(Argument,DEFV(imageJ,imageR));
                                        /* Image resultat a initialiser.                                                             */
DEFV(Argument,DEFV(Float,amplificateur_de_la_fonction));
                                        /* Amplificateur de la fonction.                                                             */
DEFV(Argument,DEFV(Float,afPOINTEUR(Fx)));
                                        /* Fonction de calcul de la partie reelle du niveau du point courant  {X,Y},                 */
DEFV(Argument,DEFV(Float,afPOINTEUR(Fy)));
                                        /* Fonction de calcul de la partie imaginaire du niveau du point courant  {X,Y}.             */
DEFV(Argument,DEFV(Float,translateur_de_la_fonction));
                                        /* Translateur de la fonction.                                                               */
DEFV(Argument,DEFV(deltaF_2D,POINTERs(translation_du_champ)));
                                        /* Translation bi-dimensionnelle du champ a generer.                                         */
DEFV(Argument,DEFV(coeffF_2D,POINTERs(echelle)));
                                        /* Echelle bi-dimensionnelle du champ a generer.                                             */
DEFV(Argument,DEFV(Float,Zf));
                                        /* Coordonnee 'Z' flottante donnant dans un segment du type [0,1] la coordonnee 'Z'          */
                                        /* utilisee eventuellement par la fonction 'Fxyzt(...)' (c'est le cas en particulier de      */
                                        /* 'Fgaussien(...)').                                                                        */
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnee 'T' flottante donnant dans un segment du type [0,1] la coordonnee 'T'.         */
                                        /* Celle-ci fut introduite le 20100209100622 et est en general inutile...                    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     begin_image
          Bblock
          begin_TRANSFORMATION_DES_COORDONNEES_XYZ(X,Y,Zf,Tf,ASI1,translation_du_champ,echelle)
               Bblock
               DEFV(complexe,niveau_du_champ);
                                        /* Niveau complexe calcule par les deux fonctions (Fx,Fy).                                   */

               Cinitialisation(niveau_du_champ
                              ,ACCES_A_UN_CHAMP_3D_TRANSFORME(amplificateur_de_la_fonction
                                                             ,fPOINTEUR,Fx
                                                             ,translateur_de_la_fonction
                                                             ,X,Y,Zf
                                                             ,ASI1
                                                             ,translation_du_champ
                                                             ,echelle
                                                              )
                              ,ACCES_A_UN_CHAMP_3D_TRANSFORME(amplificateur_de_la_fonction
                                                             ,fPOINTEUR,Fy
                                                             ,translateur_de_la_fonction
                                                             ,X,Y,Zf
                                                             ,ASI1
                                                             ,translation_du_champ
                                                             ,echelle
                                                              )
                               );
               storeJ_point(niveau_du_champ
                           ,imageR
                           ,X,Y
                            );
                                        /* Initialisation element par element.                                                       */
               Eblock
          end_TRANSFORMATION_DES_COORDONNEES_XYZ(X,Y,Zf,Tf,ASI1,translation_du_champ,echelle)
          Eblock
     end_image

     Test(IL_FAUT(IJgenere_champ_____renormaliser_le_champ_automatiquement))
                                        /* Test introduit le 20121114125709...                                                       */
          Bblock
          BDEFV(imageJ,imageR_renormalisee);
                                        /* Image Resultat renormalisee...                                                            */

          CALS(IJnormalisation_automatique(imageR_renormalisee,imageR));
                                        /* Et renormalisation...                                                                     */

          CALS(IJmove(imageR,imageR_renormalisee));

          EDEFV(imageJ,imageR_renormalisee);
                                        /* Image Resultat renormalisee...                                                            */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETIJ(imageR);
     Eblock

EFonctionJ

#undef    end_TRANSFORMATION_DES_COORDONNEES_XYZ
#undef    begin_TRANSFORMATION_DES_COORDONNEES_XYZ
#undef    TRANSFORMATION_DES_COORDONNEES_XYZ__par_permutation_cartesiennes_spheriques
#undef    TRANSFORMATION_DES_COORDONNEES_XYZ__par_rapport_de_transformations_homographiques
#undef    FONCTIONS_2_DE_TRANSFORMATION_DES_COORDONNEES_XYZ
#undef    TRANSFORMATION_DES_COORDONNEES_XYZ__par_application_de_fonctions_elementaires
#undef    FONCTIONS_1_DE_TRANSFORMATION_DES_COORDONNEES_XYZ

#ifdef    ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17                         /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'...     */
#    undef     ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue
#Aifdef   ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17                         /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'...     */
#    undef     ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue
#Eifdef   ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17                         /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'...     */

#undef    TRANSFORMATION_DES_COORDONNEES_XYZ__par_combinaison_lineaire
#undef    TRANSFORMATION_DES_COORDONNEES_XYZ__par_symetrisation
#undef    TRANSFORMATION_DES_COORDONNEES_XYZ__modulo

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " U N I F O R M E "  :                                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "uniforme" est defini par                                                                             */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = constante                                                                */
/*                                                                                                                                   */
/*                  ceci ayant ete introduit le 20030507112907                                                                       */
/*                  pour 'v $xci/morlet.12$K Funiforme'...                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Float,SINT(Funiforme_____valeur,FZERO)));
                                        /* Constante d'initialisation uniforme par defaut...                                         */

DEFV(Common,DEFV(FonctionF,Funiforme(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Funiforme(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                              */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Funiforme(...)' est utile...                                              */

     RETU(Funiforme_____valeur);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " N E U T R E "   P O U R   L A   C O O R D O N N E E   ' X '  :                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "neutre" pour 'X' est                                                                                 */
/*                  defini par l'equation :                                                                                          */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = X                                                                        */
/*                                                                                                                                   */
/*                    On notera que 'Fneutre_X(...)'                                                                                 */
/*                  aurait pu etre defini a partir de                                                                                */
/*                  'Flineaire(...)', mais que cette                                                                                 */
/*                  solution n'a pas ete choisie pour                                                                                */
/*                  des raisons de simplicite...                                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,Fneutre_X(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(Xf);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " N E U T R E "   P O U R   L A   C O O R D O N N E E   ' Y '  :                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "neutre" pour 'Y' est                                                                                 */
/*                  defini par l'equation :                                                                                          */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = Y                                                                        */
/*                                                                                                                                   */
/*                    On notera que 'Fneutre_Y(...)'                                                                                 */
/*                  aurait pu etre defini a partir de                                                                                */
/*                  'Flineaire(...)', mais que cette                                                                                 */
/*                  solution n'a pas ete choisie pour                                                                                */
/*                  des raisons de simplicite...                                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,Fneutre_Y(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(Yf);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " L I N E A I R E "   E N   ' X '   E T   ' Y '  :                                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "lineaire" en 'X' et 'Y' est                                                                          */
/*                  defini par l'equation :                                                                                          */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = a.X + b.Y + c                                                            */
/*                                                                                                                                   */
/*                    On notera que 'Fneutre_X(...)'                                                                                 */
/*                  'Fneutre_Y(...)' auraient pu etre                                                                                */
/*                  definis a partir de 'Flineaire(...)',                                                                            */
/*                  mais que cette solution n'a pas ete                                                                              */
/*                  choisie pour des raisons de simplicite...                                                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Flineaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(Float,SINT(Flineaire_____coefficient_A,FU)));
DEFV(Common,DEFV(Float,SINT(Flineaire_____coefficient_B,FU)));
DEFV(Common,DEFV(Float,SINT(Flineaire_____coefficient_C,FZERO)));
                                        /* Parametres 'a', 'b' et 'c' dans la definition ci-dessus...                                */

DEFV(Common,DEFV(FonctionF,Flineaire(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "lineaire".                                   */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Flineaire(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                              */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Flineaire(...)' est utile...                                              */

     USs_GooF______CONDITIONNEL(Flineaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,LIN2(Flineaire_____coefficient_A,Xf
                                              ,Flineaire_____coefficient_B,Yf
                                              ,Flineaire_____coefficient_C
                                               )
                                          );
                                     Eblock
                                     )
                                );
                                        /* Calcul de la fonction 'F(X,Y)'.                                                           */

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " U N I V E R S E L   1 "  :                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "universel 1" est defini par                                                                          */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = FfTransformUniverselle1(pa.X + pb.Y + t)                                 */
/*                                                                                                                                   */
/*                  ceci ayant ete introduit le 20220116172352...                                                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Float,SINT(Funiversel_1_____ponderation_X,FU)));
DEFV(Common,DEFV(Float,SINT(Funiversel_1_____ponderation_Y,FU)));
DEFV(Common,DEFV(Float,SINT(Funiversel_1_____ponderation_Z,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_1_____ponderation_T,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_1_____translation_XYZT,FZERO)));
                                        /* Constantes de transformation de {Xf,Yf,Zf,Tf} en un scalaire...                           */

DEFV(Common,DEFV(FonctionF,Funiversel_1(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, les coordonnees 'Zf' et 'Tf' etant        */
                                        /* inutilisees...                                                                            */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "Universel 1".                                */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Funiversel_1(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Funiversel_1(...)' est utile...                                           */

     EGAL(fxyzt
         ,FfTransformUniverselle1(LIN4(Funiversel_1_____ponderation_X,Xf
                                      ,Funiversel_1_____ponderation_Y,Yf
                                      ,Funiversel_1_____ponderation_Z,Zf
                                      ,Funiversel_1_____ponderation_T,Tf
                                      ,Funiversel_1_____translation_XYZT
                                       )
                                  )
          );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " H O R N E R I E N "  :                                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "Hornerien" est un polynome                                                                           */
/*                  en {X,Y,Z,T} defini par l'equation :                                                                             */
/*                                                                                                                                   */
/*                                      F(X,Y,Z,T) = HORNER_4_01(X,Y,Z,T)                                                            */
/*                                                                                                                                   */
/*                  On notera que l'ordre des index des                                                                              */
/*                  coefficients est l'inverse des coordonnees,                                                                      */
/*                  c'est-a-dire que l'indexation est du type                                                                        */
/*                  A(T,Z,Y,X).                                                                                                      */
/*                                                                                                                                   */
/*                  Ceci fut introduit le 20100209120800.                                                                            */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fhorner_4_01_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF'.                                                      */

DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1111,FU)));
DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1110,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1101,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1100,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1011,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1010,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1001,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1000,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0111,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0110,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0101,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0100,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0011,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0010,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0001,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0000,FZERO)));
                                        /* Coefficients du polynome, l'indexation etant faite dans l'ordre inverse de l'ordre des    */
                                        /* coordonnees, soit : A(T,Z,Y,X).                                                           */

DEFV(Common,DEFV(FonctionF,Fhorner_4_01(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes dans [0,1[.                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "Hornerien".                                  */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);

     USs_GooF______CONDITIONNEL(Fhorner_4_01_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,HORNER_4_01(Xf,Yf,Zf,Tf
                                                     ,Fhorner_4_01_____a1111
                                                     ,Fhorner_4_01_____a1110
                                                     ,Fhorner_4_01_____a1101
                                                     ,Fhorner_4_01_____a1100
                                                     ,Fhorner_4_01_____a1011
                                                     ,Fhorner_4_01_____a1010
                                                     ,Fhorner_4_01_____a1001
                                                     ,Fhorner_4_01_____a1000
                                                     ,Fhorner_4_01_____a0111
                                                     ,Fhorner_4_01_____a0110
                                                     ,Fhorner_4_01_____a0101
                                                     ,Fhorner_4_01_____a0100
                                                     ,Fhorner_4_01_____a0011
                                                     ,Fhorner_4_01_____a0010
                                                     ,Fhorner_4_01_____a0001
                                                     ,Fhorner_4_01_____a0000
                                                      )
                                          );
                                     Eblock
                                     )
                                );
                                        /* Calcul de la fonction 'F(X,Y)'.                                                           */

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P S   D E   B A S E  :                                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Float,ZINT(GENERE__FonctionF_Champ_de_base_____ponderation_X_Champ_de_base,FU)));
DEFV(Common,DEFV(Float,ZINT(GENERE__FonctionF_Champ_de_base_____ponderation_Y_Champ_de_base,FU)));
DEFV(Common,DEFV(Float,ZINT(GENERE__FonctionF_Champ_de_base_____ponderation_Z_Champ_de_base,FZERO)));
DEFV(Common,DEFV(Float,ZINT(GENERE__FonctionF_Champ_de_base_____translation___Champ_de_base,FZERO)));
                                        /* ATTENTION : on notera que ces quatre parametres sont communs a l'ensemble des fonctions   */
                                        /* definies par 'GENERE__FonctionF_Champ_de_base(...)', mais il peut difficilement en etre   */
                                        /* differemment ; en particulier on ne peut les mettre dans cette procedure sous la forme :  */
                                        /*                                                                                           */
                                        /*        DEFV(Common,DEFV(Float,INIT(???????????_?_Champ_de_base`procedure,...)));          */
                                        /*                                                                                           */
                                        /* a cause de 'v $xcg/gen$EXT$Z' qui ne pourrait alors faire son travail sur ces 'Common's.  */

#define   GENERE__FonctionF_Champ_de_base(nom_et_arguments_de_la_fonction,procedure,inclus_dans,borne_inferieure,borne_superieure)      \
                                        /* ATTENTION : le nom de la fonction est suivi de ses arguments pour des raisons liees       */ \
                                        /* a la recuperation automatique des fichiers d'arguments.                                   */ \
                                        /*                                                                                           */ \
                                        /* Ce generateur a ete introduit le 20041130112633...                                        */ \
DEFV(FonctionF,nom_et_arguments_de_la_fonction)                                                                                         \
                                        /* Le resultat est egal a 'procedure(pX.Xf + pY.Yf + pZ.Zf + t)'.                            */ \
DEFV(Argument,DEFV(Float,Xf));                                                                                                          \
DEFV(Argument,DEFV(Float,Yf));                                                                                                          \
DEFV(Argument,DEFV(Float,Zf));                                                                                                          \
DEFV(Argument,DEFV(Float,Tf));                                                                                                          \
                                        /* Coordonnees flottantes dans [0,1[.                                                        */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
     Bblock                                                                                                                             \
     DEFV(Float,INIT(xyz                                                                                                                \
                    ,LIN3(GENERE__FonctionF_Champ_de_base_____ponderation_X_Champ_de_base,Xf                                            \
                         ,GENERE__FonctionF_Champ_de_base_____ponderation_Y_Champ_de_base,Yf                                            \
                         ,GENERE__FonctionF_Champ_de_base_____ponderation_Z_Champ_de_base,Zf                                            \
                         ,GENERE__FonctionF_Champ_de_base_____translation___Champ_de_base                                               \
                          )                                                                                                             \
                     )                                                                                                                  \
          );                                                                                                                            \
                                        /* Combinaison lineaire des coordonnees {Xf,Yf,Zf}.                                          */ \
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));                                                                                               \
                                        /* Valeur de 'procedure(pX.Xf + pY.Yf + pZ.Zf + t)'.                                         */ \
     /*..............................................................................................................................*/ \
                                        /* On notera que l'on ne peut faire ici :                                                    */ \
                                        /*                                                                                           */ \
                                        /*             RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(...);           */ \
                                        /*                                                                                           */ \
                                        /* les 'SINT(...)'s ci-dessus etant communs a plusieurs fonctions generees automatiquement   */ \
                                        /* par cette procedure 'GENERE__FonctionF_Champ_de_base(...)'...                             */ \
                                                                                                                                        \
     Test(inclus_dans(xyz,borne_inferieure,borne_superieure))                                                                           \
                                        /* Ce test a ete introduit le 20041130122855...                                              */ \
          Bblock                                                                                                                        \
          EGAL(fxyzt,procedure(xyz));                                                                                                   \
          Eblock                                                                                                                        \
     ATes                                                                                                                               \
          Bblock                                                                                                                        \
          PRINT_ERREUR("la combinaison lineaire des coordonnees {X,Y,Z} est en dehors des 'limites'");                                  \
          CAL1(Prer0("("));                                                                                                             \
          CAL1(Prer8("((%g)x(%g))+((%g)x(%g))+((%g)x(%g))+(%g)=%g"                                                                      \
                    ,GENERE__FonctionF_Champ_de_base_____ponderation_X_Champ_de_base,Xf                                                 \
                    ,GENERE__FonctionF_Champ_de_base_____ponderation_Y_Champ_de_base,Yf                                                 \
                    ,GENERE__FonctionF_Champ_de_base_____ponderation_Z_Champ_de_base,Zf                                                 \
                    ,GENERE__FonctionF_Champ_de_base_____translation___Champ_de_base                                                    \
                    ,xyz                                                                                                                \
                     )                                                                                                                  \
               );                                                                                                                       \
          CAL1(Prer2(" n'est pas dans [%g,%g]",borne_inferieure,borne_superieure));                                                     \
          CAL1(Prer0(")\n"));                                                                                                           \
          Eblock                                                                                                                        \
     ETes                                                                                                                               \
                                                                                                                                        \
     RETU(fxyzt);                                                                                                                       \
     Eblock

#define   mINFINI                                                                                                                       \
                    F_MOINS_L_INFINI
#define   ZERO___                                                                                                                       \
                    FZERO
#define   pINFINI                                                                                                                       \
                    F_INFINI

#define   mUN____                                                                                                                       \
                    NEGA(FU)
#define   pUN____                                                                                                                       \
                    NEUT(FU)

#define   PI_____                                                                                                                       \
                    PI
#define   mPI_S_2                                                                                                                       \
                    NEGA(PI_SUR_2)
#define   pPI_S_2                                                                                                                       \
                    NEUT(PI_SUR_2)
                                        /* Pour reduire la longueur des lignes qui suivent...                                        */

BFonctionF

DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_COSX(Xf,Yf,Zf,Tf),COSX,IFINff,mINFINI,pINFINI))  /* Common,DEFV(Fonction,) :      */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_SINX(Xf,Yf,Zf,Tf),SINX,IFINff,mINFINI,pINFINI))  /* Common,DEFV(Fonction,) :      */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_TANX(Xf,Yf,Zf,Tf),TANX,IFINff,mINFINI,pINFINI))  /* Common,DEFV(Fonction,) :      */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_SICX(Xf,Yf,Zf,Tf),SICX,IFINff,mINFINI,pINFINI))  /* Common,DEFV(Fonction,) :      */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_COHX(Xf,Yf,Zf,Tf),COHX,IFINff,mINFINI,pINFINI))  /* Common,DEFV(Fonction,) :      */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_SIHX(Xf,Yf,Zf,Tf),SIHX,IFINff,mINFINI,pINFINI))  /* Common,DEFV(Fonction,) :      */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_TAHX(Xf,Yf,Zf,Tf),TAHX,IFINff,mINFINI,pINFINI))  /* Common,DEFV(Fonction,) :      */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_ACOX(Xf,Yf,Zf,Tf),ACOX,IFINff,mUN____,pUN____))  /* Common,DEFV(Fonction,) :      */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_ASIX(Xf,Yf,Zf,Tf),ASIX,IFINff,mUN____,pUN____))  /* Common,DEFV(Fonction,) :      */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_RACX(Xf,Yf,Zf,Tf),RACX,IFINff,ZERO___,pINFINI))  /* Common,DEFV(Fonction,) :      */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_EXPB(Xf,Yf,Zf,Tf),EXPB,IFINff,mINFINI,pINFINI))  /* Common,DEFV(Fonction,) :      */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_EX10(Xf,Yf,Zf,Tf),EX10,IFINff,mINFINI,pINFINI))  /* Common,DEFV(Fonction,) :      */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_LO1X(Xf,Yf,Zf,Tf),LO1X,IFINof,ZERO___,pINFINI))  /* Common,DEFV(Fonction,) :      */

EFonctionF

BFonctionF

DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_LO2X(Xf,Yf,Zf,Tf),LO2X,IFINof,ZERO___,pINFINI))  /* Common,DEFV(Fonction,) :      */

EFonctionF

#undef    pPI_S_2
#undef    mPI_S_2
#undef    PI_____

#undef    pUN____
#undef    mUN____

#undef    pINFINI
#undef    ZERO___
#undef    mINFINI

#undef    GENERE__FonctionF_Champ_de_base

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " M O D U L E "  :                                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fmodule_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(FonctionF,Fmodule(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "module".                                     */
     /*..............................................................................................................................*/
     USs_GooF______CONDITIONNEL(Fmodule_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt,Rho_2D(Xf,Yf));
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " A R G U M E N T "  :                                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fargument_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(FonctionF,Fargument(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "argument".                                   */
     /*..............................................................................................................................*/
     USs_GooF______CONDITIONNEL(Fargument_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt,Theta_2D(Xf,Yf));
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   P O L A I R E  :                                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ polaire est defini par                                                                                */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = alpha.Rho.cos(omega.Theta+phi) + beta.Rho.sin(omega.Theta+phi)           */
/*                                                                                                                                   */
/*                  ou {Rho,Theta} sont les coordonnees polaires de {X,Y}.                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fpolaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(Float,SINT(Fpolaire_____alpha,FU)));
DEFV(Common,DEFV(Float,SINT(Fpolaire_____beta,FZERO)));
                                        /* Ponderations des composantes {cos,sin}.                                                   */
DEFV(Common,DEFV(Float,SINT(Fpolaire_____omega,FU)));
DEFV(Common,DEFV(Float,SINT(Fpolaire_____phi,FZERO)));
                                        /* Transformation lineaire du 'Theta'.                                                       */

DEFV(Common,DEFV(FonctionF,Fpolaire(Xf,Yf,Zf,Tf)))
                                        /* Cette fonction a ete introduite le 20050701112150...                                      */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ polaire.                                      */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Fpolaire(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                               */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Fpolaire(...)' est utile...                                               */

     USs_GooF______CONDITIONNEL(Fpolaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     DEFV(Float,INIT(Rho,Rho_2D(Xf,Yf)));
                                     DEFV(Float,INIT(Theta,Theta_2D(Xf,Yf)));
                                        /* Coordonnees polaires de {Xf,Yf}.                                                          */

                                     EGAL(fxyzt
                                         ,LIZ2(Fpolaire_____alpha
                                              ,MUL2(Rho,COSX(AXPB(Fpolaire_____omega,Theta,Fpolaire_____phi)))
                                              ,Fpolaire_____beta
                                              ,MUL2(Rho,SINX(AXPB(Fpolaire_____omega,Theta,Fpolaire_____phi)))
                                               )
                                          );
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " H Y P E R B O L I Q U E   1 "  :                                                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "hyperbolique 1" polynomial en 'X' et 'Y'                                                             */
/*                  est defini par l'equation :                                                                                      */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = {F1(Rho),F2(Theta)}                                                      */
/*                                                                                                                                   */
/*                  tel que :                                                                                                        */
/*                                                                                                                                   */
/*                                      F1(Rho)  = Rho(X,Y)                                                                          */
/*                                      F2(Theta) = ATAH(Theta(X,Y))                                                                 */
/*                                                                                                                                   */
/*                    en renvoyant en fait une combinaison lineaire de                                                               */
/*                    'Relle(...)' et de 'Imaginaire(...)'.                                                                          */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fhyperbolique_1_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF'.                                                      */
DEFV(Common,DEFV(Float,SINT(Fhyperbolique_1_____facteur_de_reduction_de_Rho,FU)));
                                        /* Afin de permettre de "moduler" le 'Rho'...                                                */
DEFV(Common,DEFV(Float,SINT(Fhyperbolique_1_____ponderation_de_la_coordonnee_X,FU)));
DEFV(Common,DEFV(Float,SINT(Fhyperbolique_1_____ponderation_de_la_coordonnee_Y,FZERO)));
                                        /* Afin de permettre, par exemple, la selection de 'X' (plutot que 'Y')...                   */

DEFV(Common,DEFV(FonctionF,Fhyperbolique_1(Xf,Yf,Zf,Tf)))
                                        /* Fonction introduit le 20120519173508...                                                   */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, les coordonnees 'Zf' et 'Tf' etant        */
                                        /* inutilisees...                                                                            */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "hyperbolique".                               */
     /*..............................................................................................................................*/
     USs_GooF______CONDITIONNEL(Fhyperbolique_1_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                               ,BLOC(
                                     Bblock
                                     DEFV(Float,INIT(Rho,Rho_2D(Xf,Yf)));
                                     DEFV(Float,INIT(Theta,Theta_2D(Xf,Yf)));
                                        /* Coordonnees polaires de {Xf,Yf} avant transformation.                                     */
                                     DEFV(Float,INIT(Rho_transforme,FLOT__UNDEF));
                                     DEFV(Float,INIT(Theta_transforme,FLOT__UNDEF));
                                        /* Coordonnees polaires de {Xf,Yf} apres transformation.                                     */

                                     EGAL(Theta_transforme,Theta);
                                        /* L'angle 'Theta' reste inchange...                                                         */

                                     EGAL(Rho_transforme,MUL2(Rho,Fhyperbolique_1_____facteur_de_reduction_de_Rho));

                                     Test(IFLT(Rho_transforme,FU))
                                          Bblock
                                          Eblock
                                     ATes
                                          Bblock
                                          PRINT_ERREUR("a cause de 'ATAH(...)' le facteur de reduction du module est trop grand");
                                          CAL1(Prer2("(Rho=%f facteur=%f)\n",Rho,Fhyperbolique_1_____facteur_de_reduction_de_Rho));

                                          EGAL(Rho_transforme,SOUS(Rho_transforme,GRAND_EPSILON));
                                        /* C'est plus prudent...                                                                     */
                                          Eblock
                                     ETes

                                     EGAL(Rho_transforme,ATAH(Rho_transforme));
                                        /* Seul 'Rho' subit une transformation...                                                    */

                                     EGAL(fxyzt
                                         ,LIZ2(Fhyperbolique_1_____ponderation_de_la_coordonnee_X
                                              ,Xcartesienne_2D(Rho_transforme,Theta_transforme)
                                              ,Fhyperbolique_1_____ponderation_de_la_coordonnee_Y
                                              ,Ycartesienne_2D(Rho_transforme,Theta_transforme)
                                               )
                                          );
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " H Y P E R B O L I Q U E   2 "  :                                                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "hyperbolique 1" polynomial en 'X' et 'Y'                                                             */
/*                  est defini par l'equation :                                                                                      */
/*                                                                                                                                   */
/*                                                             A.Z + B                                                               */
/*                                      F(X,Y,Z) = F(X,Y) = E.---------                                                              */
/*                                                             C.Z + D                                                               */
/*                                                                                                                                   */
/*                    en renvoyant en fait une combinaison lineaire de                                                               */
/*                    'Relle(...)' et de 'Imaginaire(...)'.                                                                          */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fhyperbolique_2_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF'.                                                      */
DEFV(Common,DEFV(complexe,SINS(Fhyperbolique_2_____nombre_A,IstructL02(FZERO,FU___))));
DEFV(Common,DEFV(complexe,SINS(Fhyperbolique_2_____nombre_B,IstructL02(FU___,FZERO))));
DEFV(Common,DEFV(complexe,SINS(Fhyperbolique_2_____nombre_C,IstructL02(FU___,FZERO))));
DEFV(Common,DEFV(complexe,SINS(Fhyperbolique_2_____nombre_D,IstructL02(FZERO,FU___))));
                                        /* Definition des quatre parametres {A,B,C,D} de la transformation homographique initialisee */
                                        /* telle qu'il s'agisse de la transformation :                                               */
                                        /*                                                                                           */
                                        /*                       i.z + 1                                                             */
                                        /*                  w = ---------                                                            */
                                        /*                        z + i                                                              */
                                        /*                                                                                           */
                                        /* qui correspond au mapping conforme canonique du demi-plan complexe superieur (qui         */
                                        /* correspond donc a 'Imaginaire(z) > 0) vers le disque hyperbolique de Poincare. En         */
                                        /* particulier l'axe Reel devient le bord du disque (soit '|w| = 1').                        */
DEFV(Common,DEFV(Float,SINT(Fhyperbolique_2_____Rho__nombre_E,FU___)));
DEFV(Common,DEFV(Float,SINT(Fhyperbolique_2_____Theta_nombre_E,FZERO)));
                                        /* Le facteur multiplicatif 'E' a ete introduit le 20120525210525 pour faciliter une         */
                                        /* rotation du resultat...                                                                   */
DEFV(Common,DEFV(Float,SINT(Fhyperbolique_2_____ponderation_de_la_coordonnee_X,FU)));
DEFV(Common,DEFV(Float,SINT(Fhyperbolique_2_____ponderation_de_la_coordonnee_Y,FZERO)));
                                        /* Afin de permettre, par exemple, la selection de 'X' (plutot que 'Y')...                   */

DEFV(Common,DEFV(FonctionF,Fhyperbolique_2(Xf,Yf,Zf,Tf)))
                                        /* Fonction introduit le 20120520120034...                                                   */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, les coordonnees 'Zf' et 'Tf' etant        */
                                        /* inutilisees...                                                                            */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "hyperbolique".                               */
     /*..............................................................................................................................*/
     USs_GooF______CONDITIONNEL(Fhyperbolique_2_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                               ,BLOC(
                                     Bblock
                                     DEFV(complexe,point_courant);
                                     DEFV(complexe,point_courant_transforme_1);
                                     DEFV(complexe,INIS(nombre_E,IstructL02(CcomposanteR(Fhyperbolique_2_____Rho__nombre_E
                                                                                        ,Fhyperbolique_2_____Theta_nombre_E
                                                                                         )
                                                                           ,CcomposanteI(Fhyperbolique_2_____Rho__nombre_E
                                                                                        ,Fhyperbolique_2_____Theta_nombre_E
                                                                                         )
                                                                            )
                                                        )
                                          );
                                     DEFV(complexe,point_courant_transforme_2);
                                     Cinitialisation(point_courant,Xf,Yf);

                                     TRANSFORMATION__Z_HOMOGRAPHIQUE(point_courant_transforme_1
                                                                    ,point_courant
                                                                    ,Fhyperbolique_2_____nombre_A
                                                                    ,Fhyperbolique_2_____nombre_B
                                                                    ,Fhyperbolique_2_____nombre_C
                                                                    ,Fhyperbolique_2_____nombre_D
                                                                    ,NEUT
                                                                     );
                                        /* Transformation homographique du point courant...                                          */
                                     Cproduit(point_courant_transforme_2
                                             ,nombre_E
                                             ,point_courant_transforme_1
                                              );
                                        /* Cette similitude a ete introduite le 20120525210525...                                    */

                                     EGAL(fxyzt
                                         ,LIZ2(Fhyperbolique_2_____ponderation_de_la_coordonnee_X
                                              ,Reelle(point_courant_transforme_2)
                                              ,Fhyperbolique_2_____ponderation_de_la_coordonnee_Y
                                              ,Imaginaire(point_courant_transforme_2)
                                               )
                                          );
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   P O L Y N O M I A L   E N   ' X '   E T   ' Y '   ( B I D I M E N S I O N N E L )  :                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ polynomial en 'X' et 'Y'                                                                              */
/*                  est defini par l'equation :                                                                                      */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = PolynomeQuatriemeDegre(X,Y)                                              */
/*                                                                                                                                   */
/*                  initialise par defaut avec :                                                                                     */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = X+Y                                                                      */
/*                                                                                                                                   */
/*                  ou {X,Y} sont les coordonnees cartesiennes.                                                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fpolynome_cartesienne_2D_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_4__X_4,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_4__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_4__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_4__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_4__X_0,FZERO)));
                                        /* Definition du premier polynome en 'X' (puissance la plus elevee de 'Y').                  */
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_3__X_4,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_3__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_3__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_3__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_3__X_0,FZERO)));
                                        /* Definition du second polynome en 'X'.                                                     */
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_2__X_4,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_2__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_2__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_2__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_2__X_0,FZERO)));
                                        /* Definition du troisieme polynome en 'X'.                                                  */
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_1__X_4,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_1__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_1__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_1__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_1__X_0,FU)));
                                        /* Definition du quatrieme polynome en 'X'.                                                  */
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_0__X_4,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_0__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_0__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_0__X_1,FU)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_0__X_0,FZERO)));
                                        /* Definition du dernier polynome en 'X' (puissance la plus faible de 'Y').                  */

DEFV(Common,DEFV(FonctionF,Fpolynome_cartesienne_2D(Xf,Yf,Zf,Tf)))
                                        /* Cette fonction a ete introduite le 20071016144613...                                      */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "polynome cartesien".                         */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Fpolynome_cartesienne_2D(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));               */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Fpolynome_cartesienne_2D(...)' est utile...                               */

     USs_GooF______CONDITIONNEL(Fpolynome_cartesienne_2D_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,HORNER_2_04(Xf,Yf

                                                     ,Fpolynome_cartesienne_2D_____Y_4__X_4
                                                     ,Fpolynome_cartesienne_2D_____Y_4__X_3
                                                     ,Fpolynome_cartesienne_2D_____Y_4__X_2
                                                     ,Fpolynome_cartesienne_2D_____Y_4__X_1
                                                     ,Fpolynome_cartesienne_2D_____Y_4__X_0

                                                     ,Fpolynome_cartesienne_2D_____Y_3__X_4
                                                     ,Fpolynome_cartesienne_2D_____Y_3__X_3
                                                     ,Fpolynome_cartesienne_2D_____Y_3__X_2
                                                     ,Fpolynome_cartesienne_2D_____Y_3__X_1
                                                     ,Fpolynome_cartesienne_2D_____Y_3__X_0

                                                     ,Fpolynome_cartesienne_2D_____Y_2__X_4
                                                     ,Fpolynome_cartesienne_2D_____Y_2__X_3
                                                     ,Fpolynome_cartesienne_2D_____Y_2__X_2
                                                     ,Fpolynome_cartesienne_2D_____Y_2__X_1
                                                     ,Fpolynome_cartesienne_2D_____Y_2__X_0

                                                     ,Fpolynome_cartesienne_2D_____Y_1__X_4
                                                     ,Fpolynome_cartesienne_2D_____Y_1__X_3
                                                     ,Fpolynome_cartesienne_2D_____Y_1__X_2
                                                     ,Fpolynome_cartesienne_2D_____Y_1__X_1
                                                     ,Fpolynome_cartesienne_2D_____Y_1__X_0

                                                     ,Fpolynome_cartesienne_2D_____Y_0__X_4
                                                     ,Fpolynome_cartesienne_2D_____Y_0__X_3
                                                     ,Fpolynome_cartesienne_2D_____Y_0__X_2
                                                     ,Fpolynome_cartesienne_2D_____Y_0__X_1
                                                     ,Fpolynome_cartesienne_2D_____Y_0__X_0
                                                      )
                                          );
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " U N I V E R S E L "   P O L Y N O M I A L   E N   ' X '   E T   ' Y '   ( B I D I M E N S I O N N E L )  :   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "universel" polynomial en 'X' et 'Y'                                                                  */
/*                  est defini par l'equation :                                                                                      */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = FfLIO17(ponderation,PolynomeQuatriemeDegre(X,Y),...)                     */
/*                                                                                                                                   */
/*                  initialise par defaut avec :                                                                                     */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = X+Y                                                                      */
/*                                                                                                                                   */
/*                  ou {X,Y} sont les coordonnees cartesiennes.                                                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Funiversel_polynome_cartesienne_2D_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                             ,FAUX
                              )
                 )
     );
                                        /* Afin de permettre l'usage du 'GooF'...                                                    */

DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_NEUT,FU)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_ACOX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_ASIX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_COHX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_COSX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_CSEX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_CTGX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_CTHX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_EXPX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_LOGX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_RACX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_SECX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_SICX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_SIHX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_SINX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_TAHX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_TANX,FZERO)));
                                        /* Ponderations des fonctions de la 'fxyzt' initialise sur 'NEUT(...)' par defaut...         */

DEFV(Common,DEFV(FonctionF,Funiversel_polynome_cartesienne_2D(Xf,Yf,Zf,Tf)))
                                        /* Cette fonction a ete introduite le 20080409121547...                                      */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "polynome cartesien".                         */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Cette restauration se fera grace au code suivant (avec 'FLOT__AI' representant            */
                                        /* 'FLOT__ARGUMENT_INUTILE') :                                                               */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Funiversel_polynome_cartesienne_2D(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));     */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Funiversel_polynome_cartesienne_2D(...)' est utile...                     */

     begin_nouveau_block
          Bblock
          DEFV(Float,INIT(pxy,Fpolynome_cartesienne_2D(Xf,Yf,Zf,Tf)));
                                        /* Valeur du polynome du quatrieme degre en 'X' et 'Y'...                                    */

          BSaveModifyVariable(Logical
                             ,FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                             ,Funiversel_polynome_cartesienne_2D_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                              );
                                        /* Afin de choisir entre l'arithmetique "de base" et l'arithmetique "etendue" dans           */
                                        /* 'FfLIO17(...)'...                                                                         */

          EGAL(fxyzt
              ,FfLIO17(Funiversel_polynome_cartesienne_2D_____ponderation_NEUT,NEUT(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_ACOX,ACOX(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_ASIX,ASIX(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_COHX,COHX(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_COSX,COSX(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_CSEX,CSEX(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_CTGX,CTGX(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_CTHX,CTHX(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_EXPX,EXPX(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_LOGX,LOGO(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_RACX,RACO(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_SECX,SECX(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_SICX,SICX(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_SIHX,SIHX(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_SINX,SINX(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_TAHX,TAHX(pxy)
                      ,Funiversel_polynome_cartesienne_2D_____ponderation_TANX,TANX(pxy)
                      ,FZERO
                       )
               );
                                        /* Le 20220130102633, 'LOGX(ADD2(ABSO(pxy),EXPX(FZERO))' et 'RACX(ABSO(pxy)' ont ete         */
                                        /* remplaces respectivement par 'LOGO(pxy)' et 'RACO(pxy)'...                                */

          ESaveModifyVariable(Logical
                             ,FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                              );
          Eblock
     end_nouveau_block

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   P O L Y N O M I A L   E N   ' R H O '   E T   ' T E T A '  :                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ polynomial en 'Rho' et 'Theta'                                                                        */
/*                  est defini par l'equation :                                                                                      */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = PolynomeQuatriemeDegre(Rho,Theta)                                        */
/*                                                                                                                                   */
/*                  initialise par defaut avec :                                                                                     */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = Rho+Theta                                                                */
/*                                                                                                                                   */
/*                  ou {Rho,Theta} sont les coordonnees polaires de {X,Y}.                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fpolynome_polaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_4__Rho_4,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_4__Rho_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_4__Rho_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_4__Rho_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_4__Rho_0,FZERO)));
                                        /* Definition du premier polynome en 'Rho' (puissance la plus elevee de 'Theta').            */
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_3__Rho_4,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_3__Rho_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_3__Rho_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_3__Rho_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_3__Rho_0,FZERO)));
                                        /* Definition du second polynome en 'Rho'.                                                   */
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_2__Rho_4,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_2__Rho_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_2__Rho_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_2__Rho_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_2__Rho_0,FZERO)));
                                        /* Definition du troisieme polynome en 'Rho'.                                                */
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_1__Rho_4,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_1__Rho_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_1__Rho_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_1__Rho_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_1__Rho_0,FU)));
                                        /* Definition du quatrieme polynome en 'Rho'.                                                */
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_0__Rho_4,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_0__Rho_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_0__Rho_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_0__Rho_1,FU)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_0__Rho_0,FZERO)));
                                        /* Definition du dernier polynome en 'Rho' (puissance la plus faible de 'Theta').            */

DEFV(Common,DEFV(Logical,SINT(Fpolynome_polaire_____symetriser_Theta_par_rapport_a_pi,FAUX)));
                                        /* Faut-il symetriser 'Theta' par rapport a 'pi' ou le conserver tel quel (ceci fut          */
                                        /* introduit le 20071024162929 afin de donner la possibiliter de supprimer la discontinuite  */
                                        /* du champ genere en passant de 2.pi a 0) ?                                                 */

DEFV(Common,DEFV(FonctionF,Fpolynome_polaire(Xf,Yf,Zf,Tf)))
                                        /* Cette fonction a ete introduite le 20071002091910...                                      */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "polynome polaire".                           */
     DEFV(Float,INIT(Rho,Rho_2D(Xf,Yf)));
     DEFV(Float,INIT(Theta,Theta_2D(Xf,Yf)));
                                        /* Coordonnees polaires de {Xf,Yf}.                                                          */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Fpolynome_polaire(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                      */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Fpolynome_polaire(...)' est utile...                                      */

     Test(IL_FAUT(Fpolynome_polaire_____symetriser_Theta_par_rapport_a_pi))
          Bblock
          EGAL(Theta,SYME(Theta,FZERO,CERCLE_TRIGONOMETRIQUE));
                                        /* Cette symetrisation de 'Theta', ramenant [0,2.pi] a [0,pi,0] fut introduite le            */
                                        /* 20071024162929...                                                                         */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     USs_GooF______CONDITIONNEL(Fpolynome_polaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,HORNER_2_04(Rho,Theta

                                                     ,Fpolynome_polaire_____Theta_4__Rho_4
                                                     ,Fpolynome_polaire_____Theta_4__Rho_3
                                                     ,Fpolynome_polaire_____Theta_4__Rho_2
                                                     ,Fpolynome_polaire_____Theta_4__Rho_1
                                                     ,Fpolynome_polaire_____Theta_4__Rho_0

                                                     ,Fpolynome_polaire_____Theta_3__Rho_4
                                                     ,Fpolynome_polaire_____Theta_3__Rho_3
                                                     ,Fpolynome_polaire_____Theta_3__Rho_2
                                                     ,Fpolynome_polaire_____Theta_3__Rho_1
                                                     ,Fpolynome_polaire_____Theta_3__Rho_0

                                                     ,Fpolynome_polaire_____Theta_2__Rho_4
                                                     ,Fpolynome_polaire_____Theta_2__Rho_3
                                                     ,Fpolynome_polaire_____Theta_2__Rho_2
                                                     ,Fpolynome_polaire_____Theta_2__Rho_1
                                                     ,Fpolynome_polaire_____Theta_2__Rho_0

                                                     ,Fpolynome_polaire_____Theta_1__Rho_4
                                                     ,Fpolynome_polaire_____Theta_1__Rho_3
                                                     ,Fpolynome_polaire_____Theta_1__Rho_2
                                                     ,Fpolynome_polaire_____Theta_1__Rho_1
                                                     ,Fpolynome_polaire_____Theta_1__Rho_0

                                                     ,Fpolynome_polaire_____Theta_0__Rho_4
                                                     ,Fpolynome_polaire_____Theta_0__Rho_3
                                                     ,Fpolynome_polaire_____Theta_0__Rho_2
                                                     ,Fpolynome_polaire_____Theta_0__Rho_1
                                                     ,Fpolynome_polaire_____Theta_0__Rho_0
                                                      )
                                          );
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   U N I V E R S E L   P O L Y N O M I A L   E N   ' R H O '   E T   ' T E T A '  :                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "universel" polynomial en 'Rho' et 'Theta'                                                            */
/*                  est defini par l'equation :                                                                                      */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = FfLIO17(ponderation,PolynomeQuatriemeDegre(Rho,Theta),...)               */
/*                                                                                                                                   */
/*                  initialise par defaut avec :                                                                                     */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = Rho+Theta                                                                */
/*                                                                                                                                   */
/*                  ou {Rho,Theta} sont les coordonnees polaires de {X,Y}.                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Funiversel_polynome_polaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                             ,FAUX
                              )
                 )
     );
                                        /* Afin de permettre l'usage du 'GooF'...                                                    */

DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_NEUT,FU)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_ACOX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_ASIX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_COHX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_COSX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_CSEX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_CTGX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_CTHX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_EXPX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_LOGX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_RACX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_SECX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_SICX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_SIHX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_SINX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_TAHX,FZERO)));
DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_TANX,FZERO)));
                                        /* Ponderations des fonctions de la 'fxyzt' initialise sur 'NEUT(...)' par defaut...         */

DEFV(Common,DEFV(FonctionF,Funiversel_polynome_polaire(Xf,Yf,Zf,Tf)))
                                        /* Cette fonction a ete introduite le 20080409121547...                                      */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "polynome polaire".                           */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Cette restauration se fera grace au code suivant (avec 'FLOT__AI' representant            */
                                        /* 'FLOT__ARGUMENT_INUTILE') :                                                               */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Funiversel_polynome_polaire(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));            */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Funiversel_polynome_polaire(...)' est utile...                            */

     begin_nouveau_block
          Bblock
          DEFV(Float,INIT(pxy,Fpolynome_polaire(Xf,Yf,Zf,Tf)));
                                        /* Valeur du polynome du quatrieme degre en 'X' et 'Y'...                                    */

          BSaveModifyVariable(Logical
                             ,FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                             ,Funiversel_polynome_polaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                              );
                                        /* Afin de choisir entre l'arithmetique "de base" et l'arithmetique "etendue" dans           */
                                        /* 'FfLIO17(...)'...                                                                         */

          EGAL(fxyzt
              ,FfLIO17(Funiversel_polynome_polaire_____ponderation_NEUT,NEUT(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_ACOX,ACOX(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_ASIX,ASIX(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_COHX,COHX(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_COSX,COSX(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_CSEX,CSEX(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_CTGX,CTGX(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_CTHX,CTHX(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_EXPX,EXPX(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_LOGX,LOGO(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_RACX,RACO(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_SECX,SECX(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_SICX,SICX(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_SIHX,SIHX(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_SINX,SINX(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_TAHX,TAHX(pxy)
                      ,Funiversel_polynome_polaire_____ponderation_TANX,TANX(pxy)
                      ,FZERO
                       )
               );
                                        /* Le 20220130102633, 'LOGX(ADD2(ABSO(pxy),EXPX(FZERO))' et 'RACX(ABSO(pxy)' ont ete         */
                                        /* remplaces respectivement par 'LOGO(pxy)' et 'RACO(pxy)'...                                */

          ESaveModifyVariable(Logical
                             ,FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                              );
          Eblock
     end_nouveau_block

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   P O L Y N O M I A L   E N   ' X ' ,   ' Y ' ,   ' R H O '   E T   ' T E T A '  :                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ polynomial en 'X', 'Y', 'Rho' et 'Theta'                                                              */
/*                  est defini par l'equation :                                                                                      */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = PolynomePremierDegre(X,Y,Rho,Theta)                                      */
/*                                                                                                                                   */
/*                  initialise par defaut avec :                                                                                     */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = X+Y+Rho+Theta                                                            */
/*                                                                                                                                   */
/*                  ou {Rho,Theta} sont les coordonnees polaires de {X,Y}.                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fpolynome_cartesienne_polaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                             ,FAUX
                              )
                 )
     );
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_1__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_1__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_0__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_0__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_1__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_1__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_0__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_0__X_0,FU)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_1__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_1__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_0__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_0__X_0,FU)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_1__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_1__X_0,FU)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_0__X_1,FU)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_0__X_0,FZERO)));

                                        /* Definition du polynome...                                                                 */

DEFV(Common,DEFV(Logical,SINT(Fpolynome_cartesienne_polaire_____symetriser_Theta_par_rapport_a_pi,FAUX)));
                                        /* Faut-il symetriser 'Theta' par rapport a 'pi' ou le conserver tel quel ? Ceci permet      */
                                        /* de donner la possibiliter de supprimer la discontinuite du champ genere en passant        */
                                        /* de 2.pi a 0.                                                                              */

DEFV(Common,DEFV(FonctionF,Fpolynome_cartesienne_polaire(Xf,Yf,Zf,Tf)))
                                        /* Cette fonction a ete introduite le 20071027103704...                                      */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "polynome cartesien polaire".                 */
     DEFV(Float,INIT(Rho,Rho_2D(Xf,Yf)));
     DEFV(Float,INIT(Theta,Theta_2D(Xf,Yf)));
                                        /* Coordonnees polaires de {Xf,Yf}.                                                          */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Fpolynome_cartesienne_polaire(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));          */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Fpolynome_cartesienne_polaire(...)' est utile...                          */

     Test(IL_FAUT(Fpolynome_cartesienne_polaire_____symetriser_Theta_par_rapport_a_pi))
          Bblock
          EGAL(Theta,SYME(Theta,FZERO,CERCLE_TRIGONOMETRIQUE));
                                        /* Cette symetrisation de 'Theta', ramenant [0,2.pi] a [0,pi,0] fut introduite le            */
                                        /* 20071024162929...                                                                         */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     USs_GooF______CONDITIONNEL(Fpolynome_cartesienne_polaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,HORNER_4_01(Xf,Yf,Rho,Theta

                                                     ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_1__X_1
                                                     ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_1__X_0
                                                     ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_0__X_1
                                                     ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_0__X_0
                                                     ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_1__X_1
                                                     ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_1__X_0
                                                     ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_0__X_1
                                                     ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_0__X_0
                                                     ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_1__X_1
                                                     ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_1__X_0
                                                     ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_0__X_1
                                                     ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_0__X_0
                                                     ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_1__X_1
                                                     ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_1__X_0
                                                     ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_0__X_1
                                                     ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_0__X_0
                                                      )
                                          );
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   P O L Y N O M I A L   E N   ' X ' , ' Y '   E T   ' Z '   ( T R I D I M E N S I O N N E L )  :                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ polynomial en 'X', 'Y' et 'Z'                                                                         */
/*                  est defini par l'equation :                                                                                      */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = PolynomeDeuxiemeDegre(X,Y,Z)                                                      */
/*                                                                                                                                   */
/*                  initialise par defaut avec :                                                                                     */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = X+Y+Z                                                                             */
/*                                                                                                                                   */
/*                  ou {X,Y} sont les coordonnees cartesiennes.                                                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fpolynome_cartesienne_3D_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF'...                                                    */

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_3__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_3__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_3__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_3__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_2__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_2__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_2__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_2__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_1__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_1__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_1__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_1__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_0__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_0__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_0__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_0__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_3__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_3__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_3__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_3__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_2__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_2__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_2__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_2__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_1__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_1__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_1__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_1__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_0__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_0__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_0__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_0__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_3__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_3__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_3__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_3__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_2__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_2__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_2__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_2__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_1__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_1__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_1__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_1__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_0__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_0__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_0__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_0__X_0,FU)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_3__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_3__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_3__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_3__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_2__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_2__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_2__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_2__X_0,FZERO)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_1__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_1__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_1__X_1,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_1__X_0,FU)));

DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_0__X_3,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_0__X_2,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_0__X_1,FU)));
DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_0__X_0,FZERO)));

DEFV(Common,DEFV(FonctionF,Fpolynome_cartesienne_3D(Xf,Yf,Zf,Tf)))
                                        /* Cette fonction a ete introduite le 20210125110537...                                      */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[, 'Tf' etant inutilisee...            */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "polynome cartesien".                         */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Cette restauration se fera grace au code suivant (avec 'FLOT__AI' representant            */
                                        /* 'FLOT__ARGUMENT_INUTILE') :                                                               */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Fpolynome_cartesienne_3D(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));               */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Fpolynome_cartesienne_3D(...)' est utile...                               */

     USs_GooF______CONDITIONNEL(Fpolynome_cartesienne_3D_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,HORNER_3_03(Xf,Yf,Zf

                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_3__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_3__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_3__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_3__X_0

                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_2__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_2__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_2__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_2__X_0

                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_1__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_1__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_1__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_1__X_0

                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_0__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_0__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_0__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_3__Y_0__X_0

                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_3__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_3__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_3__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_3__X_0

                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_2__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_2__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_2__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_2__X_0

                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_1__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_1__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_1__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_1__X_0

                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_0__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_0__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_0__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_2__Y_0__X_0

                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_3__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_3__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_3__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_3__X_0

                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_2__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_2__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_2__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_2__X_0

                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_1__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_1__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_1__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_1__X_0

                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_0__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_0__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_0__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_1__Y_0__X_0

                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_3__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_3__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_3__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_3__X_0

                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_2__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_2__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_2__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_2__X_0

                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_1__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_1__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_1__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_1__X_0

                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_0__X_3
                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_0__X_2
                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_0__X_1
                                                     ,Fpolynome_cartesienne_3D_____Z_0__Y_0__X_0
                                                      )
                                          );
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   D E   D I R A C  :                                                                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ de Dirac est defini par                                                                               */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = 0 pour X#0 ou Y#0,                                                       */
/*                                                        = 1 pour X=0 et Y=0.                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Float,ZINT(Fdirac_reel_____intensite_reelle,FU)));
                                        /* Intensite reelle du Dirac...                                                              */
DEFV(Common,DEFV(Float,ZINT(Fdirac_reel_____base_reelle,FZERO)));
                                        /* Valeur reelle du champ (sauf a l'origine).                                                */
DEFV(Common,DEFV(Float,ZINT(Fdirac_imaginaire_____intensite_imaginaire,FZERO)));
                                        /* Intensite imaginaire du Dirac...                                                          */
DEFV(Common,DEFV(Float,ZINT(Fdirac_imaginaire_____base_imaginaire,FZERO)));
                                        /* Valeur imaginaire du champ (sauf a l'origine).                                            */
DEFV(Common,DEFV(Float,ZINT(Fdirac_reel__Fdirac_imaginaire_____abscisse,FZERO)));
                                        /* Abscisse du Dirac,                                                                        */
DEFV(Common,DEFV(Float,ZINT(Fdirac_reel__Fdirac_imaginaire_____ordonnee,FZERO)));
                                        /* Ordonnee du Dirac.                                                                        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   D E   D I R A C   R E E L  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,Fdirac_reel(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur reelle de la fonction 'Fxyzt' pour un champ de Dirac.                              */
     /*..............................................................................................................................*/
     EGAL(fxyzt
         ,COND(IFET(IFEQ(_cDENORMALISE_OX(Xf),_cDENORMALISE_OX(Fdirac_reel__Fdirac_imaginaire_____abscisse))
                   ,IFEQ(_cDENORMALISE_OY(Yf),_cDENORMALISE_OY(Fdirac_reel__Fdirac_imaginaire_____ordonnee))
                    )
              ,Fdirac_reel_____intensite_reelle
              ,Fdirac_reel_____base_reelle
               )
          );
                                        /* Les '_cDENORMALISE_OX'/'_cDENORMALISE_OY' sont la pour eviter les problemes d'arrondis... */

     RETU(fxyzt);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   D E   D I R A C   I M A G I N A I R E  :                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,Fdirac_imaginaire(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur imaginaire de la fonction 'Fxyzt' pour un champ de Dirac.                          */
     /*..............................................................................................................................*/
     EGAL(fxyzt
         ,COND(IFET(IFEQ(_cDENORMALISE_OX(Xf),_cDENORMALISE_OX(Fdirac_reel__Fdirac_imaginaire_____abscisse))
                   ,IFEQ(_cDENORMALISE_OY(Yf),_cDENORMALISE_OY(Fdirac_reel__Fdirac_imaginaire_____ordonnee))
                    )
              ,Fdirac_imaginaire_____intensite_imaginaire
              ,Fdirac_imaginaire_____base_imaginaire
               )
          );
                                        /* Les '_cDENORMALISE_OX'/'_cDENORMALISE_OY' sont la pour eviter les problemes d'arrondis... */

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " T R E F L E "  :                                                                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "trefle" est defini par                                                                               */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = Cs.sin[R(X,Y)] + Ts                                                      */
/*                                                                                                                                   */
/*                  ou (suivant la version) :                                                                                        */
/*                                                                                                                                   */
/*                                                                      2.r                                                          */
/*                                                                R(X,Y)                                                             */
/*                                      F(X,Y,Z) = F(X,Y) = Cs.--------------- + Co                                                  */
/*                                                                    4.r                                                            */
/*                                                              R(X,Y)    + Ts                                                       */
/*                                                                                                                                   */
/*                  avec dans les deux versions :                                                                                    */
/*                                                                                                                                   */
/*                                                               rho                                                                 */
/*                                      R(X,Y) = Cr.---------------------------- + Pr                                                */
/*                                                   Cc.cos(Ct.theta + Pt) + Tc                                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                        .:-o**#########*****************##########                                                 */
/*                                       .:-+o*########*****oooooooo*******#########                                                 */
/*                  ......              .:-+o*#######****oooooooooooooo*****########                                                 */
/*                  -----:::::.....  ...::-+o*######***ooo+++++++++ooooo****########                                                 */
/*                  oooooo++++----::::::--+o*######**oo++++++++++++++oooo***########                                                 */
/*                  ***********oooo+++++++o**#####**o+++----------++++ooo***########                                                 */
/*                  ##############**********#####**o++----::::-----+++ooo***########                                                 */
/*                  #############################*o+---:::::::::----++ooo**#########                                                 */
/*                  ############################*o+--:::.....::::---++oo***########*                                                 */
/*                  ########**********#########**+--:.........:::---++oo**########*o                                                 */
/*                  ##********oooooooooooo******o+-:.... ......::--++oo**#######**o+                                                 */
/*                  *****oooooo+++++++---+++++oo+-:..      ....::-++o**#######**o+--                                                 */
/*                  ***oooo+++++-----::::::::::--:..        ..::-++o**######**o+--:.                                                 */
/*                  *ooooo++++----:::::............        ..:--+o**#######*o++-:..                                                  */
/*                  *oooo++++----::::.....                .::-+o**#######*oo+-::.                                                    */
/*                  ooooo+++----::::.....               ..:--+o**#######**o+--:..                                                    */
/*                  *oooo++++----::::.....                .::-+o**#######*oo+-::.                                                    */
/*                  *ooooo++++----:::::............        ..:--+o**#######*o++-:..                                                  */
/*                  ***oooo+++++-----::::::::::--:..        ..::-++o**######**o+--:.                                                 */
/*                  *****oooooo+++++++---+++++oo+-:..      ....::-++o**#######**o+--                                                 */
/*                  ##********oooooooooooo******o+-:.... ......::--++oo**#######**o+                                                 */
/*                  ########**********#########**+--:.........:::---++oo**########*o                                                 */
/*                  ############################*o+--:::.....::::---++oo***########*                                                 */
/*                  #############################*o+---:::::::::----++ooo**#########                                                 */
/*                  ##############**********#####**o++----::::-----+++ooo***########                                                 */
/*                  ***********oooo+++++++o**#####**o+++----------++++ooo***########                                                 */
/*                  oooooo++++----::::::--+o*######**oo++++++++++++++oooo***########                                                 */
/*                  -----:::::.....  ...::-+o*######***ooo+++++++++ooooo****########                                                 */
/*                  ......              .:-+o*#######****oooooooooooooo*****########                                                 */
/*                                       .:-+o*########*****oooooooo*******#########                                                 */
/*                                        .:-o**#########*****************##########                                                 */
/*                     .....:::::...      .:-+o**###########***********#############                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Periodicite/Non Periodicite du champ :                                                                                     */
/*                                                                                                                                   */
/*                  'VERSION_01' :                                                                                                   */
/*                  ------------                                                                                                     */
/*                                                                                                                                   */
/*                  cette facon de calculer le trefle utilise une fonction periodique dans le plan, ce qui                           */
/*                  provoque une alternance de maxima et de minima quand on s'eloigne vers l'infini ; elle                           */
/*                  est de la forme :                                                                                                */
/*                                                                                                                                   */
/*                  posons :                                                                                                         */
/*                                                                                                                                   */
/*                                                               rho                                                                 */
/*                                      R(X,Y) = Cr.---------------------------- + Pr                                                */
/*                                                   Cc.cos(Ct.theta + Pt) + Tc                                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                     F ^                                                                           */
/*                               +                       |       *                                                                   */
/*                            +     +                    |    *     *           seule la partie correspondant                        */
/*                          +         +                  |  *         *         a U>0 est utilisee.                                  */
/*                         +           +                 | *           *                                                             */
/*                        +             +                |*             *                 *                                          */
/*                  -----+---------------+---------------*---------------*---------------*--------->                                 */
/*                      +                 +             +|                *             *                                            */
/*                                         +           + |                 *           *           U                                 */
/*                  F = Cs.sin(U) + Ts      +         +  |                  *         *                                              */
/*                                            +     +    |                    *     *                                                */
/*                                               +       |                       *                                                   */
/*                                                                                                                                   */
/*                  on a alors :                                                                                                     */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = Cs.sin[R(X,Y)] + Ts                                                      */
/*                                                                                                                                   */
/*                  la periodicite etant introduite par la fonction 'sin'.                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  'VERSION_02' :                                                                                                   */
/*                  ------------                                                                                                     */
/*                                                                                                                                   */
/*                  cette facon de calculer le trefle utilise une fonction non periodique dans le plan,                              */
/*                  telle qu'elle ne possede qu'un seul maximum a droite (c'est-a-dire pour U>0), pour                               */
/*                  tendre vers zero a l'infini ; elle est de la forme :                                                             */
/*                                                                                                                                   */
/*                  posons :                                                                                                         */
/*                                                                                                                                   */
/*                                                               rho                                                                 */
/*                                      R(X,Y) = Cr.---------------------------- + Pr                                                */
/*                                                   Cc.cos(Ct.theta + Pt) + Tc                                                      */
/*                                                                                                                                   */
/*                              2.r                                                                                                  */
/*                             U                       F ^                                                                           */
/*                  F = Cs.----------- + Co    +         |         *                                                                 */
/*                           4.r            +     +      |      *     *         seule la partie correspondant                        */
/*                          U    + Ts     +         +    |    *         *       a U>0 est utilisee.                                  */
/*                                     +             +   |   *             *                                                         */
/*                    +   +   +   +                   +  |  *                   *   *   *   *                                        */
/*                  ------------------------------------+**---------------------------------------->                                 */
/*                                                       |                                                                           */
/*                                                       |                                         U                                 */
/*                                                                                                                                   */
/*                  on a alors :                                                                                                     */
/*                                                                                                                                   */
/*                                                                      2.r                                                          */
/*                                                                R(X,Y)                                                             */
/*                                      F(X,Y,Z) = F(X,Y) = Cs.--------------- + Co                                                  */
/*                                                                    4.r                                                            */
/*                                                              R(X,Y)    + Ts                                                       */
/*                                                                                                                                   */
/*                  la non periodicite etant introduite par une fonction "polynomiale" ; de plus, plus                               */
/*                  le demi-exposant 'r' est grand, plus la "double-bosse" de la courbe ci-dessus est                                */
/*                  etroite...                                                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  'VERSION_03' :                                                                                                   */
/*                  ------------                                                                                                     */
/*                                                                                                                                   */
/*                  cette facon de calculer le trefle utilise une fonction non periodique dans le plan,                              */
/*                  telle qu'elle ne possede qu'un seul maximum a droite (c'est-a-dire pour U>0), pour                               */
/*                  tendre vers zero a l'infini ; elle est de la forme :                                                             */
/*                                                                                                                                   */
/*                  posons :                                                                                                         */
/*                                                                                                                                   */
/*                                                               rho                                                                 */
/*                                      R(X,Y) = Cr.---------------------------- + Pr                                                */
/*                                                   Cc.cos(Ct.theta + Pt) + Tc                                                      */
/*                                                                                                                                   */
/*                                r                                                                                                  */
/*                             - ----.U                                                                                              */
/*                          r     Ts                   F ^                                                                           */
/*                  F = Cs.U .e         + Co             |         *                                                                 */
/*                                                       |      *  .  *         seule la partie correspondant                        */
/*                  (avec r>1 et Ts>0)                   |    *    .    *       a U>0 est utilisee.                                  */
/*                                                       |   *     .       *                                                         */
/*                                                       |  *      .            *   *   *   *                                        */
/*                  -------------------------------------**---------------------------------------->                                 */
/*                                                       |         Ts                                                                */
/*                                                       |                                         U                                 */
/*                                                                                                                                   */
/*                  on a alors :                                                                                                     */
/*                                                                                                                                   */
/*                                                                         r                                                         */
/*                                                                      - ----.R(X,Y)                                                */
/*                                                                   r     Ts                                                        */
/*                                      F(X,Y,Z) = F(X,Y) = Cs.R(X,Y) .e              + Co                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  la non periodicite etant introduite par les exponentielles ; de plus, plus                                       */
/*                  l'exposant 'r' est grand, plus la "bosse" de la courbe ci-dessus est etroite,                                    */
/*                  les points d'inflexion etant en :                                                                                */
/*                                                                                                                                   */
/*                                                 1                                                                                 */
/*                                      h.(1 +/- -----)                                                                              */
/*                                                 ___                                                                               */
/*                                               \/ r                                                                                */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01                          /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */
DEFV(Common,DEFV(Logical,_____FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01));
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01                          /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01                          /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02                          /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */
DEFV(Common,DEFV(Logical,_____FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02));
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02                          /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02                          /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03                          /* Common,DEFV(Fonction,) : avec 'VERSION_03'.       */
DEFV(Common,DEFV(Logical,_____FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03));
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03                          /* Common,DEFV(Fonction,) : avec 'VERSION_03'.       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03                          /* Common,DEFV(Fonction,) : avec 'VERSION_03'.       */

DEFV(Common,DEFV(Logical,SINT(Ftrefle_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01      /* Common : la generation depend des conditions...                       */
#    define    COEFFICIENT_TREFLE_SINUS                                                                                                 \
                         FDU                                                                                                            \
                                        /* Pour initialiser 'Ftrefle_____coefficient' et 'Ftrefle_____coefficient_lineaire'.         */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient,COEFFICIENT_TREFLE_SINUS)));
                                        /* Coefficient de ponderation 'Cs' de la fonction 'sinus'.                                   */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_lineaire,COMP(COEFFICIENT_TREFLE_SINUS))));
                                        /* Coefficient lineaire 'Ts' de la fonction "polynomiale" ; le 'COMP()' est la afin          */
                                        /* de garantir que la fonction 'F(X,Y)' est dans [0,1]...                                    */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01      /* Common : la generation depend des conditions...                       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01      /* Common : la generation depend des conditions...                       */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02      /* Common : la generation depend des conditions...                       */
#    define    COEFFICIENT_TREFLE_SINUS                                                                                                 \
                         FU                                                                                                             \
                                        /* Pour initialiser 'Ftrefle_____coefficient' et 'Ftrefle_____coefficient_lineaire'.         */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient,COEFFICIENT_TREFLE_SINUS)));
                                        /* Coefficient de ponderation 'Cs' de la fonction "polynomiale".                             */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_lineaire,EXP2(MOIT(COEFFICIENT_TREFLE_SINUS)))));
                                        /* Coefficient lineaire 'Ts' de la fonction "polynomiale" ; le 'EXP2(MOIT())' est la afin    */
                                        /* de garantir que la fonction 'F(X,Y)' est dans [0,1]...                                    */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_continu,FZERO)));
                                        /* Composante continu 'Co' de la fonction "polynomiale".                                     */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02      /* Common : la generation depend des conditions...                       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02      /* Common : la generation depend des conditions...                       */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03      /* Common : la generation depend des conditions...                       */
#    define    COEFFICIENT_TREFLE_SINUS                                                                                                 \
                         FU                                                                                                             \
                                        /* Pour initialiser 'Ftrefle_____coefficient' et 'Ftrefle_____coefficient_lineaire'.         */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient,COEFFICIENT_TREFLE_SINUS)));
                                        /* Coefficient de ponderation 'Cs' de la fonction "exponentielle".                           */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_lineaire,EXP2(MOIT(COEFFICIENT_TREFLE_SINUS)))));
                                        /* Coefficient lineaire 'Ts' de la fonction "exponentielle" ; le 'EXP2(MOIT())' est la afin  */
                                        /* de garantir que 'Ts' est strictement positif, et meme dans ]0,1[.                         */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_continu,FZERO)));
                                        /* Composante continu 'Co' de la fonction "polynomiale".                                     */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03      /* Common : la generation depend des conditions...                       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03      /* Common : la generation depend des conditions...                       */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01      /* Common : la generation depend des conditions...                       */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_rho,GRO8(PI))));
                                        /* Coefficient de ponderation 'Cr' du module 'rho'.                                          */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_phase_rho,NEGA(PI_SUR_2))));
                                        /* Coefficient de phase 'Pr' du module 'rho' (desole pour l'abus de langage, mais 'rho'      */
                                        /* est utilise comme un angle...).                                                           */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01      /* Common : la generation depend des conditions...                       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01      /* Common : la generation depend des conditions...                       */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02      /* Common : la generation depend des conditions...                       */
DEFV(Common,DEFV(Positive,SINT(Ftrefle_____moitie_de_l_exposant_de_rho_module,UN)));
                                        /* Moitie 'r' de l'exposant de 'R(X,Y)'.                                                     */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_rho,CERCLE_TRIGONOMETRIQUE)));
                                        /* Coefficient de ponderation 'Cr' du module 'rho'.                                          */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_phase_rho,FZERO)));
                                        /* Coefficient de phase 'Pr' du module 'rho' (desole pour l'abus de langage, mais 'rho'      */
                                        /* est utilise comme un angle...).                                                           */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02      /* Common : la generation depend des conditions...                       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02      /* Common : la generation depend des conditions...                       */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03      /* Common : la generation depend des conditions...                       */
DEFV(Common,DEFV(Positive,SINT(Ftrefle_____exposant_de_rho_module,GRO2(UN))));
                                        /* Valeur 'r' de l'exposant de 'R(X,Y)' (strictement superieur a 1).                         */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_rho,CERCLE_TRIGONOMETRIQUE)));
                                        /* Coefficient de ponderation 'Cr' du module 'rho'.                                          */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_phase_rho,FZERO)));
                                        /* Coefficient de phase 'Pr' du module 'rho' (desole pour l'abus de langage, mais 'rho'      */
                                        /* est utilise comme un angle...).                                                           */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03      /* Common : la generation depend des conditions...                       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03      /* Common : la generation depend des conditions...                       */

DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_cosinus,FDU)));
                                        /* Coefficient de ponderation 'Cc' de la fonction 'cosinus'.                                 */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_lineaire_cosinus,FDEUX)));
                                        /* Coefficient lineaire 'Tc' de l'expression en 'cosinus(theta)'.                            */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_theta,FU)));
                                        /* Coefficient de ponderation 'Ct' de l'angle 'theta'.                                       */
DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_phase_theta,FZERO)));
                                        /* Coefficient de phase 'Pt' de l'angle 'theta'.                                             */

DEFV(Common,DEFV(FonctionF,Ftrefle(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "trefle".                                     */
     DEFV(Float,INIT(rho_module,FLOT__UNDEF));
                                        /* Valeur de la fonction 'R(X,Y)' qui correspond au module 'rho' module cosinusoidalement    */
                                        /* par l'angle polaire 'theta'.                                                              */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02      /* Common : la generation depend des conditions...                       */
     DEFV(Float,INIT(exponentielle_de_rho_module,FLOT__UNDEF));
                                        /* Valeur de la fonction 'R(X,Y)' elevee a la puissance '2.r'.                               */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02      /* Common : la generation depend des conditions...                       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02      /* Common : la generation depend des conditions...                       */

     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Ftrefle(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                                */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Ftrefle(...)' est utile...                                                */

     USs_GooF______CONDITIONNEL(Ftrefle_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Introduit le 20071224133113 car, en effet, il manquait...                                 */
                               ,BLOC(
                                     Bblock
                                     EGAL(rho_module
                                         ,AXPB(Ftrefle_____coefficient_rho
                                              ,DIVZ(Rho_2D(Xf,Yf)
                                                   ,AXPB(Ftrefle_____coefficient_cosinus
                                                        ,COSX(AXPB(Ftrefle_____coefficient_theta
                                                                  ,Theta_2D(Xf,Yf)
                                                                  ,Ftrefle_____coefficient_phase_theta
                                                                   )
                                                              )
                                                        ,Ftrefle_____coefficient_lineaire_cosinus
                                                         )
                                                    )
                                              ,Ftrefle_____coefficient_phase_rho
                                               )
                                          );
                                     Eblock
                                     )
                                );
                                        /* Calcul de la fonction 'R(X,Y)' :                                                          */
                                        /*                                                                                           */
                                        /*                                           rho                                             */
                                        /*                  R(X,Y) = Cr.---------------------------- + Pr                            */
                                        /*                               Cc.cos(Ct.theta + Pt) + Tc                                  */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01
     USs_GooF______CONDITIONNEL(Ftrefle_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,AXPB(Ftrefle_____coefficient
                                              ,SINX(rho_module)
                                              ,Ftrefle_____coefficient_lineaire
                                               )
                                          );
                                     Eblock
                                     )
                                );
                                        /* Calcul de la fonction 'F(X,Y)' periodique.                                                */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02
     EGAL(exponentielle_de_rho_module
         ,PUIX(rho_module,DOUB(Ftrefle_____moitie_de_l_exposant_de_rho_module))
          );
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                        2.r                                                                */
                                        /*                  R(X,Y)                                                                   */
                                        /*                                                                                           */
     USs_GooF______CONDITIONNEL(Ftrefle_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,ADD2(MUL2(Ftrefle_____coefficient
                                                   ,DIVZ(EXP1(exponentielle_de_rho_module)
                                                        ,ADD2(EXP2(exponentielle_de_rho_module)
                                                             ,Ftrefle_____coefficient_lineaire
                                                              )
                                                         )
                                                    )
                                              ,Ftrefle_____coefficient_continu
                                               )
                                          );
                                     Eblock
                                     )
                                );
                                        /* Calcul de la fonction 'F(X,Y)' non periodique.                                            */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03
     USs_GooF______CONDITIONNEL(Ftrefle_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,ADD2(MUL3(Ftrefle_____coefficient
                                                   ,PUIX(rho_module,Ftrefle_____exposant_de_rho_module)
                                                   ,EXPB(MUL2(NEGA(DIVI(Ftrefle_____exposant_de_rho_module
                                                                       ,Ftrefle_____coefficient_lineaire
                                                                        )
                                                                   )
                                                             ,rho_module
                                                              )
                                                         )
                                                    )
                                              ,Ftrefle_____coefficient_continu
                                               )
                                          );
                                     Eblock
                                     )
                                );
                                        /* Calcul de la fonction 'F(X,Y)' non periodique.                                            */
                                        /*                                                                                           */
                                        /* On notera que l'on utilise 'EXPB(...)' et non pas 'EXPX(...)' a cause du bug              */
                                        /* 'BUG_SYSTEME_SG_C_exp'...                                                                 */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03

     RETU(fxyzt);
     Eblock

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03
#    undef     COEFFICIENT_TREFLE_SINUS
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02
#    undef     COEFFICIENT_TREFLE_SINUS
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02

#ifdef    FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01
#    undef     COEFFICIENT_TREFLE_SINUS
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " D I S T A N C E   E X P O N E N T I E L L E "  :                                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "distance exponentielle" est                                                                          */
/*                  defini par l'equation :                                                                                          */
/*                                                                                                                                   */
/*                                                           -k.d                                                                    */
/*                                      F(X,Y,Z) = F(X,Y) = e                                                                        */
/*                                                                                                                                   */
/*                  ou :                                                                                                             */
/*                                                                                                                                   */
/*                  'd' designe la distance du point courant                                                                         */
/*                  {X,Y} a l'origine.                                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                     ...........................                                                                   */
/*                                 ...................................                                                               */
/*                               .......................................                                                             */
/*                            .............................................                                                          */
/*                          .................................................                                                        */
/*                         ................:::::::::::::::::::................                                                       */
/*                       ...............:::::::::::::::::::::::::...............                                                     */
/*                      .............:::::::::::::::::::::::::::::::.............                                                    */
/*                     .............::::::::::-------------::::::::::.............                                                   */
/*                    ............:::::::::-------------------:::::::::............                                                  */
/*                   ............::::::::-------+++++++++-------::::::::............                                                 */
/*                   ...........:::::::------+++++++++++++++------:::::::...........                                                 */
/*                  ...........:::::::-----+++++ooooooooo+++++-----:::::::..........                                                 */
/*                  ...........::::::-----++++oooo*****oooo++++-----::::::..........                                                 */
/*                  ...........::::::-----+++ooo****#****ooo+++-----::::::..........                                                 */
/*                  ...........::::::-----+++ooo**#####**ooo+++-----::::::..........                                                 */
/*                  ...........::::::-----+++ooo****#****ooo+++-----::::::..........                                                 */
/*                  ...........::::::-----++++oooo*****oooo++++-----::::::..........                                                 */
/*                  ...........:::::::-----+++++ooooooooo+++++-----:::::::..........                                                 */
/*                   ...........:::::::------+++++++++++++++------:::::::...........                                                 */
/*                   ............::::::::-------+++++++++-------::::::::............                                                 */
/*                    ............:::::::::-------------------:::::::::............                                                  */
/*                     .............::::::::::-------------::::::::::.............                                                   */
/*                      .............:::::::::::::::::::::::::::::::.............                                                    */
/*                       ...............:::::::::::::::::::::::::...............                                                     */
/*                         ................:::::::::::::::::::................                                                       */
/*                          .................................................                                                        */
/*                            .............................................                                                          */
/*                               .......................................                                                             */
/*                                 ...................................                                                               */
/*                                     ...........................                                                                   */
/*                                           ...............                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fdistance_exponentielle_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(Float,SINT(Fdistance_exponentielle_____modulation,FU)));
                                        /* Coefficient 'k' de la modulation de la distance 'd'.                                      */

DEFV(Common,DEFV(FonctionF,Fdistance_exponentielle(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "distance exponentielle".                     */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Fdistance_exponentielle(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Fdistance_exponentielle(...)' est utile...                                */

     USs_GooF______CONDITIONNEL(Fdistance_exponentielle_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,EXPB(NEGA(MUL2(Fdistance_exponentielle_____modulation
                                                        ,Rho_2D(Xf,Yf)
                                                         )
                                                    )
                                               )
                                          );
                                     Eblock
                                     )
                                );
                                        /* Calcul de la fonction 'F(X,Y)'.                                                           */
                                        /*                                                                                           */
                                        /* On notera que l'on utilise 'EXPB(...)' et non pas 'EXPX(...)' a cause du bug              */
                                        /* 'BUG_SYSTEME_SG_C_exp'...                                                                 */
                                        /*                                                                                           */
                                        /* ATTENTION, jusqu'au 20000314090530, il y avait ici :                                      */
                                        /*                                                                                           */
                                        /*                  gRho_2D(FXorigine,FYorigine                                              */
                                        /*                         ,Xf,Yf                                                            */
                                        /*                          )                                                                */
                                        /*                                                                                           */
                                        /* mais l'utilisation de {FXorigine,FYorigine} est inutile puisque {Xf,Yf} sont eux-memes    */
                                        /* rapportes a une origine...                                                                */

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " S P I R A L E   D ' A R C H I M E D E "  :                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "spirale d'Archimede" est                                                                             */
/*                  defini par l'equation :                                                                                          */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = F(X,Y) = cos(a.r + b.t + c.r.t + d)                                               */
/*                                                                                                                                   */
/*                  etendue le 20070626150253 suivant :                                                                              */
/*                                                                                                                                   */
/*                                                                 2            2                                                    */
/*                                      F(X,Y,Z) = F(X,Y) = cos(A.r  + a.r + B.t  + b.t + C.r.t + d)                                 */
/*                                                                                                                                   */
/*                  etendue le 20240603112624 suivant :                                                                              */
/*                                                                                                                                   */
/*                                                              2                                                                    */
/*                                                           D.r  + d.r        2            2                                        */
/*                                      F(X,Y,Z) = F(X,Y) = e          .cos(A.r  + a.r + B.t  + b.t + C.r.t + d)                     */
/*                                                                                                                                   */
/*                  ou :                                                                                                             */
/*                                                                                                                                   */
/*                  {r,t} designe respectivement les deux                                                                            */
/*                  coordonnees polaires du point {X,Y}.                                                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  :oO%%#####%%Oo:-..... .....--:ooOO%%%####################%%%OOOo                                                 */
/*                  oO%%#####%%Oo:-.... .....-:ooOO%%#############################%%                                                 */
/*                  OO%#####%%Oo:-.... ....-:ooO%%############%%%%%%%%%%############                                                 */
/*                  O%######%Oo:-.... ...-::oO%########%%%OOOOooooooooOOOOO%%%######                                                 */
/*                  %%#####%Oo:-.... ...-:oO%%######%%OOoo:::----------::::ooOOO%%##                                                 */
/*                  %#####%%Oo-.... ...-:oO%######%OOo::--.................--::ooOO%                                                 */
/*                  %#####%Oo:-... ...-:oO%#####%Ooo:-.......         .........--::o                                                 */
/*                  %#####%Oo:-... ...-:O%#####%Oo:-.... .................  ......--                                                 */
/*                  %#####%Oo:-... ...:oO%####%Oo-... ......----------........ .....                                                 */
/*                  %#####%Oo:-... ..-:oO%###%Oo-.......-:ooOOOOOOOOooo::--.....  ..                                                 */
/*                  %#####%Oo:-... ...:oO%###%O:......:oO%%#########%%%OOoo:--.....                                                  */
/*                  %#####%%O:-... ...-:O%###%O:....-oO%#################%%Oo::-....                                                 */
/*                  O%#####%Oo:-... ...:oO####O:....o%###%%OOOOO%%%########%%Oo::-..                                                 */
/*                  O%%#####%Oo:-... ...:oO%###O-..-%#%O:--..---::oOO%%######%%Oo:-.                                                 */
/*                  oO%######%Oo:-... ...-:o%###%:..#o.. ..   .....-:oO%%######%Oo::                                                 */
/*                  :oO%######%Oo:-.... ....-:oO%### %%%Oo:-.... ....-:oO%%#####%%Oo                                                 */
/*                  -:oO%%######%Oo::-..... ..... .O%..O###%Oo-... ....-:oO%#####%%O                                                 */
/*                  .-:ooO%#######%OOo::--.....-:o%#O. .:%###%O:-... ...-:oO%#####%O                                                 */
/*                  ...-:oOO%########%%%OOOOOOO%###%o...-o%###%O:-... ...-:O%%#####%                                                 */
/*                  ....--:oOO%%##################Oo-. ..:O####%o:-......-:oO%#####%                                                 */
/*                  . .....-::oOO%%%##########%%Oo:.....-:O%###%Oo-... ...-:o%%#####                                                 */
/*                  ... ......-::oooOOOOOOOOOoo:-... ...:oO####%Oo-... ...-:oO%#####                                                 */
/*                  .....  .......----:::::---..... ...-oO%####%Oo-... ...-:oO%#####                                                 */
/*                  :-......  .................. ....-:oO%####%%o:-... ...-:oO%#####                                                 */
/*                  oo:--........            ......-:oOO%#####%Oo:.... ...-:oO%#####                                                 */
/*                  %OOoo::--...................--:oOO%######%Oo:-... ...-:oO%######                                                 */
/*                  ##%%%OOoo:::-------------::ooOO%%######%%Oo:-... ....-:oO%#####%                                                 */
/*                  ######%%%OOOOoooooooooooOOO%%%########%Oo:--... ....-:oO%######%                                                 */
/*                  ############%%%%%%%%%%%%###########%%Ooo:-.... ....-:oO%%#####%O                                                 */
/*                  %%##############################%%%Ooo:-..... ....-:oO%%#####%%O                                                 */
/*                  oOOO%%%#####################%%%OOoo:--..... ....--:oO%%#####%%Oo                                                 */
/*                  -::oooOOOO%%%%%%%%%%%%%%%OOOOoo::--...... .....-:ooO%######%%Oo:                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  obtenu avec a=16 et b=4 (soit "mr=16 mt=4" dans 'v $xci/spiArchimede$K').                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fspirale_d_Archimede_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____modulation_de_rho_rho,FZERO)));
                                        /* Coefficient 'A' de la modulation du carre du rayon 'r' (introduit le 20070626150253).     */
DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____modulation_de_rho,FU)));
                                        /* Coefficient 'a' de la modulation du rayon 'r'.                                            */
DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____modulation_de_theta_theta,FZERO)));
                                        /* Coefficient 'B' de la modulation du carre de l'angle 't' (introduit le 20070626150253).   */
DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____modulation_de_theta,FU)));
                                        /* Coefficient 'b' de la modulation de l'angle 't'.                                          */
DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____modulation_de_rho_theta,FZERO)));
                                        /* Coefficient 'C' de la modulation du produit 'r.t' (introduit le 20070625151210).          */
DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____dephasage,FZERO)));
                                        /* Dephasage 'd'.                                                                            */
DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____exponentiation_de_rho_rho,FZERO)));
                                        /* Coefficient 'D' de l'exponentiation du carre du rayon 'r' (introduit le 20240603112624).  */
DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____exponentiation_de_rho,FZERO)));
                                        /* Coefficient 'd' de l'exponentiation du rayon 'r' (introduit le 20240603112624).           */

DEFV(Common,DEFV(FonctionF,Fspirale_d_Archimede(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "spirale d'Archimede"...                      */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Fspirale_d_Archimede(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                   */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Fspirale_d_Archimede(...)' est utile...                                   */

     USs_GooF______CONDITIONNEL(Fspirale_d_Archimede_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,MUL2(EXPB(BLI1(Fspirale_d_Archimede_____exponentiation_de_rho_rho
                                                        ,Fspirale_d_Archimede_____exponentiation_de_rho
                                                        ,Rho_2D(Xf,Yf)
                                                        ,FZERO
                                                         )
                                                    )
                                              ,COS1(COSX(BLI2(Fspirale_d_Archimede_____modulation_de_rho_rho
                                                             ,Fspirale_d_Archimede_____modulation_de_rho
                                                             ,Rho_2D(Xf,Yf)
                                                             ,Fspirale_d_Archimede_____modulation_de_theta_theta
                                                             ,Fspirale_d_Archimede_____modulation_de_theta
                                                             ,Theta_2D(Xf,Yf)
                                                             ,Fspirale_d_Archimede_____modulation_de_rho_theta
                                                             ,Fspirale_d_Archimede_____dephasage
                                                              )
                                                         )
                                                    )
                                               )
                                          );
                                     Eblock
                                     )
                                );
                                        /* Calcul de la fonction 'F(X,Y)'.                                                           */
                                        /*                                                                                           */
                                        /* ATTENTION, jusqu'au 20000314090530, il y avait ici :                                      */
                                        /*                                                                                           */
                                        /*                  gRho_2D(FXorigine,FYorigine                                              */
                                        /*                         ,Xf,Yf                                                            */
                                        /*                          )                                                                */
                                        /*                  gaTheta_2D(FXorigine,FYorigine                                           */
                                        /*                           ,Xf,Yf                                                          */
                                        /*                            )                                                              */
                                        /*                                                                                           */
                                        /* mais l'utilisation de {FXorigine,FYorigine} est inutile puisque {Xf,Yf} sont eux-memes    */
                                        /* rapportes a une origine...                                                                */

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   A R C - T A N G E N T E   C I R C U L A I R E  :                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ Arc-Tangente est defini par                                                                           */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = atan(Y,X)                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,Fchamp_ATAN(Xf,Yf,Zf,Tf)))
                                        /* Fonction introduite le 20180820172019...                                                  */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[.                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ Arc-Tangente.                                 */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);

     EGAL(fxyzt,ATAN(Yf,Xf));

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   C O S I N U S / S I N U S   H Y P E R B O L I Q U E   G E N E R A L I S E  :                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ 'cosinus/sinus' hyperbolique generalise  est defini par                                               */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                                      F(X,Y,Z) = gCOHX_SIHX(ex,ax,X,bx,ey,ay,Y,by,t)                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fchamp_gCOHX_SIHX_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));

DEFV(Common,DEFV(Float,SINT(Fchamp_gCOHX_SIHX_____coefficient_exponentielle_X,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(Fchamp_gCOHX_SIHX_____facteur_____X,NEUT(FU))));
DEFV(Common,DEFV(Float,SINT(Fchamp_gCOHX_SIHX_____translation_X,FZERO)));
                                        /* Parametres relatifs a la coordonnee 'X' (Valeurs par defaut pour 'COHX(...)').            */
DEFV(Common,DEFV(Float,SINT(Fchamp_gCOHX_SIHX_____coefficient_exponentielle_Y,NEUT(FDU))));
DEFV(Common,DEFV(Float,SINT(Fchamp_gCOHX_SIHX_____facteur_____Y,NEGA(FU))));
DEFV(Common,DEFV(Float,SINT(Fchamp_gCOHX_SIHX_____translation_Y,FZERO)));
                                        /* Parametres relatifs a la coordonnee 'Y' (Valeurs par defaut pour 'COHX(...)').            */
DEFV(Common,DEFV(Float,SINT(Fchamp_gCOHX_SIHX_____translation_exponentielles_XY,FZERO)));
                                        /* Parametres relatifs aux coordonnees 'X' et 'Y' (Valeurs par defaut pour 'COHX(...)').     */

DEFV(Common,DEFV(FonctionF,Fchamp_gCOHX_SIHX(Xf,Yf,Zf,Tf)))
                                        /* Fonction introduite le 20180820172019...                                                  */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[.                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ Arc-Tangente.                                 */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);

     USs_GooF______CONDITIONNEL(Fchamp_gCOHX_SIHX_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,gCOHX_SIHX(Fchamp_gCOHX_SIHX_____coefficient_exponentielle_X
                                                    ,Fchamp_gCOHX_SIHX_____facteur_____X
                                                    ,Xf
                                                    ,Fchamp_gCOHX_SIHX_____translation_X
                                                    ,Fchamp_gCOHX_SIHX_____coefficient_exponentielle_Y
                                                    ,Fchamp_gCOHX_SIHX_____facteur_____Y
                                                    ,Yf
                                                    ,Fchamp_gCOHX_SIHX_____translation_Y
                                                    ,Fchamp_gCOHX_SIHX_____translation_exponentielles_XY
                                                     )
                                          );
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   G A U S S I E N  :                                                                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ Gaussien est defini par                                                                               */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                                                          2       2       2                                                        */
/*                                                  -c.(cx.X  + cy.Y  + cz.Z + cxy.X.Y + cyz.Y.Z + czx.Z.X + cxyz.X.Y.Z)             */
/*                                      F(X,Y,Z) = e                                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      .........................                                                                    */
/*                                  .................................                                                                */
/*                               ..............:::::::::::..............                                                             */
/*                             ..........:::::::::::::::::::::::..........                                                           */
/*                           .........:::::::::::-------:::::::::::.........                                                         */
/*                         ........::::::::-------------------::::::::........                                                       */
/*                        .......::::::--------+++++++++++--------::::::.......                                                      */
/*                      .......::::::------+++++++++++++++++++------::::::.......                                                    */
/*                     .......:::::-----++++++ooooooooooooo++++++-----:::::.......                                                   */
/*                    .......:::::----+++++ooooooooo*ooooooooo+++++----:::::.......                                                  */
/*                    ......:::::----++++ooooo*************ooooo++++----:::::......                                                  */
/*                   ......:::::----+++ooooo*******###*******ooooo+++----:::::......                                                 */
/*                   ......::::----+++oooo*****###########*****oooo+++----::::......                                                 */
/*                  ......:::::---++++ooo****###############****ooo++++---:::::.....                                                 */
/*                  ......::::----+++oooo****###############****oooo+++----::::.....                                                 */
/*                  ......::::----+++ooo****#################****ooo+++----::::.....                                                 */
/*                  ......::::----+++oooo****###############****oooo+++----::::.....                                                 */
/*                  ......:::::---++++ooo****###############****ooo++++---:::::.....                                                 */
/*                   ......::::----+++oooo*****###########*****oooo+++----::::......                                                 */
/*                   ......:::::----+++ooooo*******###*******ooooo+++----:::::......                                                 */
/*                    ......:::::----++++ooooo*************ooooo++++----:::::......                                                  */
/*                    .......:::::----+++++ooooooooo*ooooooooo+++++----:::::.......                                                  */
/*                     .......:::::-----++++++ooooooooooooo++++++-----:::::.......                                                   */
/*                      .......::::::------+++++++++++++++++++------::::::.......                                                    */
/*                        .......::::::--------+++++++++++--------::::::.......                                                      */
/*                         ........::::::::-------------------::::::::........                                                       */
/*                           .........:::::::::::-------:::::::::::.........                                                         */
/*                             ..........:::::::::::::::::::::::..........                                                           */
/*                               ..............:::::::::::..............                                                             */
/*                                  .................................                                                                */
/*                                      .........................                                                                    */
/*                                              .........                                                                            */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fgaussien_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224095754)...                      */

DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient,FU)));
                                        /* Coefficient de "force" du gaussien : plus il est grand, mieux est couverte                */
                                        /* la plage des niveaux...                                                                   */
DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient_X2,FU)));
DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient_Y2,FU)));
DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient_Z2,FU)));
                                        /* Coefficient d'"importance" des carres des coordonnees 'X', 'Y' et 'Z'.                    */
DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient_XY,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient_YZ,FZERO)));
DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient_ZX,FZERO)));
                                        /* Coefficient d'"importance" des produit de deux coordonnees.                               */
DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient_XYZ,FZERO)));
                                        /* Coefficient d'"importance" du produit des trois coordonnees 'X', 'Y' et 'Z'.              */

                                        /* On notera que ces coefficients permettent de dissymetriser le champ...                    */

DEFV(Common,DEFV(FonctionF,Fgaussien(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[.                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ gaussien.                                     */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Fgaussien(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                              */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Fgaussien(...)' est utile...                                              */

     USs_GooF______CONDITIONNEL(Fgaussien_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224095754...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,EXPB(NEGA(MUL2(Fgaussien_____coefficient
                                                        ,ADD3(ADD3(MUL2(Fgaussien_____coefficient_X2,EXP2(Xf))
                                                                  ,MUL2(Fgaussien_____coefficient_Y2,EXP2(Yf))
                                                                  ,MUL2(Fgaussien_____coefficient_Z2,EXP2(Zf))
                                                                   )
                                                             ,ADD3(MUL2(Fgaussien_____coefficient_XY,MUL2(Xf,Yf))
                                                                  ,MUL2(Fgaussien_____coefficient_YZ,MUL2(Yf,Zf))
                                                                  ,MUL2(Fgaussien_____coefficient_ZX,MUL2(Zf,Xf))
                                                                   )
                                                             ,MUL2(Fgaussien_____coefficient_XYZ,MUL3(Xf,Yf,Zf))
                                                              )
                                                         )
                                                    )
                                               )
                                          );
                                     Eblock
                                     )
                                );
                                        /* On notera que l'on utilise 'EXPB(...)' et non pas 'EXPX(...)' a cause du bug              */
                                        /* 'BUG_SYSTEME_SG_C_exp'...                                                                 */

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   G A U S S I E N   G E N E R A L I S E  :                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ Gaussien generalise est defini par                                                                    */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                                                          m       n       p                                                        */
/*                                                  -c.(cx.X  + cy.Y  + cz.Z )                                                       */
/*                                      F(X,Y,Z) = e                                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fgaussien_generalise_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(Float,SINT(Fgaussien_generalise_____coefficient,FU)));
                                        /* Coefficient de "force" du gaussien generalise : plus il est grand, mieux est couverte     */
                                        /* la plage des niveaux...                                                                   */
DEFV(Common,DEFV(Float,SINT(Fgaussien_generalise_____coefficient_X,FU)));
DEFV(Common,DEFV(Float,SINT(Fgaussien_generalise_____coefficient_Y,FU)));
DEFV(Common,DEFV(Float,SINT(Fgaussien_generalise_____coefficient_Z,FU)));
                                        /* Coefficient d'"importance" des puissances des coordonnees 'X', 'Y' et 'Z'.                */
DEFV(Common,DEFV(Float,SINT(Fgaussien_generalise_____exposant_X,FDEUX)));
DEFV(Common,DEFV(Float,SINT(Fgaussien_generalise_____exposant_Y,FDEUX)));
DEFV(Common,DEFV(Float,SINT(Fgaussien_generalise_____exposant_Z,FDEUX)));
                                        /* Exposant des coordonnees 'X', 'Y' et 'Z'.                                                 */

DEFV(Common,DEFV(FonctionF,Fgaussien_generalise(Xf,Yf,Zf,Tf)))
                                        /* Cette fonction a ete introduite le 20050208084341...                                      */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[.                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ gaussien generalise.                          */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Fgaussien_generalise(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                   */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Fgaussien_generalise(...)' est utile...                                   */

     USs_GooF______CONDITIONNEL(Fgaussien_generalise_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,EXPB(NEGA(MUL2(Fgaussien_generalise_____coefficient
                                                        ,ADD3(MUL2(Fgaussien_generalise_____coefficient_X
                                                                  ,PUIX(Xf,Fgaussien_generalise_____exposant_X)
                                                                   )
                                                             ,MUL2(Fgaussien_generalise_____coefficient_Y
                                                                  ,PUIX(Yf,Fgaussien_generalise_____exposant_Y)
                                                                   )
                                                             ,MUL2(Fgaussien_generalise_____coefficient_Z
                                                                  ,PUIX(Zf,Fgaussien_generalise_____exposant_Z)
                                                                   )
                                                              )
                                                         )
                                                    )
                                               )
                                          );
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " C H A P E A U   M E X I C A I N "  :                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "chapeau mexicain" est defini par                                                                     */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                  'VERSION_01' :                                                                                                   */
/*                  ------------                                                                                                     */
/*                                                                                                                                   */
/*                                                                 4       2                                                         */
/*                                      F(X,Y,Z) = F(X,Y) = c.[c4.R  + c2.R  + t]                                                    */
/*                                                                                                                                   */
/*                  ou 'R' designe le rayon vecteur. On notera                                                                       */
/*                  que le cas particulier :                                                                                         */
/*                                                                                                                                   */
/*                                                           1   4    1   2                                                          */
/*                                      F(X,Y,Z) = F(X,Y) = ---.R  - ---.R  + 1                                                      */
/*                                                           4        2                                                              */
/*                                                                                                                                   */
/*                  annule sa derivee pour :                                                                                         */
/*                                                                                                                                   */
/*                                      R=-1                                                                                         */
/*                                      R=0                                                                                          */
/*                                      R=+1                                                                                         */
/*                                                                                                                                   */
/*                  et presente donc la symetrie de revolution                                                                       */
/*                  du chapeau mexicain...                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  'VERSION_02' :                                                                                                   */
/*                  ------------                                                                                                     */
/*                                                                                                                                   */
/*                                                                          2                                                        */
/*                                                              d  b.R + k.R      2                                                  */
/*                                      F(X,Y,Z) = F(X,Y) = c.[R .e          .(m.R  + n.R + p) + t]                                  */
/*                                                                                                                                   */
/*                  ou 'R' designe le rayon vecteur. On notera                                                                       */
/*                  le vrai chapeau mexicain s'obtient pour les                                                                      */
/*                  valeurs :                                                                                                        */
/*                                                                                                                                   */
/*                                      d > 1                                                                                        */
/*                                      b < 0                                                                                        */
/*                                                                                                                                   */
/*                  des parametres. En ce qui concerne le chapeau                                                                    */
/*                  mexicain utilisable en tant qu'ondelette, on                                                                     */
/*                  choisira :                                                                                                       */
/*                                                                                                                                   */
/*                                               1                                                                                   */
/*                                      c = ------------                                                                             */
/*                                             _____  3                                                                              */
/*                                           \/2.pi .x                                                                               */
/*                                                                                                                                   */
/*                                      d = 0                                                                                        */
/*                                                                                                                                   */
/*                                      b = 0                                                                                        */
/*                                                                                                                                   */
/*                                              1                                                                                    */
/*                                      k = - ------                                                                                 */
/*                                                2                                                                                  */
/*                                             2.x                                                                                   */
/*                                                                                                                                   */
/*                                           -1                                                                                      */
/*                                      m = ----                                                                                     */
/*                                            2                                                                                      */
/*                                           x                                                                                       */
/*                                                                                                                                   */
/*                                      n = 0                                                                                        */
/*                                                                                                                                   */
/*                                      p = 1                                                                                        */
/*                                                                                                                                   */
/*                  ou 'x' est une constante arbitraire...                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  *o+--::............      ..............       ............::-++o                                                 */
/*                  +--::..........     .........................     ..........::-+                                                 */
/*                  -::.........    .................................   ..........::                                                 */
/*                  :.........   .......................................   ........:                                                 */
/*                  ........   ..................:::::::..................   .......                                                 */
/*                  ......   ..............:::::::::::::::::::..............  ......                                                 */
/*                  .....  ............::::::---------------::::::...........   ....                                                 */
/*                  ....  ...........::::------+++++++++++------::::...........  ...                                                 */
/*                  ...  ..........::::----+++++++oooo++++++++----::::..........  ..                                                 */
/*                  ..  ..........:::---+++++ooooooooooooooo++++----:::..........  .                                                 */
/*                  .  .........::::---+++oooooo*********ooooo++++---:::..........                                                   */
/*                     .........::---++++oooo***************oooo+++---:::.........                                                   */
/*                    .........:::---+++ooo*****########******ooo+++---:::.........                                                  */
/*                    ........:::---+++ooo****############*****ooo+++---::.........                                                  */
/*                    ........:::---++ooo****##############****ooo+++---:::........                                                  */
/*                   .........:::--+++ooo****###############****ooo++---:::........                                                  */
/*                    ........:::--+++ooo****###############***oooo++---:::........                                                  */
/*                    ........:::---+++ooo****#############****ooo+++---::.........                                                  */
/*                    .........:::--+++oooo*****#########*****ooo+++---:::.........                                                  */
/*                    .........:::---+++oooo****************oooo+++---:::.........                                                   */
/*                  .  .........:::----+++ooooo***********ooooo+++---:::..........                                                   */
/*                  ..  .........::::---++++oooooooooooooooo+++++---:::..........  .                                                 */
/*                  ...  ..........:::-----++++++ooooooo++++++----::::..........  ..                                                 */
/*                  ....  ...........::::-----++++++++++++------::::...........  ...                                                 */
/*                  .....  ............:::::-----------------:::::............  ....                                                 */
/*                  ......   .............:::::::::::::::::::::.............   .....                                                 */
/*                  ........   .................:::::::::.................   .......                                                 */
/*                  :.........   .......................................   .........                                                 */
/*                  -::.........   ..................................    .........::                                                 */
/*                  +--::..........    ...........................    ..........::--                                                 */
/*                  oo+--::............     ................      ............::--+o                                                 */
/*                  #*oo+--:::..............                 ..............:::-++o**                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

#ifdef    FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01                /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */
DEFV(Common,DEFV(Logical,_____FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01));
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01                /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01                /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02                /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */
DEFV(Common,DEFV(Logical,_____FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02));
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02                /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02                /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */

DEFV(Common,DEFV(Logical,SINT(Fchapeau_mexicain_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____coefficient_global,FU)));
                                        /* Coefficient d'"importance" global 'c'.                                                    */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01                /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */
DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____coefficient_R4,NEUT(FRA4(FU)))));
                                        /* Coefficient d'"importance" du carre du carre du rayon 'R'.                                */
DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____coefficient_R2,NEGA(FRA2(FU)))));
                                        /* Coefficient d'"importance" du carre du rayon 'R'.                                         */

DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____translation,NEUT(FU))));
                                        /* Translation.                                                                              */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01                /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01                /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02                /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */
DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____exposant_du_rayon,NEUT(GRO12(FU)))));
                                        /* Parametre 'd'.                                                                            */
DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____facteur_du_rayon_dans_l_exponentielle,NEGA(GRO16(FU)))));
                                        /* Parametre 'b'.                                                                            */

DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____facteur_du_carre_du_rayon_dans_l_exponentielle,FZERO)));
                                        /* Parametre 'k' (introduit le 20030514130318 avec compatibilite anterieure...).             */
DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____coefficient_m_du_trinome,FZERO)));
                                        /* Parametre 'm' (introduit le 20030514130318 avec compatibilite anterieure...).             */
DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____coefficient_n_du_trinome,FZERO)));
                                        /* Parametre 'n' (introduit le 20030514130318 avec compatibilite anterieure...).             */
DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____coefficient_p_du_trinome,FU)));
                                        /* Parametre 'p' (introduit le 20030514130318 avec compatibilite anterieure...).             */

DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____translation,FZERO)));
                                        /* Translation.                                                                              */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02                /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02                /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */

DEFV(Common,DEFV(FonctionF,Fchapeau_mexicain(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "chapeau mexicain".                           */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01
     DEFV(Float,INIT(carre_du_rayon_vecteur,EXP2(Rho_2D(Xf,Yf))));
                                        /* Carre du rayon vecteur...                                                                 */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01

#ifdef    FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02
     DEFV(Float,INIT(rayon_vecteur,EXP1(Rho_2D(Xf,Yf))));
                                        /* Rayon vecteur...                                                                          */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02

     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Fchapeau_mexicain(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                      */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Fchapeau_mexicain(...)' est utile...                                      */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01
     USs_GooF______CONDITIONNEL(Fchapeau_mexicain_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,MUL2(Fchapeau_mexicain_____coefficient_global
                                              ,HORNER_1_02(carre_du_rayon_vecteur
                                                          ,Fchapeau_mexicain_____coefficient_R4
                                                          ,Fchapeau_mexicain_____coefficient_R2
                                                          ,Fchapeau_mexicain_____translation
                                                           )
                                               )
                                          );
                                     Eblock
                                     )
                                );
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01

#ifdef    FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02
#    define    Fchapeau_mexicain_____facteur_carre_rayon_exponentielle                                                                  \
                         Fchapeau_mexicain_____facteur_du_carre_du_rayon_dans_l_exponentielle                                           \
                                        /* Pour reduire la longueur de l'une des lignes suivantes...                                 */

     USs_GooF______CONDITIONNEL(Fchapeau_mexicain_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,MUL2(Fchapeau_mexicain_____coefficient_global
                                              ,ADD2(MUL3(PUIX(rayon_vecteur,Fchapeau_mexicain_____exposant_du_rayon)
                                                        ,EXPX(HORNER_1_02(rayon_vecteur
                                                                         ,Fchapeau_mexicain_____facteur_carre_rayon_exponentielle
                                                                         ,Fchapeau_mexicain_____facteur_du_rayon_dans_l_exponentielle
                                                                         ,FZERO
                                                                          )
                                                              )
                                                        ,HORNER_1_02(rayon_vecteur
                                                                    ,Fchapeau_mexicain_____coefficient_m_du_trinome
                                                                    ,Fchapeau_mexicain_____coefficient_n_du_trinome
                                                                    ,Fchapeau_mexicain_____coefficient_p_du_trinome
                                                                     )
                                                         )
                                                   ,Fchapeau_mexicain_____translation
                                                    )
                                               )
                                          );
                                     Eblock
                                     )
                                );

#    undef     Fchapeau_mexicain_____facteur_carre_rayon_exponentielle
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   S I N U S O I D A L  :                                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "sinusoidal" est defini par                                                                           */
/*                  l'equation :                                                                                                     */
/*                                                                                       ________                                    */
/*                                                                                      / 2    2                                     */
/*                                                           T + sin(cx.X + cy.Y + cr.\/ X  + Y   + ct.Theta + P)                    */
/*                                      F(X,Y,Z) = F(X,Y) = ------------------------------------------------------                   */
/*                                                                                    E                                              */
/*                                                                                                                                   */
/*                  avec en general :                                                                                                */
/*                                                                                                                                   */
/*                                                           1 + sin(cx.X + cy.Y)                                                    */
/*                                      F(X,Y,Z) = F(X,Y) = ----------------------                                                   */
/*                                                                    2                                                              */
/*                                                                                                                                   */
/*                  notant que si la phase 'P' est                                                                                   */
/*                  egale a pi/2, c'est alors un champ                                                                               */
/*                  "cosinusoidal" que l'on obtient...                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fsinusoidal_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(Float,SINT(Fsinusoidal_____coefficient_translation,FU)));
                                        /* Translation du 'sinus'. La valeur implicite est egale a 'MAX2(SINX(...))'.                */
DEFV(Common,DEFV(Float,SINT(Fsinusoidal_____coefficient_echelle,FDEUX)));
                                        /* Echelle du 'sinus'. La valeur implicite est egale a l'amplitude du segment                */
                                        /* [MIN2(SINX(...)),MAX2(SINX(...))].                                                        */

DEFV(Common,DEFV(Float,SINT(Fsinusoidal_____coefficient_X,FU)));
                                        /* Coefficient d'"importance" de la coordonnee 'X'.                                          */
DEFV(Common,DEFV(Float,SINT(Fsinusoidal_____coefficient_Y,FU)));
                                        /* Coefficient d'"importance" de la coordonnee 'Y'.                                          */
DEFV(Common,DEFV(Float,SINT(Fsinusoidal_____coefficient_Rho,FZERO)));
                                        /* Coefficient d'"importance" du module (introduit le 20080218152515).                       */
DEFV(Common,DEFV(Float,SINT(Fsinusoidal_____coefficient_Theta,FZERO)));
                                        /* Coefficient d'"importance" de l'angle (introduit le 20080916094739).                      */
DEFV(Common,DEFV(Float,SINT(Fsinusoidal_____coefficient_phase,FZERO)));
                                        /* Coefficient de phase du champ sinusoidal. Rappelons qu'en donnant a ce parametre          */
                                        /* la valeur 'PI_SUR_2', on obtient un champ "cosinusoidal".                                 */

DEFV(Common,DEFV(Logical,SINT(Fsinusoidal_____dephaser_coefficient_phase,FAUX)));
                                        /* Choix entre un champ "sinusoidal" ('FAUX') ou "cosinusoidal" ('VRAI'). Ceci a ete         */
                                        /* introduit le 20041109232144...                                                            */

DEFV(Common,DEFV(FonctionF,Fsinusoidal(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ sinusoidal.                                   */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Fsinusoidal(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                            */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Fsinusoidal(...)' est utile...                                            */

     USs_GooF______CONDITIONNEL(Fsinusoidal_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,DIVI(ADD2(Fsinusoidal_____coefficient_translation
                                                   ,SINX(LIN4(Fsinusoidal_____coefficient_X,Xf
                                                             ,Fsinusoidal_____coefficient_Y,Yf
                                                             ,Fsinusoidal_____coefficient_Rho,Rho_2D(Xf,Yf)
                                                             ,Fsinusoidal_____coefficient_Theta,Theta_2D(Xf,Yf)
                                                             ,ADD2(Fsinusoidal_____coefficient_phase
                                                                  ,COND(IL_NE_FAUT_PAS(Fsinusoidal_____dephaser_coefficient_phase)
                                                                       ,FZERO
                                                                       ,PI_SUR_2
                                                                        )
                                                                   )
                                                              )
                                                         )
                                                    )
                                              ,Fsinusoidal_____coefficient_echelle
                                               )
                                          );
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   E L L I P S O I D A L  :                                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ Ellispoidal est defini par                                                                            */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                  'VERSION_01' (avant le 20061128084148) :                                                                         */
/*                  ------------                                                                                                     */
/*                                                                                                                                   */
/*                                                      2        2        2                                                          */
/*                                                 | X |    | Y |    | Z |                                                           */
/*                                      F(X,Y,Z) = |---|  + |---|  + |---|  - 1                                                      */
/*                                                 | A |    | B |    | C |                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  'VERSION_02' (introduite le 20061128084148) :                                                                    */
/*                  ------------                                                                                                     */
/*                                                                                                                                   */
/*                                                   2       2       2                                                               */
/*                                                  X       Y       Z                                                                */
/*                                      F(X,Y,Z) = ----  + ----  + ----  - D                                                         */
/*                                                  A       B       C                                                                */
/*                                                                                                                                   */
/*                  ceci permettant des ellipsoides (A>0, B>0, C>0 et D>0) comme                                                     */
/*                  des hyperboloides (A>0, B<0, C>0 et D>0 ou D<0).                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

#ifdef    FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01                     /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */
DEFV(Common,DEFV(Logical,_____FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01));
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01                     /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01                     /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02                     /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */
DEFV(Common,DEFV(Logical,_____FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02));
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02                     /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02                     /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */

DEFV(Common,DEFV(Logical,SINT(Fellipsoidal_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01                     /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */
DEFV(Common,DEFV(Float,SINT(Fellipsoidal_____demi_axe_A,FU)));
DEFV(Common,DEFV(Float,SINT(Fellipsoidal_____demi_axe_B,FU)));
DEFV(Common,DEFV(Float,SINT(Fellipsoidal_____demi_axe_C,FU)));
                                        /* Definition des trois demi-axes {A,B,C}.                                                   */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01                     /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01                     /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */

#ifdef    FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02                     /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */
DEFV(Common,DEFV(Float,SINT(Fellipsoidal_____parametre_A,FU)));
DEFV(Common,DEFV(Float,SINT(Fellipsoidal_____parametre_B,FU)));
DEFV(Common,DEFV(Float,SINT(Fellipsoidal_____parametre_C,FU)));
DEFV(Common,DEFV(Float,SINT(Fellipsoidal_____parametre_D,FU)));
                                        /* Definition des quatre parametres {A,B,C,D}.                                               */
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02                     /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02                     /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */

DEFV(Common,DEFV(FonctionF,Fellipsoidal(Xf,Yf,Zf,Tf)))
                                        /* Fonction introduite le 20061127095155.                                                    */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[.                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ ellipsoidal.                                  */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Fellipsoidal(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Fellipsoidal(...)' est utile...                                           */


#ifdef    FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01
     USs_GooF______CONDITIONNEL(Fellipsoidal_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,ADD4(EXP2(DIVI(Xf,Fellipsoidal_____demi_axe_A))
                                              ,EXP2(DIVI(Yf,Fellipsoidal_____demi_axe_B))
                                              ,EXP2(DIVI(Zf,Fellipsoidal_____demi_axe_C))
                                              ,NEGA(FU)
                                               )
                                          );
                                     Eblock
                                     )
                                );
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01

#ifdef    FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02
     USs_GooF______CONDITIONNEL(Fellipsoidal_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,ADD4(DIVI(EXP2(Xf),Fellipsoidal_____parametre_A)
                                              ,DIVI(EXP2(Yf),Fellipsoidal_____parametre_B)
                                              ,DIVI(EXP2(Zf),Fellipsoidal_____parametre_C)
                                              ,NEGA(Fellipsoidal_____parametre_D)
                                               )
                                          );
                                     Eblock
                                     )
                                );
#Aifdef   FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02
#Eifdef   FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   T O R O I D A L   A   U N   T R O U  :                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ Toroidal a un trou est defini par                                                                     */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                                                                         2                                                         */
/*                                                      |   ---------     |                                                          */
/*                                                  2   |  /  2    2     2|     2                                                    */
/*                                      F(X,Y,Z) = Z  + |\/  X  + Y   - R |  - R                                                     */
/*                                                      |                1|     2                                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Ftoroidal_1_trou_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(Float,SINT(Ftoroidal_1_trou_____rayon_R1,FU)));
DEFV(Common,DEFV(Float,SINT(Ftoroidal_1_trou_____rayon_R2,FDU)));
                                        /* Definition des deux rayons.                                                               */

DEFV(Common,DEFV(FonctionF,Ftoroidal_1_trou(Xf,Yf,Zf,Tf)))
                                        /* Fonction introduite le 20061127095155.                                                    */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[.                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ Toroidal a un trou.                           */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Ftoroidal_1_trou(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                       */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Ftoroidal_1_trou(...)' est utile...                                       */

     USs_GooF______CONDITIONNEL(Ftoroidal_1_trou_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,ADD3(EXP2(Zf)
                                              ,EXP2(SOUS(RACX(ADD2(EXP2(Xf),EXP2(Yf))),EXP2(Ftoroidal_1_trou_____rayon_R1)))
                                              ,NEGA(EXP2(Ftoroidal_1_trou_____rayon_R2))
                                               )
                                          );
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   T O R O I D A L   A   D E U X   T R O U S  :                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ Toroidal a deux trous est defini par                                                                  */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                                                                   2                                                               */
/*                                                 | 2       2     2|       2              2    2    2                               */
/*                                      F(X,Y,Z) = |X .(E - X ) - Y |  + C.Z  - A.(D + B.(X  + Y  + Z ))                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  Cette equation vient de 'v http://www.econym.demon.co.uk/isotut/maths.htm'.                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Ftoroidal_2_trou_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(Float,SINT(Ftoroidal_2_trou_____parametre_A,GRO4(FRA10(FRA10(FRA10(FU)))))));
DEFV(Common,DEFV(Float,SINT(Ftoroidal_2_trou_____parametre_B,FDU)));
DEFV(Common,DEFV(Float,SINT(Ftoroidal_2_trou_____parametre_C,FDU)));
DEFV(Common,DEFV(Float,SINT(Ftoroidal_2_trou_____parametre_D,FU)));
DEFV(Common,DEFV(Float,SINT(Ftoroidal_2_trou_____parametre_E,FU)));
                                        /* Definition des parametres...                                                              */

DEFV(Common,DEFV(FonctionF,Ftoroidal_2_trou(Xf,Yf,Zf,Tf)))
                                        /* Fonction introduite le 20061127110745.                                                    */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[.                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ Toroidal a deux trous.                        */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Ftoroidal_2_trou(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                       */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Ftoroidal_2_trou(...)' est utile...                                       */

     USs_GooF______CONDITIONNEL(Ftoroidal_2_trou_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,ADD3(EXP2(SOUS(MUL2(EXP2(Xf),SOUS(Ftoroidal_2_trou_____parametre_E,EXP2(Xf)))
                                                        ,EXP2(Yf)
                                                         )
                                                    )
                                              ,MUL2(Ftoroidal_2_trou_____parametre_C,EXP2(Zf))
                                              ,MUL2(NEGA(Ftoroidal_2_trou_____parametre_A)
                                                   ,AXPB(Ftoroidal_2_trou_____parametre_B
                                                        ,ADD3(EXP2(Xf),EXP2(Yf),EXP2(Zf))
                                                        ,Ftoroidal_2_trou_____parametre_D
                                                         )
                                                    )
                                               )
                                          );
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   T O R O I D A L   A   C I N Q   T R O U S  :                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ Toroidal a cinq trous est defini par                                                                  */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                                                                                      2                                            */
/*                                                 |   2      2          2      2      |                                             */
/*                                                 |  X      Y          X      Y       |     2                                       */
/*                                      F(X,Y,Z) = |(---- + ---- - C).(---- + ---- - F)|  + Z  - G                                   */
/*                                                 |  A      B          D      E       |                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  Cette equation vient de 'v http://www.econym.demon.co.uk/isotut/maths.htm'.                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Ftoroidal_5_trou_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(Float,SINT(Ftoroidal_5_trou_____parametre_A,FU)));
DEFV(Common,DEFV(Float,SINT(Ftoroidal_5_trou_____parametre_B,FQUATRE)));
DEFV(Common,DEFV(Float,SINT(Ftoroidal_5_trou_____parametre_C,FU)));
DEFV(Common,DEFV(Float,SINT(Ftoroidal_5_trou_____parametre_D,FQUATRE)));
DEFV(Common,DEFV(Float,SINT(Ftoroidal_5_trou_____parametre_E,FU)));
DEFV(Common,DEFV(Float,SINT(Ftoroidal_5_trou_____parametre_F,FU)));
DEFV(Common,DEFV(Float,SINT(Ftoroidal_5_trou_____parametre_G,FRA10(FU))));
                                        /* Definition des parametres...                                                              */

DEFV(Common,DEFV(FonctionF,Ftoroidal_5_trou(Xf,Yf,Zf,Tf)))
                                        /* Fonction introduite le 20061127125606.                                                    */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[.                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ Toroidal a trois trous.                       */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Ftoroidal_5_trou(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                       */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Ftoroidal_5_trou(...)' est utile...                                       */

     USs_GooF______CONDITIONNEL(Ftoroidal_5_trou_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,ADD3(EXP2(MUL2(ADD3(DIVI(EXP2(Xf),Ftoroidal_5_trou_____parametre_A)
                                                             ,DIVI(EXP2(Yf),Ftoroidal_5_trou_____parametre_B)
                                                             ,NEGA(Ftoroidal_5_trou_____parametre_C)
                                                              )
                                                        ,ADD3(DIVI(EXP2(Xf),Ftoroidal_5_trou_____parametre_D)
                                                             ,DIVI(EXP2(Yf),Ftoroidal_5_trou_____parametre_E)
                                                             ,NEGA(Ftoroidal_5_trou_____parametre_F)
                                                              )
                                                         )
                                                    )
                                              ,EXP2(Zf)
                                              ,NEGA(Ftoroidal_5_trou_____parametre_G)
                                               )
                                          );
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " C U B E   F A I T   D E   S I X   T O R E S  "  :                                                            */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ "Cube a six Tores" est defini par                                                                     */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                  |               2           2| |               2           2| |               2           2|     */
/*                                  ||  2    2    2|    | 2    | | ||  2    2    2|    | 2    | | ||  2    2    2|    | 2    | |     */
/*                       F(X,Y,Z) = ||(X  + Y  - A |  + |Z  - B| |.||(Y  + Z  - C |  + |X  - D| |.||(Z  + X  - E |  + |Y  - F| |     */
/*                                                                                                                                   */
/*                  qui est donc un objet ressemblant a un cube                                                                      */
/*                  dont chaque face ressemble a un tore...                                                                          */
/*                  Cette equation vient de 'v http://www.econym.demon.co.uk/isotut/maths.htm'.                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fcube_a_six_tores_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(Float,SINT(Fcube_a_six_tores_____parametre_A,FU)));
DEFV(Common,DEFV(Float,SINT(Fcube_a_six_tores_____parametre_B,FU)));
DEFV(Common,DEFV(Float,SINT(Fcube_a_six_tores_____parametre_C,FU)));
DEFV(Common,DEFV(Float,SINT(Fcube_a_six_tores_____parametre_D,FU)));
DEFV(Common,DEFV(Float,SINT(Fcube_a_six_tores_____parametre_E,FU)));
DEFV(Common,DEFV(Float,SINT(Fcube_a_six_tores_____parametre_F,FU)));
DEFV(Common,DEFV(Float,SINT(Fcube_a_six_tores_____parametre_G,FRA10(FRA10(FU)))));
                                        /* Definition des parametres...                                                              */

DEFV(Common,DEFV(FonctionF,Fcube_a_six_tores(Xf,Yf,Zf,Tf)))
                                        /* Fonction introduite le 20061128092314.                                                    */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[.                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ "Cube a six Tores".                           */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Fcube_a_six_tores(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                      */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Fcube_a_six_tores(...)' est utile...                                      */

     USs_GooF______CONDITIONNEL(Fcube_a_six_tores_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,ADD2(MUL3(ADD2(EXP2(ADD3(EXP2(Xf)
                                                                  ,EXP2(Yf)
                                                                  ,NEGA(EXP2(Fcube_a_six_tores_____parametre_A))
                                                                   )
                                                              )
                                                        ,EXP2(ADD2(EXP2(Zf)
                                                                  ,NEGA(Fcube_a_six_tores_____parametre_B)
                                                                   )
                                                              )
                                                         )
                                                   ,ADD2(EXP2(ADD3(EXP2(Yf)
                                                                  ,EXP2(Zf)
                                                                  ,NEGA(EXP2(Fcube_a_six_tores_____parametre_C))
                                                                   )
                                                              )
                                                        ,EXP2(ADD2(EXP2(Xf)
                                                                  ,NEGA(Fcube_a_six_tores_____parametre_D)
                                                                   )
                                                              )
                                                         )
                                                   ,ADD2(EXP2(ADD3(EXP2(Zf)
                                                                  ,EXP2(Xf)
                                                                  ,NEGA(EXP2(Fcube_a_six_tores_____parametre_E))
                                                                   )
                                                              )
                                                        ,EXP2(ADD2(EXP2(Yf)
                                                                  ,NEGA(Fcube_a_six_tores_____parametre_F)
                                                                   )
                                                              )
                                                         )
                                                    )
                                              ,NEGA(Fcube_a_six_tores_____parametre_G)
                                               )
                                          );
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   " C E R C L E S   O R T H O G O N A U X "  :                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ Cercles orthogonaux est defini par                                                                    */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                                  |             2     | |             2     | |             2     |                                */
/*                                  || 2    2    |     2| || 2    2    |     2| || 2    2    |     2|    2          2    2    2      */
/*                       F(X,Y,Z) = ||X  + Y  - A|  + Z |.||Y  + Z  - B|  + X |.||Z  + X  - C|  + Y | - E .(D + F.(X  + Y  + Z )     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  Cette equation vient de 'v http://www.econym.demon.co.uk/isotut/maths.htm'.                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(Fcercle_orthogonaux_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX)));
                                        /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)...                      */

DEFV(Common,DEFV(Float,SINT(Fcercle_orthogonaux_____parametre_A,FU)));
DEFV(Common,DEFV(Float,SINT(Fcercle_orthogonaux_____parametre_B,FU)));
DEFV(Common,DEFV(Float,SINT(Fcercle_orthogonaux_____parametre_C,FU)));
DEFV(Common,DEFV(Float,SINT(Fcercle_orthogonaux_____parametre_D,FU)));
DEFV(Common,DEFV(Float,SINT(Fcercle_orthogonaux_____parametre_E,GRO6(FRA10(FRA10(FU))))));
DEFV(Common,DEFV(Float,SINT(Fcercle_orthogonaux_____parametre_F,FDEUX)));
                                        /* Definition des parametres...                                                              */

DEFV(Common,DEFV(FonctionF,Fcercle_orthogonaux(Xf,Yf,Zf,Tf)))
                                        /* Fonction introduite le 20061128092314.                                                    */
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[.                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ Toroidal a deux trous.                        */
     /*..............................................................................................................................*/
     RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions);
                                        /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code     */
                                        /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') :                         */
                                        /*                                                                                           */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI);      */
                                        /*        CALS(Fcercle_orthogonaux(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI));                    */
                                        /*        EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX);      */
                                        /*                                                                                           */
                                        /* implante la ou 'Fcercle_orthogonaux(...)' est utile...                                    */

     USs_GooF______CONDITIONNEL(Fcercle_orthogonaux_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base
                                        /* Possibilite introduite le 20071224101849...                                               */
                               ,BLOC(
                                     Bblock
                                     EGAL(fxyzt
                                         ,SOUS(MUL3(ADD2(EXP2(ADD3(EXP2(Xf)
                                                                  ,EXP2(Yf)
                                                                  ,NEGA(Fcercle_orthogonaux_____parametre_A)
                                                                   )
                                                              )
                                                        ,EXP2(Zf)
                                                         )
                                                   ,ADD2(EXP2(ADD3(EXP2(Yf)
                                                                  ,EXP2(Zf)
                                                                  ,NEGA(Fcercle_orthogonaux_____parametre_B)
                                                                   )
                                                              )
                                                        ,EXP2(Xf)
                                                         )
                                                   ,ADD2(EXP2(ADD3(EXP2(Zf)
                                                                  ,EXP2(Xf)
                                                                  ,NEGA(Fcercle_orthogonaux_____parametre_C)
                                                                   )
                                                              )
                                                        ,EXP2(Yf)
                                                         )
                                                    )
                                              ,MUL2(EXP2(Fcercle_orthogonaux_____parametre_E)
                                                   ,AXPB(Fcercle_orthogonaux_____parametre_F
                                                        ,ADD3(EXP2(Xf),EXP2(Yf),EXP2(Zf))
                                                        ,Fcercle_orthogonaux_____parametre_D
                                                         )
                                                    )
                                               )
                                          );
                                     Eblock
                                     )
                                );

     RETU(fxyzt);
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   D E   M O R L E T  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Un champ dit "de Morlet" est defini par                                                                        */
/*                  l'equation :                                                                                                     */
/*                                                                                                                                   */
/*                                                                                                                     ________      */
/*                                                      2       2                                                     / 2    2       */
/*                                              -c.(cx.X  + cy.Y  + cxy.X.Y)   i.|k|.[ct.(cos(t).X + sin(t).Y) + c2.\/ X  + Y  ]     */
/*                                 K.(1 + i) + e                             .e                                                      */
/*                       F(X,Y) = -----------------------------------------------------------------------------------------------    */
/*                                                                          H                                                        */
/*                                                                                                                                   */
/*                  ou :                                                                                                             */
/*                                                                                                                                   */
/*                                           x                                                                                       */
/*                                      X = ---                                                                                      */
/*                                           d                                                                                       */
/*                                                                                                                                   */
/*                                           y                                                                                       */
/*                                      Y = ---                                                                                      */
/*                                           d                                                                                       */
/*                                                                                                                                   */
/*                  et :                                                                                                             */
/*                                                                                                                                   */
/*                                      d = dilatation (d=1.0 donne 1 periode                                                        */
/*                                          de l'ondelette le long de 'dimX' ou                                                      */
/*                                          'dimY' -bien entendu lorsqu'elle                                                         */
/*                                          est horizontale ou verticale- et,                                                        */
/*                                          par exemple, d=0.1 en donnera 10),                                                       */
/*                                                                                                                                   */
/*                                      k = module,                                                                                  */
/*                                                                                                                                   */
/*                                      t = facteur de rotation (ou "phase").                                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    Il est possible de jouer sur l'isotropie                                                                       */
/*                  de la facon suivante :                                                                                           */
/*                                                                                                                                   */
/*                                      ct=1 c2=0         : donne une ondelette anisotrope orientee suivant l'angle 't',             */
/*                                      ct=0 c2=1         : donne une ondelette isotrope ("gaussienne cosinusoidale").               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    On notera que le champ par defaut pour les                                                                     */
/*                  images complexes est donne par l'equation :                                                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                     2    2                                                                                        */
/*                                    X  + Y                                                                                         */
/*                                 - ---------   i.|k|.[cos(t).X + sin(t).Y]                                                         */
/*                                       2                                                                                           */
/*                       F(X,Y) = e            .e                                                                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____translation,FU)));
                                        /* Coefficient 'K' ci dessus :                                                               */
                                        /* K = 1 pour les images standards,                                                          */
                                        /* K = 0 pour les images complexes.                                                          */
DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____homothetie,FDEUX)));
                                        /* Coefficient 'H' ci dessus :                                                               */
                                        /* H = 2 pour les images standards,                                                          */
                                        /* H = 1 pour les images complexes.                                                          */
DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____dilatation,FU)));
                                        /* Coefficient de dilatation des coordonnees ('d').                                          */
DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____coefficient,FU)));
                                        /* Coefficient de "force" du Morlet ('c') : plus il est grand, mieux est couverte            */
                                        /* la plage des niveaux...                                                                   */
DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_X2,FDU)));
                                        /* Coefficient d'"importance" du carre de la coordonnee 'X' ('cx').                          */
DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_Y2,FDU)));
                                        /* Coefficient d'"importance" du carre de la coordonnee 'Y' ('cy').                          */
DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_XY,FZERO)));
                                        /* Coefficient d'"importance" du produit des deux coordonnees 'X' et 'Y' ('cxy') ; on        */
                                        /* notera que ces trois derniers coefficients permettent de dissymetriser le champ...        */
DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____angle_rotation,FZERO)));
                                        /* Angle 't' dans l'equation ci-dessus.                                                      */
DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____nombre_de_periodes,FU)));
                                        /* Module |k| dans l'equation ci-dessus ; il donne le nombre de periodes de l'ondelette      */
                                        /* sur la moitie de l'image (il y aura donc le double de periodes sur la totalite de         */
                                        /* l'image...).                                                                              */
DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_rotation,FU)));
                                        /* Coefficient d'"importance" de la partie rotation de l'ondelette, dit 'ct'                 */
                                        /* ci-dessus ; il definit la partie sensible a une orientation (definie alors par 't').      */
DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_rayon,FZERO)));
                                        /*                                           2    2                                          */
                                        /* coefficient d'"importance" du rayon RACX(X  + Y ) dit 'c2' ci-dessus ; il definit la      */
                                        /* partie insensible a l'orientation (qui ne depend donc que du rayon).                      */

#define   Xf_dilate                                                                                                                     \
                    DIVI(Xf,Fmorlet_reel__Fmorlet_imaginaire_____dilatation)
#define   Yf_dilate                                                                                                                     \
                    DIVI(Yf,Fmorlet_reel__Fmorlet_imaginaire_____dilatation)
#define   CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET(fonctionT)                                                                               \
                    Bblock                                                                                                              \
                    EGAL(fxyzt                                                                                                          \
                        ,DIVI(ADD2(Fmorlet_reel__Fmorlet_imaginaire_____translation                                                     \
                                  ,MUL2(EXPB(NEGA(MUL2(Fmorlet_reel__Fmorlet_imaginaire_____coefficient                                 \
                                                      ,ADD2(ADD2(MUL2(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_X2               \
                                                                     ,EXP2(Xf_dilate)                                                   \
                                                                      )                                                                 \
                                                                ,MUL2(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_Y2               \
                                                                     ,EXP2(Yf_dilate)                                                   \
                                                                      )                                                                 \
                                                                 )                                                                      \
                                                           ,MUL2(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_XY                    \
                                                                ,MUL2(Xf_dilate,Yf_dilate)                                              \
                                                                 )                                                                      \
                                                            )                                                                           \
                                                       )                                                                                \
                                                  )                                                                                     \
                                             )                                                                                          \
                                       ,fonctionT(MUL2(Fmorlet_reel__Fmorlet_imaginaire_____nombre_de_periodes                          \
                                                      ,ADD2(MUL2(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_rotation              \
                                                                ,ADD2(MUL2(COSX(Fmorlet_reel__Fmorlet_imaginaire_____angle_rotation)    \
                                                                          ,Xf_dilate                                                    \
                                                                           )                                                            \
                                                                     ,MUL2(SINX(Fmorlet_reel__Fmorlet_imaginaire_____angle_rotation)    \
                                                                          ,Yf_dilate                                                    \
                                                                           )                                                            \
                                                                      )                                                                 \
                                                                 )                                                                      \
                                                           ,MUL2(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_rayon                 \
                                                                ,GpytF2D(Xf_dilate                                                      \
                                                                        ,Yf_dilate                                                      \
                                                                         )                                                              \
                                                                 )                                                                      \
                                                            )                                                                           \
                                                       )                                                                                \
                                                  )                                                                                     \
                                        )                                                                                               \
                                   )                                                                                                    \
                             ,Fmorlet_reel__Fmorlet_imaginaire_____homothetie                                                           \
                              )                                                                                                         \
                         );                                                                                                             \
                                        /* La procedure 'GpytF2D(...)' a ete introduite le 20021120102437.                           */ \
                    Eblock                                                                                                              \
                                        /* Afin de calculer indifferemment les parties reelle et imaginaire.                         */ \
                                        /*                                                                                           */ \
                                        /* On notera que l'on utilise 'EXPB(...)' et non pas 'EXPX(...)' a cause du bug              */ \
                                        /* 'BUG_SYSTEME_SG_C_exp'...                                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A M P   D E   M O R L E T   R E E L  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,Fmorlet_reel(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ Morlet.                                       */
     /*..............................................................................................................................*/
     CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET(COSX);
                                        /* Calcul de la partie reelle...                                                             */

     RETU(fxyzt);
     Eblock

EFonctionF

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

BFonctionF

DEFV(Common,DEFV(FonctionF,Fmorlet_imaginaire(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ Morlet.                                       */
     /*..............................................................................................................................*/
     CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET(SINX);
                                        /* Calcul de la partie imaginaire...                                                         */

     RETU(fxyzt);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M E E   E N   O N D E L E T T E S   D E   M O R L E T   D I R E C T E  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,Ftransformee_directe_de_Morlet_reel(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ Morlet.                                       */
     /*..............................................................................................................................*/
     CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET(COSX);
                                        /* Calcul de la partie reelle...                                                             */

     RETU(ConjugaisonReelle(fxyzt));
                                        /* Jusqu'au 20030502162917 'EXP2(Fmorlet_reel__Fmorlet_imaginaire_____dilatation)' et        */
                                        /* 'RACX(ABSO(Fmorlet_reel__Fmorlet_imaginaire_____dilatation))' etaient permutes par        */
                                        /* erreur...                                                                                 */
                                        /*                                                                                           */
                                        /* Jusqu'au 20030506094554, la procedure 'ConjugaisonReelle(...)' n'etait pas utilisee       */
                                        /* par erreur pour la transformee directe ; decidemment...                                   */
                                        /*                                                                                           */
                                        /* Jusqu'au 20030506135231, la valeur renvoyee ici etait :                                   */
                                        /*                                                                                           */
                                        /*                  DIVI(ConjugaisonReelle(fxyzt)                                            */
                                        /*                      ,RACX(ABSO(Fmorlet_reel__Fmorlet_imaginaire_____dilatation))         */
                                        /*                       )                                                                   */
                                        /*                                                                                           */
                                        /* mais en fait le diviseur ne doit pas intervenir dans cette definition de l'ondelette,     */
                                        /* mais bien plutot dans la transformee l'utilisant ('v $xci/morlet.12$Z 20030506135745').   */
     Eblock

EFonctionF

BFonctionF

DEFV(Common,DEFV(FonctionF,Ftransformee_directe_de_Morlet_imaginaire(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ Morlet.                                       */
     /*..............................................................................................................................*/
     CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET(SINX);
                                        /* Calcul de la partie imaginaire...                                                         */

     RETU(ConjugaisonImaginaire_s(fxyzt));
                                        /* Jusqu'au 20030502162917 'EXP2(Fmorlet_reel__Fmorlet_imaginaire_____dilatation)' et        */
                                        /* 'RACX(ABSO(Fmorlet_reel__Fmorlet_imaginaire_____dilatation))' etaient permutes par        */
                                        /* erreur...                                                                                 */
                                        /*                                                                                           */
                                        /* Jusqu'au 20030506094554, la procedure 'ConjugaisonImaginaire_s(...)' n'etait pas utilisee */
                                        /* par erreur pour la transformee directe ; decidemment...                                   */
                                        /*                                                                                           */
                                        /* Jusqu'au 20030506135231, la valeur renvoyee ici etait :                                   */
                                        /*                                                                                           */
                                        /*                  DIVI(ConjugaisonImaginaire_s(fxyzt)                                      */
                                        /*                      ,RACX(ABSO(Fmorlet_reel__Fmorlet_imaginaire_____dilatation))         */
                                        /*                       )                                                                   */
                                        /*                                                                                           */
                                        /* mais en fait le diviseur ne doit pas intervenir dans cette definition de l'ondelette,     */
                                        /* mais bien plutot dans la transformee l'utilisant ('v $xci/morlet.12$Z 20030506135745').   */
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M E E   E N   O N D E L E T T E S   D E   M O R L E T   I N V E R S E  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,Ftransformee_inverse_de_Morlet_reel(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ Morlet.                                       */
     /*..............................................................................................................................*/
     CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET(COSX);
                                        /* Calcul de la partie reelle...                                                             */

     RETU(NEUT(fxyzt));
                                        /* Renvoi du conjugue de la partie reelle...                                                 */
                                        /*                                                                                           */
                                        /* Jusqu'au 20030502162917 'EXP2(Fmorlet_reel__Fmorlet_imaginaire_____dilatation)' et        */
                                        /* 'RACX(ABSO(Fmorlet_reel__Fmorlet_imaginaire_____dilatation))' etaient permutes par        */
                                        /* erreur...                                                                                 */
                                        /*                                                                                           */
                                        /* Jusqu'au 20030506094554, la procedure 'ConjugaisonReelle(...)' etait utilisee par         */
                                        /* erreur pour la transformee inverse ; decidemment...                                       */
                                        /*                                                                                           */
                                        /* Jusqu'au 20030506135231, la valeur renvoyee ici etait :                                   */
                                        /*                                                                                           */
                                        /*                  DIVI(NEUT(fxyzt),EXP2(Fmorlet_reel__Fmorlet_imaginaire_____dilatation))  */
                                        /*                                                                                           */
                                        /* mais en fait le diviseur ne doit pas intervenir dans cette definition de l'ondelette,     */
                                        /* mais bien plutot dans la transformee l'utilisant ('v $xci/morlet.12$Z 20030506135745').   */
     Eblock

EFonctionF

BFonctionF

DEFV(Common,DEFV(FonctionF,Ftransformee_inverse_de_Morlet_imaginaire(Xf,Yf,Zf,Tf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
DEFV(Argument,DEFV(Float,Tf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
                                        /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303...                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(fxyzt,FLOT__UNDEF));
                                        /* Valeur de la fonction 'Fxyzt' pour un champ Morlet.                                       */
     /*..............................................................................................................................*/
     CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET(SINX);
                                        /* Calcul de la partie imaginaire...                                                         */

     RETU(NEUT(fxyzt));
                                        /* Renvoi du conjugue de la partie imaginaire...                                             */
                                        /*                                                                                           */
                                        /* Jusqu'au 20030502162917 'EXP2(Fmorlet_reel__Fmorlet_imaginaire_____dilatation)' et        */
                                        /* 'RACX(ABSO(Fmorlet_reel__Fmorlet_imaginaire_____dilatation))' etaient permutes par        */
                                        /* erreur...                                                                                 */
                                        /*                                                                                           */
                                        /* Jusqu'au 20030506094554, la procedure 'ConjugaisonImaginaire_s(...)' etait utilisee par   */
                                        /* erreur pour la transformee inverse ; decidemment...                                       */
                                        /*                                                                                           */
                                        /* Jusqu'au 20030506135231, la valeur renvoyee ici etait :                                   */
                                        /*                                                                                           */
                                        /*                  DIVI(NEUT(fxyzt),EXP2(Fmorlet_reel__Fmorlet_imaginaire_____dilatation))  */
                                        /*                                                                                           */
                                        /* mais en fait le diviseur ne doit pas intervenir dans cette definition de l'ondelette,     */
                                        /* mais bien plutot dans la transformee l'utilisant ('v $xci/morlet.12$Z 20030506135745').   */
     Eblock

EFonctionF

#undef    CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET
#undef    Yf_dilate
#undef    Xf_dilate

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E B U T   D E S   P R O B L E M E S   S U R   D P X 5 0 0 0   E T   N W S 3 0 0 0  :                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#ifdef    __VERSION__COMPILER_LA_FONCTION_Iiteration_champ                      /* Common,DEFV(Fonction,) : indicateur de VERSION.   */
DEFV(Common,DEFV(Logical,_______VERSION__COMPILER_LA_FONCTION_Iiteration_champ));
#Aifdef   __VERSION__COMPILER_LA_FONCTION_Iiteration_champ                      /* Common,DEFV(Fonction,) : indicateur de VERSION.   */
#Eifdef   __VERSION__COMPILER_LA_FONCTION_Iiteration_champ                      /* Common,DEFV(Fonction,) : indicateur de VERSION.   */

#ifdef    __VERSION__COMPILER_LA_FONCTION_Iiteration_champ                      /* Common,DEFV(Fonction,) : gestion des 'IFS'...     */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N I T I A L I S A T I O N   D ' U N E   I M A G E   P A R   U N E   I T E R A T I O N                                    */
/*        O U   " I T E R A T E D   F U N C T I O N   S E T "  :                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Pour chaque point {X,Y} d'un champ, on                                                                         */
/*                  iterera N fois la transformation lineaire                                                                        */
/*                  suivante :                                                                                                       */
/*                                                                                                                                   */
/*                                      /   \     /   \                                                                              */
/*                                      | X |     | X |                                                                              */
/*                                      |   | = M.|   | + T                                                                          */
/*                                      | Y |     | Y |                                                                              */
/*                                      \   /     \   /                                                                              */
/*                                                                                                                                   */
/*                  ou la matrice 'M' et le vecteur colonne 'T'                                                                      */
/*                  (dit "de translation") sont choisis de facon                                                                     */
/*                  aleatoire parmi un ensemble de couples {M(i),T(i)}.                                                              */
/*                  A chacun de ces couples est donc associee une                                                                    */
/*                  probabilite 'P(i)'.                                                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Local,DEFV(Int,INIT(Iiteration_champ_____compteur_d_iterations,UNDEF)));
                                        /* Ce compteur compte pour le point courant {X,Y} le nombre d'iterations ; il                */
                                        /* est accessible aux fonctions specifiques 'Fx' et 'Fy', et permet donc si                  */
                                        /* besoin est de generer des sequences propres de nombres aleatoires "synchro-               */
                                        /* nisees" pour les composantes horizontales et verticales. ATTENTION, jusqu'au              */
                                        /* 19970704093610, 'Iiteration_champ_____compteur_d_iterations' etait declare 'Float' par    */
                                        /* erreur ; ceci s'est vu lors de l'introduction des bibliotheques de type '$SO'...          */
DEFV(Common,DEFV(FonctionP,POINTERp(Iiteration_champ(imageR
                                                    ,imageA
                                                    ,ARGUMENT_FONCTION(Fx),ARGUMENT_FONCTION(Fy)
                                                    ,ARGUMENT_POINTERs(ponderation)
                                                    ,ARGUMENT_POINTERs(translation)
                                                    ,premier_point_trace,nombre_de_points
                                                    ,trace_modulo
                                                     )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat a initialiser.                                                             */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image Argument donnant les niveaux de 'imageR',                                           */
DEFV(Argument,DEFV(Float,afPOINTEUR(Fx)));
                                        /* Fonction de transformation de l'abscisse,                                                 */
DEFV(Argument,DEFV(Float,afPOINTEUR(Fy)));
                                        /* Fonction de transformation de l'ordonnee.                                                 */
DEFV(Argument,DEFV(coeffF_2D,POINTERs(ponderation)));
                                        /* Ponderation bi-dimensionnelle des coordonnees du champ a generer,                         */
DEFV(Argument,DEFV(deltaF_2D,POINTERs(translation)));
                                        /* Translation bi-dimensionnelle des coordonnees du champ a generer.                         */
DEFV(Argument,DEFV(Int,premier_point_trace));
                                        /* Numero du premier point trace.                                                            */
DEFV(Argument,DEFV(Int,nombre_de_points));
                                        /* Nombre d'iterations a effectuer.                                                          */
DEFV(Argument,DEFV(Logical,trace_modulo));
                                        /* Indique si l'on doit utiliser 'store_point_modulo' ('VALIDE') ou                          */
                                        /* 'store_point_valide' ('INVALIDE'...).                                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(Xf,FLOT__UNDEF));
     DEFV(Float,INIT(Yf,FLOT__UNDEF));
                                        /* Coordonnees flottantes 'X' et 'Y'.                                                        */
     DEFV(pointF_2D,point_de_depart);
                                        /* Point flottant de depart d'une iteration.                                                 */
     DEFV(pointF_2D,point_flottant_courant);
                                        /* Point flottant courant.                                                                   */
     DEFV(genere_p,INIT(niveau_de_marquage,NIVEAU_UNDEF));
                                        /* Niveau de marquage du point {Xf,Yf}.                                                      */
     /*..............................................................................................................................*/
     begin_image
          Bblock
          Test(TEST_MASQUE_ACTIF(X,Y,MASQUER_PARCOURS))
               Bblock
               INITIALISATION_POINT_2D(point_de_depart,_____cNORMALISE_OX(X),_____cNORMALISE_OY(Y));
                                        /* Le point de depart de l'iteration est le point courant {X,Y},s'il                         */
                                        /* n'est pas masque...                                                                       */
               TRANSFERT_POINT_2D(point_flottant_courant,point_de_depart);
                                        /* Initialisation du point courant de l'iteration.                                           */

               EGAL(niveau_de_marquage,load_point(imageA,X,Y));
                                        /* Le niveau a utiliser pour marquer le point itere {Xf,Yf} sera celui                       */
                                        /* du point de depart {X,Y}.                                                                 */

               CLIR(Iiteration_champ_____compteur_d_iterations);

               Komp(numero_du_point,nombre_de_points)
                    Bblock
                    EGAL(Xf
                        ,fPOINTEUR(Fx)(DPRE(SOUS(ASD1(point_flottant_courant,x),ASD1(point_de_depart,x)))
                                      ,DPRE(SOUS(ASD1(point_flottant_courant,y),ASD1(point_de_depart,y)))
                                       )
                         );
                    EGAL(Yf
                        ,fPOINTEUR(Fy)(DPRE(SOUS(ASD1(point_flottant_courant,x),ASD1(point_de_depart,x)))
                                      ,DPRE(SOUS(ASD1(point_flottant_courant,y),ASD1(point_de_depart,y)))
                                       )
                         );
                                        /* Le point courant est transforme suivant la transformation (Fx,Fy).                        */

                    INITIALISATION_POINT_2D(point_flottant_courant,Xf,Yf);
                                        /* Puis iteration :                                                                          */
                                        /*                                                                                           */
                                        /*                  point_flottant_courant <-- F   (point_flottant_courant)                  */
                                        /*                                              x/y                                          */
                                        /*                                                                                           */
                                        /* 'point_flottant_courant' etant initialise par 'point_de_depart' soit {X,Y}...             */

                    Test(IFGE(numero_du_point,premier_point_trace))
                         Bblock
                         DEFV(pointI_2D,point_entier_courant);
                         INITIALISATION_POINT_2D(point_entier_courant
                                                ,ADD2(_cDENORMALISE_OX(MUL2(ASI1(ponderation,cx),ASD1(point_flottant_courant,x)))
                                                     ,_lDENORMALISE_OX(ASI1(translation,dx))
                                                      )
                                                ,ADD2(_cDENORMALISE_OY(MUL2(ASI1(ponderation,cy),ASD1(point_flottant_courant,y)))
                                                     ,_lDENORMALISE_OY(ASI1(translation,dy))
                                                      )
                                                 );
                                        /* Point entier itere courant. Cette structure intermediaire a ete introduite a cause de     */
                                        /* 'SYSTEME_SUN4NCUBE2S_SUNOS_CC' qui nous gratifiait alors du message :                     */
                                        /*                                                                                           */
                                        /*                  ... line ...: compiler error: out of tree space; try simplifying         */
                                        /*                                                                                           */
                                        /* et suite a cette aimable demande, j'ai simplifie...                                       */
                         Test(EST_VALIDE(trace_modulo))
                              Bblock
                              store_point_modulo(niveau_de_marquage
                                                ,imageR
                                                ,ASD1(point_entier_courant,x)
                                                ,ASD1(point_entier_courant,y)
                                                ,FVARIABLE
                                                 );
                                        /* Et marquage en mode "modulo" de l'itere courant {Xf,Yf} du point courant {X,Y}.           */
                              Eblock
                         ATes
                              Bblock
                              store_point_valide(niveau_de_marquage
                                                ,imageR
                                                ,ASD1(point_entier_courant,x)
                                                ,ASD1(point_entier_courant,y)
                                                ,FVARIABLE
                                                 );
                                        /* Et marquage "normal" de l'itere courant {Xf,Yf} du point courant {X,Y}.                   */
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    INCR(Iiteration_champ_____compteur_d_iterations,I);
                    Eblock
               EKom
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   T R A N S F O R M A T I O N S   A F F I N E S  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
Dstruct03(affine2D
                                        /* Definition d'une transformation affine dans l'espace a deux dimensions.                   */
         ,DEFV(matrixF_2D,matrice)
                                        /* Matrice de transformation 'M',                                                            */
         ,DEFV(deltaF_2D,translation)
                                        /* Translation 'T' apres application de la matrice de transformation,                        */
         ,DEFV(Float,probabilite)
                                        /* Probabilite d'appliquer cette transformation affine.                                      */
         ,NOM_VIDE
          );
TypedefP(affine_2D,STRU(affine2D))

#    define    SELECT_AFFINE_ELEMENT(element,valeur_par_defaut,liste_des_arguments,prefixe)                                             \
                         Bblock                                                                                                         \
                         EGAL(element,valeur_par_defaut);                                                                               \
                         EGAL(element                                                                                                   \
                             ,FconversionF(chain_recherche(liste_des_arguments,prefixe)                                                 \
                                          ,prefixe                                                                                      \
                                          ,element                                                                                      \
                                          ,NE_PAS_EDITER_LES_VALEURS_APRES_Fconversion                                                  \
                                          ,C_VIDE                                                                                       \
                                          ,C_VIDE                                                                                       \
                                           )                                                                                            \
                              );                                                                                                        \
                                        /* Le deuxieme 'C_VIDE' a ete introduit le 20060310135140...                                 */ \
                         Eblock                                                                                                         \
                                        /* Recuperation d'un element quelconque d'une transformation affine.                         */
#    define    AFFINE_Ma_xx                                                                                                             \
                         "Mxx="                                                                                                         \
                                        /* Recuperation de l'element 'matrice(cx.cx)',                                               */
#    define    SELECT_AFFINE_Ma_xx(nom_de_la_transformation,liste_des_arguments)                                                        \
                         Bblock                                                                                                         \
                         SELECT_AFFINE_ELEMENT(ASD3(nom_de_la_transformation,matrice,cx,cx),FU,liste_des_arguments,AFFINE_Ma_xx);       \
                         Eblock                                                                                                         \
                                        /* Selection du premier element 'Ma(cx,cx)' (a priori "transformation unite"),               */

#    define    AFFINE_Ma_xy                                                                                                             \
                         "Mxy="                                                                                                         \
                                        /* Recuperation de l'element 'matrice(cx,cy)',                                               */
#    define    SELECT_AFFINE_Ma_xy(nom_de_la_transformation,liste_des_arguments)                                                        \
                         Bblock                                                                                                         \
                         SELECT_AFFINE_ELEMENT(ASD3(nom_de_la_transformation,matrice,cx,cy),FZERO,liste_des_arguments,AFFINE_Ma_xy);    \
                         Eblock                                                                                                         \
                                        /* Selection du deuxieme element 'Ma(cx,cy)' (a priori "transformation unite"),              */

#    define    AFFINE_Ma_yx                                                                                                             \
                         "Myx="                                                                                                         \
                                        /* Recuperation de l'element 'matrice(cy,cx)',                                               */
#    define    SELECT_AFFINE_Ma_yx(nom_de_la_transformation,liste_des_arguments)                                                        \
                         Bblock                                                                                                         \
                         SELECT_AFFINE_ELEMENT(ASD3(nom_de_la_transformation,matrice,cy,cx),FZERO,liste_des_arguments,AFFINE_Ma_yx);    \
                         Eblock                                                                                                         \
                                        /* Selection du troisieme element 'Ma(cy,cx)' (a priori "transformation unite"),             */

#    define    AFFINE_Ma_yy                                                                                                             \
                         "Myy="                                                                                                         \
                                        /* Recuperation de l'element 'matrice(cy,cy)',                                               */
#    define    SELECT_AFFINE_Ma_yy(nom_de_la_transformation,liste_des_arguments)                                                        \
                         Bblock                                                                                                         \
                         SELECT_AFFINE_ELEMENT(ASD3(nom_de_la_transformation,matrice,cy,cy),FU,liste_des_arguments,AFFINE_Ma_yy);       \
                         Eblock                                                                                                         \
                                        /* Selection du quatrieme element 'Ma(cy,cy)' (a priori "transformation unite"),             */

#    define    AFFINE_Tr_x                                                                                                              \
                         "Tx="                                                                                                          \
                                        /* Recuperation de l'element 'translation(dx)',                                              */
#    define    SELECT_AFFINE_Tr_x(nom_de_la_transformation,liste_des_arguments)                                                         \
                         Bblock                                                                                                         \
                         SELECT_AFFINE_ELEMENT(ASD2(nom_de_la_transformation,translation,dx),FZERO,liste_des_arguments,AFFINE_Tr_x);    \
                         Eblock                                                                                                         \
                                        /* Selection du cinquieme element 'Tr(dx)' (a priori "translation nulle"),                   */

#    define    AFFINE_Tr_y                                                                                                              \
                         "Ty="                                                                                                          \
                                        /* Recuperation de l'element 'translation(dy)',                                              */
#    define    SELECT_AFFINE_Tr_y(nom_de_la_transformation,liste_des_arguments)                                                         \
                         Bblock                                                                                                         \
                         SELECT_AFFINE_ELEMENT(ASD2(nom_de_la_transformation,translation,dy),FZERO,liste_des_arguments,AFFINE_Tr_y);    \
                         Eblock                                                                                                         \
                                        /* Selection du sixieme element 'Tr(dy)' (a priori "translation nulle"),                     */

#    define    AFFINE_Pr                                                                                                                \
                         "P="                                                                                                           \
                                        /* Recuperation de l'element 'probabilite',                                                  */
#    define    SELECT_AFFINE_Pr(nom_de_la_transformation,liste_des_arguments)                                                           \
                         Bblock                                                                                                         \
                         SELECT_AFFINE_ELEMENT(ASD1(nom_de_la_transformation,probabilite),FU,liste_des_arguments,AFFINE_Pr);            \
                         Eblock                                                                                                         \
                                        /* Selection du septieme element 'Pr' (a priori "evenement certain").                        */

#    define    SELECT_AFFINE(nom_de_la_transformation,liste_des_arguments,traitement_des_probabilites)                                  \
                         Bblock                                                                                                         \
                         SELECT_AFFINE_Ma_xx(nom_de_la_transformation,liste_des_arguments);                                             \
                         SELECT_AFFINE_Ma_xy(nom_de_la_transformation,liste_des_arguments);                                             \
                         SELECT_AFFINE_Ma_yx(nom_de_la_transformation,liste_des_arguments);                                             \
                         SELECT_AFFINE_Ma_yy(nom_de_la_transformation,liste_des_arguments);                                             \
                         SELECT_AFFINE_Tr_x(nom_de_la_transformation,liste_des_arguments);                                              \
                         SELECT_AFFINE_Tr_y(nom_de_la_transformation,liste_des_arguments);                                              \
                         SELECT_AFFINE_Pr(nom_de_la_transformation,liste_des_arguments);                                                \
                                                                                                                                        \
                         BLOC(traitement_des_probabilites;)                                                                             \
                         Eblock                                                                                                         \
                                        /* Selection des sept elements...                                                            */

#    define    TRANSFORMATION_AFFINE_COORDONNEE(nom_de_la_transformation,c_coordonnee,d_coordonnee)                                     \
                         ADD2(ADD2(MUL2(ASD3(nom_de_la_transformation,matrice,c_coordonnee,cx),Xf)                                      \
                                  ,MUL2(ASD3(nom_de_la_transformation,matrice,c_coordonnee,cy),Yf)                                      \
                                   )                                                                                                    \
                             ,ASD2(nom_de_la_transformation,translation,d_coordonnee)                                                   \
                              )                                                                                                         \
                                        /* Transformation affine d'une coordonnee quelconque.                                        */

#    define    TRANSFORMATION_AFFINE_X(nom_de_la_transformation)                                                                        \
                         TRANSFORMATION_AFFINE_COORDONNEE(nom_de_la_transformation,cx,dx)                                               \
                                        /* Transformation affine de l'abscisse.                                                      */
#    define    TRANSFORMATION_AFFINE_Y(nom_de_la_transformation)                                                                        \
                         TRANSFORMATION_AFFINE_COORDONNEE(nom_de_la_transformation,cy,dy)                                               \
                                        /* Transformation affine de l'ordonnee.                                                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S   D E   L ' I T E R A T I O N   D E   S I E R P I N S K I  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    SIERPINSKI_1                                                                                                             \
                         "Mxx=+0.500 Mxy=+0.000 Myx=+0.000 Myy=+0.500   Tx=+0.000 Ty=+0.000   P=0.334"                                  \
                                        /* Definition de la premiere transformation,                                                 */
#    define    SIERPINSKI_2                                                                                                             \
                         "Mxx=+0.500 Mxy=+0.000 Myx=+0.000 Myy=+0.500   Tx=+1.000 Ty=+0.000   P=0.333"                                  \
                                        /* Definition de la deuxieme transformation,                                                 */
#    define    SIERPINSKI_3                                                                                                             \
                         "Mxx=+0.500 Mxy=+0.000 Myx=+0.000 Myy=+0.500   Tx=+0.500 Ty=+0.500   P=0.333"                                  \
                                        /* Definition de la troisieme transformation.                                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N I T I A L I S A T I O N   D E   L ' I T E R A T I O N   D E   S I E R P I N S K I  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    INITIALISATION_SIERPINSKI                                                                                                \
                         Bblock                                                                                                         \
                         INITIALISATION_POINT_2D(point_courant,Xf,Yf);                                                                  \
                                        /* Initialisation du point courant.                                                          */ \
                                                                                                                                        \
                         Test(EST_FAUX(Fx_Sierpinski__Fy_Sierpinski_____initialisation))                                                \
                              Bblock                                                                                                    \
                              CALS(rdnF2D(ADRESSE(point_courant),UNDEF,RDN_INIT,FZERO,FU));                                             \
                                        /* On initialise le generateur aleatoire dans [0,1]...                                       */ \
                                                                                                                                        \
                              SELECT_AFFINE(Fx_Sierpinski__Fy_Sierpinski_____t1                                                         \
                                           ,SIERPINSKI_1                                                                                \
                                           ,BLOC(INCR(ASD1(Fx_Sierpinski__Fy_Sierpinski_____t1,probabilite),FZERO);)                    \
                                            );                                                                                          \
                                        /* Recuperation de la premiere transformation,                                               */ \
                              SELECT_AFFINE(Fx_Sierpinski__Fy_Sierpinski_____t2                                                         \
                                           ,SIERPINSKI_2                                                                                \
                                           ,BLOC(INCR(ASD1(Fx_Sierpinski__Fy_Sierpinski_____t2,probabilite)                             \
                                                     ,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t1,probabilite)                             \
                                                      );                                                                                \
                                                 )                                                                                      \
                                            );                                                                                          \
                                        /* Recuperation de la deuxieme transformation,                                               */ \
                              SELECT_AFFINE(Fx_Sierpinski__Fy_Sierpinski_____t3                                                         \
                                           ,SIERPINSKI_3                                                                                \
                                           ,BLOC(INCR(ASD1(Fx_Sierpinski__Fy_Sierpinski_____t3,probabilite)                             \
                                                     ,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t2,probabilite)                             \
                                                      );                                                                                \
                                                 )                                                                                      \
                                            );                                                                                          \
                                        /* Recuperation de la troisieme transformation.                                              */ \
                                                                                                                                        \
                              EGAL(Fx_Sierpinski__Fy_Sierpinski_____initialisation,VRAI);                                               \
                                        /* Et on memorise cette initialisation...                                                    */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         EGAL(aleatoire                                                                                                 \
                             ,rdnF2D(ADRESSE(point_courant)                                                                             \
                                    ,ADD2(Fx_Sierpinski__Fy_Sierpinski_____graine,Iiteration_champ_____compteur_d_iterations)           \
                                    ,RDN_GENERE                                                                                         \
                                    ,FLOT__ARGUMENT_ABSENT,FLOT__ARGUMENT_ABSENT                                                        \
                                     )                                                                                                  \
                              );                                                                                                        \
                         Eblock                                                                                                         \
                                        /* Pour ne pas toujours generer les memes valeurs...                                         */ \
                                        /* procedure d'initialisation des elements necessaires a l'iteration                         */ \
                                        /* de Sierpinski.                                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D O N N E E S   D E   L ' I T E R A T I O N   D E   S I E R P I N S K I  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(Logical,INIT(Fx_Sierpinski__Fy_Sierpinski_____initialisation,FAUX)));
                                        /* Cet indicateur permet de savoir si les differentes donnees necessaires                    */
                                        /* a l'iteration de Sierpinski sont initialisees ('VRAI') ou pas ('FAUX').                   */
DEFV(Local,DEFV(affine_2D,Fx_Sierpinski__Fy_Sierpinski_____t1));
                                        /* Premiere transformation,                                                                  */
DEFV(Local,DEFV(affine_2D,Fx_Sierpinski__Fy_Sierpinski_____t2));
                                        /* Deuxieme transformation,                                                                  */
DEFV(Local,DEFV(affine_2D,Fx_Sierpinski__Fy_Sierpinski_____t3));
                                        /* Troisieme transformation.                                                                 */
DEFV(Common,DEFV(Int,ZINT(Fx_Sierpinski__Fy_Sierpinski_____graine,UN)));
                                        /* Graine a priori du generateur aleatoire utilise par Sierpinski.                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O M P O S A N T E   H O R I Z O N T A L E   D E   L ' I T E R A T I O N   D E   S I E R P I N S K I  :                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,Fx_Sierpinski(Xf,Yf,Zf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(pointF_2D,point_courant);
                                        /* Point courant a deplacer.                                                                 */
     DEFV(Float,INIT(aleatoire,FLOT__UNDEF));
                                        /* Valeur aleatoire courante fonction de l'abscisse.                                         */
     DEFV(Float,INIT(fxyz,FLOT__UNDEF));
                                        /* Valeur de la fonction.                                                                    */
     /*..............................................................................................................................*/
     INITIALISATION_SIERPINSKI;

     EGAL(fxyz
         ,COND(IFLE(aleatoire,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t1,probabilite))
              ,TRANSFORMATION_AFFINE_X(Fx_Sierpinski__Fy_Sierpinski_____t1)
              ,COND(IFLE(aleatoire,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t2,probabilite))
                   ,TRANSFORMATION_AFFINE_X(Fx_Sierpinski__Fy_Sierpinski_____t2)
                   ,COND(IFLE(aleatoire,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t3,probabilite))
                        ,TRANSFORMATION_AFFINE_X(Fx_Sierpinski__Fy_Sierpinski_____t3)
                        ,FXorigine
                         )
                    )
               )
          );

     RETU(fxyz);
     Eblock

EFonctionF

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

BFonctionF

DEFV(Common,DEFV(FonctionF,Fy_Sierpinski(Xf,Yf,Zf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(pointF_2D,point_courant);
                                        /* Point courant a deplacer.                                                                 */
     DEFV(Float,INIT(aleatoire,FLOT__UNDEF));
                                        /* Valeur aleatoire courante fonction de l'ordonnee.                                         */
     DEFV(Float,INIT(fxyz,FLOT__UNDEF));
                                        /* Valeur de la fonction.                                                                    */
     /*..............................................................................................................................*/
     INITIALISATION_SIERPINSKI;

     EGAL(fxyz
         ,COND(IFLE(aleatoire,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t1,probabilite))
              ,TRANSFORMATION_AFFINE_Y(Fx_Sierpinski__Fy_Sierpinski_____t1)
              ,COND(IFLE(aleatoire,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t2,probabilite))
                   ,TRANSFORMATION_AFFINE_Y(Fx_Sierpinski__Fy_Sierpinski_____t2)
                   ,COND(IFLE(aleatoire,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t3,probabilite))
                        ,TRANSFORMATION_AFFINE_Y(Fx_Sierpinski__Fy_Sierpinski_____t3)
                        ,FYorigine
                         )
                    )
               )
          );

     RETU(fxyz);
     Eblock

EFonctionF

#    undef     INITIALISATION_SIERPINSKI
#    undef     SIERPINSKI_3
#    undef     SIERPINSKI_2
#    undef     SIERPINSKI_1

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S   D E   L ' I T E R A T I O N   D E   F O U G E R E  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    FOUGERE_1                                                                                                                \
                         "Mxx=+0.000 Mxy=+0.000 Myx=+0.000 Myy=+0.160   Tx=+0.000 Ty=+0.000   P=0.010"                                  \
                                        /* Definition de la premiere transformation,                                                 */
#    define    FOUGERE_2                                                                                                                \
                         "Mxx=+0.200 Mxy=-0.260 Myx=+0.230 Myy=+0.220   Tx=+0.000 Ty=+1.600   P=0.070"                                  \
                                        /* Definition de la deuxieme transformation,                                                 */
#    define    FOUGERE_3                                                                                                                \
                         "Mxx=-0.150 Mxy=+0.280 Myx=+0.260 Myy=+0.240   Tx=+0.000 Ty=+0.440   P=0.070"                                  \
                                        /* Definition de la troisieme transformation,                                                */
#    define    FOUGERE_4                                                                                                                \
                         "Mxx=+0.850 Mxy=+0.040 Myx=-0.040 Myy=+0.850   Tx=+0.000 Ty=+1.600   P=0.850"                                  \
                                        /* Definition de la quatrieme transformation.                                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N I T I A L I S A T I O N   D E   L ' I T E R A T I O N   D E   F O U G E R E  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    INITIALISATION_FOUGERE                                                                                                   \
                         Bblock                                                                                                         \
                         INITIALISATION_POINT_2D(point_courant,Xf,Yf);                                                                  \
                                        /* Initialisation du point courant.                                                          */ \
                                                                                                                                        \
                         Test(EST_FAUX(Fx_fougere__Fy_fougere_____initialisation))                                                      \
                              Bblock                                                                                                    \
                              CALS(rdnF2D(ADRESSE(point_courant),UNDEF,RDN_INIT,FZERO,FU));                                             \
                                        /* On initialise le generateur aleatoire dans [0,1]...                                       */ \
                                                                                                                                        \
                              SELECT_AFFINE(Fx_fougere__Fy_fougere_____t1                                                               \
                                           ,FOUGERE_1                                                                                   \
                                           ,BLOC(INCR(ASD1(Fx_fougere__Fy_fougere_____t1,probabilite),FZERO);)                          \
                                            );                                                                                          \
                                        /* Recuperation de la premiere transformation,                                               */ \
                              SELECT_AFFINE(Fx_fougere__Fy_fougere_____t2                                                               \
                                           ,FOUGERE_2                                                                                   \
                                           ,BLOC(INCR(ASD1(Fx_fougere__Fy_fougere_____t2,probabilite)                                   \
                                                     ,ASD1(Fx_fougere__Fy_fougere_____t1,probabilite)                                   \
                                                      );                                                                                \
                                                 )                                                                                      \
                                            );                                                                                          \
                                        /* Recuperation de la deuxieme transformation,                                               */ \
                              SELECT_AFFINE(Fx_fougere__Fy_fougere_____t3                                                               \
                                           ,FOUGERE_3                                                                                   \
                                           ,BLOC(INCR(ASD1(Fx_fougere__Fy_fougere_____t3,probabilite)                                   \
                                                     ,ASD1(Fx_fougere__Fy_fougere_____t2,probabilite)                                   \
                                                      );                                                                                \
                                                 )                                                                                      \
                                            );                                                                                          \
                                        /* Recuperation de la troisieme transformation,                                              */ \
                              SELECT_AFFINE(Fx_fougere__Fy_fougere_____t4                                                               \
                                           ,FOUGERE_4                                                                                   \
                                           ,BLOC(INCR(ASD1(Fx_fougere__Fy_fougere_____t4,probabilite)                                   \
                                                     ,ASD1(Fx_fougere__Fy_fougere_____t3,probabilite)                                   \
                                                      );                                                                                \
                                                 )                                                                                      \
                                            );                                                                                          \
                                        /* Recuperation de la quatrieme transformation.                                              */ \
                                                                                                                                        \
                              EGAL(Fx_fougere__Fy_fougere_____initialisation,VRAI);                                                     \
                                        /* Et on memorise cette initialisation...                                                    */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         EGAL(aleatoire                                                                                                 \
                             ,rdnF2D(ADRESSE(point_courant)                                                                             \
                                    ,ADD2(Fx_fougere__Fy_fougere_____graine,Iiteration_champ_____compteur_d_iterations)                 \
                                    ,RDN_GENERE                                                                                         \
                                    ,FLOT__ARGUMENT_ABSENT,FLOT__ARGUMENT_ABSENT                                                        \
                                     )                                                                                                  \
                              );                                                                                                        \
                         Eblock                                                                                                         \
                                        /* Procedure d'initialisation des elements necessaires a l'iteration                         */ \
                                        /* de fougere.                                                                               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D O N N E E S   D E   L ' I T E R A T I O N   D E   F O U G E R E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(Logical,INIT(Fx_fougere__Fy_fougere_____initialisation,FAUX)));
                                        /* Cet indicateur permet de savoir si les differentes donnees necessaires                    */
                                        /* a l'iteration de fougere sont initialisees ('VRAI') ou pas ('FAUX').                      */
DEFV(Local,DEFV(affine_2D,Fx_fougere__Fy_fougere_____t1));
                                        /* Premiere transformation,                                                                  */
DEFV(Local,DEFV(affine_2D,Fx_fougere__Fy_fougere_____t2));
                                        /* Deuxieme transformation,                                                                  */
DEFV(Local,DEFV(affine_2D,Fx_fougere__Fy_fougere_____t3));
                                        /* Troisieme transformation,                                                                 */
DEFV(Local,DEFV(affine_2D,Fx_fougere__Fy_fougere_____t4));
                                        /* Quatrieme transformation.                                                                 */
DEFV(Common,DEFV(Int,ZINT(Fx_fougere__Fy_fougere_____graine,UN)));
                                        /* Graine a priori du generateur aleatoire utilise par fougere.                              */

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

BFonctionF

DEFV(Common,DEFV(FonctionF,Fx_fougere(Xf,Yf,Zf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(pointF_2D,point_courant);
                                        /* Point courant a deplacer.                                                                 */
     DEFV(Float,INIT(aleatoire,FLOT__UNDEF));
                                        /* Valeur aleatoire courante fonction de l'abscisse.                                         */
     DEFV(Float,INIT(fxyz,FLOT__UNDEF));
                                        /* Valeur de la fonction.                                                                    */
     /*..............................................................................................................................*/
     INITIALISATION_FOUGERE;

     EGAL(fxyz
         ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t1,probabilite))
              ,TRANSFORMATION_AFFINE_X(Fx_fougere__Fy_fougere_____t1)
              ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t2,probabilite))
                   ,TRANSFORMATION_AFFINE_X(Fx_fougere__Fy_fougere_____t2)
                   ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t3,probabilite))
                        ,TRANSFORMATION_AFFINE_X(Fx_fougere__Fy_fougere_____t3)
                        ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t4,probabilite))
                             ,TRANSFORMATION_AFFINE_X(Fx_fougere__Fy_fougere_____t4)
                             ,FXorigine
                              )
                         )
                    )
               )
          );

     RETU(fxyz);
     Eblock

EFonctionF

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

BFonctionF

DEFV(Common,DEFV(FonctionF,Fy_fougere(Xf,Yf,Zf)))
DEFV(Argument,DEFV(Float,Xf));
DEFV(Argument,DEFV(Float,Yf));
DEFV(Argument,DEFV(Float,Zf));
                                        /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee...    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(pointF_2D,point_courant);
                                        /* Point courant a deplacer.                                                                 */
     DEFV(Float,INIT(aleatoire,FLOT__UNDEF));
                                        /* Valeur aleatoire courante fonction de l'ordonnee.                                         */
     DEFV(Float,INIT(fxyz,FLOT__UNDEF));
                                        /* Valeur de la fonction.                                                                    */
     /*..............................................................................................................................*/
     INITIALISATION_FOUGERE;

     EGAL(fxyz
         ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t1,probabilite))
              ,TRANSFORMATION_AFFINE_Y(Fx_fougere__Fy_fougere_____t1)
              ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t2,probabilite))
                   ,TRANSFORMATION_AFFINE_Y(Fx_fougere__Fy_fougere_____t2)
                   ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t3,probabilite))
                        ,TRANSFORMATION_AFFINE_Y(Fx_fougere__Fy_fougere_____t3)
                        ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t4,probabilite))
                             ,TRANSFORMATION_AFFINE_Y(Fx_fougere__Fy_fougere_____t4)
                             ,FYorigine
                              )
                         )
                    )
               )
          );

     RETU(fxyz);
     Eblock

EFonctionF

#    undef     INITIALISATION_FOUGERE
#    undef     FOUGERE_4
#    undef     FOUGERE_3
#    undef     FOUGERE_2
#    undef     FOUGERE_1

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        N E T T O Y A G E  :                                                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    undef     TRANSFORMATION_AFFINE_Y
#    undef     TRANSFORMATION_AFFINE_X
#    undef     TRANSFORMATION_AFFINE_COORDONNEE

#    undef     SELECT_AFFINE

#    undef     SELECT_AFFINE_Pr
#    undef     AFFINE_Pr
#    undef     SELECT_AFFINE_Tr_y
#    undef     AFFINE_Tr_y
#    undef     SELECT_AFFINE_Tr_x
#    undef     AFFINE_Tr_x
#    undef     SELECT_AFFINE_Ma_yy
#    undef     AFFINE_Ma_yy
#    undef     SELECT_AFFINE_Ma_yx
#    undef     AFFINE_Ma_yx
#    undef     SELECT_AFFINE_Ma_xy
#    undef     AFFINE_Ma_xy
#    undef     SELECT_AFFINE_Ma_xx
#    undef     AFFINE_Ma_xx

#    undef     SELECT_AFFINE_ELEMENT

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I N   D E S   P R O B L E M E S   S U R   D P X 5 0 0 0   E T   N W S 3 0 0 0  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#Aifdef   __VERSION__COMPILER_LA_FONCTION_Iiteration_champ                      /* Common,DEFV(Fonction,) : gestion des 'IFS'...     */
                                        /* sur 'SYSTEME_DPX5000_SPIX_CC', les 'Iterated Function Set' ne sont pas compiles afin      */
                                        /* d'eviter un "debordement" de la zone de swap lors de la compilation...                    */
                                        /* sur 'SYSTEME_NWS3000_NEWSOS_CC' les 'Iterated Function Set' ne sont pas compiles afin     */
                                        /* d'eviter une mauvaise generation du code binaire...                                       */
                                        /* sur 'SYSTEME_NWS3000_NEWSOS_2CC' les 'Iterated Function Set' ne sont pas compiles afin    */
                                        /* d'eviter une mauvaise generation du code binaire...                                       */
#Eifdef   __VERSION__COMPILER_LA_FONCTION_Iiteration_champ                      /* Common,DEFV(Fonction,) : gestion des 'IFS'...     */

_______________________________________________________________________________________________________________________________________



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.