/*************************************************************************************************************************************/ /* */ /* E T U D E T R I D I M E N S I O N N E L L E D E L A D Y N A M I Q U E D E V E R H U L S T */ /* D A N S L A Q U E L L E C H A Q U E C O O R D O N N E E C O R R E S P O N D */ /* A U N E F O R M U L A T I O N D I F F E R E N T E : */ /* */ /* */ /* Author of '$xrk/verhulst.22$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20000829140511). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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_CPP_____AUTORISER_LE_GooF /* Ceci est essentiel puisque l'on souhaite etudier l'influence de la syntaxe sur les */ /* resultats obtenus. Ceci manquait et a ete introduit le 20040420233751. */ @define PRAGMA_CL_____MODULE_NON_OPTIMISABLE /* Ceci est essentiel puisque l'on souhaite etudier l'influence de la syntaxe sur les */ /* resultats obtenus. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I C H I E R S D ' I N C L U D E S : */ /* */ /*************************************************************************************************************************************/ #include INCLUDES_BASE /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S D E B A S E E T U N I V E R S E L L E S : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.11.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 3 */ /* D E F I N I T I O N D E L ' E S P A C E P H Y S I Q U E D A N S R ( D E B U T ) : */ /* */ /* */ /* Nota : */ /* */ /* Les extrema des coordonnees {x,y,z} */ /* ainsi que ceux de leurs differentielles */ /* {dx,dy,dz} sont fixees un peu arbitrairement */ /* et sans etre parametrees. */ /* */ /* */ /*************************************************************************************************************************************/ #define hXmin_ESPACE \ PARE(-1.4) #define hYmin_ESPACE \ PARE(-1.4) #define hZmin_ESPACE \ PARE(-1.4) /* Definition du "coin" inferieur-gauche-arriere de l'espace physique. ATTENTION, il est */ /* evident que logiquement il faudrait prendre {0,0,0} ; ce choix symetrique de celui de */ /* 'h?max_ESPACE' est lie a la visualisation de type "torique" via '?_DU_TORE(...)'. */ #define hXmax_ESPACE \ PARE(1.4) #define hYmax_ESPACE \ PARE(1.4) #define hZmax_ESPACE \ PARE(1.4) /* Definition du "coin" superieur-droite-avant de l'espace physique. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 3 */ /* D E F I N I T I O N D E L ' E S P A C E P H Y S I Q U E D A N S R ( D E B U T ) : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.12.I" #define dXmin_ESPACE \ PARE(-2.00) #define dYmin_ESPACE \ PARE(-2.00) #define dZmin_ESPACE \ PARE(-2.00) /* Definition des minima des differentielles {dx,dy,dz}. */ #define dXmax_ESPACE \ PARE(2.00) #define dYmax_ESPACE \ PARE(2.00) #define dZmax_ESPACE \ PARE(2.00) /* Definition des maxima des differentielles {dx,dy,dz}. */ #include xrk/attractor.1D.I" /* Formules de renormalisation des differentielles dans [0,1] ; elles sont utilisees lorsque */ /* la production d'images en couleurs est demandee (voir 'visualiser_en_RVB'). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S D I F F E R E N T S E S P A C E S E T D E L ' E F F E T D E B R U M E : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.13.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A I D E A U C A D R A G E D E S I M A G E S : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.1C.I" DONNEES_DE_RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES /* Definition des extrema des coordonnees et des derivees. On notera bien l'absence de */ /* point-virgule apres 'DONNEES_DE_RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES'. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E N E R A T I O N D E S I M A G E S : */ /* */ /*************************************************************************************************************************************/ #include xrv/champs_5.14.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S G E N E R A L E S R E L A T I V E S A L A V I S U A L I S A T I O N : */ /* */ /*************************************************************************************************************************************/ #define DCT \ FRA1(FRA2(FU)) DEFV(Local,DEFV(Float,INIT(dct,DCT))); /* Definition de 'dt'. */ #include xrk/attractor.14.I" #define NOMBRE_MAXIMAL_DE_POINTS_GERABLES \ MIN2(NOMBRE_MAXIMAL_DE_POINTS_VISUALISABLES,NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION) \ /* Cette constante permet de gerer d'une facon homogene les listes de dimension */ \ /* 'nombre_de_periodes_de_la_simulation' comme celles de dimension 'nombre_d_iterations'. */ /* ATTENTION, a ne pas confondre : */ /* */ /* 1-'nombre_de_periodes_de_la_simulation' qui definit finalement le nombre d'images que */ /* l'on va generer et qui conditionne toutes les listes (sans exception...) definies par */ /* 'fTRANSFORMAT_31(...)', et */ /* */ /* 2-'nombre_d_iterations' qui definit le nombre de particules visualisees dans chaque */ /* image ; les listes relatives aux particules sont definies elles-aussi a l'aide de la */ /* procedure 'dTRANSFORMAT_31(...)' ce qui signifie que 'nombre_d_iterations' est limite */ /* par 'NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION'... */ /* */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F O N C T I O N D E M E M O R I S A T I O N D U P O I N T C O U R A N T : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.16.I" #define RAYON_DE_VISUALISATION \ FRA4(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation,RAYON_DE_VISUALISATION))); /* Rayon du disque materialisant une iteration. */ BFonctionI DEFV(Local,DEFV(FonctionI,memorisation_1_point_07(AXf,AYf,AZf,AdXf,AdYf,AdZf,numero_de_l_iteration_courante))) DEFV(Argument,DEFV(Float,AXf)); DEFV(Argument,DEFV(Float,AYf)); DEFV(Argument,DEFV(Float,AZf)); /* Definition de la position {x,y,z} de l'iteration courante. */ DEFV(Argument,DEFV(Float,AdXf)); DEFV(Argument,DEFV(Float,AdYf)); DEFV(Argument,DEFV(Float,AdZf)); /* Definition des differentielles {dx,dy,dz} de la position de l'iteration courante. */ DEFV(Argument,DEFV(Int,numero_de_l_iteration_courante)); /* Numero de l'iteration courante afin d'attenuer eventuellement la luminance des points */ /* materialisant chaque iteration en fonction de leur numero (les premieres iterations etant */ /* plus sombres, et les dernieres etant plus lumineuses). */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock #include xrk/attractor.15.I" INIT_ERROR; /*..............................................................................................................................*/ MEMORISATION_DU_POINT_COURANT(X_DERIVEE_DANS_01(AdXf) ,Y_DERIVEE_DANS_01(AdYf) ,Z_DERIVEE_DANS_01(AdZf) ); /* Memorisation du point courant en Noir et Blanc ou en Couleurs, mais uniquement s'il est */ /* visible en fonction des conditions de visualisation... */ RETU_ERROR; Eblock EFonctionI /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F O N C T I O N S D E V I S U A L I S A T I O N E T D ' I N T E R P O L A T I O N : */ /* */ /*************************************************************************************************************************************/ #define GENERER_LA_COORDONNEE_X \ VRAI #define GENERER_LA_COORDONNEE_Y \ VRAI #define GENERER_LA_COORDONNEE_Z \ VRAI DEFV(Local,DEFV(Logical,INIT(generer_la_coordonnee_X,GENERER_LA_COORDONNEE_X))); DEFV(Local,DEFV(Logical,INIT(generer_la_coordonnee_Y,GENERER_LA_COORDONNEE_Y))); DEFV(Local,DEFV(Logical,INIT(generer_la_coordonnee_Z,GENERER_LA_COORDONNEE_Z))); /* Afin de controler la genereation des trois coordonnees... */ =define ZOOM_IMPLICITE \ GRO8(FRA10(FU)) #include xrk/attractor.17.I" #include xrv/particule.31.I" #define TAUX_DE_CROISSANCE \ GRO3(FU) dfTRANSFORMAT_31(liste_TAUX_DE_CROISSANCE,fichier_TAUX_DE_CROISSANCE,TAUX_DE_CROISSANCE_IMPLICITE,TAUX_DE_CROISSANCE) /* Definition du fichier de definition du taux de croissance. */ #define sTAUX_DE_CROISSANCE(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_TAUX_DE_CROISSANCE)) /* Formule generale definissant la variation du taux de croissance. */ #define CX0 \ FRA2(FU) dfTRANSFORMAT_31(liste_VALEUR_INITIALE,fichier_VALEUR_INITIALE,VALEUR_INITIALE_IMPLICITE,CX0) /* Definition du fichier de definition de la valeur initiale 'X(0)'. */ #define sVALEUR_INITIALE(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_VALEUR_INITIALE)) /* Formule generale definissant la variation de la valeur initiale 'X(0)'. */ dfTRANSFORMAT_31(liste_PAS_DE_TEMPS_dct,fichier_PAS_DE_TEMPS_dct,PAS_DE_TEMPS_dct_IMPLICITE,DCT) /* Definition du fichier des pas de temps. */ #define sPAS_DE_TEMPS_dct(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_PAS_DE_TEMPS_dct)) /* Formule generale definissant les variations du pas de temps. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D U C O L O R I A G E : */ /* */ /*************************************************************************************************************************************/ #define COLORIER_ARBITRAIREMENT_LES_POINTS \ FAUX DEFV(Local,DEFV(Logical,INIT(colorier_arbitrairement_les_points,COLORIER_ARBITRAIREMENT_LES_POINTS))); /* Doit-on colorier arbitrairement les points ? */ #define FACTEUR_D_HOMOTHETIE_DES_COULEURS \ FU #define CONSTANTE_DE_TRANSLATION_DES_COULEURS \ FZERO DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_des_couleurs,FACTEUR_D_HOMOTHETIE_DES_COULEURS))); DEFV(Local,DEFV(Float,INIT(constante_de_translation_des_couleurs,CONSTANTE_DE_TRANSLATION_DES_COULEURS))); /* Une transformation du type 'A.c+B' sera appliquee aux couleurs... */ #define ROUGE_IMPLICITE \ BLANC #define VERTE_IMPLICITE \ BLANC #define BLEUE_IMPLICITE \ BLANC /* Definition des composantes chromatiques implicites. */ fTRANSFORMAT_31(fichier_LISTE_ROUGE); fTRANSFORMAT_31(fichier_LISTE_VERTE); fTRANSFORMAT_31(fichier_LISTE_BLEUE); /* Definition des fichiers de listes de vraies couleurs (excluant les fausses). */ /* */ /* ATTENTION, les couleurs des points a visualiser doivent etre definies ainsi : */ /* */ /* ROUGE E [NOIR,BLANC] */ /* VERTE E [NOIR,BLANC] */ /* BLEUE E [NOIR,BLANC] */ /* */ #define LES_NIVEAUX_SONT_DENORMALISES \ VRAI DEFV(Local,DEFV(Logical,INIT(les_niveaux_sont_denormalises,LES_NIVEAUX_SONT_DENORMALISES))); /* Afin de pouvoir introduire des niveaux denormalises. Ceci a ete introduit le */ /* 20131204100042 a cause de 'v $xrv/particule.10$K les_niveaux_sont_denormalises'... */ #define NIVEAU_IMPLICITE \ BLANC fTRANSFORMAT_31(fichier_LISTE_NIVEAU); /* Definition du fichier de listes des fausses couleurs (excluant les vraies couleurs). */ /* */ /* ATTENTION, les couleurs des points a visualiser doivent etre definies ainsi : */ /* */ /* NIVEAU E [NOIR,BLANC] */ /* */ #include xrv/particule.22.I" /* Recuperation d'un fichier contenant une liste de type {X,Y,Z} ou {R,V,B}. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E L A D Y N A M I Q U E D E V E R H U L S T : */ /* */ /* */ /* Definition : */ /* */ /* Considerons la relation de recurrence */ /* suivante : */ /* */ /* 2 */ /* X[n+1] = (1+r).X[n] - r.X[n] */ /* */ /* Cette relation correspond par exemple */ /* a la population annuelle d'une colonie */ /* animale, dont le taux de croissance est R. */ /* */ /* */ /*************************************************************************************************************************************/ #include xrk/verhulst.11.I" dfTRANSFORMAT_31(liste_NOMBRE_D_ITERATIONS,fichier_NOMBRE_D_ITERATIONS,NOMBRE_D_ITERATIONS_IMPLICITE,NOMBRE_D_ITERATIONS) /* Definition du fichier des nombres d'iterations. */ #define sNOMBRE_D_ITERATIONS(numero_de_la_periode) \ INTE(sTRANSFORMAT_31(numero_de_la_periode,liste_NOMBRE_D_ITERATIONS)) \ /* Formule generale definissant les variations du nombre d'iterations. */ DEFV(Local,DEFV(Float,INIT(taux_de_croissance,TAUX_DE_CROISSANCE))); /* Definition du taux de croissance. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S T R O I S F O N C T I O N S ' F ' : */ /* */ /*************************************************************************************************************************************/ DEFV(Local,DEFV(Float,INIT(X1n_1,FLOT__UNDEF))); DEFV(Local,DEFV(Float,INIT(X1n,FLOT__UNDEF))); /* Definition de l'iteration 1 courante. */ DEFV(Local,DEFV(Float,INIT(X2n_1,FLOT__UNDEF))); DEFV(Local,DEFV(Float,INIT(X2n,FLOT__UNDEF))); /* Definition de l'iteration 2 courante. */ DEFV(Local,DEFV(Float,INIT(X3n_1,FLOT__UNDEF))); DEFV(Local,DEFV(Float,INIT(X3n,FLOT__UNDEF))); /* Definition de l'iteration 3 courante. */ DEFV(Local,DEFV(Float,INIT(X4n_1,FLOT__UNDEF))); DEFV(Local,DEFV(Float,INIT(X4n,FLOT__UNDEF))); /* Definition de l'iteration 4 courante. */ DEFV(Local,DEFV(Float,INIT(X5n_1,FLOT__UNDEF))); DEFV(Local,DEFV(Float,INIT(X5n,FLOT__UNDEF))); /* Definition de l'iteration 5 courante. */ #define COEFFICIENT_1_X \ FU #define COEFFICIENT_2_X \ FZERO #define COEFFICIENT_3_X \ FZERO #define COEFFICIENT_4_X \ FZERO #define COEFFICIENT_5_X \ FZERO #define COORDONNEE_X \ LIZ5(coefficient_1_X,X1n \ ,coefficient_2_X,X2n \ ,coefficient_3_X,X3n \ ,coefficient_4_X,X4n \ ,coefficient_5_X,X5n \ ) DEFV(Local,DEFV(Float,INIT(coefficient_1_X,COEFFICIENT_1_X))); DEFV(Local,DEFV(Float,INIT(coefficient_2_X,COEFFICIENT_2_X))); DEFV(Local,DEFV(Float,INIT(coefficient_3_X,COEFFICIENT_3_X))); DEFV(Local,DEFV(Float,INIT(coefficient_4_X,COEFFICIENT_4_X))); DEFV(Local,DEFV(Float,INIT(coefficient_5_X,COEFFICIENT_5_X))); DEFV(Local,DEFV(Float,INIT(coordonnee_X,FLOT__UNDEF))); /* Definition de la coordonnee 'X'. */ #define COEFFICIENT_1_Y \ FZERO #define COEFFICIENT_2_Y \ FU #define COEFFICIENT_3_Y \ FZERO #define COEFFICIENT_4_Y \ FZERO #define COEFFICIENT_5_Y \ FZERO #define COORDONNEE_Y \ LIZ5(coefficient_1_Y,X1n \ ,coefficient_2_Y,X2n \ ,coefficient_3_Y,X3n \ ,coefficient_4_Y,X4n \ ,coefficient_5_Y,X5n \ ) DEFV(Local,DEFV(Float,INIT(coefficient_1_Y,COEFFICIENT_1_Y))); DEFV(Local,DEFV(Float,INIT(coefficient_2_Y,COEFFICIENT_2_Y))); DEFV(Local,DEFV(Float,INIT(coefficient_3_Y,COEFFICIENT_3_Y))); DEFV(Local,DEFV(Float,INIT(coefficient_4_Y,COEFFICIENT_4_Y))); DEFV(Local,DEFV(Float,INIT(coefficient_5_Y,COEFFICIENT_5_Y))); DEFV(Local,DEFV(Float,INIT(coordonnee_Y,FLOT__UNDEF))); /* Definition de la coordonnee 'Y'. */ #define COEFFICIENT_1_Z \ FZERO #define COEFFICIENT_2_Z \ FZERO #define COEFFICIENT_3_Z \ FZERO #define COEFFICIENT_4_Z \ FZERO #define COEFFICIENT_5_Z \ FU #define COORDONNEE_Z \ LIZ5(coefficient_1_Z,X1n \ ,coefficient_2_Z,X2n \ ,coefficient_3_Z,X3n \ ,coefficient_4_Z,X4n \ ,coefficient_5_Z,X5n \ ) DEFV(Local,DEFV(Float,INIT(coefficient_1_Z,COEFFICIENT_1_Z))); DEFV(Local,DEFV(Float,INIT(coefficient_2_Z,COEFFICIENT_2_Z))); DEFV(Local,DEFV(Float,INIT(coefficient_3_Z,COEFFICIENT_3_Z))); DEFV(Local,DEFV(Float,INIT(coefficient_4_Z,COEFFICIENT_4_Z))); DEFV(Local,DEFV(Float,INIT(coefficient_5_Z,COEFFICIENT_5_Z))); DEFV(Local,DEFV(Float,INIT(coordonnee_Z,FLOT__UNDEF))); /* Definition de la coordonnee 'Z'. */ /* */ /* ATTENTION, on notera que l'on choisit l'iteration de type "5" car, en effet, */ /* le 20000830091826, sur '$LACT29', j'ai constate que "2" et "3", de meme que "2" et "4" */ /* donnaient la meme valeur. En fait, le 20001113124656, j'ai constate sur '$LACT14', que */ /* le comportement etait different... */ #define gFx(cx,cy,cz,t) \ coordonnee_X \ /* Definition de la fonction F (x,y,z,t). */ \ /* x */ #define gFy(cx,cy,cz,t) \ coordonnee_Y \ /* Definition de la fonction F (x,y,z,t). */ \ /* y */ #define gFz(cx,cy,cz,t) \ coordonnee_Z \ /* Definition de la fonction F (x,y,z,t). */ \ /* z */ BFonctionF DEFV(Local,DEFV(FonctionF,Fonction_Fx(cx,cy,cz,t))) DEFV(Argument,DEFV(Float,cx)); DEFV(Argument,DEFV(Float,cy)); DEFV(Argument,DEFV(Float,cz)); DEFV(Argument,DEFV(Float,t)); /* Definition des coordonnees spatio-temporelles. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ RETU(gFx(cx,cy,cz,t)); Eblock EFonctionF BFonctionF DEFV(Local,DEFV(FonctionF,Fonction_Fy(cx,cy,cz,t))) DEFV(Argument,DEFV(Float,cx)); DEFV(Argument,DEFV(Float,cy)); DEFV(Argument,DEFV(Float,cz)); DEFV(Argument,DEFV(Float,t)); /* Definition des coordonnees spatio-temporelles. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ RETU(gFy(cx,cy,cz,t)); Eblock EFonctionF BFonctionF DEFV(Local,DEFV(FonctionF,Fonction_Fz(cx,cy,cz,t))) DEFV(Argument,DEFV(Float,cx)); DEFV(Argument,DEFV(Float,cy)); DEFV(Argument,DEFV(Float,cz)); DEFV(Argument,DEFV(Float,t)); /* Definition des coordonnees spatio-temporelles. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ RETU(gFz(cx,cy,cz,t)); Eblock EFonctionF #define Fx(cx,cy,cz,t) \ Fonction_Fx(cx,cy,cz,t) \ /* Definition de la fonction F (x,y,z,t). */ \ /* x */ #define Fy(cx,cy,cz,t) \ Fonction_Fy(cx,cy,cz,t) \ /* Definition de la fonction F (x,y,z,t). */ \ /* y */ #define Fz(cx,cy,cz,t) \ Fonction_Fz(cx,cy,cz,t) \ /* Definition de la fonction F (x,y,z,t). */ \ /* z */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E L ' I N T E G R A T I O N D U S Y S T E M E */ /* D ' E Q U A T I O N S D I F F E R E N T I E L L E S : */ /* */ /*************************************************************************************************************************************/ #include xrk/integr.1B.vv.I" /* Utile uniquement pour definir {cx,cy,cz} et {dcx,dcy,dcz}. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D O N N E E S D E V I S U A L I S A T I O N " T O R I Q U E " : */ /* */ /*************************************************************************************************************************************/ #define R3 \ FRA1(FU) #define I3 \ FZERO #include xrk/fluide_2D.11.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S I N I T I A L I S A T I O N S : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.18.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E T U D E T R I D I M E N S I O N N E L L E D E L A D Y N A M I Q U E D E V E R H U L S T : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_paletteA),NOM_PIPE)); /* Nom de la palette a utiliser en cas de l'utilisation des fausses couleurs. C'est son */ /* absence/presence qui provoque le choix entre les vraies et les fausses couleurs... */ gDEFINITION_LISTE(liste_initiale_des_ROUGE,NOMBRE_MAXIMAL_DE_POINTS_GERABLES); gDEFINITION_LISTE(liste_initiale_des_VERTE,NOMBRE_MAXIMAL_DE_POINTS_GERABLES); gDEFINITION_LISTE(liste_initiale_des_BLEUE,NOMBRE_MAXIMAL_DE_POINTS_GERABLES); gDEFINITION_LISTE(liste_initiale_des_NIVEAU,NOMBRE_MAXIMAL_DE_POINTS_GERABLES); /*..............................................................................................................................*/ INITIALISATIONS_GENERALES; /* Initialisations generales faites au tout debut... */ iTRANSFORMAT_31(liste_TAUX_DE_CROISSANCE,TAUX_DE_CROISSANCE_IMPLICITE); /* Initialisation du taux de croissance. */ iTRANSFORMAT_31(liste_VALEUR_INITIALE,VALEUR_INITIALE_IMPLICITE); /* Initialisation de la valeur initiale de 'X(0)'. */ iTRANSFORMAT_31(liste_PAS_DE_TEMPS_dct,PAS_DE_TEMPS_dct_IMPLICITE); /* Initialisation du pas de temps. */ iTRANSFORMAT_31(liste_NOMBRE_D_ITERATIONS,NOMBRE_D_ITERATIONS_IMPLICITE); /* Initialisation du nombre d'iterations. */ #include xrv/champs_5.1A.I" GET_ARGUMENTSv(nombre_d_arguments ,BLOC(PROCESS_ARGUMENTS_GEOMETRIQUES; PROCESS_ARGUMENT_FICHIER("TAUX_DE_CROISSANCE=" ,fichier_TAUX_DE_CROISSANCE ,liste_TAUX_DE_CROISSANCE ,TAUX_DE_CROISSANCE_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("VALEUR_INITIALE=" ,fichier_VALEUR_INITIALE ,liste_VALEUR_INITIALE ,VALEUR_INITIALE_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("PAS_DE_TEMPS_dct=" ,fichier_PAS_DE_TEMPS_dct ,liste_PAS_DE_TEMPS_dct ,PAS_DE_TEMPS_dct_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_C("NOMBRE_D_ITERATIONS=",fichier_NOMBRE_D_ITERATIONS ,BLOC(VIDE;) ,BLOC(gTRANSFORMAT_31(fichier_NOMBRE_D_ITERATIONS ,liste_NOMBRE_D_ITERATIONS ,NOMBRE_D_ITERATIONS_IMPLICITE ); EGAL(nombre_d_iterations,INTE(FonctionI_Fload_____valeur_maximale)); /* Pour permettre le traitement des listes de couleur ci-apres qui elles contiennent */ /* 'nombre_d_iterations' elements, qui est en fait variable. On prend donc ici la valeur */ /* maximale recontree dans 'fichier_NOMBRE_D_ITERATIONS'. */ ) ); GET_ARGUMENT_L("colorier=",colorier_arbitrairement_les_points); GET_ARGUMENT_F("ARVB=",facteur_d_homothetie_des_couleurs); GET_ARGUMENT_F("BRVB=",constante_de_translation_des_couleurs); PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_12; /* Ces parametres ont ete introduits le 20021105122712. */ PROCESS_ARGUMENT_FICHIER("LISTE_ROUGE=" ,fichier_LISTE_ROUGE ,liste_initiale_des_ROUGE ,ROUGE_IMPLICITE ,lTRANSFORMAT_12 ); PROCESS_ARGUMENT_FICHIER("LISTE_VERTE=" ,fichier_LISTE_VERTE ,liste_initiale_des_VERTE ,VERTE_IMPLICITE ,lTRANSFORMAT_12 ); PROCESS_ARGUMENT_FICHIER("LISTE_BLEUE=" ,fichier_LISTE_BLEUE ,liste_initiale_des_BLEUE ,BLEUE_IMPLICITE ,lTRANSFORMAT_12 ); GET_ARGUMENT_C("paletteA=""palette=""pA=""p=",nom_paletteA); GET_ARGUMENT_L("niveaux_denormalises=""ndn=",les_niveaux_sont_denormalises); GET_ARGUMENT_N("niveaux_normalises=""nn=",les_niveaux_sont_denormalises); /* Cette option fut introduite le 20131204100042... */ PROCESS_ARGUMENT_FICHIER("LISTE_NIVEAU=" ,fichier_LISTE_NIVEAU ,liste_initiale_des_NIVEAU ,NIVEAU_IMPLICITE ,lTRANSFORMAT_12 ); PROCESS_ARGUMENTS_DE_VISUALISATION; PROCESS_ARGUMENTS_DE_VISUALISATION_DES_AXES_DE_COORDONNEES; GET_ARGUMENT_I("n=""iterations=",nombre_d_iterations); GET_ARGUMENT_L("gx=""gX=""cx=""cX=",generer_la_coordonnee_X); GET_ARGUMENT_F("c1x=""c1X=",coefficient_1_X); GET_ARGUMENT_F("c2x=""c2X=",coefficient_2_X); GET_ARGUMENT_F("c3x=""c3X=",coefficient_3_X); GET_ARGUMENT_F("c4x=""c4X=",coefficient_4_X); GET_ARGUMENT_F("c5x=""c5X=",coefficient_5_X); GET_ARGUMENT_L("gy=""gY=""cy=""cY=",generer_la_coordonnee_Y); GET_ARGUMENT_F("c1y=""c1Y=",coefficient_1_Y); GET_ARGUMENT_F("c2y=""c2Y=",coefficient_2_Y); GET_ARGUMENT_F("c3y=""c3Y=",coefficient_3_Y); GET_ARGUMENT_F("c4y=""c4Y=",coefficient_4_Y); GET_ARGUMENT_F("c5y=""c5Y=",coefficient_5_Y); GET_ARGUMENT_L("gz=""gZ=""cz=""cZ=",generer_la_coordonnee_Z); GET_ARGUMENT_F("c1z=""c1Z=",coefficient_1_Z); GET_ARGUMENT_F("c2z=""c2Z=",coefficient_2_Z); GET_ARGUMENT_F("c3z=""c3Z=",coefficient_3_Z); GET_ARGUMENT_F("c4z=""c4Z=",coefficient_4_Z); GET_ARGUMENT_F("c5z=""c5Z=",coefficient_5_Z); GET_ARGUMENT_F("dt=""dct=",dct); GET_ARGUMENT_L("tore=",visualiser_sur_un_tore); GET_ARGUMENT_F("gR=",facteur_du_rayon_gR); GET_ARGUMENT_F("pR=",facteur_du_rayon_pR); ) ); #include xrv/champs_5.19.I" /* Pour eviter le message : */ /* */ /* Static function is not referenced. */ /* */ /* sur 'SYSTEME_ES9000_AIX_CC'... */ #include xrk/attractor.19.I" /* Validations et definition de l'espace physique. */ Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation) Bblock RE_INITIALISATION_DE_L_HORLOGE; INITIALISATIONS_RELATIVES_A_CHAQUE_NOUVELLE_IMAGE(numero_de_la_periode_courante); /* Initialisations necessaires avant le calcul et la generation de chaque nouvelle image. */ EGAL(taux_de_croissance,sTAUX_DE_CROISSANCE(numero_de_la_periode_courante)); /* Calcul de la valeur initiale du nombre complexe 'w'. */ EGAL(X1n,sVALEUR_INITIALE(numero_de_la_periode_courante)); EGAL(X2n,sVALEUR_INITIALE(numero_de_la_periode_courante)); EGAL(X3n,sVALEUR_INITIALE(numero_de_la_periode_courante)); EGAL(X4n,sVALEUR_INITIALE(numero_de_la_periode_courante)); EGAL(X5n,sVALEUR_INITIALE(numero_de_la_periode_courante)); /* Initialisation du processus. */ EGAL(coordonnee_X,sVALEUR_INITIALE(numero_de_la_periode_courante)); EGAL(coordonnee_Y,sVALEUR_INITIALE(numero_de_la_periode_courante)); EGAL(coordonnee_Z,sVALEUR_INITIALE(numero_de_la_periode_courante)); /* Au cas ou une ou plusieurs variables ne seraient pas generees... */ vTRANSFORMAT_31(nombre_d_iterations,sNOMBRE_D_ITERATIONS,numero_de_la_periode_courante,fichier_NOMBRE_D_ITERATIONS); /* Calcul du nombre d'iterations lorsqu'il est variable. */ #include xrv/particule.51.I" /* Gestion des fausses couleurs via 'nom_paletteA' apres que 'nombre_d_iterations' */ /* ait ete defini... */ vTRANSFORMAT_31(dct,sPAS_DE_TEMPS_dct,numero_de_la_periode_courante,fichier_PAS_DE_TEMPS_dct); /* Calcul du pas de temps lorsqu'il est variable. */ Komp(numero_de_l_iteration_courante,nombre_d_iterations) Bblock DEFV(Float,INIT(cx_avant,cx)); DEFV(Float,INIT(cy_avant,cy)); DEFV(Float,INIT(cz_avant,cz)); /* Sauvegarde des coordonnees {cx,cy,cz} avant l'iteration. */ USs_GooF(BLOC( Bblock EGAL(X1n_1,X1n); ITERATION_DE_VERHULST_01(X1n,X1n_1,taux_de_croissance); /* Iteration 1. */ EGAL(X2n_1,X2n); ITERATION_DE_VERHULST_02(X2n,X2n_1,taux_de_croissance); /* Iteration 2. */ EGAL(X3n_1,X3n); ITERATION_DE_VERHULST_03(X3n,X3n_1,taux_de_croissance); /* Iteration 3. */ EGAL(X4n_1,X4n); ITERATION_DE_VERHULST_04(X4n,X4n_1,taux_de_croissance); /* Iteration 4. */ EGAL(X5n_1,X5n); ITERATION_DE_VERHULST_05(X5n,X5n_1,taux_de_croissance); /* Iteration 5. */ Eblock ) ); /* Procedure introduite le 20080106100652... */ /* */ /* On notera que le mode 'GooF' n'est pas applique a certains operateurs et par exemple */ /* a 'EXP2(...)' ; cela vient evidemment de l'ordre des traitements qui sont faits (ici, */ /* 'EXP2(...)' est defini avant le 'USs_GooF(...)' qui precede). */ Test(IL_FAUT(generer_la_coordonnee_X)) Bblock EGAL(coordonnee_X,COORDONNEE_X); Eblock ATes Bblock Eblock ETes Test(IL_FAUT(generer_la_coordonnee_Y)) Bblock EGAL(coordonnee_Y,COORDONNEE_Y); Eblock ATes Bblock Eblock ETes Test(IL_FAUT(generer_la_coordonnee_Z)) Bblock EGAL(coordonnee_Z,COORDONNEE_Z); Eblock ATes Bblock Eblock ETes EGAL(cx,Fx(cx,cy,cz,temps_courant)); EGAL(cy,Fy(cx,cy,cz,temps_courant)); EGAL(cz,Fz(cx,cy,cz,temps_courant)); /* Calcul des coordonnees. */ Test(IL_FAUT(colorier_arbitrairement_les_points)) Bblock EGAL(dcx,ACCES_LISTE(liste_initiale_des_ROUGE,numero_de_l_iteration_courante)); EGAL(dcy,ACCES_LISTE(liste_initiale_des_VERTE,numero_de_l_iteration_courante)); EGAL(dcz,ACCES_LISTE(liste_initiale_des_BLEUE,numero_de_l_iteration_courante)); /* Recuperation des couleurs (dcx,dcy,dcz) au point courant. */ Eblock ATes Bblock Test(IFEQ(numero_de_l_iteration_courante,PREMIERE_ITERATION_D_UN_Komp)) Bblock EGAL(dcx,FZERO); EGAL(dcy,FZERO); EGAL(dcz,FZERO); /* Initialisation des differentielles pour la premiere iteration (on notera que 'FZERO' est */ /* la valeur la plus "logique"...). */ Eblock ATes Bblock EGAL(dcx,SOUS(cx,cx_avant)); EGAL(dcy,SOUS(cy,cy_avant)); EGAL(dcz,SOUS(cz,cz_avant)); /* Calcul des differentielles pour les iterations suivantes... */ Eblock ETes Eblock ETes RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES; /* On notera que cette recherche n'est pas conditionnee par 'editer_les_extrema', car les */ /* extrema pourraient etre utilises pour la visualisation... */ Test(IFOU(IL_FAUT(visualiser_le_fantome) ,IFGE(numero_de_l_iteration_courante,PREMIERE_ITERATION_VISUALISEE) ) ) Bblock Test(IL_FAUT(visualiser_sur_un_tore)) Bblock CALS(memorisation_1_point_07(X_DU_TORE(cx,cy,cz,temps_courant) ,Y_DU_TORE(cx,cy,cz,temps_courant) ,Z_DU_TORE(cx,cy,cz,temps_courant) ,dcx ,dcy ,dcz ,numero_de_l_iteration_courante ) ); /* Memorisation de l'iteration courante sur un tore.... */ Eblock ATes Bblock CALS(memorisation_1_point_07(ADD2(cx ,NEGA(NEUT(DIVI(ADD2(taux_de_croissance,I) ,GRO2(taux_de_croissance) ) ) ) ) ,ADD2(cy ,NEGA(NEUT(DIVI(ADD2(taux_de_croissance,I) ,GRO2(taux_de_croissance) ) ) ) ) ,ADD2(cz ,NEGA(NEUT(DIVI(ADD2(taux_de_croissance,I) ,GRO2(taux_de_croissance) ) ) ) ) ,dcx ,dcy ,dcz ,numero_de_l_iteration_courante ) ); /* Memorisation de l'iteration courante dans l'espace "normal". Les translations qui sont */ /* appliquees aux coordonees {x,y} proviennent de l'etude de la parabole : */ /* */ /* 2 */ /* y = (R+1).x - R.x */ /* */ /* dont le sommet a pour coordonnees : */ /* */ /* R+1 */ /* x = ----- */ /* S 2.R */ /* */ /* et : */ /* */ /* 2 */ /* (R+1) */ /* y = -------- */ /* S 4.R */ /* */ /* Les translations sont egales a 'X(S)'... */ Eblock ETes Eblock ATes Bblock Eblock ETes INCREMENTATION_DE_L_HORLOGE(dct); /* Simulation du temps de la simulation... */ Eblock EKom #include xrk/attractor.1A.I" VISUALISATION_DES_AXES_DE_COORDONNEES; /* Visualisation si necessaire des trois axes de coordonnees. */ GENERATION_D_UNE_IMAGE_ET_PASSAGE_A_LA_SUIVANTE(BLOC(VIDE;)); /* Generation de l'image courante... */ Eblock EKom EDITION_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES; /* Edition facultative des extrema des coordonnees et des derivees. */ RETU_Commande; Eblock ECommande