/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D ' U N E   C O U P E   B I _ D I M E N S I O N N E L L E                                            */
/*        D ' U N   C H A M P   F R A C T A L   T R I - D I M E N S I O N N E L  :                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande genere dans                                                                                     */
/*                  l'image nomme un champ                                                                                           */
/*                  completement fractal qui est                                                                                     */
/*                  la coupe 2D d'un vrai champ 3D.                                                                                  */
/*                                                                                                                                   */
/*                    D'autre part, en utilisant des                                                                                 */
/*                  parametres du type :                                                                                             */
/*                                                                                                                                   */
/*                                      OX=0 EX=1 mX=0.50                                                                            */
/*                                      OY=0 EY=1 mY=0.50                                                                            */
/*                                      OZ=0 EZ=1 mZ=0.50                                                                            */
/*                                                                                                                                   */
/*                  on generera un champ periodique dans un                                                                          */
/*                  espace periodique puisque tous les axes                                                                          */
/*                  sont limites a [0,1] et que 0.50 divise                                                                          */
/*                  exactement 1-0.                                                                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Si l'on souhaite faire de la mise au                                                                           */
/*                  point d'images de facon "homothetique"                                                                           */
/*                  (c'est-a-dire, par exemple, avec le                                                                              */
/*                  format 'Sud', pour ensuite generer au                                                                            */
/*                  format 'Squ'), il faut un format carre                                                                           */
/*                  puissance de 2, y compris le nombre de                                                                           */
/*                  tranches (c'est-a-dire '$dimZ')...                                                                               */
/*                  En fait, je note le 20220114080637 que ce ne sont                                                                */
/*                  des puissances de 2 qui sont necessaires, mais                                                                   */
/*                  mais des dimensions divisibles exactement l'une                                                                  */
/*                  par l'autre (voir ci-apres...).                                                                                  */
/*                                                                                                                                   */
/*                    Le 20220113115331, je confirme cela                                                                            */
/*                  grace a 'v $ximf/aleatoires$FON 20220113110446'                                                                  */
/*                  et grace a l'option "non_aleatoire=" ci-apres...                                                                 */
/*                                                                                                                                   */
/*                    Le 20220114074308, j'ai compris (voir                                                                          */
/*                  'v $xci/fract_2D.01$K 20220114074303')...                                                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/fract_3D.01$K' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1988??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
@define   PRAGMA_CL_____MODULE_NON_OPTIMISABLE

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/substitue.02.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/substitue.01.I"
                                        /* Introduit le 20110401191318...                                                            */

#define   TRANCHE_VERTICALE                                                                                                             \
                    FZorigine
#define   FACTEUR_DE_LA_TRANCHE_VERTICALE                                                                                               \
                    FU
#define   TRANSLATION_DE_LA_TRANCHE_VERTICALE                                                                                           \
                    FZERO
                                        /* Tranche verticale a priori, ainsi qu'un facteur multiplicateur et une translation.        */
                                        /* Ceux-ci ont ete introduits le 20021004120211 afin de permettre d'utiliser                 */
                                        /* '$xci/fract_3D.01$X' dans '$xci/genere$X' ou le seul parametre variable (le numero        */
                                        /* d'image) est entier. Il sera possible de faire varier 'Z' par exemple dans [0,1].         */

#define   NIVEAU                                                                                                                        \
                    GRO2(SEIZE)                                                                                                         \
                                        /* Niveau de recursion. Le 1996010900, ce parametre a perdu sa valeur seculaire ('SEIZE')    */ \
                                        /* car, en effet, depuis que le generateur recentre les coordonnees pour resoudre le         */ \
                                        /* probleme de recalage des noeuds (dans 'Fcalcul_d_un_noeud_relativement_au_centre(...)')   */ \
                                        /* une trop faible de ce parametre fait apparaitre une plage singuliere au voisinage des     */ \
                                        /* axes...                                                                                   */
#define   GRAINE                                                                                                                        \
                    PARE(2)                                                                                                             \
                                        /* Graine du generateur aleatoire.                                                           */
#define   BORNE_INFERIEURE                                                                                                              \
                    FLOT__NOIR
#define   BORNE_SUPERIEURE                                                                                                              \
                    FLOT__BLANC
                                        /* Definition du generateur aleatoire...                                                     */

#define   PUISSANCE                                                                                                                     \
                    PARE(0.9)                                                                                                           \
                                        /* Puissance de decroissance.                                                                */
#define   PUISSANCE_XYZ                                                                                                                 \
                    PARE(0.9)                                                                                                           \
                                        /* Puissance de decroissance pour la taille des mailles.                                     */

#define   LES_MAILLES_PAR_DEFAUT_SONT_DENORMALISEES                                                                                     \
                    VRAI                                                                                                                \
                                        /* Le 20220114093506 a ete introduite cette possibilite afin de pouvoir utiliser des mailles */ \
                                        /* par defaut qui sont deja normalisees. Ceci fut introduit afin de resoudre le probleme     */ \
                                        /* qui a ete compris le 'v $xci/fract_2D.01$K 20220114074303'...                             */ \
                                        /*                                                                                           */ \
                                        /* La valeur par defaut garantit la compatibilite anterieure...                              */
#define   MAILLE_X                                                                                                                      \
                    PARE(200)
#define   MAILLE_NORMALISEE_X                                                                                                           \
                    FDU
                                        /* Taille de la maille le long de 'OX' (ATTENTION : entree dans [0,1]),                      */
#define   MAILLE_Y                                                                                                                      \
                    PARE(200)
#define   MAILLE_NORMALISEE_Y                                                                                                           \
                    FDU
                                        /* Taille de la maille le long de 'OY' (ATTENTION : entree dans [0,1]),                      */
#define   MAILLE_Z                                                                                                                      \
                    PARE(200)
