/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N S T R U C T I O N   D E   L ' E P O N G E   D E   M E N G E R                                                        */
/*        ( E T   D U   T A P I S   D E   S I E R P I N S K I )  :                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrf/EpongeDeMenger.01$K' :                                                                                     */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20140909125510).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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
#include  image_image_DI_ALBUM_EXT

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

#define   TRACER_LES_DIFFERENTES_OPERATIONS                                                                                             \
                    FAUX                                                                                                                \
                                        /* Faut-il tracer les differentes operations ('VRAI') ou pas ('FAUX') ? Ceci a ete introduit */ \
                                        /* le 20240618150759 afin de mieux comprendre comment tout cela fonctionne reellement...     */

#define   PARCOURS_OPTIMISE_DE_LA_HIERARCHIE_DES_CUBES                                                                                  \
                    VRAI                                                                                                                \
                                        /* A cause de l'anomalie 'v $xrf/EpongeDeMenger.01$I 20171231142417', cette option fut       */ \
                                        /* introduite le 20180101085659 au cas ou la methode 'FAUX' aurait des consequences sur      */ \
                                        /* les calculs. Cela permettrait donc de regenerer des images faites entre le 20171215150111 */ \
                                        /* et le 20171231142417...                                                                   */ \
                                        /*                                                                                           */ \
                                        /* Des tests faits apres l'introduction de cette option semblent montrer, comme je m'y       */ \
                                        /* attendais, que les resultats sont les memes qu'il y ait ou pas optimisation...            */ \
                                        /* Ainsi, aux environs du 20180102094205 sur '$LACT1A', l'image 'v $xiirf/MENG.O1.4.21'      */ \
                                        /* a ete recalculee. Les durees (via 'Dhms') ont ete respectivement de 00:00:18 et de        */ \
                                        /* 00:00:02 SANS et AVEC optimisation respectivement. Les deux images ainsi recalculees      */ \
                                        /* etaient strictement identiques...                                                         */

#define   EDITER_LES_CHOIX_DE_SUBDIVISION_SUPPRESSION                                                                                   \
                    FAUX
#define   EDITER_LES_CHOIX_DE_SUBDIVISION_SUPPRESSION__VERSION_SIMPLIFIEE                                                               \
                    VRAI
#define   EDITER_LES_CHOIX_DE_SUBDIVISION_SUPPRESSION__VERSION_SIMPLIFIEE_AVEC_PARENTHESAGE                                             \
                    FAUX
                                        /* Introduit le 20240917115931 afin de pouvoir editer les choix de subdivision/suppression   */
                                        /* dans tous les cas...                                                                      */
                                        /*                                                                                           */
                                        /* Je note le 20240918100540 que le fichier generable par cette edition peut etre reinjecte  */
                                        /* sous la forme "LISTE_VALEURS_ALEATOIRES_PRE_CALCULEES=" ce qui redonne la meme structure. */
                                        /*                                                                                           */
                                        /* La version simplifiee a ete introduite le 20240918170538...                               */
                                        /*                                                                                           */
                                        /* La version simplifiee et parenthesee a ete introduite le 20240921112252...                */

#define   UTILISER_UN_GENERATEUR_ALEATOIRE_PRE_CALCULE                                                                                  \
                    FAUX
#define   EDITER_LES_NOMBRES_ALEATOIRES                                                                                                 \
                    FAUX
#define   EDITER_LE_NOMBRE_DE_TIRAGES_ALEATOIRES                                                                                        \
                    FAUX
#define   UTILISER_UN_ESPACE_DE_PARAMETRAGE_TRIDIMENSIONNEL                                                                             \
                    VRAI
#define   UTILISER_LE_GENERATEUR_A_PERIODICITE_PARAMETRABLE                                                                             \
                    FAUX
#define   GRAINE                                                                                                                        \
                    PARE(1789)

#define   A_SEUIL_D_INDECISION_ENTRE_FAUX_ET_VRAI                                                                                       \
                    FZERO
#define   B_SEUIL_D_INDECISION_ENTRE_FAUX_ET_VRAI                                                                                       \
                    FDU
                                        /* Definition du generateur aleatoire introduit le 20180107174041...                         */
                                        /*                                                                                           */
                                        /* On notera le 20180108111352 que plus le seuil est petit (par exemple "seuil=0.2"), plus   */
                                        /* il y a de matiere (et donc moins il y a de trous...).                                     */
                                        /*                                                                                           */
                                        /* Le 20240617131239 a ete introduite la possibilite d'un generateur "pre-calcule"...        */
                                        /*                                                                                           */
                                        /* Le 20240619093425 a ete introduite la possibilite d'editer le nombre de tirages           */
                                        /* aleatoires effectues...                                                                   */
                                        /*                                                                                           */
                                        /* Le 20240706095828 a ete introduite la possibilite d'editer les nombres aleatoires         */
                                        /* calcules ou recuperes dans un fichier...                                                  */
                                        /*                                                                                           */
                                        /* Le 20240926150024, le seuil d'indecision est devenu un polynome du premier degre          */
                                        /* fonction de 'profondeur_courante' renormalisee (P) :                                      */
                                        /*                                                                                           */
                                        /*                             1      0                                                      */
                                        /*                  seuil = A.P  + B.P                      P E [0,1]                        */
                                        /*                                                                                           */
                                        /* tel que par defaut (A>=0) au debut du processus (les grands cubes), le seuil est faible   */
                                        /* et donc on elimine peu de cubes. Alors qu'a la fin (les petits cubes), le seuil est       */
                                        /* eleve et on elimine donc plus de cubes. En choisissant 'A' negatif, ce fonctionnement     */
                                        /* est inverse...                                                                            */
                                        /*                                                                                           */
                                        /* On notera le 20240927100709 que :                                                         */
                                        /*                                                                                           */
                                        /*                  A=0                 (valeur par defaut)                                  */
                                        /*                  B<0                 (par exemple -0.1)                                   */
                                        /*                                                                                           */
                                        /* provoque l'absence de toute subdivision...                                                */
                                        /*                                                                                           */
                                        /* Le 20240927111114, en utilisant par exemple :                                             */
                                        /*                                                                                           */
                                        /*                  A=-1.001                                                                 */
                                        /*                  B=+1.000                                                                 */
                                        /*                                                                                           */
                                        /* tous les gros cubes seront conserves et les petits cubes tres subdivises. On notera       */
                                        /* les valeurs suivantes :                                                                   */
                                        /*                                                                                           */
                                        /*                  pc   ni   P=pc/ni             seuil               nombre d'occurences    */
                                        /*                                                                                           */
                                        /*                  5    5    1.000000            -0.001000           27                     */
                                        /*                  4    5    0.800000            +0.199200           729                    */
                                        /*                  3    5    0.600000            +0.399400           15714                  */
                                        /*                  2    5    0.400000            +0.599600           251046                 */
                                        /*                  1    5    0.200000            +0.799800           2693628                */
                                        /*                                                                                           */
                                        /* 'pc' et 'ni' designant respectivement 'profondeur_courante' et 'nombre_d_iterations'.     */

#define   INVERSER_LES_CONVENTIONS                                                                                                      \
                    FAUX                                                                                                                \
                                        /* Faut-il inverser les conventions ('VRAI') c'est-a-dire permuter 'F' et 'T' ou pas         */ \
                                        /* ('FAUX') ? c'est-a-dire conserver 'F' et 'T'. Ceci fut introduit le 20240615073518,       */ \
                                        /* la valeur par defaut garantissant la compatibilite anterieure...                          */
