/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   A U T O - S I M I L A I R E   D E   H I L B E R T   D A N S   [ 0 , 1 ] x [ 0 , 1 ]  :       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Probleme de terminologie (le 20230106115647) :                                                                             */
/*                                                                                                                                   */
/*                    On notera un probleme dans les                                                                                 */
/*                  noms donnes aux programmes :                                                                                     */
/*                                                                                                                                   */
/*                                      $xci/valeurs_TransformationPeano2D$I                                                         */
/*                                      $xci/valeurs_TransformationPeano2D$K                                                         */
/*                                      $xci/valeurs_TransformationPeano3D$K                                                         */
/*                                                                                                                                   */
/*                  qui devraient s'appeler 'Hilbert'                                                                                */
/*                  et non pas 'Peano', ainsi qu'a 55                                                                                */
/*                  images 'PEAN's qui devraient s'appeler                                                                           */
/*                  en fait 'HILB's. Tout cela est precise                                                                           */
/*                  dans 'v $xiirv/$Fnota 20230106103125'...                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande est une version '$K' du programme                                                               */
/*                  'v $xtc/Peano_SurjectionFractale.23$vv$c'...                                                                     */
/*                                                                                                                                   */
/*                    Avec les notations suivantes :                                                                                 */
/*                                                                                                                                   */
/*                                      X(n)      -->       X1                                                                       */
/*                                      Y(n)      -->       Y1                                                                       */
/*                                                                                                                                   */
/*                                      X(n+1)    -->       X2                                                                       */
/*                                      Y(n+1)    -->       Y2                                                                       */
/*                                                                                                                                   */
/*                  la definition de la transformation de Hilbert                                                                    */
/*                  bidimensionnelle "historique" est la suivante                                                                    */
/*                  en notation matricielle :                                                                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      |X2|      |  Y1|    | 0 +1|   |X1|   |0|                                                     */
/*                                      |  |    = |    |  = |     | * |  | + | |                    Transformation 1                 */
/*                                      |Y2|      |  X1|    |+1  0|   |Y1|   |0|                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      |X2|      |  X1|    |+1  0|   |X1|   |0|                                                     */
/*                                      |  |    = |    |  = |     | * |  | + | |                    Transformation 2                 */
/*                                      |Y2|      |1+Y1|    | 0 +1|   |Y1|   |1|                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      |X2|      |1+X1|    |+1  0|   |X1|   |1|                                                     */
/*                                      |  |    = |    |  = |     | * |  | + | |                    Transformation 3                 */
/*                                      |Y2|      |1+Y1|    | 0 +1|   |Y1|   |1|                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      |X2|      |2-Y1|    | 0 -1|   |X1|   |2|                                                     */
/*                                      |  |    = |    |  = |     | * |  | + | |                    Transformation 4                 */
/*                                      |Y2|      |1-X1|    |-1  0|   |Y1|   |1|                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    Avec les notations suivantes :                                                                                 */
/*                                                                                                                                   */
/*                                      Z(n)   = X(n)   + i.Y(n)      -->       Z1                                                   */
/*                                                                                                                                   */
/*                                      Z(n+1) = X(n+1) + i.Y(n+1)    -->       Z2                                                   */
/*                                                                                                                                   */
/*                  il est aussi possible d'ecrire cela dans le                                                                      */
/*                  plan complexe :                                                                                                  */
/*                                                                                                                                   */
/*                                                     __                                                                            */
/*                                      Z2 =         i.Z1                                           Transformation 1                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      Z2 = i     + 1.Z1                                           Transformation 2                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      Z2 = (1+i) + 1.Z1                                           Transformation 3                 */
/*                                                                                                                                   */
/*                                                     __                                                                            */
/*                                      Z2 = (2+i) - i.Z1                                           Transformation 4                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  ou encore :                                                                                                      */
/*                                                                                                                                   */
/*                                                   __                                                                              */
/*                                      Z2 = ( 0,+1).Z1 + ( 0, 0)                                   Transformation 1                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      Z2 = (+1, 0).Z1 + ( 0,+1)                                   Transformation 2                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      Z2 = (+1, 0).Z1 + (+1,+1)                                   Transformation 3                 */
/*                                                                                                                                   */
/*                                                   __                                                                              */
/*                                      Z2 = ( 0,-1).Z1 + (+2,+1)                                   Transformation 4                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/valeurs_TransformationPeano2D$K' :                                                                         */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20220415074108).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DIMENSION_DE_LA_COURBE                                                                                                        \
                    BI_DIMENSIONNEL                                                                                                     \
                                        /* Dimension de la courbe...                                                                 */

#define   REMPLACER_LES_LISTES_DE_SUBSTITUTION_PAR_DES_LISTES_QUELCONQUES                                                               \
                    FAUX                                                                                                                \
                                        /* Faut-il remplacer les listes de substitution par des listes queconques ('VRAI') ou pas    */ \
                                        /* ('FAUX') ? La valeur par defaut assure la compatibilite anterieure (introduit le          */ \
                                        /* 20220513105601)...                                                                        */
#define   INTERPOLER_LES_LISTES_QUELCONQUES                                                                                             \
                    FAUX                                                                                                                \
                                        /* Faut-il interpoler les listes queconques ('VRAI') ou pas ('FAUX') ? Voir a ce propos le   */ \
                                        /* commentaires 'v $xci/valeurs_TransformationPeano2D$I 20220513134353'. Ceci fut introduit  */ \
                                        /* le 20220513142523...                                                                      */

#define   EDITER_LA_DEFINITION_DU_CARRE                                                                                                 \
                    FAUX
#define   EDITER_LA_DEFINITION_DES_SOUS_CARRES                                                                                          \
                    FAUX
                                        /* Faut-il editer la definition du carre ('VRAI') ou pas ('FAUX') ? L'edition de la          */
                                        /* definition des 4 sous-carres a ete introduite le 20220519183230...                        */

#define   f1x_____NOM_DE_LA_SUBSTITUTION_DE_DEFINITION                                                                                  \
                    "L_SUBSTITUTION_ROUGE"
#define   f1x_____SUBSTITUTION_COURANTE_DE_DEFINITION                                                                                   \
                    L_SUBSTITUTION_ROUGE
#define   f1x_____LISSAGE_DE_LA_SUBSTITUTION_DE_DEFINITION                                                                              \
                    FAUX
#define   f1x_____NOMBRE_DE_PASSES_DE_LISSAGE_DE_LA_SUBSTITUTION_DE_DEFINITION                                                          \
                    UN
#define   f1x_____PAS_DE_LISSAGE_DE_LA_SUBSTITUTION_DE_DEFINITION                                                                       \
                    PAS_COULEURS
#define   f1x_____MINIMUM_DE_LA_SUBSTITUTION_DE_DEFINITION                                                                              \
                    COORDONNEE_BARYCENTRIQUE_MINIMALE
#define   f1x_____MAXIMUM_DE_LA_SUBSTITUTION_DE_DEFINITION                                                                              \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE
#define   f1x_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION                                                                              \
                    FAUX
#define   f1x_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION__LINEAIREMENT                                                                \
                    VRAI
#define   f1x_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION__CUBIQUEMENT__DERIVEE_ORIGINE__                                              \
                    FZERO
#define   f1x_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION__CUBIQUEMENT__DERIVEE_EXTREMITE                                              \
                    FZERO
                                        /* Definition de 'f1x(...)' via '$xiP' a valeur dans [0,1]...                                */

#define   f1y_____NOM_DE_LA_SUBSTITUTION_DE_DEFINITION                                                                                  \
                    "L_SUBSTITUTION_VERTE"
#define   f1y_____SUBSTITUTION_COURANTE_DE_DEFINITION                                                                                   \
                    L_SUBSTITUTION_VERTE
#define   f1y_____LISSAGE_DE_LA_SUBSTITUTION_DE_DEFINITION                                                                              \
                    FAUX
#define   f1y_____NOMBRE_DE_PASSES_DE_LISSAGE_DE_LA_SUBSTITUTION_DE_DEFINITION                                                          \
                    UN
#define   f1y_____PAS_DE_LISSAGE_DE_LA_SUBSTITUTION_DE_DEFINITION                                                                       \
                    PAS_COULEURS
