/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D ' U N C H A M P F R A C T A L B I - D I M E N S I O N N E L : */
/* */
/* */
/* Definition : */
/* */
/* Cette commande genere dans */
/* l'image nomme un champ 2D */
/* completement fractal. D'autre */
/* avec "source=VRAI", "S=image", */
/* "niveau=1" et "mx=0.02 my=0.02" */
/* (ou tout autre valeur) permet */
/* de lisser l'image "S=" a l'aide */
/* d'une interpolation bi-cubique. */
/* */
/* D'autre part, en utilisant des */
/* parametres du type : */
/* */
/* OX=0 EX=1 mX=0.50 */
/* OY=0 EY=1 mY=0.50 */
/* */
/* on generera un champ 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 ('v $xiirf/PAYS.u9$HauteDef$M'). */
/* En fait, je note le 20220114080539 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 20220113115510, je confirme cela */
/* grace a 'v $ximf/aleatoires$FON 20220113110446' */
/* et grace a l'option "non_aleatoire=" ci-apres... */
/* */
/* Le 20220114074303, j'ai compris. Le probleme */
/* vient du calcul de la maille initiale. Ainsi, par */
/* exemple : */
/* */
/* Puq mx=0.3897435897435897 my=0.3895652173913043 */
/* Pud mx=0.3897435897435897 my=0.3902439024390244 */
/* Pal mx=0.3897435897435897 my=0.3895652173913043 */
/* */
/* avec la definition des dimensions : */
/* */
/* Puq dimX=195 dimY=143 */
/* Pud dimX=390 390%195=0 dimY=287 287%143=1#0 */
/* Pal dimX=780 780%390=0 dimY=575 575%287=1#0 */
/* */
/* et donc le probleme FONDAMENTAL vient du fait */
/* que les differentes '$dimY' ne sont pas multiples */
/* l'une de l'autre. Et cela, rien ne peut le corriger */
/* sauf a modifier en consequence ces constantes de */
/* base, ce qui est evidemment impossible puisque */
/* tout en depend (la taille des images en particulier)... */
/* */
/* */
/* Author of '$xci/fract_2D.01$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1987??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 20110401190932... */
#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_XY \
PARE(0.9) \
/* Puissance de decroissance pour la taille des mailles. */
#define LES_MAILLES_PAR_DEFAUT_SONT_DENORMALISEES \
VRAI \
/* Le 20220114093502 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 ECHELLE_OX \
FU
#define ECHELLE_OY \
FU
/* Echelle du champ. */
#define TRANSLATION_OX \
FZERO
#define TRANSLATION_OY \
FZERO
/* Translation du champ. */
#define ROTATION_OX \
FZERO
#define ROTATION_OY \
FZERO
/* Rotation du champ. */
#define TORE_2D_ORIGINE \
TORE_PLAT_INFERIEUR
#define TORE_2D_EXTREMITE \
TORE_PLAT_SUPERIEUR
/* Definition de l'origine et de l'extremite du 2D-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 20201024110737). */
#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... */
#define IL_Y_A_UNE_SOURCE_ALEATOIRE \
FAUX \
/* Indique s'il faut generer des nombres aleatoires ('FAUX') ou une image source ('VRAI'). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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(puissance_OX,PUISSANCE_XY));
/* Puissance de reduction recursive des longueurs sur l'axe OX. */
DEFV(Float,INIT(puissance_OY,PUISSANCE_XY));
/* Puissance de reduction recursive des longueurs sur l'axe OY. */
DEFV(Float,INIT(puissance_ponderation,PUISSANCE));
/* Puissance de reduction recursive des coefficients de ponderation. */
DEFV(Int,INIT(niveau,NIVEAU));
/* Niveau de recursion maximum ('v $xci/fract_3D.01$K 20110221120333' pour avoir une idee */
/* de la dependance entre le temps de calcul et la valeur de 'niveau'...). */
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));
/* Argument de facteur d echelle du champ. */
DEFV(Float,INIT(translation_OX,TRANSLATION_OX));
DEFV(Float,INIT(translation_OY,TRANSLATION_OY));
/* Argument de translation du champ. */
DEFV(Float,INIT(rotation_OX,ROTATION_OX));
DEFV(Float,INIT(rotation_OY,ROTATION_OY));
/* Rotation du champ. */
DEFV(Float,INIT(origine_OX,FLOT__UNDEF));
DEFV(Float,INIT(origine_OY,FLOT__UNDEF));
DEFV(Float,INIT(extremite_OX,FLOT__UNDEF));
DEFV(Float,INIT(extremite_OY,FLOT__UNDEF));
/* Definition du 2D-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 20220114093502 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(coeffF_2D,Cechelle_globale);
/* Echelle globale du champ. */
DEFV(deltaF_2D,translation);
/* Translation du champ. */
DEFV(pointF_2D,origine);
/* Definition de l'origine du 2D-tore, */
DEFV(pointF_2D,extremite);
/* Definition de l'extremite du 2D-tore. */
/* */
/* Pour obtenir un champ periodique, on utilisera par exemple : */
/* */
/* OX=0 EX=1 */
/* OY=0 EY=1 */
/* */
/* qui "referme" le champ sur lui-meme, et : */
/* */
/* mX=0.125 mY=0.125 */
/* */
/* qui donne des mailles "puissance de 2" et donc "dichotomisables"... */
DEFV(deltaF_2D,maille_initiale);
/* Maille initiale. */
DEFV(Logical,INIT(il_y_a_une_source_aleatoire,IL_Y_A_UNE_SOURCE_ALEATOIRE));
/* Indique si l'on genere des nombres aleatoires ('FAUX') ou si l'on utilise une image */
/* comme source de ceux-ci ('VRAI'). */
DEFV(CHAR,INIC(POINTERc(nom_imageS),NOM_PIPE));
/* Nom de l'eventuelle image source des nombres aleatoires... */
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 20201024110737). */
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 20110401190932 sous cette forme... */
/*..............................................................................................................................*/
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(GET_ARGUMENT_L("IFfractal_2D_precises_____compatibilite_20191108=""compatibilite_20191108="
,IFfractal_2D_precises_____compatibilite_20191108
);
/* Parametre introduit le 20191108135817... */
GET_ARGUMENT_L("IFnormalisation_____compatibilite_20120705=""compatibilite_20120705="
,IFnormalisation_____compatibilite_20120705
);
/* Parametre introduit le 20120705165923... */
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 20080925164852... */
GET_ARGUMENT_L("TRANSLATION_TORIQUE_____compatibilite_20090918=""compatibilite_20090918="
,TRANSLATION_TORIQUE_____compatibilite_20090918
);
/* Introduit le 20090918101808... */
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 20201024110737... */
/* */
/* Le 20201024135848, je note que "n0=" ne peut etre utilise ici, puisqu'il l'est un */
/* peu plus loin avec 'LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_0'... */
GET_ARGUMENT_F("valeur_initiale=""v0=",valeur_initiale_du_champ_fractal_non_standard);
/* Parametre introduit le 20191108152547... */
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 20050530151933 et "iterations=" */
/* le 20090307120218, puis "niveaux=" le 20111224175247... */
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=",rdnF2D_etendu_____extension);
GET_ARGUMENT_F("rdn_inferieur=""inf=",borne_inferieure);
GET_ARGUMENT_F("rdn_superieur=""sup=",borne_superieure);
/* Je note le 20160120080535 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_C("imageS=""S=",nom_imageS);
GET_ARGUMENT_L("source=",il_y_a_une_source_aleatoire);
GET_ARGUMENT_F("PrdnF2D_NEUT=""NEUT=",rdnF2D_____ponderation_NEUT);
GET_ARGUMENT_F("PrdnF2D_GAUS=""GAUS=",rdnF2D_____ponderation_GAUS);
GET_ARGUMENT_F("PrdnF2D_GAUS_esperance=""GAUS_esperance=",rdnF2D_____ponderation_GAUS_esperance_);
GET_ARGUMENT_F("PrdnF2D_GAUS_ecart_type=""GAUS_ecart_type=",rdnF2D_____ponderation_GAUS_ecart_type);
/* Parametres introduits le 20110325114546... */
CONTROLE_DE_L_ADAPTATION_A_UNE_LOI_DE_DISTRIBUTION_QUELCONQUE;
/* Introduit le 20110401182244 sous cette forme... */
GET_ARGUMENT_L("centrer_coordonnees=""cc=",IFfractal_2D_precises_____centrer_les_coordonnees);
/* Parametres introduits le 20220113181007... */
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 20090811095837 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 20180708114945... */
GET_ARGUMENT_L("editer_noeuds_valeurs_aleatoires=""enva="
,aleat_2_____editer_les_noeuds_et_les_valeurs_aleatoires
);
GET_ARGUMENT_L("editer_noeuds=""en=""noeuds="
,aleat_2_____editer_uniquement_les_noeuds
);
/* Parametres introduits le 20220113172718... */
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 20210604131003... */
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 20140625122152... */
GET_ARGUMENT_L("message_bouclage_calcul_noeud=""mbcn="
,Fcalcul_d_un_noeud_relativement_au_centre_____editer_message_bouclage_de_calcul_d_un_noeud
);
/* Introduit le 20140625123059... */
GET_ARGUMENT_L("cubique=",IFfractal_2D_precises_____utiliser_l_INTERPOLATION_CUBIQUE);
GET_ARGUMENT_N("lineaire=",IFfractal_2D_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 20070925110524... */
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 20160604092420... */
GET_ARGUMENT_F("Pxyp=""PXYP=",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("ponder=""Pp=""PP=",puissance_ponderation);
GET_ARGUMENT_F("epsilonX=",aleat_2_____X_epsilon_de_reduction_2D);
GET_ARGUMENT_F("epsilonY=",aleat_2_____Y_epsilon_de_reduction_2D);
GET_ARGUMENT_F("epsilonP=",aleat_2_____P_epsilon_de_reduction_2D);
GET_ARGUMENT_F("epsilonXYP=",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("trx=""trX=",translation_OX);
GET_ARGUMENT_F("try=""trY=",translation_OY);
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);
)
);
/* 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_2D_ORIGINE));
GIT_ARGUMENT_F("Oy=""OY=",origine_OY,_____cNORMALISE_OY(TORE_2D_ORIGINE));
GIT_ARGUMENT_F("Ex=""EX=",extremite_OX,_____cNORMALISE_OX(TORE_2D_EXTREMITE));
GIT_ARGUMENT_F("Ey=""EY=",extremite_OY,_____cNORMALISE_OY(TORE_2D_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 20220114093502 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);
/* 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 20120210183420, 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_2D_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 20090307114730... */
GET_ARGUMENT_L("editer_message_extrema=""eme="
,Ifloat_std_____editer_le_message_d_attention_relatif_aux_extrema
);
/* Parametres introduits le 20201024110737... */
GET_ARGUMENT_P("NOIR=",Ifloat_std_____niveau_NOIR);
GET_ARGUMENT_P("BLANC=",Ifloat_std_____niveau_BLANC);
/* Parametres introduits le 20160120080535... */
GET_ARGUMENT_L("aleatoire=""a=",rdnF2D_____generer_une_valeur_aleatoire);
GET_ARGUMENT_N("non_aleatoire=""na=",rdnF2D_____generer_une_valeur_aleatoire);
GET_ARGUMENT_F("non_aleatoire_ponderation_X=""napx=",rdnF2D_____ponderation_X);
GET_ARGUMENT_F("non_aleatoire_ponderation_Y=""napy=",rdnF2D_____ponderation_Y);
GET_ARGUMENT_F("non_aleatoire_translation_XY=""natxy=",rdnF2D_____translation_XY);
/* Parametres introduits le 20220113112741... */
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 20220116165325... */
)
);
Test(EST_VRAI(il_y_a_une_source_aleatoire))
Bblock
EGAL(translation_OX,FDU);
EGAL(translation_OY,FDU);
/* Introduit le 20081123121103 suite a la remarque 'v $xiii/aleat.2$vv$FON 20081123110627'. */
Eblock
ATes
Bblock
Eblock
ETes
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(FZERO);
);
/* 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 20110402175428 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 20110401190932... */
INITIALISATION_COEFFICIENT_2D(Cechelle_globale,facteur_d_echelle_OX,facteur_d_echelle_OY);
/* Definition de l'echelle globale sur le champ fractal 2D. */
INITIALISATION_ACCROISSEMENT_2D(translation,translation_OX,translation_OY);
/* Definition de la translation sur le champ. */
INITIALISATION_POINT_2D(origine,origine_OX,origine_OY);
INITIALISATION_POINT_2D(extremite,extremite_OX,extremite_OY);
/* Definition du 2D-tore support du champ. */
Test(EST_VRAI(les_mailles_par_defaut_sont_denormalisees))
/* Test introduit le 20220114093506... */
Bblock
INITIALISATION_ACCROISSEMENT_2D(maille_initiale,maille_OX,maille_OY);
/* Definition de la maille initiale (denormalisees par defaut). */
Eblock
ATes
Bblock
INITIALISATION_ACCROISSEMENT_2D(maille_initiale,maille_normalisee_OX,maille_normalisee_OY);
/* Definition de la maille initiale (normalisees par defaut). */
Eblock
ETes
Test(EST_VRAI(il_y_a_une_source_aleatoire))
Bblock
Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA,nom_imageS))))
Bblock
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
EGAL(il_y_a_une_source_aleatoire,IL_Y_A_UNE_SOURCE_ALEATOIRE);
/* En cas de problemes, on inhibe la source aleatoire... */
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
Test(EST_VRAI(les_images_sont_standards))
Bblock
CALi(Inoir(ImageR));
/* Initialisation de l'image Resultat. */
CALS(Ifractal_2D(ImageR
,puissance_OX,puissance_OY,puissance_ponderation
,niveau
,graine,borne_inferieure,borne_superieure
,ADRESSE(Cechelle_globale)
,ADRESSE(translation)
,ADRESSE(origine)
,ADRESSE(extremite)
,ADRESSE(maille_initiale)
,il_y_a_une_source_aleatoire
,ImageA
)
);
/* 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_2D_precises(IFmageR
,puissance_OX,puissance_OY,puissance_ponderation
,niveau
,graine,borne_inferieure,borne_superieure
,ADRESSE(Cechelle_globale)
,ADRESSE(translation)
,ADRESSE(origine)
,ADRESSE(extremite)
,ADRESSE(maille_initiale)
,il_y_a_une_source_aleatoire
,ImageA
)
);
/* Generation du champ fractal "precis"... */
CALi(IupdateF_image(nom_imageR,IFmageR));
Eblock
ETes
RETU_Commande;
Eblock
ECommande