#define   LISTE_DES_CUBES_A_SUBDIVISER                                                                                                  \
                    "TTT TFT TTT  TFT FFF TFT  TTT TFT TTT"                                                                             \
                                        /* Liste des cubes a subdiviser qui correspond a l'Eponge de Menger standard. Cette liste    */ \
                                        /* correspond aux sections suivantes (avec un rapport d'homothetie egal a 3) :               */ \
                                        /*                                                                                           */ \
                                        /*                            Z=0       Z=1       Z=2                                        */ \
                                        /*                                                                                           */ \
                                        /*                  Y=2       ***       *-*       ***                                        */ \
                                        /*                  Y=1       *-*       ---       *-*                                        */ \
                                        /*                  Y=0       ***       *-*       ***                                        */ \
                                        /*                                                                                           */ \
                                        /*                            <---  X=0 X=1 X=2  --->                                        */ \
                                        /*                                                                                           */ \
                                        /* ou "*" indique un cube subdivisible (introduit le 20171216070955).                        */ \
                                        /*                                                                                           */ \
                                        /* Avec les notations a utiliser dans 'GET_ARGUMENT_C("liste_cubes="...', on a donc :        */ \
                                        /*                                                                                           */ \
                                        /*                               Eponge  de Menger                                           */ \
                                        /*                             _____________________                                         */ \
                                        /*                            /                     \                                        */ \
                                        /*                                                                                           */ \
                                        /*                            TTT       TFT       TTT                                        */ \
                                        /*                            TFT       FFF       TFT                                        */ \
                                        /*                            TTT       TFT       TTT                                        */ \
                                        /*                                                                                           */ \
                                        /*                            \_/                                                            */ \
                                        /*                                                                                           */ \
                                        /*                    Tapis de Sierpinski                                                    */ \
                                        /*                                                                                           */ \
                                        /* soit donc la chaine :                                                                     */ \
                                        /*                                                                                           */ \
                                        /*                                         Eponge  de Menger                                 */ \
                                        /*                             _________________________________________                     */ \
                                        /*                            /                                         \                    */ \
                                        /*                            TTT TFT TTT     TFT FFF TFT     TTT TFT TTT                    */ \
                                        /*                            \_________/                                                    */ \
                                        /*                                                                                           */ \
                                        /*                        Tapis de Sierpinski                                                */ \
                                        /*                                                                                           */ \
                                        /* ou encore apres elimination des espaces :                                                 */ \
                                        /*                                                                                           */ \
                                        /*                                 Eponge  de Menger                                         */ \
                                        /*                             _________________________                                     */ \
                                        /*                            /                         \                                    */ \
                                        /*                            TTTTFTTTTTFTFFFTFTTTTTFTTTT                                    */ \
                                        /*                            \_______/                                                      */ \
                                        /*                                                                                           */ \
                                        /*                       Tapis de Sierpinski                                                 */ \
                                        /*                                                                                           */ \
                                        /* Ainsi, pour le tapis de Sierpinski seul le debut de la chaine est utile, mais malgre      */ \
                                        /* tout la suite doit etre presente (surtout s'il y a plus d'une iteration puisque la chaine */ \
                                        /* est alors reexploitee depuis son debut...).                                               */ \
                                        /*                                                                                           */ \
                                        /* Les cubes marques 'V/T' (pour 'VRAI/TRUE') seront subdivises, alors que ceux qui sont     */ \
                                        /* marques 'F' (pour 'FAUX/FALSE') disparaitront (il y a aura a leur place un trou           */ \
                                        /* cubique...).                                                                              */ \
                                        /*                                                                                           */ \
                                        /*                                                                                           */ \
                                        /* Voici le 20171228092010 un exemple ('v $xiirf/MENG.S1.5.21') moins symetrique qui permet  */ \
                                        /* de souligner le fait que l'axe 'OY' monte evidemment :                                    */ \
                                        /*                                                                                           */ \
                                        /*                            FFTFTTTTTFFFTFTFFFTTTFTTFFT                                    */ \
                                        /*                            ===                                                            */ \
                                        /*                                                                                           */ \
                                        /*                                                                                           */ \
                                        /*                            Z=0       Z=1       Z=2                                        */ \
                                        /*                                                                                           */ \
                                        /*                  Y=2       TTT       FFF       FFT                                        */ \
                                        /*                  Y=1       FTT       TFT       FTT                                        */ \
                                        /*                  Y=0       FFT       FFF       TTT                                        */ \
                                        /*                            ===                                                            */ \
                                        /*                                                                                           */ \
                                        /*                            <---  X=0 X=1 X=2  --->                                        */ \
                                        /*                                                                                           */ \
                                        /*                                                                                           */ \
                                        /* Je note le 20240408134025 que le tapis de Sierpinski "pur" doit etre defini par :         */ \
                                        /*                                                                                           */ \
                                        /*                  TTT TFT TTT  TTT TFT TTT  TTT TFT TTT                                    */ \
                                        /*                               ------------------------                                    */ \
                                        /*                                          ||                                               */ \
                                        /*                         ----------------- |                                               */ \
                                        /*                        | -----------------                                                */ \
                                        /*                        ||                                                                 */ \
                                        /*             ------------------------                                                      */ \
                                        /* Le role de "TTT TFT TTT  TTT TFT TTT" s'est vu a la mise au point de '$xiirf/SIER.81..4'  */ \
                                        /* ('v $xiirf/.SIER.81.1.$U 20240408134427' a ce propos...).                                 */

#define   GENERER_L_EPONGE_DE_MENGER                                                                                                    \
                    VRAI                                                                                                                \
                                        /* Faut-il generer l'eponge de Menger ('VRAI') ou bien le tapis de Sierpinski ('FAUX') ?     */ \
                                        /* Ceci fut introduit le 20140910084547...                                                   */
#define   GENERER_L_ENSEMBLE_TRIADIQUE_DE_CANTOR                                                                                        \
                    FAUX                                                                                                                \
                                        /* Lorsque 'IL_NE_FAUT_PAS(generer_l_eponge_de_menger)' faut-il generer l'ensemble triadique */ \
                                        /* de Cantor ('VRAI') ou bien le tapis de Sierpinski ('FAUX') ?                              */ \
                                        /* Ceci fut introduit le 20191204115436...                                                   */

#define   RAPPORT_D_HOMOTHETIE                                                                                                          \
                    TROIS
#define   RAPPORT_D_HOMOTHETIE_X                                                                                                        \
                    RAPPORT_D_HOMOTHETIE
#define   RAPPORT_D_HOMOTHETIE_Y                                                                                                        \
                    RAPPORT_D_HOMOTHETIE
#define   RAPPORT_D_HOMOTHETIE_Z                                                                                                        \
                    RAPPORT_D_HOMOTHETIE
                                        /* Rapport permettant de passer d'une generation de cube a la suivante. Ce rapport est       */
                                        /* devenu un argument le 20171106102312 alors qu'il etait invariant avant cette date...      */
                                        /*                                                                                           */
                                        /* On notera le 20171106103930 que les cubes ne sont bien centres les uns par rapport aux    */
                                        /* autres lors du decoupage recursif que lorsque 'rapport_d_homothetie' est IMPAIR...        */

#define   GENERALISER_LES_CUBES                                                                                                         \
                    FAUX
#define   GENERALISER_LES_CUBES_____FAIRE_UN_IZLE                                                                                       \
                    VRAI
                                        /* Afin de pouvoir generaliser la notion de cube (introduit le 20171117162625).              */

#define   EDITER_LA_HIERARCHIE_DES_CUBES                                                                                                \
                    FAUX                                                                                                                \
                                        /* Faut-il editer la hierarchie des differents cubes ('VRAI') ou pas ('FAUX') ?              */

#define   NOMBRE_D_ITERATIONS                                                                                                           \
                    QUATRE                                                                                                              \
                                        /* Nombre d'iterations.                                                                      */

#define   UTILISER_LA_SUPER_ECHELLE                                                                                                     \
                    VRAI                                                                                                                \
                                        /* Faut-il utiliser la super-echelle ('VRAI') ou pas ('FAUX') ?                              */

#define   X_ORIGINE_DU_CUBE                                                                                                             \
                    FZERO
#define   Y_ORIGINE_DU_CUBE                                                                                                             \
                    FZERO
#define   Z_ORIGINE_DU_CUBE                                                                                                             \
                    FZERO

#define   COTE_DU_CUBE                                                                                                                  \
                    FU
#define   COTE_DU_CUBE_X                                                                                                                \
                    COTE_DU_CUBE
#define   COTE_DU_CUBE_Y                                                                                                                \
                    COTE_DU_CUBE
#define   COTE_DU_CUBE_Z                                                                                                                \
                    COTE_DU_CUBE

#define   OPTIMISER_LE_COTE_DU_CUBE                                                                                                     \
                    FAUX
#define   EDITER_LE_COTE_DU_CUBE                                                                                                        \
                    FAUX
                                        /* Definition du cube. Cela fut complete le 20171113100122 avec l'optimisation et l'edition. */

#define   NIVEAU_DU_FOND                                                                                                                \
                    NOIR
#define   NIVEAU_DE_MARQUAGE_DE_L_EPONGE                                                                                                \
                    BLANC
#define   NIVEAU_DE_MARQUAGE_DU_COMPLEMENT_DE_L_EPONGE                                                                                  \
                    NOIR
                                        /* Niveaux de marquage de l'eponge et de son complement...                                   */

#define   MARQUER_LE_BORD_X_DE_L_EPONGE                                                                                                 \
                    FAUX
#define   MARQUER_LE_BORD_Y_DE_L_EPONGE                                                                                                 \
                    FAUX
#define   MARQUER_LE_BORD_Z_DE_L_EPONGE                                                                                                 \
                    FAUX
#define   NIVEAU_DE_MARQUAGE_DU_BORD_DE_L_EPONGE                                                                                        \
                    NIVEAU_DE_MARQUAGE_DE_L_EPONGE
                                        /* Le marquage du bord a ete introduit le 20150326151602 et rendu conditionnel le            */
                                        /* 20150326152845...                                                                         */
                                        /*                                                                                           */
                                        /* On rappelle le 20171106111532 qu'on appelle "bord" tout ce qui est autour et a            */
                                        /* l'exterieur de l'eponge...                                                                */
                                        /*                                                                                           */
                                        /* On notera ls possibilite d'activer selectivement le bord de l'eponge sur les trois        */
                                        /* axes. Cela est rendu necessaire pour les utilisations bidimensionnelles (cas du           */
                                        /* tapis de Sierpinski) pour lesquelles il n'y a qu'une seule couche dont le 'Z' est         */
                                        /* minimal et qui doit etre evidemment trace malgre cela (dans ce cas donc, on trace         */
                                        /* le bord uniquement parallelement aux axes 'X' et 'Y'...).                                 */

#define   COMPATIBILITE_20240617                                                                                                        \
                    VRAI                                                                                                                \
                                        /* Permet de proceder a des calculs compatibles a ceux qui furent effectues anterieurement   */ \
                                        /* au 20240617093456.                                                                        */ \
                                        /*                                                                                           */ \
                                        /* Le 20240618075356, a cause des images du type 'v $xiirf/SIER.61.2' ou les bords sont      */ \
                                        /* marques, je suis passe par defaut au mode compatibilite...                                */