#define   MAILLE_NORMALISEE_Z                                                                                                           \
                    FDU
                                        /* Taille de la maille le long de 'OZ' (ATTENTION : entree dans [0,1]).                      */

#define   ECHELLE_OX                                                                                                                    \
                    FU
#define   ECHELLE_OY                                                                                                                    \
                    FU
#define   ECHELLE_OZ                                                                                                                    \
                    FU
                                        /* Echelle du champ.                                                                         */
#define   TRANSLATION_OX                                                                                                                \
                    FZERO
#define   TRANSLATION_OY                                                                                                                \
                    FZERO
#define   TRANSLATION_OZ                                                                                                                \
                    FZERO
                                        /* Translation du champ.                                                                     */
#define   ROTATION_OX                                                                                                                   \
                    FZERO
#define   ROTATION_OY                                                                                                                   \
                    FZERO
#define   ROTATION_OZ                                                                                                                   \
                    FZERO
                                        /* Rotation du champ.                                                                        */

#define   TORE_3D_ORIGINE                                                                                                               \
                    TORE_PLAT_INFERIEUR
#define   TORE_3D_EXTREMITE                                                                                                             \
                    TORE_PLAT_SUPERIEUR
                                        /* Definition de l'origine et de l'extremite du 3D-tore par defaut, tel qu'en fait il soit   */
                                        /* infiniment grand et que donc le champ ne soit pas vu comme periodique. ATTENTION, ces     */
                                        /* valeurs sont definies comme des coordonnees dans [0,1]...                                 */

#define   VALEUR_INITIALE_DU_CHAMP_FRACTAL_____STANDARD                                                                                 \
                    NOIR                                                                                                                \
                                        /* Donne la valeur initiale du champ fractal dans le cas "standard=VRAI" et "iterations=0".  */ \
                                        /* Cette valeur grantit la compatibilite anterieure (introduit le 20201024110743).           */