#define   f1y_____MINIMUM_DE_LA_SUBSTITUTION_DE_DEFINITION                                                                              \
                    COORDONNEE_BARYCENTRIQUE_MINIMALE
#define   f1y_____MAXIMUM_DE_LA_SUBSTITUTION_DE_DEFINITION                                                                              \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE
#define   f1y_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION                                                                              \
                    FAUX
#define   f1y_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION__LINEAIREMENT                                                                \
                    VRAI
#define   f1y_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION__CUBIQUEMENT__DERIVEE_ORIGINE__                                              \
                    FZERO
#define   f1y_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION__CUBIQUEMENT__DERIVEE_EXTREMITE                                              \
                    FZERO
                                        /* Definition de 'f1y(...)' via '$xiP' a valeur dans [0,1]...                                */

#define   CHAINER_LES_POINTS                                                                                                            \
                    VRAI                                                                                                                \
                                        /* Faut-il chainer les points ('VRAI') ou pas ('FAUX') ?                                     */

#define   CALCULER_UNE_SEULE_ITERATION                                                                                                  \
                    VRAI
#define   NUMERO_DE_L_ITERATION_UNIQUE                                                                                                  \
                    ITERATION_05
                                        /* Choix du mode "une" ou "plusieurs iterations"...                                          */

#define   EDITER_ITERATION_01                                                                                                           \
                    FAUX
#define   EDITER_ITERATION_02                                                                                                           \
                    FAUX
#define   EDITER_ITERATION_03                                                                                                           \
                    FAUX
#define   EDITER_ITERATION_04                                                                                                           \
                    FAUX
#define   EDITER_ITERATION_05                                                                                                           \
                    VRAI
#define   EDITER_ITERATION_06                                                                                                           \
                    VRAI
#define   EDITER_ITERATION_07                                                                                                           \
                    VRAI
                                        /* Choix des iterations a editer si 'IL_NE_FAUT_PAS(calculer_une_seule_iteration)'...        */
                                        /*                                                                                           */
                                        /* Les iterations '06' et '07' ont ete introduites le 20220418180838...                      */

#define   PAS_DE_L_ITERATION_01                                                                                                         \
                    PARE(0.001000)
#define   PAS_DE_L_ITERATION_02                                                                                                         \
                    FRA2(PAS_DE_L_ITERATION_01)
#define   PAS_DE_L_ITERATION_03                                                                                                         \
                    FRA2(PAS_DE_L_ITERATION_02)
#define   PAS_DE_L_ITERATION_04                                                                                                         \
                    FRA2(PAS_DE_L_ITERATION_03)
#define   PAS_DE_L_ITERATION_05                                                                                                         \
                    FRA4(PAS_DE_L_ITERATION_04)
#define   PAS_DE_L_ITERATION_06                                                                                                         \
                    FRA4(PAS_DE_L_ITERATION_05)
#define   PAS_DE_L_ITERATION_07                                                                                                         \
                    FRA4(PAS_DE_L_ITERATION_06)
                                        /* Pas d'edition des iterations...                                                           */
                                        /*                                                                                           */
                                        /* Les iterations '06' et '07' ont ete introduites le 20220418180838...                      */

#define   PONDERATION_DE_T                                                                                                              \
                    FU
#define   PONDERATION_DE_X                                                                                                              \
                    FZERO
#define   PONDERATION_DE_Y                                                                                                              \
                    FZERO
                                        /* Ponderations respectives de 'X' et 'Y'.                                                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/ARITHMET.1d.I"
#include  xrv/ARITHMET.21.I"
#include  xrv/champs_5.41.I"
                                        /* Introduits le 20220513104116...                                                           */

#include  xci/valeurs_TransformationPeano2D.I"
                                        /* Introduit le 20220426131343...                                                            */

#define   PARAMETRAGE_DE_L_ITERATION_UNIQUE(iteration,editer_iteration,pas_de_l_iteration)                                              \
                    Ca1e(iteration)                                                                                                     \
                         Bblock                                                                                                         \
                         EGAL(editer_iteration,VRAI);                                                                                   \
                         Eblock                                                                                                         \
                    ECa1                                                                                                                \
                                        /* Choix d'une iteration (introduit le 20220419131545)...                                    */

#define   EDITION_DE_LA_DEFINITION_DU_CARRE(sommetX,sommetY)                                                                            \
                    Bblock                                                                                                              \
                    EDITION_DES_COORDONNEES("xB=%+.^^^ yB=%+.^^^ DefinitionCarre=",sommetX,sommetY);                                    \
                                        /* On notera le "DefinitionCarre=" qui ne sert que d'outil de compatibilite avec             */ \
                                        /* 'v $xiirv/.HILB.21.$U DefinitionCarre='...                                                */ \
                    Eblock                                                                                                              \
                                        /* Edition de la definition du carre...                                                      */

#define   EDITION_DES_COORDONNEES(format_coordonnees_X_et_Y,Coordonnee_X,Coordonnee_Y)                                                  \
                    Bblock                                                                                                              \
                    CAL2(Prin2(format_coordonnees_X_et_Y                                                                                \
                              ,Coordonnee_X                                                                                             \
                              ,Coordonnee_Y                                                                                             \
                               )                                                                                                        \
                         );                                                                                                             \
                    CAL2(Prin0("\n"));                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Edition des coordonnees.                                                                  */

#define   EDITION_EVENTUELLE_D_UNE_ITERATION(editer,F2x,F2y,F1x,F1y,pas_t)                                                              \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(editer))                                                                                               \
                         Bblock                                                                                                         \
                         DEFV(Float,INIT(t,FLOT__UNDEF));                                                                               \
                                                                                                                                        \
                         DEFV(Local,DEFV(Float,INIT(Coordonnee_courante___X,FLOT__UNDEF)));                                             \
                         DEFV(Local,DEFV(Float,INIT(Coordonnee_courante___Y,FLOT__UNDEF)));                                             \
                                        /* Coordonnees 'X' et 'Y' a l'instant 'T' courant.                                           */ \
                                                                                                                                        \
                         DEFV(Local,DEFV(Float,INIT(Coordonnee_anterieure_X,FLOT__UNDEF)));                                             \
                         DEFV(Local,DEFV(Float,INIT(Coordonnee_anterieure_Y,FLOT__UNDEF)));                                             \
                                        /* Coordonnees 'X' et 'Y' a l'instant 'T' precedent.                                         */ \
                                                                                                                                        \
                         DoIn(t,minimum_t,maximum_t,pas_t)                                                                              \
                              Bblock                                                                                                    \
                              EGAL(Coordonnee_courante___X,F2x(t,&F1x,&F1y));                                                           \
                              EGAL(Coordonnee_courante___Y,F2y(t,&F1x,&F1y));                                                           \
                                                                                                                                        \
                              Test(IL_FAUT(chainer_les_points))                                                                         \
                                   Bblock                                                                                               \
                                   Test(IFGT(t,minimum_t))                                                                              \
                                        Bblock                                                                                          \
                                        EGAL(Coordonnee_anterieure_X,Coordonnee_courante___X);                                          \
                                        EGAL(Coordonnee_anterieure_Y,Coordonnee_courante___Y);                                          \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                                                                                                                                        \
                              Test(IL_FAUT(chainer_les_points))                                                                         \
                                   Bblock                                                                                               \
                                   Test(IFGT(t,minimum_t))                                                                              \
                                        Bblock                                                                                          \
                                        EDITION_DES_COORDONNEES("xA=%+.^^^ yA=%+.^^^",Coordonnee_anterieure_X,Coordonnee_anterieure_Y); \
                                        EDITION_DES_COORDONNEES("xB=%+.^^^ yB=%+.^^^",Coordonnee_courante___X,Coordonnee_courante___Y); \
                                        /* Cette edition est compatible avec 'v $xci/valeurs_Hilbert2D$K EDITION_DES_COORDONNEES'.   */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   CAL2(Prin2(Cara(chain_Aconcaten5(INTRODUCTION_FORMAT,valeurs_signees,".*",format_d_edition,"\n"))    \
                                             ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales)                                         \
                                             ,LIZ3(ponderation_de_T,FLOT(t)                                                             \
                                                  ,ponderation_de_X,FLOT(Coordonnee_courante___X)                                       \
                                                  ,ponderation_de_Y,FLOT(Coordonnee_courante___Y)                                       \
                                                   )                                                                                    \
                                              )                                                                                         \
                                        );                                                                                              \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         EDoI                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Edition des coordonnees.                                                                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S U I T E   D E   F O N C T I O N S   R E C U R S I V E S   A   V A L E U R   D A N S   [ 0 , 1 ]                          */