#define   COMPATIBILITE_20240917                                                                                                        \
                    FAUX                                                                                                                \
                                        /* Permet de proceder a des calculs compatibles a ceux qui furent effectues anterieurement   */ \
                                        /* au 20240917095226.                                                                        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   STOPPER_LA_SUBDIVISION_D_UN_CUBE                                                                                              \
                    ADD4(FAUX,VRAI,INDECIS,UN)                                                                                          \
                                        /* Introduit le 20180116101348 pour forcer le marquage d'un cube "non terminal". Cette       */
                                        /* valeur doit evidemment etre differente de {FAUX,VRAI,INDECIS} d'ou cette definition       */
                                        /* un peu "tordu" destinee a etre perenne...                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   R E C U R S I V E   D E   L ' E P O N G E   D E   M E N G E R  :                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* Les variables suivantes ne peuvent etre localisees dans {BCommande,ECommande} car, en     */
                                        /* effet elles sont utilisees dans 'v $xrf/EpongeDeMenger.01$I rapport_d_homothetie'...      */

DEFV(Positive,INIT(compteur_de_trace_1,ZERO));
DEFV(Positive,INIT(compteur_de_trace_2,ZERO));
DEFV(Positive,INIT(compteur_de_trace_3,ZERO));
DEFV(Logical,INIT(tracer_les_differentes_operations,TRACER_LES_DIFFERENTES_OPERATIONS));
                                        /* Faut-il tracer les differentes operations ('VRAI') ou pas ('FAUX') ? Ceci a ete introduit */
                                        /* le 20240618150759 afin de mieux comprendre comment cela fonctionne reellement...          */
                                        /*                                                                                           */
                                        /* Le compteur 'compteur_de_trace_3' a ete introduit le 20240917123058...                    */

DEFV(Logical,INIT(parcours_optimise_de_la_hierarchie_des_cubes,PARCOURS_OPTIMISE_DE_LA_HIERARCHIE_DES_CUBES));
                                        /* A cause de l'anomalie 'v $xrf/EpongeDeMenger.01$I 20171231142417', cette option fut       */
                                        /* introduite le 20180101085659 au cas ou la methode 'FAUX' aurait des consequences sur      */
                                        /* les calculs. Cela permettrait donc de regenerer des images faites entre le 20171215150111 */
                                        /* et le 20171231142417...                                                                   */
                                        /*                                                                                           */
                                        /* Des tests faits apres l'introduction de cette option semblent montrer, comme je m'y       */
                                        /* attendais, que les resultats sont les memes qu'il y ait ou pas optimisation...            */
                                        /* Ainsi, aux environs du 20180102094205 sur '$LACT1A', l'image 'v $xiirf/MENG.O1.4.21'      */
                                        /* a ete recalculee. Les durees (via 'Dhms') ont ete respectivement de 00:00:18 et de        */
                                        /* 00:00:02 SANS et AVEC optimisation respectivement. Les deux images ainsi recalculees      */
                                        /* etaient strictement identiques...                                                         */

DEFV(Logical,INIT(editer_les_choix_de_subdivision_suppression,EDITER_LES_CHOIX_DE_SUBDIVISION_SUPPRESSION));
DEFV(Logical,INIT(editer_les_choix_de_subdivision_suppression__version_simplifiee
                 ,EDITER_LES_CHOIX_DE_SUBDIVISION_SUPPRESSION__VERSION_SIMPLIFIEE
                  )
     );
DEFV(Logical,INIT(editer_les_choix_de_subdivision_suppression__version_simplifiee_avec_parenthesage
                 ,EDITER_LES_CHOIX_DE_SUBDIVISION_SUPPRESSION__VERSION_SIMPLIFIEE_AVEC_PARENTHESAGE
                  )
     );
                                        /* Introduit le 20240917115931 afin de pouvoir editer les choix de subdivision/suppression   */
                                        /* dans tous les cas...                                                                      */
                                        /*                                                                                           */
                                        /* Je note le 20240918100540 que le fichier generable par cette edition peut etre reinjecte  */
                                        /* sous la forme "LISTE_VALEURS_ALEATOIRES_PRE_CALCULEES=" ce qui redonne la meme structure. */
                                        /*                                                                                           */
                                        /* La version simplifiee a ete introduite le 20240918170538...                               */
                                        /*                                                                                           */
                                        /* La version simplifiee et parenthesee a ete introduite le 20240921112252...                */
                                        /*                                                                                           */
                                        /* On notera le 20240923182617 que le fichier ainsi genere peut etre remis en forme via      */
                                        /* les instructions suivantes :                                                              */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*        $xcp/substitue.01$X                                                             \  */
                                        /*                                                                                        \  */
                                        /*   c01="\n\(  *[01]*\)\n  *\((\[[0-9]*\]\)\n *\([01][01][01][01][01][01]*\)\n *\()\)"   \  */
                                        /*   s01="\n\1\2\3\4"                                                                     \  */
                                        /*                                                                                        \  */
                                        /*                  c12="\(\n  *\)\([01]\)\([01]\)\((\)"                                  \  */
                                        /*                  s12="\1\2\1\3 \4"                                                     \  */
                                        /*                                                                                        \  */
                                        /*                  c13="\(\n  *\)\([01]\)\([01]\)\([01]\)\((\)"                          \  */
                                        /*                  s13="\1\2\1\3\1\4\5"                                                  \  */
                                        /*                                                                                        \  */
                                        /*                  c14="\(\n  *\)\([01]\)\([01]\)\([01]\)\([01]\)\((\)"                  \  */
                                        /*                  s14="\1\2\1\3\1\4\1\5\6"                                              \  */
                                        /*                                                                                        \  */
                                        /*                  c21="\([01]\)\((\)"                                                   \  */
                                        /*                  s21="\1 \2"                                                           \  */
                                        /*                                                                                        \  */
                                        /*                  c22="\(\n  *[01]\)\n *\((\)"                                          \  */
                                        /*                  s22="\1 \2"                                                           \  */
                                        /*                                                                                        \  */
                                        /*                  c23="\(\]\)\([^ ]\)"                                                  \  */
                                        /*                  s23="\1 \2"                                                           \  */
                                        /*                                                                                           */

DEFV(Int,INIT(graine,GRAINE));

DEFV(Float,INIT(A_seuil_d_indecision_entre_FAUX_et_VRAI,A_SEUIL_D_INDECISION_ENTRE_FAUX_ET_VRAI));
DEFV(Float,INIT(B_seuil_d_indecision_entre_FAUX_et_VRAI,B_SEUIL_D_INDECISION_ENTRE_FAUX_ET_VRAI));

DEFV(Logical,INIT(utiliser_un_generateur_aleatoire_pre_calcule,UTILISER_UN_GENERATEUR_ALEATOIRE_PRE_CALCULE));
DEFV(Logical,INIT(editer_les_nombres_aleatoires,EDITER_LES_NOMBRES_ALEATOIRES));
DEFV(Logical,INIT(editer_le_nombre_de_tirages_aleatoires,EDITER_LE_NOMBRE_DE_TIRAGES_ALEATOIRES));
DEFV(Logical,INIT(utiliser_un_espace_de_parametrage_tridimensionnel,UTILISER_UN_ESPACE_DE_PARAMETRAGE_TRIDIMENSIONNEL));
DEFV(Logical,INIT(utiliser_le_generateur_a_periodicite_parametrable,UTILISER_LE_GENERATEUR_A_PERIODICITE_PARAMETRABLE));
DEFV(pointI_2D,point_courant_de_l_espace_de_parametrage_2D);
DEFV(pointI_3D,point_courant_de_l_espace_de_parametrage_3D);
SPIRALE_DEFINITION_GENERALE(SPIRALE_DELTA_HORIZONTAL_GLOBAL,SPIRALE_DELTA_VERTICAL_GLOBAL)
                                        /* Definition du generateur aleatoire introduit le 20180107174041...                         */
                                        /*                                                                                           */
                                        /* On notera le 20180108111352 que plus le seuil est petit (par exemple "seuil=0.2"), plus   */
                                        /* il y a de matiere (et donc moins il y a de trous...).                                     */
                                        /*                                                                                           */
                                        /* Le 20240617131239 a ete introduite la possibilite d'un generateur "pre-calcule"...        */
                                        /*                                                                                           */
                                        /* Le 20240619093425 a ete introduite la possibilite d'editer le nombre de tirages           */
                                        /* aleatoires effectues...                                                                   */
                                        /*                                                                                           */
                                        /* Le 20240706095828 a ete introduite la possibilite d'editer les nombres aleatoires         */
                                        /* calcules ou recuperes dans un fichier...                                                  */

DEFV(Logical,INIT(editer_la_hierarchie_des_cubes,EDITER_LA_HIERARCHIE_DES_CUBES));
                                        /* Faut-il editer la hierarchie des differents cubes ('VRAI') ou pas ('FAUX') ?              */
DEFV(Logical,INIT(utiliser_la_super_echelle,UTILISER_LA_SUPER_ECHELLE));
                                        /* Faut-il utiliser la super-echelle ('VRAI') ou pas ('FAUX') ?                              */

