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