/*************************************************************************************************************************************/ /* */ /* C A L C U L D ' U N E N S E M B L E D E M A N D E L B R O T C H E V E L U */ /* D A N S L E P L A N C O M P L E X E : */ /* */ /* */ /* Author of '$xrc/mandel.11$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1989??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 GENERER_LES_GET_ARGUMENTS_DE_CONTROLE_DE_L_ARITHMETIQUE_ETENDUE_DES_NOMBRES_FLOTTANTS /* Introduit le 20070129112112... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define NOMBRE_D_ITERATIONS \ SOUS(BLANC,NOIR) \ /* Nombre d'iterations demandees. */ #define MODE_DE_VISUALISATION \ VISUALISATION_DU_NOMBRE_D_ITERATIONS \ /* A priori, on visualise le nombre d'iterations... */ #define SEUIL_DE_LA_DISTANCE \ PARE(-1.0e2) \ /* Pour definir le seuil de la distance d(z). */ #define X_DEPART_GAUCHE \ PARE(-2.0) #define X_DEPART_DROITE \ PARE(0.5) #define Y_DEPART_BAS \ PARE(-1.25) #define Y_DEPART_HAUT \ PARE(1.25) /* Definition de la fenetre de calcul (vue d'ensemble). */ #define SEUIL_DE_MASQUAGE \ GRIS \ /* Seuil de masquage... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D ' U N E N S E M B L E D E M A N D E L B R O T C H E V E L U */ /* D A N S L E P L A N C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_masque),NOM_PIPE)); DEFV(Float,INIT(depart_gauche,X_DEPART_GAUCHE)); DEFV(Float,INIT(depart_bas,Y_DEPART_BAS)); DEFV(complexe,coin_bas_gauche); /* Definition du point situe en bas a gauche de la fenetre courante, */ DEFV(Float,INIT(depart_droite,X_DEPART_DROITE)); DEFV(Float,INIT(depart_haut,Y_DEPART_HAUT)); DEFV(complexe,coin_haut_droite); /* Definition du point situe en haut a droite de la fenetre courante. */ DEFV(Int,INIT(nombre_d_iterations,NOMBRE_D_ITERATIONS)); /* Nombre maximal d'itrerations a effectuer. */ DEFV(Int,INIT(mode_de_visualisation,MODE_DE_VISUALISATION)); /* Choix du mode de visualisation. */ DEFV(Float,INIT(seuil_de_la_distance,SEUIL_DE_LA_DISTANCE)); /* Pour definir le seuil de la distance d(z). */ DEFV(genere_p,INIT(seuil_de_masquage,SEUIL_DE_MASQUAGE)); /* Pour definir le seuil de masquage (lorsque le masquage est actif). */ /*..............................................................................................................................*/ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA); GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_C("imageM=""M=",nom_masque); GET_ARGUMENT_I("n=""iterations=""N=",nombre_d_iterations); GET_ARGUMENT_I("mode=",mode_de_visualisation); GET_ARGUMENT_F("xg=""Xg=",depart_gauche); GET_ARGUMENT_F("yg=""Yg=",depart_bas); GET_ARGUMENT_F("xd=""Xd=",depart_droite); GET_ARGUMENT_F("yd=""Yd=",depart_haut); GET_ARGUMENT_F("seuil=""s=",seuil_de_la_distance); GET_ARGUMENT_P("masque=""m=",seuil_de_masquage); CONTROLE_DE_L_ARITHMETIQUE_ETENDUE_DES_NOMBRES_COMPLEXES; /* Cette extension a ete introduite le 20070129112112... */ ) ); CALi(Inoir(ImageR)); /* Initialisation de l'image Resultat. */ Test(IFNE_chaine(nom_masque,NOM_PIPE)) Bblock Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(Masque,nom_masque)))) Bblock MASQUE_IMAGES(seuil_de_masquage); /* Le masquage n'a lieu que si l'image 'Masque' est chargee correctement... */ Eblock ATes Bblock DEMASQUE_IMAGES; /* Le masquage n'a lieu que si l'image 'Masque' est chargee correctement... */ Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock DEMASQUE_IMAGES; /* Le masquage n'est pas demande... */ Eblock ETes Test(IFOU(IFNE(mode_de_visualisation,VISUALISATION_DES_ORBITES) ,IFET(IFEQ(mode_de_visualisation,VISUALISATION_DES_ORBITES) ,PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA,nom_imageA))) ) ) ) Bblock Cinitialisation(coin_bas_gauche,depart_gauche,depart_bas); Cinitialisation(coin_haut_droite,depart_droite,depart_haut); CALS(Imandelbrot_chevelu_dans_C(ImageR ,ADRESSE(coin_bas_gauche),ADRESSE(coin_haut_droite) ,nombre_d_iterations ,seuil_de_la_distance ,mode_de_visualisation ,ImageA ) ); CALi(Iupdate_image(nom_imageR,ImageR)); Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes RETU_Commande; Eblock ECommande