DEFV(coeffI_3D,rapport_d_homothetie);
                                        /* Rapport permettant de passer d'une generation de cube a la suivante. Ce rapport est       */
                                        /* devenu un argument le 20171106102312 alors qu'il etait invariant avant cette date...      */
                                        /*                                                                                           */
                                        /* On notera le 20171106103930 que les cubes ne sont bien centres les uns par rapport aux    */
                                        /* autres lors du decoupage recursif que lorsque 'rapport_d_homothetie' est IMPAIR...        */

DEFV(Logical,INIT(generaliser_les_cubes,GENERALISER_LES_CUBES));
DEFV(Logical,INIT(generaliser_les_cubes_____faire_un_IZLE,GENERALISER_LES_CUBES_____FAIRE_UN_IZLE));
                                        /* Afin de pouvoir generaliser la notion de cube (introduit le 20171117162625).              */

DEFV(Int,INIT(nombre_d_iterations,NOMBRE_D_ITERATIONS));
                                        /* Nombre d'iterations.                                                                      */

                                        /* Le variables precedentes ne peuvent etre localisees dans {BCommande,ECommande} car, en    */
                                        /* effet elles sont utilisees dans 'v $xrf/EpongeDeMenger.01$I rapport_d_homothetie'...      */

#include  xrf/EpongeDeMenger.01.I"
                                        /* A cause des operateurs 'OPC1(...)' que la fonction 'GenerationDeLEpongeDeMenger(...)'     */
                                        /* qui est definie utilise ('v $xrf/EpongeDeMenger.01$I OPC1')...                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N S T R U C T I O N   D E   L ' E P O N G E   D E   M E N G E R                                                        */