/*        T R A N S F O R M A T I O N   A U T O - S I M I L A I R E   D E   H I L B E R T   D A N S   [ 0 , 1 ] x [ 0 , 1 ]  :       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

Denumer07(INIS(_01,UN)
              ,_02
              ,_03
              ,_04
              ,_05
              ,_06
              ,_07
              ,ListeDesIterationsDisponibles
          );

#define   ITERATION_01                                                                                                                  \
                    ENUM(_01)
#define   ITERATION_02                                                                                                                  \
                    ENUM(_02)
#define   ITERATION_03                                                                                                                  \
                    ENUM(_03)
#define   ITERATION_04                                                                                                                  \
                    ENUM(_04)
#define   ITERATION_05                                                                                                                  \
                    ENUM(_05)
#define   ITERATION_06                                                                                                                  \
                    ENUM(_06)
#define   ITERATION_07                                                                                                                  \
                    ENUM(_07)

BFonctionF
                                        /* Definition d'une fonction neutre 'f0x(...)' a valeur dans [0,1]...                        */

DEFV(FonctionF,f0x(t))
DEFV(Argument,DEFV(Float,t));
     Bblock
     RETU(t);
     Eblock

EFonctionF

BFonctionF
                                        /* Definition d'une fonction neutre 'f0y(...)' a valeur dans [0,1]...                        */

DEFV(FonctionF,f0y(t))
DEFV(Argument,DEFV(Float,t));
     Bblock
     RETU(t);
     Eblock

EFonctionF

BFonctionF
                                        /* Definition de la premiere fonction ('f1x(...)') de la suite de fonctions recursives       */
                                        /* a valeur dans [0,1]...                                                                    */

DEFV(Logical,INIT(remplacer_les_listes_de_substitution_par_des_listes_quelconques
                 ,REMPLACER_LES_LISTES_DE_SUBSTITUTION_PAR_DES_LISTES_QUELCONQUES
                  )
     );
                                        /* Faut-il remplacer les listes de substitution par des listes queconques ('VRAI') ou pas    */
                                        /* ('FAUX') ? La valeur par defaut assure la compatibilite anterieure (introduit le          */
                                        /* 20220513105601)...                                                                        */
DEFV(Logical,INIT(interpoler_les_listes_quelconques,INTERPOLER_LES_LISTES_QUELCONQUES));
                                        /* Faut-il interpoler les listes queconques ('VRAI') ou pas ('FAUX') ? Voir a ce propos le   */
                                        /* commentaires 'v $xci/valeurs_TransformationPeano2D$I 20220513134353'. Ceci fut introduit  */
                                        /* le 20220513142523...                                                                      */

#define   MINIMUM_T                                                                                                                     \
                    COORDONNEE_BARYCENTRIQUE_MINIMALE
#define   MAXIMUM_T                                                                                                                     \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE

DEFV(Local,DEFV(Float,INIT(minimum_t,MINIMUM_T)));
DEFV(Local,DEFV(Float,INIT(maximum_t,MAXIMUM_T)));

DEFV(Int,INIT(nombre_d_elements,NOMBRE_D_ELEMENTS));

#define   X_IMPLICITE                                                                                                                   \
                    FZERO
#define   Y_IMPLICITE                                                                                                                   \
                    FZERO

gGENERATION_D_UN_FICHIER(fichier_LISTE_X,liste_initiale_des_X);
gGENERATION_D_UN_FICHIER(fichier_LISTE_Y,liste_initiale_des_Y);

#define   ELEMENT_DU_FICHIER_LISTE_X(index)                                                                                             \
                    gELEMENT_DU_FICHIER(liste_initiale_des_X,index)
#define   ELEMENT_DU_FICHIER_LISTE_Y(index)                                                                                             \
                    gELEMENT_DU_FICHIER(liste_initiale_des_Y,index)
                                        /* Listes introduites le 20220513104116...                                                   */

DEFV(Local,DEFV(Logical,INIT(f1x_____generer_avec_une_liste_de_substitution,FAUX)));
DEFV(Local,DEFV(genere_Float,DTb1(f1x_____liste_flottante_substitution_de_definition,COULEURS)));
                                        /* A priori, 'f1x(...)' n'utilise pas de liste de substitution mais peut le faire...         */
DEFV(Local,DEFV(Logical,INIT(f1x_____interpoler_la_substitution_de_definition,f1x_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION)));
DEFV(Local,DEFV(Logical,INIT(f1x_____interpoler_la_substitution_de_definition__lineairement
                            ,f1x_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION__LINEAIREMENT
                             )
                )
     );
DEFV(Local,DEFV(Float,INIT(f1x_____interpoler_la_substitution_de_definition__cubiquement__derivee_origine__
                          ,f1x_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION__CUBIQUEMENT__DERIVEE_ORIGINE__
                           )
                )
     );
DEFV(Local,DEFV(Float,INIT(f1x_____interpoler_la_substitution_de_definition__cubiquement__derivee_extremite
                          ,f1x_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION__CUBIQUEMENT__DERIVEE_EXTREMITE
                           )
                )
     );
                                        /* La possible interpolation des listes de substitution a ete introduite le 20220423111102.  */

DEFV(FonctionF,f1x(t,ARGUMENT_FONCTION(f0x),ARGUMENT_FONCTION(f0y)))
DEFV(Argument,DEFV(Float,t));
DEFV(Argument,DEFV(Float,afPOINTEUR(f0x)));
DEFV(Argument,DEFV(Float,afPOINTEUR(f0y)));
     Bblock
     DEFV(Float,INIT(ValeurDeLaFonction,FLOT__UNDEF));

     Test(EST_VRAI(f1x_____generer_avec_une_liste_de_substitution))
          Bblock
          INTERPOLATION_DE_LA_SUBSTITUTION(f1x_____liste_flottante_substitution_de_definition
                                          ,f1x_____interpoler_la_substitution_de_definition
                                          ,f1x_____interpoler_la_substitution_de_definition__lineairement
                                          ,f1x_____interpoler_la_substitution_de_definition__cubiquement__derivee_origine__
                                          ,f1x_____interpoler_la_substitution_de_definition__cubiquement__derivee_extremite
                                          ,ELEMENT_DU_FICHIER_LISTE_X
                                           );
          Eblock
     ATes
          Bblock
          EGAL(ValeurDeLaFonction,NEUT(t));
                                        /* Definition d'une parabole de sommet {1/2,1} et passant par les points {0,0} et {1,0}      */
                                        /* par defaut...                                                                             */
          Eblock
     ETes

     RETU(ValeurDeLaFonction);
     Eblock

EFonctionF

BFonctionF
                                        /* Definition de la premiere fonction ('f1y(...)') de la suite de fonctions recursives       */
                                        /* a valeur dans [0,1]...                                                                    */

DEFV(Local,DEFV(Logical,INIT(f1y_____generer_avec_une_liste_de_substitution,FAUX)));
DEFV(Local,DEFV(genere_Float,DTb1(f1y_____liste_flottante_substitution_de_definition,COULEURS)));
                                        /* A priori, 'f1y(...)' n'utilise pas de liste de substitution mais peut le faire...         */
DEFV(Local,DEFV(Logical,INIT(f1y_____interpoler_la_substitution_de_definition,f1y_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION)));
DEFV(Local,DEFV(Logical,INIT(f1y_____interpoler_la_substitution_de_definition__lineairement
                            ,f1y_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION__LINEAIREMENT
                             )
                )
     );
DEFV(Local,DEFV(Float,INIT(f1y_____interpoler_la_substitution_de_definition__cubiquement__derivee_origine__
                          ,f1y_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION__CUBIQUEMENT__DERIVEE_ORIGINE__
                           )
                )
     );
