/*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A F O N C T I O N Z E T A D E R I E M A N N A V E C L A S E R I E D ' E U L E R */ /* P O U R D E S N O M B R E S D ' I T E R A T I O N S V A R I A N T */ /* D E F A C O N A R B I T R A I R E */ /* A V E C R E N O R M A L I S A T I O N L O C A L E D E S I M A G E S : */ /* */ /* */ /* Author of '$xrc/zeta.01$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1992??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 maths_compl_fonct_ITERATIONS_EXT #include image_image_QUAD_IMAGE_EXT /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define X_DEPART_GAUCHE \ PARE(0.0) #define X_DEPART_DROITE \ PARE(8.0) #define Y_DEPART_BAS \ PARE(-4.0) #define Y_DEPART_HAUT \ PARE(4.0) /* Definition de la fenetre de depart. */ #define X_ARRIVEE_GAUCHE \ X_DEPART_GAUCHE #define X_ARRIVEE_DROITE \ X_DEPART_DROITE #define Y_ARRIVEE_BAS \ Y_DEPART_BAS #define Y_ARRIVEE_HAUT \ Y_DEPART_HAUT /* Definition de la fenetre d'arrivee. */ #define NOMBRE_D_ITERATIONS \ HUIT \ /* Nombre d'iterations demandees. */ #define PRECISION \ PARE(0.00001) \ /* Pour calculer le rapport de reduction. */ #define NOMBRE_D_IMAGES \ UN \ /* Nombre d'images a generer. */ #define PREMIERE_IMAGE \ NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION \ /* Numero de la premiere image a generer : ce parametre permet de faire une reprise sur une */ \ /* sequence interrompue. On notera qu'habituellement sa valeur est 'PREMIERE_IMAGE_ABSOLUE', */ \ /* mais que pour des raisons de compatibilite avec les differents modules inclus dans ce */ \ /* programme, on lui substitue 'NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION' partout... */ #define GENERER_LA_PARTIE_REELLE \ FAUX #define GENERER_LA_PARTIE_IMAGINAIRE \ FAUX #define GENERER_LE_MODULE \ VRAI #define GENERER_LA_PHASE \ VRAI /* Indicateurs controlant la generation des quatre types d'images. */ #define PRENDRE_UNE_DYNAMIQUE_LOGARITHMIQUE \ FAUX \ /* Lorsque 'EST_FAUX(les_images_sont_standards)' doit transformer logarithmiquement le */ \ /* Module, la partie Reelle et la partie Imaginaire ('VRAI') ou les laisser tels qu'ils */ \ /* ont ete calcules ('FAUX') ? */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #include xrc/ITERATION.11.I" /* Introduit le 20091122183037... */ #define GENERATION_D_UN_TYPE_D_IMAGE(generer_ce_type_d_image,nom_du_type_d_image,image,Fimage) \ Bblock \ Test(IL_FAUT(generer_ce_type_d_image)) \ Bblock \ EGAL(nom_image \ ,chain_Aconcaten2_sauf_nom_pipe(nom_du_type_d_image \ ,chain_numero(numero_d_image,nombre_de_chiffres) \ ) \ ); \ CALi(gIupdate_image(les_images_sont_standards,nom_image,image,Fimage)); \ CALZ_FreCC(nom_image); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Procedure generant si necessaire un certain type d'image. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S D E L ' I N T E R P O L A T I O N D E S P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #include xrv/champs_5.41.I" #include xrq/nucleon.Lf.2.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) \ sTRANSFORMAT_31(numero_de_la_periode,liste_NOMBRE_D_ITERATIONS) /* Formule generale definissant les variations du nombre d'iterations. */ #define numero_de_la_periode_courante \ numero_d_image #define nombre_de_periodes_de_la_simulation \ nombre_d_images /* Pour assurer la compatibilite avec '$xrq/nucleon.Lf.2.I'... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A F O N C T I O N Z E T A D E R I E M A N N A V E C L A S E R I E D ' E U L E R */ /* P O U R D E S N O M B R E S D ' I T E R A T I O N S V A R I A N T */ /* D E F A C O N A R B I T R A I R E */ /* A V E C R E N O R M A L I S A T I O N L O C A L E D E S I M A G E S : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(complexe,coin_bas_gauche_de_depart_puis_courant); /* Definition du point situe en bas a gauche de la fenetre de depart, puis de la fenetre */ /* courante au cours du zoom. */ DEFV(complexe,coin_haut_droite_de_depart_puis_courant); /* Definition du point situe en haut a droite de la fenetre de depart, puis de la fenetre */ /* courante au cours du zoom. */ DEFV(complexe,coin_bas_gauche_d_arrivee); /* Definition du point situe en bas a gauche de la fenetre d'arrivee, */ DEFV(complexe,coin_haut_droite_d_arrivee); /* Definition du point situe en haut a droite de la fenetre d'arrivee. */ DEFV(Positive,INIT(nombre_d_iterations,NOMBRE_D_ITERATIONS)); /* Nombre maximal d'iterations a effectuer. */ DEFV(Float,INIT(precision,PRECISION)); /* Pour calculer le rapport de reduction. */ DEFV(Float,INIT(rapport_de_reduction,FLOT__UNDEF)); /* Rapport de passage d'une fenetre a l'autre. */ DEFV(Int,INIT(nombre_d_images,NOMBRE_D_IMAGES)); /* Nombre d'images a generer. */ DEFV(Int,INIT(numero_d_image,NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION)); /* Numero de l'image courante (celle-ci n'est pas necessairement generee : voir */ /* le parametre 'PREMIERE_IMAGE'). */ DEFV(CHAR,INIC(POINTERc(nom_imageRR),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageRI),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageRMo),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageRPh),NOM_PIPE)); /* Nom de la sequence d'images a generer. */ DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES)); /* Nombre de chiffres codant le numero des images de la sequence a generer. */ DEFV(CHAR,INIT(POINTERc(nom_image),NOM_UNDEF)); /* Nom courant des images. */ DEFV(Logical,INIT(generer_la_partie_reelle,GENERER_LA_PARTIE_REELLE)); DEFV(Logical,INIT(generer_la_partie_imaginaire,GENERER_LA_PARTIE_IMAGINAIRE)); DEFV(Logical,INIT(generer_le_module,GENERER_LE_MODULE)); DEFV(Logical,INIT(generer_la_phase,GENERER_LA_PHASE)); /* Indicateurs controlant la generation des quatre types d'images. */ DEFV(Logical,INIT(prendre_une_dynamique_logarithmique,PRENDRE_UNE_DYNAMIQUE_LOGARITHMIQUE)); /* Lorsque 'EST_FAUX(les_images_sont_standards)' doit transformer logarithmiquement le */ /* Module, la partie Reelle et la partie Imaginaire ('VRAI') ou les laisser tels qu'ils */ /* ont ete calcules ('FAUX') ? */ /*..............................................................................................................................*/ Cinitialisation(coin_bas_gauche_de_depart_puis_courant,X_DEPART_GAUCHE,Y_DEPART_BAS); Cinitialisation(coin_haut_droite_de_depart_puis_courant,X_DEPART_DROITE,Y_DEPART_HAUT); /* Definition de la fenetre de depart. */ Cinitialisation(coin_bas_gauche_d_arrivee,X_ARRIVEE_GAUCHE,Y_ARRIVEE_BAS); Cinitialisation(coin_haut_droite_d_arrivee,X_ARRIVEE_DROITE,Y_ARRIVEE_HAUT); /* Definition de la fenetre d'arrivee. */ iTRANSFORMAT_31(liste_NOMBRE_D_ITERATIONS,NOMBRE_D_ITERATIONS_IMPLICITE); /* Initialisation du nombre d'iterations. */ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(PROCESS_ARGUMENT_I("n=""images=""N=",nombre_d_images ,BLOC(VIDE;) ,BLOC(PRINT_AVERTISSEMENT("'n=''images=''N=' doit etre avant toute entree de fichiers");) ); PROCESS_ARGUMENT_FICHIER("NOMBRE_D_ITERATIONS=" ,fichier_NOMBRE_D_ITERATIONS ,liste_NOMBRE_D_ITERATIONS ,NOMBRE_D_ITERATIONS_IMPLICITE ,gTRANSFORMAT_31 ); GET_ARGUMENT_C("imageRR=""RR=",nom_imageRR); GET_ARGUMENT_C("imageRI=""RI=",nom_imageRI); GET_ARGUMENT_C("imageRMo=""RMo=",nom_imageRMo); GET_ARGUMENT_C("imageRPh=""RPh=",nom_imageRPh); GET_ARGUMENT_I("chiffres=",nombre_de_chiffres); GET_ARGUMENT_I("iterations=",nombre_d_iterations); GET_ARGUMENT_F("xbgd=""xbgD=",Reelle(coin_bas_gauche_de_depart_puis_courant)); GET_ARGUMENT_F("ybgd=""ybgD=",Imaginaire(coin_bas_gauche_de_depart_puis_courant)); GET_ARGUMENT_F("xhdd=""xhdD=",Reelle(coin_haut_droite_de_depart_puis_courant)); GET_ARGUMENT_F("yhdd=""yhdD=",Imaginaire(coin_haut_droite_de_depart_puis_courant)); GET_ARGUMENT_F("xbga=""xbgA=",Reelle(coin_bas_gauche_d_arrivee)); GET_ARGUMENT_F("ybga=""ybgA=",Imaginaire(coin_bas_gauche_d_arrivee)); GET_ARGUMENT_F("xhda=""xhdA=",Reelle(coin_haut_droite_d_arrivee)); GET_ARGUMENT_F("yhda=""yhdA=",Imaginaire(coin_haut_droite_d_arrivee)); GET_ARGUMENT_F("precision=",precision); GET_ARGUMENT_L("genererR=""gR=",generer_la_partie_reelle); GET_ARGUMENT_L("genererI=""gI=",generer_la_partie_imaginaire); GET_ARGUMENT_L("genererMo=""gMo=",generer_le_module); GET_ARGUMENT_L("genererPh=""gPh=",generer_la_phase); /* Les abbreviations "g.=" et "g..=" ont ete introduites le 20210205120139... */ GET_ARGUMENT_L("standard=",les_images_sont_standards); GET_ARGUMENT_L("logarithmique=""log=",prendre_une_dynamique_logarithmique); ) ); CALCUL_DU_RAPPORT_DE_REDUCTION; DoIn(numero_d_image ,NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION ,LSTX(NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION,nombre_d_images) ,I ) Bblock Test(IFGE(numero_d_image,PREMIERE_IMAGE)) Bblock /* Afin de se positionner dans la sequence... */ /* ATTENTION, on notera que l'on definit hors de 'Test(EST_VRAI(les_images_sont_standards))' */ /* simultanement les 'image' et les 'imageF'. Cela est du a l'utilisation de la procedure */ /* 'gIupdate_image(...)' dans 'GENERATION_D_UN_TYPE_D_IMAGE(...)'. */ BDEFV(image,imageRR); BDEFV(image,imageRI); BDEFV(image,imageRMo); BDEFV(image,imageRPh); /* Definition des images necessaires... */ BDEFV(imageF,FimageRR); BDEFV(imageF,FimageRI); BDEFV(imageF,FimageRMo); BDEFV(imageF,FimageRPh); /* Definition des images necessaires... */ /* ATTENTION, on notera que l'on definit hors de 'Test(EST_VRAI(les_images_sont_standards))' */ /* simultanement les 'image' et les 'imageF'. Cela est du a l'utilisation de la procedure */ /* 'gIupdate_image(...)' dans 'GENERATION_D_UN_TYPE_D_IMAGE(...)'. */ 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. */ Test(EST_VRAI(les_images_sont_standards)) Bblock /* Cas d'une image 'image' : */ CALi(Inoir(imageRR)); CALi(Inoir(imageRI)); CALi(Inoir(imageRMo)); CALi(Inoir(imageRPh)); /* Initialisation des images Resultat a priori... */ CALS(Ifonction_serie_zeta_dans_C(imageRR ,imageRI ,imageRMo ,imageRPh ,ADRESSE(coin_bas_gauche_de_depart_puis_courant) ,ADRESSE(coin_haut_droite_de_depart_puis_courant) ,nombre_d_iterations ) ); /* Calcul de la fonction 'zeta' de Riemann. */ Eblock ATes Bblock /* Cas d'une image 'imageF' : */ CALi(IFinitialisation(FimageRR,FZERO)); CALi(IFinitialisation(FimageRI,FZERO)); CALi(IFinitialisation(FimageRMo,FZERO)); CALi(IFinitialisation(FimageRPh,FZERO)); /* Initialisation des images Resultat a priori... */ CALS(IFfonction_serie_zeta_dans_C(FimageRR ,FimageRI ,FimageRMo ,FimageRPh ,ADRESSE(coin_bas_gauche_de_depart_puis_courant) ,ADRESSE(coin_haut_droite_de_depart_puis_courant) ,nombre_d_iterations ) ); /* Calcul de la fonction 'zeta' de Riemann. */ Test(IL_FAUT(prendre_une_dynamique_logarithmique)) Bblock CALS(IFdynamique_logarithmique_avec_translation_dynamique(FimageRR,FimageRR)); CALS(IFdynamique_logarithmique_avec_translation_dynamique(FimageRI,FimageRI)); CALS(IFdynamique_logarithmique_avec_translation_dynamique(FimageRMo,FimageRMo)); /* S'il le faut, la dynamique des images est reduite par application d'une fonction */ /* logarithme. Evidemment, cela ne concerne pas la phase... */ Eblock ATes Bblock Eblock ETes Eblock ETes GENERATION_D_UN_TYPE_D_IMAGE(generer_la_partie_reelle ,nom_imageRR ,imageRR ,FimageRR ); GENERATION_D_UN_TYPE_D_IMAGE(generer_la_partie_imaginaire ,nom_imageRI ,imageRI ,FimageRI ); GENERATION_D_UN_TYPE_D_IMAGE(generer_le_module ,nom_imageRMo ,imageRMo ,FimageRMo ); GENERATION_D_UN_TYPE_D_IMAGE(generer_la_phase ,nom_imageRPh ,imageRPh ,FimageRPh ); /* Generation des images demandees. */ /* ATTENTION, on notera que l'on definit hors de 'Test(EST_VRAI(les_images_sont_standards))' */ /* simultanement les 'image' et les 'imageF'. Cela est du a l'utilisation de la procedure */ /* 'gIupdate_image(...)' dans 'GENERATION_D_UN_TYPE_D_IMAGE(...)'. */ EDEFV(imageF,FimageRPh); EDEFV(imageF,FimageRMo); EDEFV(imageF,FimageRI); EDEFV(imageF,FimageRR); /* Definition des images necessaires... */ EDEFV(image,imageRPh); EDEFV(image,imageRMo); EDEFV(image,imageRI); EDEFV(image,imageRR); /* Definition des images necessaires... */ /* ATTENTION, on notera que l'on definit hors de 'Test(EST_VRAI(les_images_sont_standards))' */ /* simultanement les 'image' et les 'imageF'. Cela est du a l'utilisation de la procedure */ /* 'gIupdate_image(...)' dans 'GENERATION_D_UN_TYPE_D_IMAGE(...)'. */ Eblock ATes Bblock Eblock ETes REDUCTION_DE_LA_FENETRE_COURANTE; Eblock EDoI RETU_Commande; Eblock ECommande