/*        ( E T   D U   T A P I S   D E   S I E R P I N S K I )  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
                                        /* Definition de l'album Resultat.                                                           */
     DEFV(CHAR,INIC(POINTERc(nom_postfixe),NOM_UNDEF_VIDE));
                                        /* Nom d'un eventuel postfixe a placer derriere <nom_imageA><numero> (par exemple '$ROUGE'). */
     DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
                                        /* Numero de la premiere image,                                                              */
     DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
                                        /* Pas de passage d'un numero d'image a une autre.                                           */
     DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES));
                                        /* Nombre de chiffres codant le numero des images de la serie...                             */

     DEFV(Logical,INIT(inverser_les_conventions,INVERSER_LES_CONVENTIONS));
                                        /* Faut-il inverser les conventions ('VRAI') c'est-a-dire permuter 'F' et 'T' ou pas         */
                                        /* ('FAUX') ? c'est-a-dire conserver 'F' et 'T'. Ceci fut introduit le 20240615073518,       */
                                        /* la valeur par defaut garantissant la compatibilite anterieure...                          */
     DEFV(CHAR,INIC(POINTERc(liste_des_cubes_a_subdiviser_avec_d_eventuels_espaces),LISTE_DES_CUBES_A_SUBDIVISER));
     DEFV(CHAR,INIC(POINTERc(liste_des_cubes_a_subdiviser),CHAINE_UNDEF));
                                        /* Liste des cubes a subdiviser qui correspond a l'Eponge de Menger standard. Cette liste    */
                                        /* correspond aux sections suivantes (avec un rapport d'homothetie egal a 3) :               */
                                        /*                                                                                           */
                                        /*                            Z=0       Z=1       Z=2                                        */
                                        /*                                                                                           */
                                        /*                  Y=2       ***       *-*       ***                                        */
                                        /*                  Y=1       *-*       ---       *-*                                        */
                                        /*                  Y=0       ***       *-*       ***                                        */
                                        /*                                                                                           */
                                        /*                            <---  X=0 X=1 X=2  --->                                        */
                                        /*                                                                                           */
                                        /* ou "*" indique un cube subdivisible (introduit le 20171216070955).                        */
                                        /*                                                                                           */
                                        /* Avec les notations a utiliser dans 'GET_ARGUMENT_C("liste_cubes="...', on a donc :        */
                                        /*                                                                                           */
                                        /*                               Eponge  de Menger                                           */
                                        /*                             _____________________                                         */
                                        /*                            /                     \                                        */
                                        /*                                                                                           */
                                        /*                            TTT       TFT       TTT                                        */
                                        /*                            TFT       FFF       TFT                                        */
                                        /*                            TTT       TFT       TTT                                        */
                                        /*                                                                                           */
                                        /*                            \_/                                                            */
                                        /*                                                                                           */
                                        /*                    Tapis de Sierpinski                                                    */
                                        /*                                                                                           */
                                        /* soit donc la chaine :                                                                     */
                                        /*                                                                                           */
                                        /*                                         Eponge  de Menger                                 */
                                        /*                             _________________________________________                     */
                                        /*                            /                                         \                    */
                                        /*                            TTT TFT TTT     TFT FFF TFT     TTT TFT TTT                    */
                                        /*                            \_________/                                                    */
                                        /*                                                                                           */
                                        /*                        Tapis de Sierpinski                                                */
                                        /*                                                                                           */
                                        /* ou encore apres elimination des espaces :                                                 */
                                        /*                                                                                           */
                                        /*                                 Eponge  de Menger                                         */
                                        /*                             _________________________                                     */
                                        /*                            /                         \                                    */
                                        /*                            TTTTFTTTTTFTFFFTFTTTTTFTTTT                                    */
                                        /*                            \_______/                                                      */
                                        /*                                                                                           */
                                        /*                       Tapis de Sierpinski                                                 */
                                        /*                                                                                           */
                                        /* Ainsi, pour le tapis de Sierpinski seul le debut de la chaine est utile, mais malgre      */
                                        /* tout la suite doit etre presente (surtout s'il y a plus d'une iteration puisque la chaine */
                                        /* est alors reexploitee depuis son debut...).                                               */
                                        /*                                                                                           */
                                        /* Les cubes marques 'V/T' (pour 'VRAI/TRUE') seront subdivises, alors que ceux qui sont     */
                                        /* marques 'F' (pour 'FAUX/FALSE') disparaitront (il y a aura a leur place un trou           */
                                        /* cubique...).                                                                              */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /* Voici le 20171228092010 un exemple ('v $xiirf/MENG.S1.5.21') moins symetrique qui permet  */
                                        /* de souligner le fait que l'axe 'OY' monte evidemment :                                    */
                                        /*                                                                                           */
                                        /*                            FFTFTTTTTFFFTFTFFFTTTFTTFFT                                    */
                                        /*                            ===                                                            */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                            Z=0       Z=1       Z=2                                        */
                                        /*                                                                                           */
                                        /*                  Y=2       TTT       FFF       FFT                                        */
                                        /*                  Y=1       FTT       TFT       FTT                                        */
                                        /*                  Y=0       FFT       FFF       TTT                                        */
                                        /*                            ===                                                            */
                                        /*                                                                                           */
                                        /*                            <---  X=0 X=1 X=2  --->                                        */
                                        /*                                                                                           */

     DEFV(Logical,INIT(generer_l_eponge_de_Menger,GENERER_L_EPONGE_DE_MENGER));
                                        /* Faut-il generer l'eponge de Menger ('VRAI') ou bien le tapis de Sierpinski ('FAUX') ?     */
                                        /* Ceci fut introduit le 20140910084547...                                                   */
     DEFV(Logical,INIT(generer_l_ensemble_triadique_de_Cantor,GENERER_L_ENSEMBLE_TRIADIQUE_DE_CANTOR));
                                        /* Lorsque 'IL_NE_FAUT_PAS(generer_l_eponge_de_menger)' faut-il generer l'ensemble triadique */
                                        /* de Cantor ('VRAI') ou bien le tapis de Sierpinski ('FAUX') ?                              */
                                        /* Ceci fut introduit le 20191204115436...                                                   */

     DEFV(pointF_3D,origine_du_cube);
     DEFV(deltaF_3D,cote_du_cube);
     DEFV(Logical,INIT(optimiser_le_cote_du_cube,OPTIMISER_LE_COTE_DU_CUBE));
     DEFV(Logical,INIT(editer_le_cote_du_cube,EDITER_LE_COTE_DU_CUBE));
                                        /* Definition du cube "initial" que l'on va subdiviser...                                    */
                                        /*                                                                                           */
                                        /* L"optimisation et l'edition ont ete introduites le 20171113100122...                      */

     DEFV(genere_p,INIT(niveau_du_fond,NIVEAU_DU_FOND));
     DEFV(genere_p,INIT(niveau_de_marquage_de_l_eponge,NIVEAU_DE_MARQUAGE_DE_L_EPONGE));
     DEFV(genere_p,INIT(niveau_de_marquage_du_complement_de_l_eponge,NIVEAU_DE_MARQUAGE_DU_COMPLEMENT_DE_L_EPONGE));
                                        /* Niveaux de marquage de l'eponge et de son complement...                                   */
     DEFV(Logical,INIT(marquer_le_bord_X_de_l_eponge,MARQUER_LE_BORD_X_DE_L_EPONGE));
     DEFV(Logical,INIT(marquer_le_bord_Y_de_l_eponge,MARQUER_LE_BORD_Y_DE_L_EPONGE));
     DEFV(Logical,INIT(marquer_le_bord_Z_de_l_eponge,MARQUER_LE_BORD_Z_DE_L_EPONGE));
     DEFV(genere_p,INIT(niveau_de_marquage_du_bord_de_l_eponge,NIVEAU_DE_MARQUAGE_DU_BORD_DE_L_EPONGE));
                                        /* Le marquage du bord a ete introduit le 20150326151602 et rendu conditionnel le            */
                                        /* 20150326152845...                                                                         */
                                        /*                                                                                           */
                                        /* On rappelle le 20171106111532 qu'on appelle "bord" tout ce qui est autour et a            */
                                        /* l'exterieur de l'eponge...                                                                */
                                        /*                                                                                           */
                                        /* On notera ls possibilite d'activer selectivement le bord de l'eponge sur les trois        */
                                        /* axes. Cela est rendu necessaire pour les utilisations bidimensionnelles (cas du           */
                                        /* tapis de Sierpinski) pour lesquelles il n'y a qu'une seule couche dont le 'Z' est         */
                                        /* minimal et qui doit etre evidemment trace malgre cela (dans ce cas donc, on trace         */
                                        /* le bord uniquement parallelement aux axes 'X' et 'Y'...).                                 */
     /*..............................................................................................................................*/
     INITIALISATION_POINT_3D(origine_du_cube,X_ORIGINE_DU_CUBE,Y_ORIGINE_DU_CUBE,Z_ORIGINE_DU_CUBE);
     INITIALISATION_ACCROISSEMENT_3D(cote_du_cube,COTE_DU_CUBE_X,COTE_DU_CUBE_Y,COTE_DU_CUBE_Z);
     INITIALISATION_COEFFICIENT_3D(rapport_d_homothetie,RAPPORT_D_HOMOTHETIE_X,RAPPORT_D_HOMOTHETIE_Y,RAPPORT_D_HOMOTHETIE_Z);

     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("compatibilite_20240617=",compatibilite_20240617);
                         GET_ARGUMENT_L("compatibilite_20240917=",compatibilite_20240917);

                         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
                                                 )
                                            );

                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_C("postfixe=",nom_postfixe);
                         GET_ARGUMENT_I("premiere=",premiere_image);
                         GET_ARGUMENTS2_I("pas=",pas_des_images,pasZ);

                         GET_ARGUMENT_L("tracer=",tracer_les_differentes_operations);
                                        /* Arguments introduits le 20240618150759...                                                 */

                         GET_ARGUMENT_L("parcours_optimise=""po=",parcours_optimise_de_la_hierarchie_des_cubes);
                         GET_ARGUMENT_N("parcours_non_optimise=""pno=",parcours_optimise_de_la_hierarchie_des_cubes);
                                        /* Arguments introduits le 20180101085659...                                                 */

                         GET_ARGUMENT_I("graine=""g=",graine);

                         GET_ARGUMENT_F("Aseuil_FAUX_VRAI=""Aseuil=""AsFV="
                                       ,A_seuil_d_indecision_entre_FAUX_et_VRAI
                                        );
                         GET_ARGUMENT_F("Bseuil_FAUX_VRAI=""Bseuil=""BsFV=""seuil_FAUX_VRAI=""seuil=""sFV="
                                       ,B_seuil_d_indecision_entre_FAUX_et_VRAI
                                        );
                                        /* Arguments completes et/ou introduits le 20240926150024...                                 */

                         GET_ARGUMENT_L("affiner_rdn=",rdnIFnD_____affiner_la_generation);
                         GET_ARGUMENT_L("iterer_rdn=",rdnIFnD_____iterer_la_generation);
                         GET_ARGUMENT_L("tridimensionnel=""3D=",utiliser_un_espace_de_parametrage_tridimensionnel);
                         GET_ARGUMENT_L("periodique=",utiliser_le_generateur_a_periodicite_parametrable);
                                        /* Arguments introduits le 20180107174041 et completes le 20240617131239...                  */
                                        /*                                                                                           */
                                        /* On notera le 20180108111352 que plus le seuil est petit (par exemple "seuil=0.2"), plus   */
                                        /* il y a de matiere (et donc moins il y a de trous...).                                     */
                         GET_ARGUMENT_L("valeurs_aleatoires_pre_calculees=""pre_calculees=""pre_calcule=""pc="
                                       ,utiliser_un_generateur_aleatoire_pre_calcule
                                        );
                         PROKESF_ARGUMENT_FICHIER("LISTE_VALEURS_ALEATOIRES_PRE_CALCULEES="
                                                 ,fichier_LISTE_VALEURS_ALEATOIRES_PRE_CALCULEES
                                                 ,liste_initiale_des_VALEURS_ALEATOIRES_PRE_CALCULEES
                                                 ,VALEURS_ALEATOIRES_PRE_CALCULEES_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                                        /* Introduit le 20240617131239...                                                            */
                                        /*                                                                                           */
                                        /* Je rappelle le 20240920123359 que ce fichier peut contenir trois valeurs entieres         */
                                        /* differentes :                                                                             */
                                        /*                                                                                           */
                                        /*                  0         False                                                          */
                                        /*                  1         True                                                           */
                                        /*                                                                                           */
                                        /*                  9         Random (valeur aleatoire generee 0/1 remplacant le '9')        */
                                        /*                                                                                           */
                                        /* Le 20240925095806, "pc=" a ete introduit pour 'v $xrf/EpongeDeMenger.01$Z pc='...         */

                         GET_ARGUMENT_L("editer_choix_subdivision_suppression=""ecss=",editer_les_choix_de_subdivision_suppression);
                         GET_ARGUMENT_L("editer_choix_subdivision_suppression_simplifiee=""ecsss="
                                       ,editer_les_choix_de_subdivision_suppression__version_simplifiee
                                        );
                         GET_ARGUMENT_L("editer_choix_subdivision_suppression_simplifiee_parenthesee=""ecsssp="
                                       ,editer_les_choix_de_subdivision_suppression__version_simplifiee_avec_parenthesage
                                        );
                                        /* Argument introduit le 20240917115931...                                                   */
                                        /*                                                                                           */
                                        /* Je note le 20240918100540 que le fichier generable par cette edition peut etre reinjecte  */
                                        /* sous la forme "LISTE_VALEURS_ALEATOIRES_PRE_CALCULEES=" ce qui redonne la meme structure. */
                                        /*                                                                                           */
                                        /* La version simplifiee a ete introduite le 20240918170538...                               */
                                        /*                                                                                           */
                                        /* La version simplifiee et parenthesee a ete introduite le 20240921112252...                */
                         GET_ARGUMENT_L("editer_nombres_aleatoires=""ena=",editer_les_nombres_aleatoires);
                                        /* Argument introduit le 20240706095828...                                                   */

                         GET_ARGUMENT_L("editer_nombre_tirages_aleatoires=""enta=",editer_le_nombre_de_tirages_aleatoires);
                                        /* Argument introduit le 20240619093425...                                                   */

                         GET_ARGUMENT_L("inverser_conventions=""inverser=""TF_FT=",inverser_les_conventions);
                                        /* Argument introduit le 20240615073518...                                                   */
                         GET_ARGUMENT_C("liste_cubes=""lc=",liste_des_cubes_a_subdiviser_avec_d_eventuels_espaces);
                                        /* Arguments introduits le 20171216070955 et completes le 20171231114039 afin de permettre   */
                                        /* d'eventuels espaces facilitant la lecture de cette liste...                               */

                         GET_ARGUMENT_L("eponge_Menger=""Menger=""eponge=",generer_l_eponge_de_Menger);
                         GET_ARGUMENT_N("tapis_Sierpinski=""Sierpinski=""tapis=",generer_l_eponge_de_Menger);
                         GET_ARGUMENT_L("ensemble_triadique_Cantor=""Cantor=""ensemble=",generer_l_ensemble_triadique_de_Cantor);
                                        /* Arguments introduits le 20140910084547 et completes le 20191204115436 avec l'ensemble     */
                                        /* triadique de Cantor...                                                                    */

                         GET_ARGUMENTS3g_I("rapport_homothetie=""rapport=""rh="
                                          ,ASD1(rapport_d_homothetie,cx)
                                          ,ASD1(rapport_d_homothetie,cy)
                                          ,ASD1(rapport_d_homothetie,cz)
                                           );
                         GET_ARGUMENT_I("rapport_homothetieX=""rapportX=""rhX=",ASD1(rapport_d_homothetie,cx));
                         GET_ARGUMENT_I("rapport_homothetieY=""rapportY=""rhY=",ASD1(rapport_d_homothetie,cy));
                         GET_ARGUMENT_I("rapport_homothetieZ=""rapportZ=""rhZ=",ASD1(rapport_d_homothetie,cz));
                                        /* Arguments introduits le 20171106102312...                                                 */

                         GET_ARGUMENT_L("generaliser_cubes=""gc=",generaliser_les_cubes);
                         GET_ARGUMENT_L("IZLE=",generaliser_les_cubes_____faire_un_IZLE);
                         GET_ARGUMENT_N("IZGT=",generaliser_les_cubes_____faire_un_IZLE);
                         GET_ARGUMENT_F("a333=",Acoupe_quelconque_____a333);
                         GET_ARGUMENT_F("a332=",Acoupe_quelconque_____a332);
                         GET_ARGUMENT_F("a331=",Acoupe_quelconque_____a331);
                         GET_ARGUMENT_F("a330=",Acoupe_quelconque_____a330);
                         GET_ARGUMENT_F("a323=",Acoupe_quelconque_____a323);
                         GET_ARGUMENT_F("a322=",Acoupe_quelconque_____a322);
                         GET_ARGUMENT_F("a321=",Acoupe_quelconque_____a321);
                         GET_ARGUMENT_F("a320=",Acoupe_quelconque_____a320);
                         GET_ARGUMENT_F("a313=",Acoupe_quelconque_____a313);
                         GET_ARGUMENT_F("a312=",Acoupe_quelconque_____a312);
                         GET_ARGUMENT_F("a311=",Acoupe_quelconque_____a311);
                         GET_ARGUMENT_F("a310=",Acoupe_quelconque_____a310);
                         GET_ARGUMENT_F("a303=",Acoupe_quelconque_____a303);
                         GET_ARGUMENT_F("a302=",Acoupe_quelconque_____a302);
                         GET_ARGUMENT_F("a301=",Acoupe_quelconque_____a301);
                         GET_ARGUMENT_F("a300=",Acoupe_quelconque_____a300);
                         GET_ARGUMENT_F("a233=",Acoupe_quelconque_____a233);
                         GET_ARGUMENT_F("a232=",Acoupe_quelconque_____a232);
                         GET_ARGUMENT_F("a231=",Acoupe_quelconque_____a231);
                         GET_ARGUMENT_F("a230=",Acoupe_quelconque_____a230);
                         GET_ARGUMENT_F("a223=",Acoupe_quelconque_____a223);
                         GET_ARGUMENT_F("a222=",Acoupe_quelconque_____a222);
                         GET_ARGUMENT_F("a221=",Acoupe_quelconque_____a221);
                         GET_ARGUMENT_F("a220=",Acoupe_quelconque_____a220);
                         GET_ARGUMENT_F("a213=",Acoupe_quelconque_____a213);
                         GET_ARGUMENT_F("a212=",Acoupe_quelconque_____a212);
                         GET_ARGUMENT_F("a211=",Acoupe_quelconque_____a211);
                         GET_ARGUMENT_F("a210=",Acoupe_quelconque_____a210);
                         GET_ARGUMENT_F("a203=",Acoupe_quelconque_____a203);
                         GET_ARGUMENT_F("a202=",Acoupe_quelconque_____a202);
                         GET_ARGUMENT_F("a201=",Acoupe_quelconque_____a201);
                         GET_ARGUMENT_F("a200=",Acoupe_quelconque_____a200);
                         GET_ARGUMENT_F("a133=",Acoupe_quelconque_____a133);
                         GET_ARGUMENT_F("a132=",Acoupe_quelconque_____a132);
                         GET_ARGUMENT_F("a131=",Acoupe_quelconque_____a131);
                         GET_ARGUMENT_F("a130=",Acoupe_quelconque_____a130);
                         GET_ARGUMENT_F("a123=",Acoupe_quelconque_____a123);
                         GET_ARGUMENT_F("a122=",Acoupe_quelconque_____a122);
                         GET_ARGUMENT_F("a121=",Acoupe_quelconque_____a121);
                         GET_ARGUMENT_F("a120=",Acoupe_quelconque_____a120);
                         GET_ARGUMENT_F("a113=",Acoupe_quelconque_____a113);
                         GET_ARGUMENT_F("a112=",Acoupe_quelconque_____a112);
                         GET_ARGUMENT_F("a111=",Acoupe_quelconque_____a111);
                         GET_ARGUMENT_F("a110=",Acoupe_quelconque_____a110);
                         GET_ARGUMENT_F("a103=",Acoupe_quelconque_____a103);
                         GET_ARGUMENT_F("a102=",Acoupe_quelconque_____a102);
                         GET_ARGUMENT_F("a101=",Acoupe_quelconque_____a101);
                         GET_ARGUMENT_F("a100=",Acoupe_quelconque_____a100);
                         GET_ARGUMENT_F("a033=",Acoupe_quelconque_____a033);
                         GET_ARGUMENT_F("a032=",Acoupe_quelconque_____a032);
                         GET_ARGUMENT_F("a031=",Acoupe_quelconque_____a031);
                         GET_ARGUMENT_F("a030=",Acoupe_quelconque_____a030);
                         GET_ARGUMENT_F("a023=",Acoupe_quelconque_____a023);
                         GET_ARGUMENT_F("a022=",Acoupe_quelconque_____a022);
                         GET_ARGUMENT_F("a021=",Acoupe_quelconque_____a021);
                         GET_ARGUMENT_F("a020=",Acoupe_quelconque_____a020);
                         GET_ARGUMENT_F("a013=",Acoupe_quelconque_____a013);
                         GET_ARGUMENT_F("a012=",Acoupe_quelconque_____a012);
                         GET_ARGUMENT_F("a011=",Acoupe_quelconque_____a011);
                         GET_ARGUMENT_F("a010=",Acoupe_quelconque_____a010);
                         GET_ARGUMENT_F("a003=",Acoupe_quelconque_____a003);
                         GET_ARGUMENT_F("a002=",Acoupe_quelconque_____a002);
                         GET_ARGUMENT_F("a001=",Acoupe_quelconque_____a001);
                         GET_ARGUMENT_F("a000=",Acoupe_quelconque_____a000);
                                        /* Arguments introduits le 20171117162625...                                                 */

                         GET_ARGUMENT_L("editer_hierarchie_cubes=""editer=""hierarchie=""ehc=",editer_la_hierarchie_des_cubes);

                         GET_ARGUMENT_I("nombre_iterations=""iterations=""iter=",nombre_d_iterations);

                         GET_ARGUMENT_L("super_echelle=""se=",utiliser_la_super_echelle);

                         GET_ARGUMENT_F("x0=""X0=",ASD1(origine_du_cube,x));
                         GET_ARGUMENT_F("y0=""Y0=",ASD1(origine_du_cube,y));
                         GET_ARGUMENT_F("z0=""Z0=",ASD1(origine_du_cube,z));
                         GET_ARGUMENTS3g_F("cote=""c="
                                          ,ASD1(cote_du_cube,dx)
                                          ,ASD1(cote_du_cube,dy)
                                          ,ASD1(cote_du_cube,dz)
                                           );
                         GET_ARGUMENT_F("coteX=""cX=",ASD1(cote_du_cube,dx));
                         GET_ARGUMENT_F("coteY=""cY=",ASD1(cote_du_cube,dy));
                         GET_ARGUMENT_F("coteZ=""cZ=",ASD1(cote_du_cube,dz));
                         GET_ARGUMENT_L("optimiser_cote=""oc=",optimiser_le_cote_du_cube);
                                        /* Arguments introduits le 20171113100122...                                                 */
                         GET_ARGUMENT_L("editer_cote=""ec=",editer_le_cote_du_cube);
                                        /* Arguments introduits le 20171113100122...                                                 */

                         GET_ARGUMENT_P("niveau_fond=""nf=",niveau_du_fond);
                                        /* Arguments introduits le 20140916105438...                                                 */
                         GET_ARGUMENT_P("niveau_eponge=""nep=",niveau_de_marquage_de_l_eponge);
                         GET_ARGUMENT_P("niveau_complement_eponge=""ncep=",niveau_de_marquage_du_complement_de_l_eponge);
                         GET_ARGUMENT_L("marquer_bord_X=""mbX=""mbx=",marquer_le_bord_X_de_l_eponge);
                         GET_ARGUMENT_L("marquer_bord_Y=""mbY=""mby=",marquer_le_bord_Y_de_l_eponge);
                         GET_ARGUMENT_L("marquer_bord_Z=""mbZ=""mbz=",marquer_le_bord_Z_de_l_eponge);
                         GET_ARGUMENT_P("niveau_bord_eponge=""nbep=",niveau_de_marquage_du_bord_de_l_eponge);
                         GET_ARGUMENT_F("increment_niveau_eponge=""increment=""inep="
                                       ,increment_de__increment_courant_de__niveau_de_marquage_de_l_eponge
                                        );
                                        /* Argument introduit le 20240617080321 avec passage de 'GET_ARGUMENT_I(...)' a              */
                                        /* 'GET_ARGUMENT_F(...)' le 20240621093649...                                                */
                         )
                    );

     EGAL(liste_des_cubes_a_subdiviser
         ,chain_Acopie_avec_suppression_des_espaces(liste_des_cubes_a_subdiviser_avec_d_eventuels_espaces)
          );
                                        /* Introduit le 20171231114039 afin de permettre d'eventuels espaces facilitant la lecture   */
                                        /* de cette liste...                                                                         */

     SPIRALE_DEFINITION_GENERALE(SPIRALE_DELTA_HORIZONTAL_GLOBAL,SPIRALE_DELTA_VERTICAL_GLOBAL)
     SPIRALE_VALIDATION;
     INITIALISATION_POINT_2D(point_courant_de_l_espace_de_parametrage_2D,Xmin,Ymin);
     INITIALISATION_POINT_3D(point_courant_de_l_espace_de_parametrage_3D,Xmin,Ymin,Zmin);
                                        /* Initialisation du generateur aleatoire (introduite le 20180107174041...).                 */

     Test(IL_FAUT(optimiser_le_cote_du_cube))
                                        /* Test introduit le 20171113100122...                                                       */
          Bblock
          DEFV(Float,INIT(coteXYZ_du_cube,FLOT__UNDEF));
          DEFV(Float,INIT(coteX_du_cube,_____lNORMALISE_OX(TRMU(dimX))));
          DEFV(Float,INIT(coteY_du_cube,_____lNORMALISE_OY(TRMU(dimY))));

          Test(IL_FAUT(generer_l_eponge_de_Menger))
               Bblock
               DEFV(Float,INIT(coteZ_du_cube,_____lNORMALISE_OZ(TRMU(dimZ))));

               EGAL(coteXYZ_du_cube,MIN3(coteX_du_cube,coteY_du_cube,coteZ_du_cube));
                                        /* Et ce afin que toute l'eponge tienne dans l'image...                                      */
               Eblock
          ATes
               Bblock
               EGAL(coteXYZ_du_cube,MIN2(coteX_du_cube,coteY_du_cube));
                                        /* Et ce afin que tout le tapis tienne dans l'image...                                       */
               Eblock
          ETes

          DECR(coteXYZ_du_cube,TRES_GRAND_EPSILON);

          INITIALISATION_ACCROISSEMENT_3D(cote_du_cube,coteXYZ_du_cube,coteXYZ_du_cube,coteXYZ_du_cube);
                                        /* Cette correction a ete introduite le 20171113104548 pour 'v $xiirf/SIER.71.3'...          */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IL_FAUT(editer_le_cote_du_cube))
                                        /* Test introduit le 20171113100122...                                                       */
          Bblock
          CAL3(Prme1("CoteCubeX=%+.^^^\n",ASD1(cote_du_cube,dx)));
          CAL3(Prme1("CoteCubeY=%+.^^^\n",ASD1(cote_du_cube,dy)));
          CAL3(Prme1("CoteCubeZ=%+.^^^\n",ASD1(cote_du_cube,dz)));
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IL_FAUT(editer_la_hierarchie_des_cubes))
                                        /* Test introduit le 20171106103930...                                                       */
          Bblock
          Test(I3OU(EST_IMPAIR(ASD1(rapport_d_homothetie,cx))
                   ,EST_IMPAIR(ASD1(rapport_d_homothetie,cy))
                   ,EST_IMPAIR(ASD1(rapport_d_homothetie,cz))
                    )
               )
               Bblock
                                        /* Cas ou les cubes seront bien centres les uns par rapport aux autres lors du decoupage     */
                                        /* recursif...                                                                               */
               Eblock
          ATes
               Bblock
               PRINT_ATTENTION("les cubes ne seront pas bien centres les uns par rapport aux autres lors du decoupage recursif");
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(TOUJOURS_FAUX)
                                        /* Introduit le 20140924110127 suite a 'v $xrf/EpongeDeMenger.01$K 20140912095448', mais     */
                                        /* sans supprimer cette sequence : on ne sait jamais...                                      */
          Bblock
          Test(I3OU(NON_DIVISIBLE(dimX,ASD1(rapport_d_homothetie,cx))
                   ,NON_DIVISIBLE(dimY,ASD1(rapport_d_homothetie,cy))
                   ,NON_DIVISIBLE(dimZ,ASD1(rapport_d_homothetie,cz))
                    )
               )
                                        /* Le 20140912095448, je ne comprends pas ce test : il me semble qu'en fait il devrait se    */
                                        /* retrouver a chaque etage de la recursivite...                                             */
               Bblock
               PRINT_ATTENTION("l'une au moins des dimensions n'est pas divisible par le rapport d'homothetie");
                                        /* Dans ce cas, certains cubes ne sont plus exactement des cubes...                          */
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     begin_nouveau_block
          Bblock
          BDEFV(album,album_d_imagesR);
                                        /* Definition de l'album Resultat.                                                           */

          DEFV(Logical,INIT(c_est_le_premier_cube_de_la_profondeur_courante,VRAI));
                                        /* Introduit le 20140922163745 dans le but de faire des verifications des differents         */
                                        /* cotes des cubes au cours du processus de reduction recursive...                           */

          DEFV(Int,INIT(index_des_cubes,PREMIER_CARACTERE));
          DEFV(Int,INIT(nombre_de_cubes_a_subdiviser,chain_Xtaille(liste_des_cubes_a_subdiviser)));
          MdTb4(selecteur_des_cubes_a_subdiviser
               ,NOMBRE_EFFECTIF_D_ITERATIONS
               ,NOMBRE_LINEAIRE_DE_CUBES_Z
               ,NOMBRE_LINEAIRE_DE_CUBES_Y
               ,NOMBRE_LINEAIRE_DE_CUBES_X
               ,Int
               ,ADRESSE_NON_ENCORE_DEFINIE
                );
                                        /* Introduit le 20171215150111 dans le but, ulterieurement, de selectionner les cubes        */
                                        /* a subdiviser...                                                                           */

          DEFV(coeffI_3D,rapport_d_homothetie_cumule);
          INITIALISATION_COEFFICIENT_3D(rapport_d_homothetie_cumule,FU,FU,FU);

          Test(NON_DIVISIBLE(nombre_de_cubes_a_subdiviser,NOMBRE_VOLUMIQUE_DE_CUBES))
                                        /* Introduit le 20171216070955...                                                            */
               Bblock
               PRINT_ERREUR("il y a une incoherence dans le nombre de cubes");
               CAL1(Prer2("(la liste des cubes a subdiviser en contient %d qui n'est pas divisible par %d)\n"
                         ,nombre_de_cubes_a_subdiviser
                         ,NOMBRE_VOLUMIQUE_DE_CUBES
                          )
                    );
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          begin_hyper_albumQ(DoDe,PREMIERE_ITERATION_,DERNIERE_ITERATION_,I
                            ,DoIn,PREMIER_CUBE_REDUIT_Z,DERNIER_CUBE_REDUIT_Z,I
                            ,DoIn,PREMIER_CUBE_REDUIT_Y,DERNIER_CUBE_REDUIT_Y,I
                            ,DoIn,PREMIER_CUBE_REDUIT_X,DERNIER_CUBE_REDUIT_X,I
                             )
                                        /* Introduit le 20171215150111...                                                            */
                                        /*                                                                                           */
                                        /* ATTENTION : je rappelle le 20240616090847 que ce processus est ADDITIF et non pas         */
                                        /* multiplicatif. Ainsi :                                                                    */
                                        /*                                                                                           */
                                        /*                           ------------------------   --- dimension de l'espace            */
                                        /*                          |             --------   | |                                     */
                                        /*                          |            |        |  | |                                     */
                                        /*                  rapport=3 iterations=1  ==>   1x(3^3) = 27 "Do??(...)"                   */
                                        /*                  rapport=3 iterations=2  ==>   2x(3^3) = 54 "Do??(...)"                   */
                                        /*                  rapport=3 iterations=3  ==>   3x(3^3) = 81 "Do??(...)"                   */
                                        /*                  (...)                                                                    */
                                        /*                                                                                           */
                                        /* et donc +27 "tours" pour chaque iteration de plus (et non pas x27...).                    */
                                        /*                                                                                           */
                                        /* Le 20240618172951, grace a 'TRACER(...)', je me demande a quoi sert le 'DoDe(...)' :      */
                                        /*                                                                                           */
                                        /*                  PREMIERE_ITERATION_,DERNIERE_ITERATION_                                  */
                                        /*                                                                                           */
                                        /* dans le 'begin_hyper_albumQ'... Le 20240619073159, je realise qu'il s'agit du controle    */
                                        /* de la hierarchie des trous...                                                             */
               Bblock
               DEFV(Int,INIT(index_du_cube_courant,MODS(index_des_cubes,PREMIER_CARACTERE,TRMU(nombre_de_cubes_a_subdiviser))));
               DEFV(CHAR,INIT(etat_demande_de_subdivision,K_UNDEF));
               DEFV(Logical,INIT(etat_de_subdivision_du_cube_courant,LUNDEF));

               EGAL(etat_demande_de_subdivision,ITb1(liste_des_cubes_a_subdiviser,index_du_cube_courant));

               Test(IL_FAUT(inverser_les_conventions))
                                        /* Test introduit le 20240615073518...                                                       */
                    Bblock
                    DEFV(CHAR,INIT(etat_inverse_de_subdivision,etat_demande_de_subdivision));
                                        /* A priori, l'etat demande est conserve...                                                  */

                    Choi(etat_demande_de_subdivision)
                         Bblock
                         Ca5e(K_T,K_t,K_V,K_v,K_1)
                              Bblock
                              EGAL(etat_inverse_de_subdivision,K_F);
                              Eblock
                         ECa5

                         Ca3e(K_F,K_f,K_0)
                                        /* On notera que "False" et "Faux" commencent par la meme lettre ('F') d'ou un 'Ca3e(...)'   */
                                        /* et non pas un 'Ca5e(...)'.                                                                */
                              Bblock
                              EGAL(etat_inverse_de_subdivision,K_T);
                              Eblock
                         ECa3

                         Defo
                              Bblock
                                        /* Dans ce cas, l'etat demande est conserve evidemment...                                    */
                              Eblock
                         EDef
                         Eblock
                    ECho

                    EGAL(etat_demande_de_subdivision,etat_inverse_de_subdivision);
                                        /* Nouvel etat demande, inverse eventuellement...                                            */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Choi(etat_demande_de_subdivision)
                                        /* Liste des codes disponibles :                                                             */
                                        /*                                                                                           */
                                        /*   V v  T t  1    : "VRAI/TRUE", on subdivise le cube courant,                             */
                                        /*   F f  F f  0    : "FAUX/FALSE", on ne subdivise pas le cube courant,                     */
                                        /*                                                                                           */
                                        /*   A a  R r       : "ALEATOIRE/RANDOM", on choisit aleatoirement de subdiviser ou pas,     */
                                        /*   S s  C c       : "STOP", on stoppe la subdivision.                                      */
                                        /*                                                                                           */
                    Bblock
                                        /* On notera le 20171216084204 que l'on n'utilise pas 'C_VRAI_____ABREGE' et                 */
                                        /* 'C_FAUX_____ABREGE' car, en effet, d'une part ci-apres on a bsoin de caracteres           */
                                        /* individuels et non pas de chaines de caracteres. D'autre part, on aura peut-etre          */
                                        /* besoin ulterieurement d'etendre les listes {K_V,K_v} et {K_F,K_f} avec d'autres           */
                                        /* caracteres (plus significatifs...).                                                       */
                    Ca5e(K_T,K_t,K_V,K_v,K_1)
                                        /* Les deux cas 'K_T' et 'K_t' ont ete introduits le 20171227095637 afin de permettre        */
                                        /* de mettre des chaines 'liste_des_cubes_a_subdiviser', par exemple, dans les pages         */
                                        /* 'v ''$xiMl/MENG.21.n.1$ANGLAIS.$m4.$I'...                                                 */
                                        /*                                                                                           */
                                        /* Le cas 'K_1' a ete introduit le 20240614175644 pour traiter les "decimales" de pi en      */
                                        /* base 2.                                                                                   */
                         Bblock
                         EGAL(etat_de_subdivision_du_cube_courant,VRAI);
                         Eblock
                    ECa5

                    Ca3e(K_F,K_f,K_0)
                                        /* Le cas 'K_0' a ete introduit le 20240614175644 pour traiter les "decimales" de pi en      */
                                        /* base 2.                                                                                   */
                         Bblock
                         EGAL(etat_de_subdivision_du_cube_courant,FAUX);
                         Eblock
                    ECa3

                    Ca4e(K_R,K_r,K_A,K_a)
                         Bblock
                         EGAL(etat_de_subdivision_du_cube_courant,INDECIS);
                                        /* L'indecision a ete introduite le 20180107180745 (avec "R" pour "Random" et "A" pour       */
                                        /* "aleatoire"...).                                                                          */
                         Eblock
                    ECa4

                    Ca4e(K_C,K_c,K_S,K_s)
                         Bblock
                         EGAL(etat_de_subdivision_du_cube_courant,STOPPER_LA_SUBDIVISION_D_UN_CUBE);
                                        /* Introduit le 20180116101348 pour forcer le marquage d'un Cube "non terminal" et donc      */
                                        /* Stopper la subdivision...                                                                 */
                         Eblock
                    ECa4

                    Defo
                         Bblock
                         PRINT_ERREUR("un etat de subdivision de cube n'est pas reconnu");
                         CAL1(Prer2("(il s'agit de '%c' d'index %d)\n"
                                   ,etat_demande_de_subdivision
                                   ,index_du_cube_courant
                                    )
                              );

                         EGAL(etat_de_subdivision_du_cube_courant,VRAI);
                         Eblock
                    EDef
                    Eblock
               ECho

               EGAL(SUBDIVISER_UN_CUBE(X,Y,Z,T),etat_de_subdivision_du_cube_courant);

               Test(IFLT(index_des_cubes,LSTX(PREMIER_CARACTERE,nombre_de_cubes_a_subdiviser)))
                                        /* Test introduit le 20171219102357 dans l'idee d'avoir des listes fonction du nombre        */
                                        /* d'iterations...                                                                           */
                    Bblock
                    INCR(index_des_cubes,I);
                    Eblock
               ATes
                    Bblock
                    EGAL(index_des_cubes,PREMIER_CARACTERE);
                    Eblock
               ETes
               Eblock
          end_hyper_albumQ(EDoD,EDoI,EDoI,EDoI)

          CALS(dAinitialisation(album_d_imagesR,niveau_du_fond));
          CALS(GenerationDunCube(ADRESSE(origine_du_cube)
                                ,ADRESSE(cote_du_cube)
                                ,album_d_imagesR
                                ,niveau_de_marquage_du_complement_de_l_eponge
                                ,FAUX
                                ,FAUX
                                ,FAUX
                                ,NIVEAU_UNDEF
                                ,ADRESSE(rapport_d_homothetie_cumule)
                                ,nombre_d_iterations
                                 )
               );
                                        /* Initialisation de l'album Resultat. On notera la modification du 20140916105438 due       */
                                        /* au fait que le cube (marque avec 'niveau_de_marquage_du_complement_de_l_eponge') peut     */
                                        /* etre plus petit que l'espace (marque avec 'niveau_du_fond')...                            */

          CALS(GenerationDeLEpongeDeMenger(ADRESSE(origine_du_cube)
                                          ,ADRESSE(cote_du_cube)
                                          ,nombre_d_iterations
                                          ,album_d_imagesR
                                          ,niveau_de_marquage_de_l_eponge
                                          ,marquer_le_bord_X_de_l_eponge
                                          ,marquer_le_bord_Y_de_l_eponge
                                          ,marquer_le_bord_Z_de_l_eponge
                                          ,niveau_de_marquage_du_bord_de_l_eponge
                                          ,c_est_le_premier_cube_de_la_profondeur_courante
                                          ,ADRESSE(rapport_d_homothetie_cumule)
                                           )
               );
                                        /* On notera au passage que, par exemple, la premiere image de l'album est un tapis          */
                                        /* de Sierpinski...                                                                          */
                                        /*                                                                                           */
                                        /* Le rapport d'homothetie cumule a ete introduit le 20171117173918...                       */

          Test(IL_FAUT(generer_l_eponge_de_Menger))
                                        /* Test introduit le 20140910084547...                                                       */
               Bblock
               CALi(dAupdate_album(nom_imageR
                                  ,nom_postfixe
                                  ,premiere_image
                                  ,pas_des_images
                                  ,album_d_imagesR
                                  ,nombre_de_chiffres
                                  ,FAUX
                                   )
                    );
                                        /* Sortie de l'eponge de Menger...                                                           */
               Eblock
          ATes
               Bblock
               Test(IL_NE_FAUT_PAS(generer_l_ensemble_triadique_de_Cantor))
                                        /* Test introduit le 20191204115436...                                                       */
                    Bblock
                    CALS(Iupdate_image(nom_imageR,PAGE(album_d_imagesR,Zmin)));
                                        /* Sortie du tapis de Sierpinski (introduite le 20140910084547)...                           */
                    Eblock
               ATes
                    Bblock
                    BDEFV(image,ensemble_triadique_de_Cantor_1);
                    BDEFV(image,ensemble_triadique_de_Cantor_2);
                    BDEFV(image,ensemble_triadique_de_Cantor_3);
                    BDEFV(image,ensemble_triadique_de_Cantor_4);
                    DEFV(deltaF_2D,translation);

                    CALi(Imove(ensemble_triadique_de_Cantor_1,PAGE(album_d_imagesR,Zmin)));

                    INITIALISATION_ACCROISSEMENT_2D(translation,FZERO,NEUT(_____lNORMALISE_OY(dimY2)));
                    CALi(Itranslation(ensemble_triadique_de_Cantor_2,ensemble_triadique_de_Cantor_1,ADRESSE(translation),FAUX,FAUX));

                    INITIALISATION_ACCROISSEMENT_2D(translation,FZERO,NEGA(_____lNORMALISE_OY(SOUS(dimY,pasY))));
                    CALi(Itranslation(ensemble_triadique_de_Cantor_3,ensemble_triadique_de_Cantor_2,ADRESSE(translation),FAUX,FAUX));

                    INITIALISATION_ACCROISSEMENT_2D(translation,FZERO,NEUT(_____lNORMALISE_OY(dimY2)));
                    CALi(Itranslation(ensemble_triadique_de_Cantor_4,ensemble_triadique_de_Cantor_3,ADRESSE(translation),FAUX,FAUX));

                    CALS(Iupdate_image(nom_imageR,ensemble_triadique_de_Cantor_4));

                    EDEFV(image,ensemble_triadique_de_Cantor_4);
                    EDEFV(image,ensemble_triadique_de_Cantor_3);
                    EDEFV(image,ensemble_triadique_de_Cantor_2);
                    EDEFV(image,ensemble_triadique_de_Cantor_1);
                    Eblock
               ETes
               Eblock
          ETes

          FdTb4(selecteur_des_cubes_a_subdiviser
               ,NOMBRE_EFFECTIF_D_ITERATIONS
               ,NOMBRE_LINEAIRE_DE_CUBES_Z
               ,NOMBRE_LINEAIRE_DE_CUBES_Y
               ,NOMBRE_LINEAIRE_DE_CUBES_X
               ,Int
               ,ADRESSE_NON_ENCORE_DEFINIE
                );
                                        /* Introduit le 20171215150111 dans le but, ulterieurement, de selectionner les cubes        */
                                        /* a subdiviser...                                                                           */

          EDEFV(album,album_d_imagesR);
                                        /* Definition de l'album Resultat.                                                           */
          Eblock
     end_nouveau_block

     Test(IL_FAUT(editer_le_nombre_de_tirages_aleatoires))
                                        /* Test introduit le 20240619093425...                                                       */
          Bblock
          CAL3(Prme1("NombreTirageAleatoires=%d\n",nombre_de_tirages_aleatoires));
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     lGENERATION_D_UN_FICHIER(liste_initiale_des_VALEURS_ALEATOIRES_PRE_CALCULEES,VALEURS_ALEATOIRES_PRE_CALCULEES_IMPLICITE);

     RETU_Commande;
     Eblock
ECommande



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