DEFV(Local,DEFV(Float,INIT(f1y_____interpoler_la_substitution_de_definition__cubiquement__derivee_extremite
                          ,f1y_____INTERPOLER_LA_SUBSTITUTION_DE_DEFINITION__CUBIQUEMENT__DERIVEE_EXTREMITE
                           )
                )
     );
                                        /* La possible interpolation des listes de substitution a ete introduite le 20220423111102.  */

DEFV(FonctionF,f1y(t,ARGUMENT_FONCTION(f0x),ARGUMENT_FONCTION(f0y)))
DEFV(Argument,DEFV(Float,t));
DEFV(Argument,DEFV(Float,afPOINTEUR(f0x)));
DEFV(Argument,DEFV(Float,afPOINTEUR(f0y)));
     Bblock
     DEFV(Float,INIT(ValeurDeLaFonction,FLOT__UNDEF));

     Test(EST_VRAI(f1y_____generer_avec_une_liste_de_substitution))
          Bblock
          INTERPOLATION_DE_LA_SUBSTITUTION(f1y_____liste_flottante_substitution_de_definition
                                          ,f1y_____interpoler_la_substitution_de_definition
                                          ,f1y_____interpoler_la_substitution_de_definition__lineairement
                                          ,f1y_____interpoler_la_substitution_de_definition__cubiquement__derivee_origine__
                                          ,f1y_____interpoler_la_substitution_de_definition__cubiquement__derivee_extremite
                                          ,ELEMENT_DU_FICHIER_LISTE_Y
                                           );
          Eblock
     ATes
          Bblock
          EGAL(ValeurDeLaFonction,MUL3(FQUATRE,t,COMP(t)));
                                        /* Definition d'une parabole de sommet {1/2,1} et passant par les points {0,0} et {1,0}      */
                                        /* par defaut...                                                                             */
          Eblock
     ETes

     RETU(ValeurDeLaFonction);
     Eblock

EFonctionF

#define   _____Generer                                                                                                                  \
                    FU
#define   NePasGenerer                                                                                                                  \
                    FZERO

#define   NombreDIntervalles                                                                                                            \
                    INTE(PUIX(DEUX,DIMENSION_DE_LA_COURBE))

#define   t0                                                                                                                            \
                    ADD2(minimum_t,GRO0(SOUS(maximum_t,minimum_t)/FLOT(NombreDIntervalles)))
#define   t1                                                                                                                            \
                    ADD2(minimum_t,GRO1(SOUS(maximum_t,minimum_t)/FLOT(NombreDIntervalles)))
#define   t2                                                                                                                            \
                    ADD2(minimum_t,GRO2(SOUS(maximum_t,minimum_t)/FLOT(NombreDIntervalles)))
#define   t3                                                                                                                            \
                    ADD2(minimum_t,GRO3(SOUS(maximum_t,minimum_t)/FLOT(NombreDIntervalles)))
#define   t4                                                                                                                            \
                    ADD2(minimum_t,GRO4(SOUS(maximum_t,minimum_t)/FLOT(NombreDIntervalles)))

#define   ______0                                                                                                                       \
                    FZERO
#define   _____m1                                                                                                                       \
                    NEGA(FU)
#define   _____p1                                                                                                                       \
                    NEUT(FU)
#define   _____m2                                                                                                                       \
                    NEGA(FDEUX)
#define   _____p2                                                                                                                       \
                    NEUT(FDEUX)
#define   _____m3                                                                                                                       \
                    NEGA(FTROIS)
#define   _____p3                                                                                                                       \
                    NEUT(FTROIS)
                                        /* Introduits le 20220425112919 pour ameliorer les tabulations ci-apres...                   */

DEFV(Local,DEFV(Float,INIT(ax00,_____p1)));
DEFV(Local,DEFV(Float,INIT(bx00,______0)));
DEFV(Local,DEFV(Float,INIT(tx00,______0)));
DEFV(Local,DEFV(Float,INIT(ay00,_____p1)));
DEFV(Local,DEFV(Float,INIT(by00,______0)));
DEFV(Local,DEFV(Float,INIT(ty00,______0)));

DEFV(Local,DEFV(Float,INIT(ax01,_____p1)));
DEFV(Local,DEFV(Float,INIT(bx01,______0)));
DEFV(Local,DEFV(Float,INIT(tx01,_____m1)));
DEFV(Local,DEFV(Float,INIT(ay01,_____p1)));
DEFV(Local,DEFV(Float,INIT(by01,_____p1)));
DEFV(Local,DEFV(Float,INIT(ty01,_____m1)));

DEFV(Local,DEFV(Float,INIT(ax02,_____p1)));
DEFV(Local,DEFV(Float,INIT(bx02,_____p1)));
DEFV(Local,DEFV(Float,INIT(tx02,_____m2)));
DEFV(Local,DEFV(Float,INIT(ay02,_____p1)));
DEFV(Local,DEFV(Float,INIT(by02,_____p1)));
DEFV(Local,DEFV(Float,INIT(ty02,_____m2)));

DEFV(Local,DEFV(Float,INIT(ax03,_____m1)));
DEFV(Local,DEFV(Float,INIT(bx03,_____p2)));
DEFV(Local,DEFV(Float,INIT(tx03,_____m3)));
DEFV(Local,DEFV(Float,INIT(ay03,_____m1)));
DEFV(Local,DEFV(Float,INIT(by03,_____p1)));
DEFV(Local,DEFV(Float,INIT(ty03,_____m3)));

DEFV(Local,DEFV(Float,INIT(diviseur,FDEUX)));

Denumer05(INIS(__01,UN)
              ,__02
              ,__03
              ,__04
              ,__05
              ,ListeDesSegmentsPossibles
          );

#define   SEGMENT_01                                                                                                                    \
                    ENUM(__01)
#define   SEGMENT_02                                                                                                                    \
                    ENUM(__02)
#define   SEGMENT_03                                                                                                                    \
                    ENUM(__03)
#define   SEGMENT_04                                                                                                                    \
                    ENUM(__04)
#define   SEGMENT_INEXISTANT                                                                                                            \
                    ENUM(__05)
                                        /* Afin de simplifier la gestion des 4 segments (introduit le 20220426114732)...             */

#define   CHOIX_D_UN_SEGMENT(segment,valeur)                                                                                            \
                    Ca1e(segment)                                                                                                       \
                         Bblock                                                                                                         \
                         EGAL(ValeurDeLaFonction,valeur);                                                                               \
                         Eblock                                                                                                         \
                    ECa1

#define   APPEL_RECURSIF(a,F2,translation,F1x,F1y,b)                                                                                    \
                    AXPB(a,F2(AXPB(NombreDIntervalles,t,translation),&F1x,&F1y),b)                                                      \
                                        /* Introduit le 20220426104516 pour simplifier...                                            */