#define   VALEUR_INITIALE_DU_CHAMP_FRACTAL_NON_STANDARD                                                                                 \
                    FZERO                                                                                                               \
                                        /* Donne la valeur initiale du champ fractal dans le cas "standard=FAUX" et "iterations=0".  */ \
                                        /* Cette valeur grantit la compatibilite anterieure...                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D U   C H A M P   F R A C T A L  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));

     DEFV(Float,INIT(tranche_Z,TRANCHE_VERTICALE));
     DEFV(Float,INIT(facteur_tranche_Z,FACTEUR_DE_LA_TRANCHE_VERTICALE));
     DEFV(Float,INIT(translation_tranche_Z,TRANSLATION_DE_LA_TRANCHE_VERTICALE));
                                        /* Definition de la coordonnee 'Z', ainsi qu'un facteur multiplicateur et une translation.   */
                                        /* Ceux-ci ont ete introduits le 20021004120211 afin de permettre d'utiliser                 */
                                        /* '$xci/fract_3D.01$X' dans '$xci/genere$X' ou le seul parametre variable (le numero        */
                                        /* d'image) est entier. Il sera possible de faire varier 'Z' par exemple dans [0,1].         */
     DEFV(Float,INIT(puissance_OX,PUISSANCE_XYZ));
                                        /* Puissance de reduction recursive des longueurs sur l'axe OX.                              */
     DEFV(Float,INIT(puissance_OY,PUISSANCE_XYZ));
                                        /* Puissance de reduction recursive des longueurs sur l'axe OY.                              */
     DEFV(Float,INIT(puissance_OZ,PUISSANCE_XYZ));
                                        /* Puissance de reduction recursive des longueurs sur l'axe OZ.                              */
     DEFV(Float,INIT(puissance_ponderation,PUISSANCE));
                                        /* Puissance de reduction recursive des coefficients de ponderation.                         */
     DEFV(Int,INIT(niveau,NIVEAU));
                                        /* Niveau de recursion maximum. On notera le 20110221120333 l'influence de sa valeur quant   */
                                        /* au temps de calcul. Les experiences ont ete faites sur '$LACT18' au format 'Suq' et sans  */
                                        /* autre argument que "niveau=" :                                                            */
                                        /*                                                                                           */
                                        /*                  niveau=1            time=0.488          *                                */
                                        /*                  niveau=2            time=0.82           *                                */
                                        /*                  niveau=3            time=1.192          |*                               */
                                        /*                  niveau=4            time=1.612          |*                               */
                                        /*                  niveau=5            time=2              |*                               */
                                        /*                  niveau=6            time=2.412          |-*                              */
                                        /*                  niveau=7            time=2.884          |-*                              */
                                        /*                  niveau=8            time=3.32           |--*                             */
                                        /*                  niveau=9            time=3.82           |--*                             */
                                        /*                  niveau=10           time=4.448          |---*                            */
                                        /*                  niveau=11           time=5.044          |---*                            */
                                        /*                  niveau=12           time=5.752          |----*                           */
                                        /*                  niveau=13           time=6.652          |-----*                          */
                                        /*                  niveau=14           time=7.484          |-----*                          */
                                        /*                  niveau=15           time=8.552          |------*                         */
                                        /*                  niveau=16           time=9.828          |--------*                       */
                                        /*                  niveau=17           time=11.316         |---------*                      */
                                        /*                  niveau=18           time=13.028         |----------*                     */
                                        /*                  niveau=19           time=15.14          |------------*                   */
                                        /*                  niveau=20           time=15.276         |-------------*                  */
                                        /*                                                                                           */
                                        /* (en notant que l'on ne va pas au-dela de "niveau=20" a cause du format 'Suq' et du test   */
                                        /* d'optimisation en fonction de la taille des nailles par rapport aux pixels...).           */
                                        /*                                                                                           */
                                        /* Ce graphe montre que le temps de calcul ne varie pas lineairement en fonction du niveau   */
                                        /* de recursivite, mais plutot de facon quadratique...                                       */
     DEFV(Int,INIT(graine,GRAINE));
     DEFV(Float,INIT(borne_inferieure,BORNE_INFERIEURE));
     DEFV(Float,INIT(borne_superieure,BORNE_SUPERIEURE));
                                        /* Definition du generateur aleatoire...                                                     */
     DEFV(Float,INIT(facteur_d_echelle_OX,ECHELLE_OX));
     DEFV(Float,INIT(facteur_d_echelle_OY,ECHELLE_OY));
     DEFV(Float,INIT(facteur_d_echelle_OZ,ECHELLE_OZ));
                                        /* Argument de facteur d echelle du champ.                                                   */
     DEFV(Float,INIT(translation_OX,TRANSLATION_OX));
     DEFV(Float,INIT(translation_OY,TRANSLATION_OY));
     DEFV(Float,INIT(translation_OZ,TRANSLATION_OZ));
                                        /* Argument de translation du champ.                                                         */
     DEFV(Float,INIT(rotation_OX,ROTATION_OX));
     DEFV(Float,INIT(rotation_OY,ROTATION_OY));
     DEFV(Float,INIT(rotation_OZ,ROTATION_OZ));
                                        /* Rotation du champ.                                                                        */
     DEFV(Float,INIT(origine_OX,FLOT__UNDEF));
     DEFV(Float,INIT(origine_OY,FLOT__UNDEF));
     DEFV(Float,INIT(origine_OZ,FLOT__UNDEF));
     DEFV(Float,INIT(extremite_OX,FLOT__UNDEF));
     DEFV(Float,INIT(extremite_OY,FLOT__UNDEF));
     DEFV(Float,INIT(extremite_OZ,FLOT__UNDEF));
                                        /* Definition du 3D-tore support du champ (comme des coordonnees dans [0,1]).                */

     DEFV(Logical,INIT(les_mailles_par_defaut_sont_denormalisees,LES_MAILLES_PAR_DEFAUT_SONT_DENORMALISEES));
                                        /* Le 20220114093506 a ete introduite cette possibilite afin de pouvoir utiliser des mailles */
                                        /* par defaut qui sont deja normalisees. Ceci fut introduit afin de resoudre le probleme     */
                                        /* qui a ete compris le 'v $xci/fract_2D.01$K 20220114074303'...                             */
                                        /*                                                                                           */
                                        /* La valeur par defaut garantit la compatibilite anterieure...                              */
     DEFV(Float,INIT(maille_OX,FLOT__UNDEF));
     DEFV(Float,INIT(maille_normalisee_OX,MAILLE_NORMALISEE_X));
                                        /* Maille horizontale initiale,                                                              */
     DEFV(Float,INIT(maille_OY,FLOT__UNDEF));
     DEFV(Float,INIT(maille_normalisee_OY,MAILLE_NORMALISEE_Y));
                                        /* Maille verticale initiale.                                                                */
     DEFV(Float,INIT(maille_OZ,FLOT__UNDEF));
     DEFV(Float,INIT(maille_normalisee_OZ,MAILLE_NORMALISEE_Z));
                                        /* Maille verticale initiale.                                                                */

     DEFV(coeffF_3D,Cechelle_globale);
                                        /* Echelle globale du champ.                                                                 */
     DEFV(deltaF_3D,translation);
                                        /* Translation du champ.                                                                     */
     DEFV(pointF_3D,origine);
                                        /* Definition de l'origine du 3D-tore,                                                       */
     DEFV(pointF_3D,extremite);
                                        /* Definition de l'extremite du 3D-tore.                                                     */
     DEFV(deltaF_3D,maille_initiale);
                                        /* Maille initiale.                                                                          */

     DEFV(genere_p,INIT(valeur_initiale_du_champ_fractal_____standard,VALEUR_INITIALE_DU_CHAMP_FRACTAL_____STANDARD));
                                        /* Donne la valeur initiale du champ fractal dans le cas "standard=VRAI" et "iterations=0".  */
                                        /* Cette valeur grantit la compatibilite anterieure (introduit le 20201024110743).           */
     DEFV(Float,INIT(valeur_initiale_du_champ_fractal_non_standard,VALEUR_INITIALE_DU_CHAMP_FRACTAL_NON_STANDARD));
                                        /* Donne la valeur initiale du champ fractal dans le cas "standard=FAUX" et "iterations=0".  */
                                        /* Cette valeur grantit la compatibilite anterieure...                                       */

