/*************************************************************************************************************************************/
/* */
/* 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