#define   GENERE_fnx_fny(nom                                                                                                            \
                        ,F2x,F2y                                                                                                        \
                        ,F1x,F1y                                                                                                        \
                        ,GenX,GenY                                                                                                      \
                        ,ax00,bx00,tx00,ay00,by00,ty00                                                                                  \
                        ,ax01,bx01,tx01,ay01,by01,ty01                                                                                  \
                        ,ax02,bx02,tx02,ay02,by02,ty02                                                                                  \
                        ,ax03,bx03,tx03,ay03,by03,ty03                                                                                  \
                         )                                                                                                              \
                                        /* Le 20220417094708, les arguments {ax00,bx00,...,by03,ty03} furent introduits. A cette     */ \
                                        /* date, ils ne servent a rien car ils possedent la meme valeur lors de tous les appels      */ \
                                        /* a 'GENERE_fnx_fny(...)', mais on ne sait jamais : plus tard...                            */ \
                    BFonctionF                                                                                                          \
                    DEFV(FonctionF,nom(t,ARGUMENT_FONCTION(F2x),ARGUMENT_FONCTION(F2y)))                                                \
                    DEFV(Argument,DEFV(Float,t));                                                                                       \
                    DEFV(Argument,DEFV(Float,afPOINTEUR(F2x)));                                                                         \
                    DEFV(Argument,DEFV(Float,afPOINTEUR(F2y)));                                                                         \
                              Bblock                                                                                                    \
                              DEFV(Float,INIT(ValeurDeLaFonction,FLOT__UNDEF));                                                         \
                              DEFV(Int,INIT(NumeroDu_segment                                                                            \
                                           ,CON04(IFINff(t,t0,t1),SEGMENT_01                                                            \
                                                 ,IFINff(t,t1,t2),SEGMENT_02                                                            \
                                                 ,IFINff(t,t2,t3),SEGMENT_03                                                            \
                                                 ,IFINff(t,t3,t4),SEGMENT_04                                                            \
                                                 ,SEGMENT_INEXISTANT                                                                    \
                                                  )                                                                                     \
                                            )                                                                                           \
                                   );                                                                                                   \
                                        /* Introduit le 20220426115345 afin de simplifier ce qui suit...                             */ \
                                                                                                                                        \
                              Choi(NumeroDu_segment)                                                                                    \
                                   Bblock                                                                                               \
                                   CHOIX_D_UN_SEGMENT(SEGMENT_01                                                                        \
                                                     ,LIZ2(GenX,APPEL_RECURSIF(ax00,F2y,tx00,F1x,F1y,bx00)                              \
                                                          ,GenY,APPEL_RECURSIF(ay00,F2x,ty00,F1x,F1y,by00)                              \
                                                           )                                                                            \
                                                      );                                                                                \
                                        /* Cas du segment [t0,t1] : transformation 1.                                                */ \
                                   CHOIX_D_UN_SEGMENT(SEGMENT_02                                                                        \
                                                     ,LIZ2(GenX,APPEL_RECURSIF(ax01,F2x,tx01,F1x,F1y,bx01)                              \
                                                          ,GenY,APPEL_RECURSIF(ay01,F2y,ty01,F1x,F1y,by01)                              \
                                                           )                                                                            \
                                                      );                                                                                \
                                        /* Cas du segment [t1,t2] : transformation 2.                                                */ \
                                   CHOIX_D_UN_SEGMENT(SEGMENT_03                                                                        \
                                                     ,LIZ2(GenX,APPEL_RECURSIF(ax02,F2x,tx02,F1x,F1y,bx02)                              \
                                                          ,GenY,APPEL_RECURSIF(ay02,F2y,ty02,F1x,F1y,by02)                              \
                                                           )                                                                            \
                                                      );                                                                                \
                                        /* Cas du segment [t2,t3] : transformation 3.                                                */ \
                                   CHOIX_D_UN_SEGMENT(SEGMENT_04                                                                        \
                                                     ,LIZ2(GenX,APPEL_RECURSIF(ax03,F2y,tx03,F1x,F1y,bx03)                              \
                                                          ,GenY,APPEL_RECURSIF(ay03,F2x,ty03,F1x,F1y,by03)                              \
                                                           )                                                                            \
                                                      );                                                                                \
                                        /* Cas du segment [t3,t4] : transformation 4.                                                */ \
                                   Defo                                                                                                 \
                                        Bblock                                                                                          \
                                        PRINT_ERREUR("le parametre 'T' est hors limite");                                               \
                                        CAL1(Prer3("(il vaut %f alors qu'il devrait etre dans [%f,%f])\n"                               \
                                                  ,t                                                                                    \
                                                  ,t1,t4                                                                                \
                                                   )                                                                                    \
                                             );                                                                                         \
                                        Eblock                                                                                          \
                                   EDef                                                                                                 \
                                   Eblock                                                                                               \
                              ECho                                                                                                      \
                                                                                                                                        \
                              RETU(DIVI(ValeurDeLaFonction,diviseur));                                                                  \
                                        /* On notera qu'a la date du 20220415123221, on ne peut ecrire ici :                         */ \
                                        /*                                                                                           */ \
                                        /*                  RETU(DIVI(ValeurDeLaFonction,diviseur));                                 */ \
                                        /*                                                                                           */ \
                                        /* car '$xcc/cpp$Z' n'aime pas cela, le fichier '$FLiStE_ArGuMeNtS.types' contenant les      */ \
                                        /* deux lignes :                                                                             */ \
                                        /*                                                                                           */ \
                                        /*                  diviseur double                                                          */ \
                                        /*                  diviseur return@ValeurDeLaFonction@/                                     */ \
                                        /*                                                                                           */ \
                                        /* Provisoirement, ce 'RETU(...)' avait ete remplace par :                                   */ \
                                        /*                                                                                           */ \
                                        /*                  EGAL(ValeurDeLaFonction,DIVI(ValeurDeLaFonction,diviseur));              */ \
                                        /*                  RETU(ValeurDeLaFonction);                                                */ \
                                        /*                                                                                           */ \
                                        /* mais le probleme a ete corrige par 'v $xcc/cpp$Z 20220416104813'...                       */ \
                              Eblock                                                                                                    \
                    EFonctionF

                                        /* On notera le 20220417100009 que ci-apres on ne peut pas ecrire :                          */
                                        /*                                                                                           */
                                        /*                  GENERE_fnx_fny(f2x                                                       */
                                        /*                                ,f1x,f1y                                                   */
                                        /*                                ,f0x,f0y                                                   */
                                        /*                                ,_____Generer,NePasGenerer                                 */
                                        /*                                ,ax00,tx00,bx00,ay00,ty00,by00                             */
                                        /*                                ,ax01,tx01,bx01,ay01,ty01,by01                             */
                                        /*                                ,ax02,tx02,bx02,ay02,ty02,by02                             */
                                        /*                                ,ax03,tx03,bx03,ay03,ty03,by03                             */
                                        /*                                 );                                                        */
                                        /*                                                                                           */
                                        /* et ce a cause de la definition de 'NomDeLaFonctionCourante' qui avec cette ecriture       */
                                        /* est defini vide. La solution est donc que la "," suivante soit sur la meme ligne, d'ou :  */
                                        /*                                                                                           */
                                        /*                  GENERE_fnx_fny(f2x,f1x,f1y,f0x,f0y                                       */
                                        /*                                ,_____Generer,NePasGenerer                                 */
                                        /*                                ,ax00,tx00,bx00,ay00,ty00,by00                             */
                                        /*                                ,ax01,tx01,bx01,ay01,ty01,by01                             */
                                        /*                                ,ax02,tx02,bx02,ay02,ty02,by02                             */
                                        /*                                ,ax03,tx03,bx03,ay03,ty03,by03                             */
                                        /*                                 );                                                        */
                                        /*                                                                                           */
                                        /* Ce probleme a ete resolu le 20220418102126 en modifiant 'v $xccp/PASSE_4.NomF$sed' en     */
                                        /* lui permettant donc de traiter des noms de fonctions suivis d'espaces jusqu'a la          */
                                        /* parenthese ouvrante introduisant la liste des arguments. Cela a donc permis de retablir   */
                                        /* les bonnes tabulations ci-apres...                                                        */

GENERE_fnx_fny(f2x
              ,f1x,f1y
              ,f0x,f0y
              ,_____Generer,NePasGenerer
              ,ax00,bx00,tx00,ay00,by00,ty00
              ,ax01,bx01,tx01,ay01,by01,ty01
              ,ax02,bx02,tx02,ay02,by02,ty02
              ,ax03,bx03,tx03,ay03,by03,ty03
               );
GENERE_fnx_fny(f2y
              ,f1x,f1y
              ,f0x,f0y
              ,NePasGenerer,_____Generer
              ,ax00,bx00,tx00,ay00,by00,ty00
              ,ax01,bx01,tx01,ay01,by01,ty01
              ,ax02,bx02,tx02,ay02,by02,ty02
              ,ax03,bx03,tx03,ay03,by03,ty03
               );
                                        /* Definition des fonctions {f2x(...),f2y(...)} de la suite de fonctions recursives          */
                                        /* a valeur dans [0,1]...                                                                    */

GENERE_fnx_fny(f3x
              ,f2x,f2y
              ,f1x,f1y
              ,_____Generer,NePasGenerer
              ,ax00,bx00,tx00,ay00,by00,ty00
              ,ax01,bx01,tx01,ay01,by01,ty01
              ,ax02,bx02,tx02,ay02,by02,ty02
              ,ax03,bx03,tx03,ay03,by03,ty03
               );
GENERE_fnx_fny(f3y
              ,f2x,f2y
              ,f1x,f1y
              ,NePasGenerer,_____Generer
              ,ax00,bx00,tx00,ay00,by00,ty00
              ,ax01,bx01,tx01,ay01,by01,ty01
              ,ax02,bx02,tx02,ay02,by02,ty02
              ,ax03,bx03,tx03,ay03,by03,ty03
               );
                                        /* Definition des fonctions {f3x(...),f3y(...)} de la suite de fonctions recursives          */
                                        /* a valeur dans [0,1]...                                                                    */