#include  xci/substitue.03.I"
                                        /* Introduit le 20110401191318 sous cette forme...                                           */
     /*..............................................................................................................................*/
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("IFfractal_3D_precises_____compatibilite_20191108=""compatibilite_20191108="
                                       ,IFfractal_3D_precises_____compatibilite_20191108
                                        );
                                        /* Parametre introduit le 20191108135809...                                                  */

                         GET_ARGUMENT_L("IFnormalisation_____compatibilite_20120705=""compatibilite_20120705="
                                       ,IFnormalisation_____compatibilite_20120705
                                        );
                                        /* Parametre introduit le 20120705165959...                                                  */

                         GET_ARGUMENT_L
                             ("Fcalcul_d_un_noeud_relativement_au_centre_____compatibilite_20080925=""compatibilite_20080925="
                             ,Fcalcul_d_un_noeud_relativement_au_centre_____compatibilite_20080925
                              );
                                        /* Introduit le 20080925164842...                                                            */
                         GET_ARGUMENT_L("TRANSLATION_TORIQUE_____compatibilite_20090918=""compatibilite_20090918="
                                       ,TRANSLATION_TORIQUE_____compatibilite_20090918
                                        );
                                        /* Introduit le 20090918101823...                                                            */

                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_L("standard=",les_images_sont_standards);

                         GET_ARGUMENTS2_P("niveau_initial=""ni0="
                                         ,valeur_initiale_du_champ_fractal_____standard
                                         ,Ifloat_std_____niveau_plancher_a_utiliser_si_les_extrema_sont_egaux
                                          );
                                        /* Parametre introduit le 20201024110743...                                                  */
                                        /*                                                                                           */
                                        /* Le 20201024135848, je note que "n0=" n'est pas utilise ici afin d'etre homogene avec      */
                                        /* 'v $xci/fract_2D.01$K .ni0=.'...                                                          */
                         GET_ARGUMENT_F("valeur_initiale=""v0=",valeur_initiale_du_champ_fractal_non_standard);
                                        /* Parametre introduit le 20191108152547...                                                  */

                         GET_ARGUMENT_F("z=""Z=",tranche_Z);
                         GET_ARGUMENT_F("kz=""KZ=",facteur_tranche_Z);
                         GET_ARGUMENT_F("trtz=""TRTZ=",translation_tranche_Z);
                                        /* Le 20050623150941, "trz=" a ete remplace par "trtz=" (double definition...).              */
                                        /*                                                                                           */
                                        /* Le 20050623150941, "TRZ=" a ete remplace par "TRTZ=" (double definition...).              */
                         GET_ARGUMENT_I("premier=",aleat_2_____premier_niveau_de_recursion_a_utiliser);
                         GET_ARGUMENT_I("recursivite=""profondeur=""niveau=""niveaux=""dernier=""iterations=",niveau);
                                        /* L'option synonyme "recursivite=" a ete introduite le 20050530152025 et "iterations="      */
                                        /* le 20090307120221, puis "niveaux=" le 20111224175255...                                   */
                         GET_ARGUMENT_I("modulo=",aleat_2_____borne_superieure_du_niveau_de_recursion);
                         GET_ARGUMENT_I("methode=",gen_ft_____methode_standard);
                         GET_ARGUMENT_I("graine=",graine);
                         GET_ARGUMENT_L("affiner_rdn=",rdnIFnD_____affiner_la_generation);
                         GET_ARGUMENT_L("iterer_rdn=",rdnIFnD_____iterer_la_generation);
                         GET_ARGUMENT_F("extension=",rdnF3D_etendu_____extension);

                         GET_ARGUMENT_F("rdn_inferieur=""inf=",borne_inferieure);
                         GET_ARGUMENT_F("rdn_superieur=""sup=",borne_superieure);
                                        /* Je note le 20160120080544 que {borne_inferieure,borne_superieure} n'ont que tres peu      */
                                        /* d'interet car, en effet, contrairement aux apparences, elles ne definissent pas les       */
                                        /* bornes du champ factal genere (elles parametrent en fait le generateur aleatoire...).     */
                                        /* C'est en fait les arguments "NOIR=" et "BLANC=" qui jouent ce role...                     */

                         GET_ARGUMENT_F("PrdnF3D_NEUT=""NEUT=",rdnF3D_____ponderation_NEUT);
                         GET_ARGUMENT_F("PrdnF3D_GAUS=""GAUS=",rdnF3D_____ponderation_GAUS);
                         GET_ARGUMENT_F("PrdnF3D_GAUS_esperance=""GAUS_esperance=",rdnF3D_____ponderation_GAUS_esperance_);
                         GET_ARGUMENT_F("PrdnF3D_GAUS_ecart_type=""GAUS_ecart_type=",rdnF3D_____ponderation_GAUS_ecart_type);
                                        /* Parametres introduits le 20110325114634...                                                */

                         CONTROLE_DE_L_ADAPTATION_A_UNE_LOI_DE_DISTRIBUTION_QUELCONQUE;
                                        /* Introduit le 20110401182124 sous cette forme...                                           */

                         GET_ARGUMENT_L("centrer_coordonnees=""cc=",IFfractal_3D_precises_____centrer_les_coordonnees);
                                        /* Parametres introduits le 20220113181027...                                                */

                         GET_ARGUMENT_F("epsilon=",aleat_2_____epsilon_de_generation_fractale);
                         GET_ARGUMENT_L("editer_mailles_ponderations=""emp=""mailles="
                                       ,aleat_2_____editer_les_mailles_et_les_ponderations
                                        );
                                        /* Le 20090811095843 furent introduits "editer_mailles_ponderations=" et "emp=".             */
                         GET_ARGUMENT_L("aborter_apres_editions_mailles_ponderations=""aborter="
                                       ,aleat_2_____aborter_apres_l_edition_des_mailles_et_des_ponderations
                                        );
                                        /* Arguments introduits le 20180708115141...                                                 */

                         GET_ARGUMENT_L("editer_noeuds_valeurs_aleatoires=""enva="
                                       ,aleat_2_____editer_les_noeuds_et_les_valeurs_aleatoires
                                        );
                                        /* Parametres introduits le 20220111094650...                                                */
                         GET_ARGUMENT_L("editer_noeuds=""en=""noeuds="
                                       ,aleat_2_____editer_uniquement_les_noeuds
                                        );
                                        /* Parametres introduits le 20220113172710...                                                */

                         GET_ARGUMENT_L("visualiser_mailles=""visualiser=""vm=",aleat_2_____visualiser_les_mailles);
                         GET_ARGUMENT_I("epaisseur_mailles=""epaisseur=""em=",aleat_2_____epaisseur_de_visualisation_des_mailles);
                         GET_ARGUMENT_L("visualiser_mailles_borne_inferieure=""vmbi="
                                       ,aleat_2_____visualiser_les_mailles__avec__borne_inferieure
                                        );
                         GET_ARGUMENT_F("visualiser_mailles_niveau=""vmn="
                                       ,aleat_2_____visualiser_les_mailles__avec__une_valeur_donnee
                                        );
                                        /* Arguments completes le 20111019100245, puis le 20210604130949...                          */

                         GET_ARGUMENT_L("valider_mailles=""valider=",aleat_2_____valider_les_mailles);
                         GET_ARGUMENT_L("valider_coordonnees_barycentriques=""vcb="
                                       ,IFfractal_2D_precises_____valider_les_coordonnees_barycentriques
                                        );
                                        /* Introduit le 20140625122145...                                                            */
                         GET_ARGUMENT_L("message_bouclage_calcul_noeud=""mbcn="
                                       ,MOVE_NOEUD_____editer_message_bouclage_de_calcul_d_un_noeud
                                        );
                                        /* Introduit le 20140625123105...                                                            */

                         GET_ARGUMENT_L("cubique=",IFfractal_3D_precises_____utiliser_l_INTERPOLATION_CUBIQUE);
                         GET_ARGUMENT_N("lineaire=",IFfractal_3D_precises_____utiliser_l_INTERPOLATION_CUBIQUE);
                         GET_ARGUMENT_L("transformer_lambda=",IFfractal_____transformer_les_coordonnees_barycentriques);
                         GET_ARGUMENT_F("composante_01=""c01="
                                       ,aleat_2_____facteur_de_composante_01_de_la_fonction_generale_de_reduction
                                        );
                         GET_ARGUMENT_F("composante_02=""c02="
                                       ,aleat_2_____facteur_de_composante_02_de_la_fonction_generale_de_reduction
                                        );
                         GET_ARGUMENT_F("composante_03=""c03="
                                       ,aleat_2_____facteur_de_composante_03_de_la_fonction_generale_de_reduction
                                        );
                         GET_ARGUMENT_F("composante_04=""c04="
                                       ,aleat_2_____facteur_de_composante_04_de_la_fonction_generale_de_reduction
                                        );
                         GET_ARGUMENT_F("composante_11=""c11="
                                       ,aleat_2_____facteur_de_composante_11_de_la_fonction_generale_de_reduction
                                        );
                         GET_ARGUMENT_F("composante_21=""c21="
                                       ,aleat_2_____facteur_de_composante_21_de_la_fonction_generale_de_reduction
                                        );
                                        /* Les six options abregees de type "c01=" ont ete introduite le 20070925110530...           */
                         GET_ARGUMENT_L("lissage=",IFfractal_____lissage);
                         GET_ARGUMENT_I("passes=",IFfractal_____nombre_de_passes_de_lissage);
                         GET_ARGUMENT_I("pl=""pas_lissage=",IFfractal_____PAS_COULEURS_de_lissage);

                         GET_ARGUMENT_F("coefficient_n_m2=""nm2=",LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_m2);
                         GET_ARGUMENT_F("coefficient_n_m1=""nm1=",LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_m1);
                         GET_ARGUMENT_F("coefficient_n_0=""n0=",LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_0);
                         GET_ARGUMENT_F("coefficient_n_p1=""np1=",LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_p1);
                         GET_ARGUMENT_F("coefficient_n_p2=""np2=",LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_p2);
                                        /* Arguments introduits le 20160604092521...                                                 */

                         GET_ARGUMENT_F("Pxyzp=""PXYZP=",fonction_generale_de_reduction_____inverse_de_l_exposant);
                         GET_ARGUMENT_F("Px=""PX=",puissance_OX);
                         GET_ARGUMENT_F("Py=""PY=",puissance_OY);
                         GET_ARGUMENT_F("Pz=""PZ=",puissance_OZ);
                         GET_ARGUMENT_F("ponder=""Pp=""PP=",puissance_ponderation);
                         GET_ARGUMENT_F("epsilonX=",aleat_2_____X_epsilon_de_reduction_3D);
                         GET_ARGUMENT_F("epsilonY=",aleat_2_____Y_epsilon_de_reduction_3D);
                         GET_ARGUMENT_F("epsilonZ=",aleat_2_____Z_epsilon_de_reduction_3D);
                         GET_ARGUMENT_F("epsilonP=",aleat_2_____P_epsilon_de_reduction_3D);
                         GET_ARGUMENT_F("epsilonXYZP=",fonction_generale_de_reduction_____epsilon);
                         GET_ARGUMENT_F("f=",aleat_2_____facteur_d_echelle_global);
                         GET_ARGUMENT_F("fx=""fX=",facteur_d_echelle_OX);
                         GET_ARGUMENT_F("fy=""fY=",facteur_d_echelle_OY);
                         GET_ARGUMENT_F("fz=""fZ=",facteur_d_echelle_OZ);
                         GET_ARGUMENT_F("trx=""trX=",translation_OX);
                         GET_ARGUMENT_F("try=""trY=",translation_OY);
                         GET_ARGUMENT_F("trz=""trZ=",translation_OZ);
                         PROCESS_ARGUMENT_F("ROTATION_OX=",rotation_OX
                                           ,BLOC(VIDE;)
                                           ,BLOC(EGAL(vecteurs_____ordre_de_la_ROTATION_0X,nombre_d_arguments_recuperes);
                                                 )
                                            );
                         PROCESS_ARGUMENT_F("ROTATION_OY=",rotation_OY
                                           ,BLOC(VIDE;)
                                           ,BLOC(EGAL(vecteurs_____ordre_de_la_ROTATION_0Y,nombre_d_arguments_recuperes);
                                                 )
                                            );
                         PROCESS_ARGUMENT_F("ROTATION_OZ=",rotation_OZ
                                           ,BLOC(VIDE;)
                                           ,BLOC(EGAL(vecteurs_____ordre_de_la_ROTATION_0Z,nombre_d_arguments_recuperes);
                                                 )
                                            );
                                        /* ATTENTION, l'utilisation des fonction '_____cNORMALISE_O?(...)' pour initialiser par      */
                                        /* defaut le tore est prematuree car, en effet, les dimensions de l'espace                   */
                                        /* correspondent a celles qui sont generees dans 'v $xiii/Images$STR' et donc a un format    */
                                        /* de type 'Std'. Malgre tout, cela est maintenu (le 19971106084608) pour des raisons de     */
                                        /* compatibilite (en particulier avec les calculs qui utilisent les valeurs par defaut...).  */
                         GIT_ARGUMENT_F("Ox=""OX=",origine_OX,_____cNORMALISE_OX(TORE_3D_ORIGINE));
                         GIT_ARGUMENT_F("Oy=""OY=",origine_OY,_____cNORMALISE_OY(TORE_3D_ORIGINE));
                         GIT_ARGUMENT_F("Oz=""OZ=",origine_OZ,_____cNORMALISE_OZ(TORE_3D_ORIGINE));
                         GIT_ARGUMENT_F("Ex=""EX=",extremite_OX,_____cNORMALISE_OX(TORE_3D_EXTREMITE));
                         GIT_ARGUMENT_F("Ey=""EY=",extremite_OY,_____cNORMALISE_OY(TORE_3D_EXTREMITE));
                         GIT_ARGUMENT_F("Ez=""EZ=",extremite_OZ,_____cNORMALISE_OZ(TORE_3D_EXTREMITE));
                                        /* ATTENTION, l'utilisation des fonction '_____cNORMALISE_O?(...)' pour initialiser par      */
                                        /* defaut le tore est prematuree car, en effet, les dimensions de l'espace                   */
                                        /* correspondent a celles qui sont generees dans 'v $xiii/Images$STR' et donc a un format    */
                                        /* de type 'Std'. Malgre tout, cela est maintenu (le 19971106084608) pour des raisons de     */
                                        /* compatibilite (en particulier avec les calculs qui utilisent les valeurs par defaut...).  */
                         GET_ARGUMENT_I("entiere=",aleat_2_____facteur_de_generation_entiere);
                         GET_ARGUMENT_F("petite=",aleat_2_____plus_petite_maille_significative);
                         GET_ARGUMENT_F("limite=",aleat_2_____distance_relative_limite_des_mailles);
                         GET_ARGUMENT_F("derivees=",IFfractal_2D_precises__IFfractal_3D_precises_____facteur_des_derivees_numeriques);
                                        /* ATTENTION, l'utilisation des fonction '_____lNORMALISE_O?(...)' pour initialiser par      */
                                        /* defaut la maille initiale est prematuree car, en effet, les dimensions de l'espace        */
                                        /* correspondent a celles qui sont generees dans 'v $xiii/Images$STR' et donc a un format    */
                                        /* de type 'Std'. Malgre tout, cela est maintenu (le 19971106084608) pour des raisons de     */
                                        /* compatibilite (en particulier avec les calculs qui utilisent les valeurs par defaut...).  */

                         GET_ARGUMENT_L("mailles_par_defaut_denormalisees=""mpdd=",les_mailles_par_defaut_sont_denormalisees);
                         GET_ARGUMENT_N("mailles_par_defaut_normalisees=""mpdn=",les_mailles_par_defaut_sont_denormalisees);
                                        /* Introduit le 20220114093506 afin de controler l'usage des arguments suivants...           */
                                        /*                                                                                           */
                                        /* On notera l'usage a faire de cet indicateur :                                             */
                                        /*                                                                                           */
                                        /*                  mpdd=VRAI      ==>  On utilisera {mx,my} denormalisees initialement et   */
                                        /*                                      normalisees ci-apres alors que '$formatI' n'est pas  */
                                        /*                                      encore connu...                                      */
                                        /*                                                                                           */
                                        /*                  mpdd=FAUX      ==>  On utilisera {Fmx,Fmy} normalisees initialement et   */
                                        /*                                      independemment de '$formatI'...                      */
                                        /*                                                                                           */
                         GIT_ARGUMENT_F("mx=""mX=",maille_OX,_____lNORMALISE_OX(I_lHOMOTHETIE_Std_OX(MAILLE_X)));
                         GET_ARGUMENT_F("Fmx=""FmX=",maille_normalisee_OX);
                         GIT_ARGUMENT_F("my=""mY=",maille_OY,_____lNORMALISE_OY(I_lHOMOTHETIE_Std_OY(MAILLE_Y)));
                         GET_ARGUMENT_F("Fmy=""FmY=",maille_normalisee_OY);
                         GIT_ARGUMENT_F("mz=""mZ=",maille_OZ,_____lNORMALISE_OZ(I_lHOMOTHETIE_Std_OZ(MAILLE_Z)));
                         GET_ARGUMENT_F("Fmz=""FmZ=",maille_normalisee_OZ);
                                        /* ATTENTION, l'utilisation des fonction '_____lNORMALISE_O?(...)' pour initialiser par      */
                                        /* defaut la maille initiale est prematuree car, en effet, les dimensions de l'espace        */
                                        /* correspondent a celles qui sont generees dans 'v $xiii/Images$STR' et donc a un format    */
                                        /* de type 'Std'. Malgre tout, cela est maintenu (le 19971106084608) pour des raisons de     */
                                        /* compatibilite (en particulier avec les calculs qui utilisent les valeurs par defaut...).  */
                                        /*                                                                                           */
                                        /* Le 20120210192754, les 'I_lHOMOTHETIE_Std_O?(...)'s  furent introduits...                 */
                                        /*                                                                                           */
                                        /* Le 20220114093506 furent introduites les mailles normalisees par defaut...                */

                         GET_ARGUMENT_L("Frn=""Frenormaliser=""rn=""renormaliser="
                                       ,IFfractal_3D_precises_____renormaliser_le_champ_automatiquement
                                        );
                         GET_ARGUMENT_F("origine=""o=",IFnormalisation_____niveau_origine___de_normalisation);
                         GET_ARGUMENT_F("extremite=""e=",IFnormalisation_____niveau_extremite_de_normalisation);
                         GET_ARGUMENT_L("zero=",IFnormalisation_____conserver_le_zero);
                                        /* Parametres introduits le 20090307114722...                                                */
                         GET_ARGUMENT_L("editer_message_extrema=""eme="
                                       ,Ifloat_std_____editer_le_message_d_attention_relatif_aux_extrema
                                        );
                                        /* Parametres introduits le 20201024110743...                                                */
                         GET_ARGUMENT_P("NOIR=",Ifloat_std_____niveau_NOIR);
                         GET_ARGUMENT_P("BLANC=",Ifloat_std_____niveau_BLANC);
                                        /* Parametres introduits le 20160120080544...                                                */

                         GET_ARGUMENT_L("aleatoire=""a=",rdnF3D_____generer_une_valeur_aleatoire);
                         GET_ARGUMENT_N("non_aleatoire=""na=",rdnF3D_____generer_une_valeur_aleatoire);
                         GET_ARGUMENT_F("non_aleatoire_ponderation_X=""napx=",rdnF3D_____ponderation_X);
                         GET_ARGUMENT_F("non_aleatoire_ponderation_Y=""napy=",rdnF3D_____ponderation_Y);
                         GET_ARGUMENT_F("non_aleatoire_ponderation_Z=""napz=",rdnF3D_____ponderation_Z);
                         GET_ARGUMENT_F("non_aleatoire_translation_XYZ=""natxyz=",rdnF3D_____translation_XYZ);
                                        /* Parametres introduits le 20220113112749...                                                */

                         GET_ARGUMENT_F("non_aleatoire_ponderation_de_NEUT=""napNEUT="
                                       ,FfTransformUniverselle1_____ponderation_de_NEUT
                                        );
                         GET_ARGUMENT_F("non_aleatoire_ponderation_de_COSX=""napCOSX="
                                       ,FfTransformUniverselle1_____ponderation_de_COSX
                                        );
                         GET_ARGUMENT_F("non_aleatoire_ponderation_de_SINX=""napSINX="
                                       ,FfTransformUniverselle1_____ponderation_de_SINX
                                        );
                         GET_ARGUMENT_F("non_aleatoire_ponderation_de_TANX=""napTANX="
                                       ,FfTransformUniverselle1_____ponderation_de_TANX
                                        );
                         GET_ARGUMENT_F("non_aleatoire_ponderation_de_ATAN=""napATAN="
                                       ,FfTransformUniverselle1_____ponderation_de_ATAN
                                        );
                         GET_ARGUMENT_F("non_aleatoire_arg_x_ATAN=""naaxATAN="
                                       ,FfTransformUniverselle1_____arg_x_ATAN
                                        );
                         GET_ARGUMENT_F("non_aleatoire_ponderation_de_COHX=""napCOHX="
                                       ,FfTransformUniverselle1_____ponderation_de_COHX
                                        );
                         GET_ARGUMENT_F("non_aleatoire_ponderation_de_SIHX=""napSIHX="
                                       ,FfTransformUniverselle1_____ponderation_de_SIHX
                                        );
                         GET_ARGUMENT_F("non_aleatoire_ponderation_de_TAHX=""napTAHX="
                                       ,FfTransformUniverselle1_____ponderation_de_TAHX
                                        );
                         GET_ARGUMENT_F("non_aleatoire_ponderation_de_CSHX=""napCSHX="
                                       ,FfTransformUniverselle1_____ponderation_de_CSHX
                                        );
                         GET_ARGUMENT_F("non_aleatoire_ponderation_de_SSHX=""napSSHX="
                                       ,FfTransformUniverselle1_____ponderation_de_SSHX
                                        );
                         GET_ARGUMENT_F("non_aleatoire_ponderation_de_CTHX=""napCTHX="
                                       ,FfTransformUniverselle1_____ponderation_de_CTHX
                                        );
                         GET_ARGUMENT_F("non_aleatoire_ponderation_de_ATAH=""napATAH="
                                       ,FfTransformUniverselle1_____ponderation_de_ATAH
                                        );
                         GET_ARGUMENT_F("non_aleatoire_ponderation_de_SLOGX=""napSLOGX="
                                       ,FfTransformUniverselle1_____ponderation_de_SLOGX
                                        );
                         GET_ARGUMENT_F("non_aleatoire_ponderation_de_EXPX=""napEXPX="
                                       ,FfTransformUniverselle1_____ponderation_de_EXPX
                                        );
                                        /* Parametres introduits le 20220116165645...                                                */
                         )
                    );

     INITIALISATION_TRANSFORMATION;
                                        /* Initialisation a priori (bien que son absence la rende implicite par la suite...).        */
     GENERATION_DE_LA_MATRICE_DE_ROTATION(vecteurs_____ordre_de_la_ROTATION_0X
                                         ,T_ROTATION_X(rotation_OX);
                                         ,vecteurs_____ordre_de_la_ROTATION_0Y
                                         ,T_ROTATION_Y(rotation_OY);
                                         ,vecteurs_____ordre_de_la_ROTATION_0Z
                                         ,T_ROTATION_Z(rotation_OZ);
                                          );
                                        /* Mise en place du produit des trois rotations relatives aux trois axes.                    */

     Test(IL_FAUT(IFfractal_____transformer_les_coordonnees_barycentriques))
                                        /* Test introduit le 20110402173913 a cause de la nouvelle possibilite permettant de         */
                                        /* choisir une loi de distribution arbitraire ('RDN_ARBITRAIRE_SUB')...                      */
          Bblock
          Test(IFNE_chaine(nom_paletteA,NOM_PIPE))
               Bblock
               CALS(Iload_palette_de_couleurs(nom_paletteA,ESPACE_DE_COULEURS_RVB));
                                        /* Depuis l'introduction le 19980903153710 de la possibilite de transformer independamment   */
                                        /* par 'v TRANSFORMATION_COORDONNEE_BARYCENTRIQUE $xiii/aleat.2$vv$FON' les coordonnees      */
                                        /* barycentriques, il est imperatif de charger "normalement" la palette de couleurs Argument */
                                        /* afin que les listes {L_SUBSTITUTION_ROUGE,L_SUBSTITUTION_VERTE,L_SUBSTITUTION_BLEUE}      */
                                        /* soient correctement initialisees. Enfin, on notera que le code qui suit et qui est        */
                                        /* destine a gerer la 'substitution_courante' n'est pas modifie pour eviter les erreurs...   */
                                        /*                                                                                           */
                                        /* Le 20110402175648 je note que ce 'Iload_palette_de_couleurs(...)' ne me semble pas        */
                                        /* utile a cause de 'v $xci/substitue.05$I CHARGER_UNE_LISTE_DE_SUBSTITUTION', mais dans     */
                                        /* le doute, je m'abstiens de le supprimer...                                                */
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFET(IL_FAUT(IFfractal_____transformer_les_coordonnees_barycentriques)
              ,IFEQ(ADAPTATION_A_UNE_LOI_DE_DISTRIBUTION_QUELCONQUE_____loi_de_distribution,RDN_ARBITRAIRE_SUB)
               )
          )
                                        /* Test introduit le 20110402173913 a cause de la nouvelle possibilite permettant de         */
                                        /* choisir une loi de distribution arbitraire ('RDN_ARBITRAIRE_SUB')...                      */
          Bblock
          PRINT_ATTENTION("incompatibilite : transformation des coordonnees barycentriques/loi de distribution 'RDN_ARBITRAIRE_SUB'");
          PRINT_ATTENTION("c'est loi de distribution 'RDN_ARBITRAIRE_SUB' qui l'emporte");

          EGAL(IFfractal_____transformer_les_coordonnees_barycentriques,FAUX);
          Eblock
     ATes
          Bblock
          Eblock
     ETes

#include  xci/substitue.05.I"
                                        /* Introduit le 20110401191318...                                                            */

     INITIALISATION_COEFFICIENT_3D(Cechelle_globale,facteur_d_echelle_OX,facteur_d_echelle_OY,facteur_d_echelle_OZ);
                                        /* Definition de l'echelle globale sur le champ fractal 3D.                                  */
     INITIALISATION_ACCROISSEMENT_3D(translation,translation_OX,translation_OY,translation_OZ);
                                        /* Definition de la translation sur le champ.                                                */
     INITIALISATION_POINT_3D(origine,origine_OX,origine_OY,origine_OZ);
     INITIALISATION_POINT_3D(extremite,extremite_OX,extremite_OY,extremite_OZ);
                                        /* Definition du 3D-tore support du champ.                                                   */

     Test(EST_VRAI(les_mailles_par_defaut_sont_denormalisees))
                                        /* Test introduit le 20220114093506...                                                       */
          Bblock
          INITIALISATION_ACCROISSEMENT_3D(maille_initiale,maille_OX,maille_OY,maille_OZ);
                                        /* Definition de la maille initiale (denormalisees par defaut).                              */
          Eblock
     ATes
          Bblock
          INITIALISATION_ACCROISSEMENT_3D(maille_initiale,maille_normalisee_OX,maille_normalisee_OY,maille_normalisee_OZ);
                                        /* Definition de la maille initiale (normalisees par defaut).                                */
          Eblock
     ETes

     Test(EST_VRAI(les_images_sont_standards))
          Bblock
          CALi(Inoir(ImageR));
                                        /* Initialisation de l'image Resultat.                                                       */

          CALS(Ifractal_3D(ImageR
                          ,AXPB(facteur_tranche_Z,tranche_Z,translation_tranche_Z)
                          ,puissance_OX,puissance_OY,puissance_OZ,puissance_ponderation
                          ,niveau
                          ,graine,borne_inferieure,borne_superieure
                          ,ADRESSE(Cechelle_globale)
                          ,ADRESSE(translation)
                          ,ADRESSE(origine)
                          ,ADRESSE(extremite)
                          ,ADRESSE(maille_initiale)
                           )
               );
                                        /* Generation du champ fractal "standard"...                                                 */
          CALi(Iupdate_image(nom_imageR,ImageR));
          Eblock
     ATes
          Bblock
                                        /* Cas d'une image 'imageF' :                                                                */
          CALi(IFinitialisation(IFmageR,valeur_initiale_du_champ_fractal_non_standard));
                                        /* Initialisation de l'image Resultat.                                                       */

          CALS(IFfractal_3D_precises(IFmageR
                                    ,AXPB(facteur_tranche_Z,tranche_Z,translation_tranche_Z)
                                    ,puissance_OX,puissance_OY,puissance_OZ,puissance_ponderation
                                    ,niveau
                                    ,graine,borne_inferieure,borne_superieure
                                    ,ADRESSE(Cechelle_globale)
                                    ,ADRESSE(translation)
                                    ,ADRESSE(origine)
                                    ,ADRESSE(extremite)
                                    ,ADRESSE(maille_initiale)
                                     )
               );
                                        /* Generation du champ fractal "precis"...                                                   */
          CALi(IupdateF_image(nom_imageR,IFmageR));
          Eblock
     ETes

     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.