GENERE_fnx_fny(f4x
              ,f3x,f3y
              ,f2x,f2y
              ,_____Generer,NePasGenerer
              ,ax00,bx00,tx00,ay00,by00,ty00
              ,ax01,bx01,tx01,ay01,by01,ty01
              ,ax02,bx02,tx02,ay02,by02,ty02
              ,ax03,bx03,tx03,ay03,by03,ty03
               );
GENERE_fnx_fny(f4y
              ,f3x,f3y
              ,f2x,f2y
              ,NePasGenerer,_____Generer
              ,ax00,bx00,tx00,ay00,by00,ty00
              ,ax01,bx01,tx01,ay01,by01,ty01
              ,ax02,bx02,tx02,ay02,by02,ty02
              ,ax03,bx03,tx03,ay03,by03,ty03
               );
                                        /* Definition des fonctions {f4x(...),f4y(...)} de la suite de fonctions recursives          */
                                        /* a valeur dans [0,1]...                                                                    */

GENERE_fnx_fny(f5x
              ,f4x,f4y
              ,f3x,f3y
              ,_____Generer,NePasGenerer
              ,ax00,bx00,tx00,ay00,by00,ty00
              ,ax01,bx01,tx01,ay01,by01,ty01
              ,ax02,bx02,tx02,ay02,by02,ty02
              ,ax03,bx03,tx03,ay03,by03,ty03
               );
GENERE_fnx_fny(f5y
              ,f4x,f4y
              ,f3x,f3y
              ,NePasGenerer,_____Generer
              ,ax00,bx00,tx00,ay00,by00,ty00
              ,ax01,bx01,tx01,ay01,by01,ty01
              ,ax02,bx02,tx02,ay02,by02,ty02
              ,ax03,bx03,tx03,ay03,by03,ty03
               );
                                        /* Definition des fonctions {f5x(...),f5y(...)} de la suite de fonctions recursives          */
                                        /* a valeur dans [0,1]...                                                                    */

GENERE_fnx_fny(f6x
              ,f5x,f5y
              ,f4x,f4y
              ,_____Generer,NePasGenerer
              ,ax00,bx00,tx00,ay00,by00,ty00
              ,ax01,bx01,tx01,ay01,by01,ty01
              ,ax02,bx02,tx02,ay02,by02,ty02
              ,ax03,bx03,tx03,ay03,by03,ty03
               );
GENERE_fnx_fny(f6y
              ,f5x,f5y
              ,f4x,f4y
              ,NePasGenerer,_____Generer
              ,ax00,bx00,tx00,ay00,by00,ty00
              ,ax01,bx01,tx01,ay01,by01,ty01
              ,ax02,bx02,tx02,ay02,by02,ty02
              ,ax03,bx03,tx03,ay03,by03,ty03
               );
                                        /* Definition des fonctions {f6x(...),f6y(...)} de la suite de fonctions recursives          */
                                        /* a valeur dans [0,1]...                                                                    */

GENERE_fnx_fny(f7x
              ,f6x,f6y
              ,f5x,f5y
              ,_____Generer,NePasGenerer
              ,ax00,bx00,tx00,ay00,by00,ty00
              ,ax01,bx01,tx01,ay01,by01,ty01
              ,ax02,bx02,tx02,ay02,by02,ty02
              ,ax03,bx03,tx03,ay03,by03,ty03
               );
GENERE_fnx_fny(f7y
              ,f6x,f6y
              ,f5x,f5y
              ,NePasGenerer,_____Generer
              ,ax00,bx00,tx00,ay00,by00,ty00
              ,ax01,bx01,tx01,ay01,by01,ty01
              ,ax02,bx02,tx02,ay02,by02,ty02
              ,ax03,bx03,tx03,ay03,by03,ty03
               );
                                        /* Definition des fonctions {f7x(...),f7y(...)} de la suite de fonctions recursives          */
                                        /* a valeur dans [0,1]...                                                                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   A U T O - S I M I L A I R E   D E   H I L B E R T   D A N S   [ 0 , 1 ] x [ 0 , 1 ]  :       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Logical,INIT(editer_la_definition_du_carre,EDITER_LA_DEFINITION_DU_CARRE));
     DEFV(Logical,INIT(editer_la_definition_des_sous_carres,EDITER_LA_DEFINITION_DES_SOUS_CARRES));
                                        /* Faut-il editer la definition du carre ('VRAI') ou pas ('FAUX') ? L'edition de la          */
                                        /* definition des 4 sous-carres a ete introduite le 20220519183230...                        */

     DEFV(CHAR,INIC(POINTERc(f1x_____nom_paletteA),NOM_PIPE));
     DEFV(CHAR,INIT(POINTERc(f1x_____nom_de_la_substitution_de_definition),f1x_____NOM_DE_LA_SUBSTITUTION_DE_DEFINITION));
     DEFV(Int,INIT(f1x_____substitution_courante_de_definition,f1x_____SUBSTITUTION_COURANTE_DE_DEFINITION));
     DEFV(Logical,INIT(f1x_____lissage_de_la_substitution_de_definition,f1x_____LISSAGE_DE_LA_SUBSTITUTION_DE_DEFINITION));
     DEFV(Int,INIT(f1x_____nombre_de_passes_de_lissage_de_la_substitution_de_definition
                  ,f1x_____NOMBRE_DE_PASSES_DE_LISSAGE_DE_LA_SUBSTITUTION_DE_DEFINITION
                   )
          );
     DEFV(Int,INIT(f1x_____pas_de_lissage_de_la_substitution_de_definition,f1x_____PAS_DE_LISSAGE_DE_LA_SUBSTITUTION_DE_DEFINITION));
     DEFV(Float,INIT(f1x_____minimum_de_la_substitution_de_definition,f1x_____MINIMUM_DE_LA_SUBSTITUTION_DE_DEFINITION));
     DEFV(Float,INIT(f1x_____maximum_de_la_substitution_de_definition,f1x_____MAXIMUM_DE_LA_SUBSTITUTION_DE_DEFINITION));
                                        /* Definition de 'f1x(...)' via '$xiP' (inutilise par defaut...).                            */

     DEFV(CHAR,INIC(POINTERc(f1y_____nom_paletteA),NOM_PIPE));
     DEFV(CHAR,INIT(POINTERc(f1y_____nom_de_la_substitution_de_definition),f1y_____NOM_DE_LA_SUBSTITUTION_DE_DEFINITION));
     DEFV(Int,INIT(f1y_____substitution_courante_de_definition,f1y_____SUBSTITUTION_COURANTE_DE_DEFINITION));
     DEFV(Logical,INIT(f1y_____lissage_de_la_substitution_de_definition,f1y_____LISSAGE_DE_LA_SUBSTITUTION_DE_DEFINITION));
     DEFV(Int,INIT(f1y_____nombre_de_passes_de_lissage_de_la_substitution_de_definition
                  ,f1y_____NOMBRE_DE_PASSES_DE_LISSAGE_DE_LA_SUBSTITUTION_DE_DEFINITION
                   )
          );
     DEFV(Int,INIT(f1y_____pas_de_lissage_de_la_substitution_de_definition,f1y_____PAS_DE_LISSAGE_DE_LA_SUBSTITUTION_DE_DEFINITION));
     DEFV(Float,INIT(f1y_____minimum_de_la_substitution_de_definition,f1y_____MINIMUM_DE_LA_SUBSTITUTION_DE_DEFINITION));
     DEFV(Float,INIT(f1y_____maximum_de_la_substitution_de_definition,f1y_____MAXIMUM_DE_LA_SUBSTITUTION_DE_DEFINITION));
                                        /* Definition de 'f1y(...)' via '$xiP' (inutilise par defaut...).                            */

     DEFV(Logical,INIT(chainer_les_points,CHAINER_LES_POINTS));
                                        /* Faut-il chainer les points ('VRAI') ou pas ('FAUX') ?                                     */

     DEFV(Logical,INIT(calculer_une_seule_iteration,CALCULER_UNE_SEULE_ITERATION));
     DEFV(Int,INIT(numero_de_l_iteration_unique,NUMERO_DE_L_ITERATION_UNIQUE));
                                        /* Choix du mode "une" ou "plusieurs iterations"...                                          */

     DEFV(Logical,INIT(editer_iteration_01,EDITER_ITERATION_01));
     DEFV(Logical,INIT(editer_iteration_02,EDITER_ITERATION_02));
     DEFV(Logical,INIT(editer_iteration_03,EDITER_ITERATION_03));
     DEFV(Logical,INIT(editer_iteration_04,EDITER_ITERATION_04));
     DEFV(Logical,INIT(editer_iteration_05,EDITER_ITERATION_05));
     DEFV(Logical,INIT(editer_iteration_06,EDITER_ITERATION_06));
     DEFV(Logical,INIT(editer_iteration_07,EDITER_ITERATION_07));
                                        /* Choix des iterations a editer...                                                          */
                                        /*                                                                                           */
                                        /* Les iterations '06' et '07' ont ete introduites le 20220418180838...                      */

     DEFV(Float,INIT(pas_de_l_iteration_01,PAS_DE_L_ITERATION_01));
     DEFV(Float,INIT(pas_de_l_iteration_02,PAS_DE_L_ITERATION_02));
     DEFV(Float,INIT(pas_de_l_iteration_03,PAS_DE_L_ITERATION_03));
     DEFV(Float,INIT(pas_de_l_iteration_04,PAS_DE_L_ITERATION_04));
     DEFV(Float,INIT(pas_de_l_iteration_05,PAS_DE_L_ITERATION_05));
     DEFV(Float,INIT(pas_de_l_iteration_06,PAS_DE_L_ITERATION_06));
     DEFV(Float,INIT(pas_de_l_iteration_07,PAS_DE_L_ITERATION_07));
                                        /* Pas d'edition des iterations...                                                           */
                                        /*                                                                                           */
                                        /* Les iterations '06' et '07' ont ete introduites le 20220418180838...                      */

     DEFV(Float,INIT(ponderation_de_T,PONDERATION_DE_T));
     DEFV(Float,INIT(ponderation_de_X,PONDERATION_DE_X));
     DEFV(Float,INIT(ponderation_de_Y,PONDERATION_DE_Y));
                                        /* Ponderations respectives de 'X' et 'Y'.                                                   */

#include  xci/valeurs.03.I"
     /*..............................................................................................................................*/
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("listes_quelconques=""lq=",remplacer_les_listes_de_substitution_par_des_listes_quelconques);
                         GET_ARGUMENT_N("listes_substitution=""ls=",remplacer_les_listes_de_substitution_par_des_listes_quelconques);
                                        /* Arguments introduits le 20220513105601...                                                 */
                         GET_ARGUMENT_L("interpoler_listes_quelconques=""ilq=",interpoler_les_listes_quelconques);
                                        /* Argument introduit le 20220513142523...                                                   */

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

                         PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01;

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

                         GET_ARGUMENT_C("f1x_palette=""f1x_pA=""f1x_p=",f1x_____nom_paletteA);
                         GET_ARGUMENT_L("f1x_lissage=",f1x_____lissage_de_la_substitution_de_definition);
                         GET_ARGUMENT_I("f1x_passes=",f1x_____nombre_de_passes_de_lissage_de_la_substitution_de_definition);
                         GET_ARGUMENT_I("f1x_pl=""f1x_pas_lissage=",f1x_____pas_de_lissage_de_la_substitution_de_definition);
                         GET_ARGUMENT_C("f1x_substitution=""f1x_s=",f1x_____nom_de_la_substitution_de_definition);
                         GET_ARGUMENT_F("f1x_minimum=""f1x_m=",f1x_____minimum_de_la_substitution_de_definition);
                         GET_ARGUMENT_F("f1x_maximum=""f1x_M=",f1x_____maximum_de_la_substitution_de_definition);
                         GET_ARGUMENT_L("f1x_interpoler=""f1x_i=",f1x_____interpoler_la_substitution_de_definition);
                         GET_ARGUMENT_L("f1x_interpoler_lineairement=""f1x_il="
                                       ,f1x_____interpoler_la_substitution_de_definition__lineairement
                                        );
                         GET_ARGUMENT_N("f1x_interpoler_cubiquement=""f1x_ic="
                                       ,f1x_____interpoler_la_substitution_de_definition__lineairement
                                        );
                         GET_ARGUMENT_F("f1x_derivee_origine=""f1x_do="
                                       ,f1x_____interpoler_la_substitution_de_definition__cubiquement__derivee_origine__
                                        );
                         GET_ARGUMENT_F("f1x_derivee_extremite=""f1x_de="
                                       ,f1x_____interpoler_la_substitution_de_definition__cubiquement__derivee_extremite
                                        );
                                        /* Les arguments d'interpolation ont ete introduits le 20220423111102...                     */

                         GET_ARGUMENT_C("f1y_palette=""f1y_pA=""f1y_p=",f1y_____nom_paletteA);
                         GET_ARGUMENT_L("f1y_lissage=",f1y_____lissage_de_la_substitution_de_definition);
                         GET_ARGUMENT_I("f1y_passes=",f1y_____nombre_de_passes_de_lissage_de_la_substitution_de_definition);
                         GET_ARGUMENT_I("f1y_pl=""f1y_pas_lissage=",f1y_____pas_de_lissage_de_la_substitution_de_definition);
                         GET_ARGUMENT_C("f1y_substitution=""f1y_s=",f1y_____nom_de_la_substitution_de_definition);
                         GET_ARGUMENT_F("f1y_minimum=""f1y_m=",f1y_____minimum_de_la_substitution_de_definition);
                         GET_ARGUMENT_F("f1y_maximum=""f1y_M=",f1y_____maximum_de_la_substitution_de_definition);
                         GET_ARGUMENT_L("f1y_interpoler=""f1y_i=",f1y_____interpoler_la_substitution_de_definition);
                         GET_ARGUMENT_L("f1y_interpoler_lineairement=""f1y_il="
                                       ,f1y_____interpoler_la_substitution_de_definition__lineairement
                                        );
                         GET_ARGUMENT_N("f1y_interpoler_cubiquement=""f1y_ic="
                                       ,f1y_____interpoler_la_substitution_de_definition__lineairement
                                        );
                         GET_ARGUMENT_F("f1y_derivee_origine=""f1y_do="
                                       ,f1y_____interpoler_la_substitution_de_definition__cubiquement__derivee_origine__
                                        );
                         GET_ARGUMENT_F("f1y_derivee_extremite=""f1y_de="
                                       ,f1y_____interpoler_la_substitution_de_definition__cubiquement__derivee_extremite
                                        );
                                        /* Les arguments d'interpolation ont ete introduits le 20220423111102...                     */

                         GET_ARGUMENT_L("definition_carre=""dc=",editer_la_definition_du_carre);
                         GET_ARGUMENT_L("definition_sous_carres=""dsc=",editer_la_definition_des_sous_carres);
                                        /* Argument introduit le 20220519183230...                                                   */

                         GET_ARGUMENT_L("chainer_points=""cp=",chainer_les_points);

                         GET_ARGUMENT_F("min_t=""mt=",minimum_t);
                         GET_ARGUMENT_F("max_t=""Mt=",maximum_t);

                         GET_ARGUMENT_F("ax00=",ax00);
                                        /* Changer "ax00=+1" en "ax00=+0.5" est interessant (conserve la continuite et cree des      */
                                        /* zones vides...).                                                                          */
                         GET_ARGUMENT_F("bx00=",bx00);
                         GET_ARGUMENT_F("tx00=",tx00);
                         GET_ARGUMENT_F("ay00=",ay00);
                         GET_ARGUMENT_F("by00=",by00);
                         GET_ARGUMENT_F("ty00=",ty00);

                         GET_ARGUMENT_F("ax01=",ax01);
                         GET_ARGUMENT_F("bx01=",bx01);
                         GET_ARGUMENT_F("tx01=",tx01);
                         GET_ARGUMENT_F("ay01=",ay01);
                         GET_ARGUMENT_F("by01=",by01);
                         GET_ARGUMENT_F("ty01=",ty01);

                         GET_ARGUMENT_F("ax02=",ax02);
                         GET_ARGUMENT_F("bx02=",bx02);
                         GET_ARGUMENT_F("tx02=",tx02);
                         GET_ARGUMENT_F("ay02=",ay02);
                         GET_ARGUMENT_F("by02=",by02);
                         GET_ARGUMENT_F("ty02=",ty02);

                         GET_ARGUMENT_F("ax03=",ax03);
                                        /* Changer "ax03=+1" en "ax03=+0.5" est interessant (conserve la continuite et cree des      */
                                        /* zones vides...).                                                                          */
                         GET_ARGUMENT_F("bx03=",bx03);
                         GET_ARGUMENT_F("tx03=",tx03);
                         GET_ARGUMENT_F("ay03=",ay03);
                         GET_ARGUMENT_F("by03=",by03);
                         GET_ARGUMENT_F("ty03=",ty03);

                         GET_ARGUMENT_F("diviseur=""d=",diviseur);

                         GET_ARGUMENT_L("une_iteration=""ui=",calculer_une_seule_iteration);
                         GET_ARGUMENT_I("numero_iteration=""ni=",numero_de_l_iteration_unique);
                                        /* Argument introduit le 20220419131545...                                                   */

                         GET_ARGUMENT_L("iteration_01=""i01=",editer_iteration_01);
                         GET_ARGUMENT_L("iteration_02=""i02=",editer_iteration_02);
                         GET_ARGUMENT_L("iteration_03=""i03=",editer_iteration_03);
                         GET_ARGUMENT_L("iteration_04=""i04=",editer_iteration_04);
                         GET_ARGUMENT_L("iteration_05=""i05=",editer_iteration_05);
                         GET_ARGUMENT_L("iteration_06=""i06=",editer_iteration_06);
                         GET_ARGUMENT_L("iteration_07=""i07=",editer_iteration_07);
                                        /* Les arguments '06' et '07' ont ete introduits le 20220418180838...                        */

                         GET_ARGUMENT_F("pas_01=""p01=",pas_de_l_iteration_01);
                         GET_ARGUMENT_F("pas_02=""p02=",pas_de_l_iteration_02);
                         GET_ARGUMENT_F("pas_03=""p03=",pas_de_l_iteration_03);
                         GET_ARGUMENT_F("pas_04=""p04=",pas_de_l_iteration_04);
                         GET_ARGUMENT_F("pas_05=""p05=",pas_de_l_iteration_05);
                         GET_ARGUMENT_F("pas_06=""p06=",pas_de_l_iteration_06);
                         GET_ARGUMENT_F("pas_07=""p07=",pas_de_l_iteration_07);
                                        /* Les arguments '06' et '07' ont ete introduits le 20220418180838...                        */

                         GET_ARGUMENT_F("Pt=""PT=",ponderation_de_T);
                         GET_ARGUMENT_F("Px=""PX=",ponderation_de_X);
                         GET_ARGUMENT_F("Py=""PY=",ponderation_de_Y);

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;
                         )
                    );

     MISE_EN_PLACE_D_UNE_LISTE_DE_SUBSTITUTION(f1x_____nom_paletteA
                                              ,f1x_____nom_de_la_substitution_de_definition
                                              ,f1x_____substitution_courante_de_definition
                                              ,f1x_____liste_flottante_substitution_de_definition
                                              ,f1x_____lissage_de_la_substitution_de_definition
                                              ,f1x_____nombre_de_passes_de_lissage_de_la_substitution_de_definition
                                              ,f1x_____pas_de_lissage_de_la_substitution_de_definition
                                              ,f1x_____minimum_de_la_substitution_de_definition
                                              ,f1x_____maximum_de_la_substitution_de_definition
                                              ,f1x_____generer_avec_une_liste_de_substitution
                                               );

     MISE_EN_PLACE_D_UNE_LISTE_DE_SUBSTITUTION(f1y_____nom_paletteA
                                              ,f1y_____nom_de_la_substitution_de_definition
                                              ,f1y_____substitution_courante_de_definition
                                              ,f1y_____liste_flottante_substitution_de_definition
                                              ,f1y_____lissage_de_la_substitution_de_definition
                                              ,f1y_____nombre_de_passes_de_lissage_de_la_substitution_de_definition
                                              ,f1y_____pas_de_lissage_de_la_substitution_de_definition
                                              ,f1y_____minimum_de_la_substitution_de_definition
                                              ,f1y_____maximum_de_la_substitution_de_definition
                                              ,f1y_____generer_avec_une_liste_de_substitution
                                               );

     Test(IL_FAUT(calculer_une_seule_iteration))
          Bblock
          EGAL(editer_iteration_01,FAUX);
          EGAL(editer_iteration_02,FAUX);
          EGAL(editer_iteration_03,FAUX);
          EGAL(editer_iteration_04,FAUX);
          EGAL(editer_iteration_05,FAUX);
          EGAL(editer_iteration_06,FAUX);
          EGAL(editer_iteration_07,FAUX);

          Choi(numero_de_l_iteration_unique)
               Bblock
               PARAMETRAGE_DE_L_ITERATION_UNIQUE(ITERATION_01,editer_iteration_01,pas_de_l_iteration_01);
               PARAMETRAGE_DE_L_ITERATION_UNIQUE(ITERATION_02,editer_iteration_02,pas_de_l_iteration_02);
               PARAMETRAGE_DE_L_ITERATION_UNIQUE(ITERATION_03,editer_iteration_03,pas_de_l_iteration_03);
               PARAMETRAGE_DE_L_ITERATION_UNIQUE(ITERATION_04,editer_iteration_04,pas_de_l_iteration_04);
               PARAMETRAGE_DE_L_ITERATION_UNIQUE(ITERATION_05,editer_iteration_05,pas_de_l_iteration_05);
               PARAMETRAGE_DE_L_ITERATION_UNIQUE(ITERATION_06,editer_iteration_06,pas_de_l_iteration_06);
               PARAMETRAGE_DE_L_ITERATION_UNIQUE(ITERATION_07,editer_iteration_07,pas_de_l_iteration_07);

               Defo
                    Bblock
                    PRINT_ERREUR("le numero d'iteration demande n'existe pas");
                    CAL1(Prer2("(l'iteration %d etait demandee et l'iteration %d est forcee)\n"
                              ,numero_de_l_iteration_unique
                              ,ITERATION_05
                               )
                         );

                    EGAL(editer_iteration_05,VRAI);
                    Eblock
               EDef
               Eblock
          ECho
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     begin_nouveau_block
          Bblock
          EDITION_EVENTUELLE_D_UNE_ITERATION(editer_iteration_01,f1x,f1y,f0x,f0y,pas_de_l_iteration_01);
          EDITION_EVENTUELLE_D_UNE_ITERATION(editer_iteration_02,f2x,f2y,f1x,f1y,pas_de_l_iteration_02);
          EDITION_EVENTUELLE_D_UNE_ITERATION(editer_iteration_03,f3x,f3y,f2x,f2y,pas_de_l_iteration_03);
          EDITION_EVENTUELLE_D_UNE_ITERATION(editer_iteration_04,f4x,f4y,f3x,f3y,pas_de_l_iteration_04);
          EDITION_EVENTUELLE_D_UNE_ITERATION(editer_iteration_05,f5x,f5y,f4x,f4y,pas_de_l_iteration_05);
          EDITION_EVENTUELLE_D_UNE_ITERATION(editer_iteration_06,f6x,f6y,f5x,f5y,pas_de_l_iteration_06);
          EDITION_EVENTUELLE_D_UNE_ITERATION(editer_iteration_07,f7x,f7y,f6x,f6y,pas_de_l_iteration_07);

          Test(IL_FAUT(editer_la_definition_du_carre))
               Bblock
               Test(IL_FAUT(chainer_les_points))
                    Bblock
#include  xci/valeurs_Hilbert2D.I"
                                        /* Afin d'etre compatible avec 'v $xiirv/.PEAN.21.$U', il faut que le carre soit trace apres */
                                        /* la trajectoire de 'T' et ce afin que ce carre semble etre derriere cette trajectoire...   */
                    Eblock
               ATes
                    Bblock
                    PRINT_ATTENTION("lors de l'edition de points isoles, la definition du carre ne peut etre editee");
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     end_nouveau_block

     RETU_Commande;
     Eblock
ECommande



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