/*************************************************************************************************************************************/ /* */ /* V I S U A L I S A T I O N D E S G A L A X I E S P R O C H E S D E L A V O I E L A C T E E : */ /* */ /* */ /* Author of '$xrr/univers.10$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 image_image_ENTREES_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" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 ) : */ /* */ /*************************************************************************************************************************************/ #define Xcentre_ESPACE \ FLOT(k___Xmin) #define Ycentre_ESPACE \ FLOT(k___Ymin) #define Zcentre_ESPACE \ FLOT(k___Zmin) /* Definition de l'origine (ou "centre") de l'espace physique. En fait, elles ne servent */ /* qu'a recentrer l'objet lors de la visualisation, et d'autre part, elles doivent */ /* etre des constantes absolues a cause de : */ /* */ /* DEFINITION_D_UNE_POSITION(position_indefinie,Xcentre_ESPACE,...); \ */ /* */ /* dans '$xrq/nucleon.L5$I'. */ #define XYZtranslation \ MOIT(0.3e25) \ /* Definition des demi-longueurs des trois axes. Notons au passage que '1.0e25' correspond */ \ /* approximativement a un milliard d'annees de lumiere... */ #define hXmin_ESPACE \ SOUS(Xmin,XYZtranslation) #define hYmin_ESPACE \ SOUS(Ymin,XYZtranslation) #define hZmin_ESPACE \ SOUS(Zmin,XYZtranslation) /* Definition du "coin" inferieur-gauche-arriere de l'espace physique. */ #define hXmax_ESPACE \ ADD2(Xmin,XYZtranslation) #define hYmax_ESPACE \ ADD2(Ymin,XYZtranslation) #define hZmax_ESPACE \ ADD2(Zmin,XYZtranslation) /* Definition du "coin" superieur-droite-avant de l'espace physique. */ #include xrk/attractor.12.I" #define dXmin_ESPACE \ PARE(0.0) #define dYmin_ESPACE \ PARE(0.0) #define dZmin_ESPACE \ PARE(0.0) /* Definition des minima des differentielles {dx,dy,dz}. */ #define dXmax_ESPACE \ PARE(1.0) #define dYmax_ESPACE \ PARE(1.0) #define dZmax_ESPACE \ PARE(1.0) /* 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'. */ #include xrv/champs_5.14.I" #include xrv/particule.41.I" #include xrk/attractor.14.I" #include xrr/univers.11.I" /* Pour corriger les initialisations precedentes. ATTENTION, a cause de la derivation */ /* formelle d'ordre superieur a 1, ces 'undef's ne peuvent etre que dans un fichier */ /* d'include... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S D U M O D E D E R E P R E S E N T A T I O N D E S G A L A X I E S : */ /* */ /*************************************************************************************************************************************/ #define PUISSANCE_DU_RAYON_DE_VISUALISATION \ TROIS DEFV(Local,DEFV(Float,INIT(puissance_du_rayon_de_visualisation,PUISSANCE_DU_RAYON_DE_VISUALISATION))); /* Inverse de la puissance a laquelle est eleve une magnitude afin de donner au facteur */ /* 'facteur_du_rayon_de_visualisation' pres le rayon de la sphere. La valeur implicite est */ /* telle que le volume de la sphere de materialisation est proportionnel a la magnitude. */ #define FACTEUR_DU_FACTEUR_DU_RAYON_DE_VISUALISATION \ FU DEFV(Local,DEFV(Float,INIT(facteur_du_facteur_du_rayon_de_visualisation,FACTEUR_DU_FACTEUR_DU_RAYON_DE_VISUALISATION))); /* Facteur permettant de "scaler" le parametre 'facteur_du_rayon_de_visualisation' a l'aide */ /* des outils d'interpolations. Il a ete introduit car, en effet, le parametre d'echelle */ /* 'facteur_du_rayon_de_visualisation' etant exprime en unites physiques, il est difficile */ /* a manipuler a la main... */ #define FACTEUR_DU_RAYON_DE_VISUALISATION \ GRO4(FRA1(DIVI(XYZtranslation,FLOT(CENT)))) DEFV(Local,DEFV(Float,INIT(facteur_du_rayon_de_visualisation,FACTEUR_DU_RAYON_DE_VISUALISATION))); /* Facteur permettant de "scaler" le rayon des spheres. Il convient de bien noter que le */ /* calcul du rayon projete des spheres se fait en coordonnees d'espace, d'ou cette valeur */ /* enorme pour 'FACTEUR_DU_RAYON_DE_VISUALISATION'... */ #define RAYON(magnitude) \ MUL3(facteur_du_facteur_du_rayon_de_visualisation \ ,facteur_du_rayon_de_visualisation \ ,PUIX(TRON(SOUS(MAGNITUDE_LIMITE,magnitude),FZERO,F_INFINI) \ ,INVZ(puissance_du_rayon_de_visualisation) \ ) \ ) \ /* Fonction permettant de passer d'une magnitude au rayon d'une sphere. */ #define COLORIER_ALEATOIREMENT_LES_GALAXIES \ FAUX DEFV(Local,DEFV(Logical,INIT(colorier_aleatoirement_les_galaxies,COLORIER_ALEATOIREMENT_LES_GALAXIES))); /* Cet indicateur permet de savoir si les galaxies seront coloriees aleatoirement ('VRAI') */ /* ou seront representees en Noir et Blanc... */ #define GENERATION_D_UNE_COMPOSANTE_DE_COULEUR_D_UNE_GALAXIE(composante,seuil_inferieur,seuil_superieur) \ Bblock \ Test(IL_FAUT(colorier_aleatoirement_les_galaxies)) \ Bblock \ GENERATION_D_UNE_VALEUR(composante \ ,FLOT(seuil_inferieur) \ ,FLOT(seuil_superieur) \ ); \ /* Lorsque la composante est aleatoire, on la tire au sort... */ \ Eblock \ ATes \ Bblock \ EGAL(composante,BLANC); \ /* Lorsque la composante n'est pas aleatoire, on fixe le maximum ('BLANC'). */ \ Eblock \ ETes \ \ EGAL(composante \ ,______NORMALISE_NIVEAU(TRON(composante \ ,seuil_inferieur \ ,seuil_superieur \ ) \ ) \ ); \ /* Seuillage de la composante courante. On notera que lorsque la valeur est aleatoire cela */ \ /* n'est pas utile, mais ainsi, on prevoit l'avenir... */ \ Eblock \ /* Generation d'une des trois composantes de la couleur d'une galaxie... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ #define FACTEUR_D_EXPANSION \ FU DEFV(Local,DEFV(Float,INIT(facteur_d_expansion,FACTEUR_D_EXPANSION))); /* Facteur courant d'expansion de l'univers. */ #define EXPANSION_DE_L_UNIVERS(dimension) \ MUL2(facteur_d_expansion,dimension) \ /* Procedure d'expansion des dimensions de l'univers... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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" DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation,FLOT__UNDEF))); /* 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 la galaxie 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)); /* Pour des raisons de compatabilite... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock #include xrk/attractor.15.I" /* Donnees utiles... */ 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 : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.17.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" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P O U R D E S R A I S O N S D E C O M P A T I B I L I T E : */ /* */ /*************************************************************************************************************************************/ #include xrk/integr.1B.vv.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ dfTRANSFORMAT_31(liste_FACTEUR_DU_RAYON ,fichier_FACTEUR_DU_RAYON ,FACTEUR_DU_RAYON_IMPLICITE ,FACTEUR_DU_FACTEUR_DU_RAYON_DE_VISUALISATION ) /* Definition du fichier des variations du facteur du facteur du rayon des galaxies. */ dfTRANSFORMAT_31(liste_FACTEUR_D_EXPANSION,fichier_FACTEUR_D_EXPANSION,FACTEUR_D_EXPANSION_IMPLICITE,FACTEUR_D_EXPANSION) /* Definition du fichier des variations du facteur d'expansion de l'univers. */ #define sFACTEUR_DU_RAYON(numero_de_la_periode) \ sTRANSFORMAT_31(numero_de_la_periode,liste_FACTEUR_DU_RAYON) \ /* Formule generale definissant les variations du facteur du facteur du rayon des galaxies. */ #define sFACTEUR_D_EXPANSION(numero_de_la_periode) \ sTRANSFORMAT_31(numero_de_la_periode,liste_FACTEUR_D_EXPANSION) \ /* Formule generale definissant les variations du facteur d'expansion de l'univers. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S D I V E R S : */ /* */ /*************************************************************************************************************************************/ #define VITESSE_DE_RECESSION_MAXIMALE \ PARE(6000000.000) \ /* Vitesse de recession maximale au dela de laquelle les galaxies sont ignorees... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V I S U A L I S A T I O N D E S G A L A X I E S P R O C H E S D E L A V O I E L A C T E E : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIT(POINTERc(nom_du_catalogue_des_galaxies),NOM_PIPE_Local)); /* Nom du fichier des galaxies. */ DEFV(Float,INIT(vitesse_de_recession_maximale,VITESSE_DE_RECESSION_MAXIMALE)); /* Vitesse de recession maximale des galaxies au dela de laquelle on les ignore. Cette */ /* vitesse est exprimee en metres par seconde... */ DEFV(Float,INIT(increment_de_Rlongitude_de_la_galaxie,FZERO)); DEFV(Float,INIT(increment_de_Rlatitude_de_la_galaxie,FZERO)); /* Ces deux arguments sont destines a faire tourner l'univers sous les yeux de */ /* l'observateur. */ DEFV(Positive,INIT(index_de_la_liste_des_galaxies_pertinentes,PREMIERE_GALAXIE)); /* Index de rangement des galaxies dans 'liste_des_galaxies_pertinentes' et qui est donc */ /* l'index des galaxies que l'on conserve relativement a certains criteres... */ DEFV(Positive,INIT(derniere_galaxie,UNDEF)); /* Index de rangement de la derniere galaxie. */ DEFV(galaxie,DTb1(liste_des_galaxies_pertinentes,NOMBRE_DE_GALAXIES)); /* Liste des galaxies pertinentes relativement a certains criteres... */ /*..............................................................................................................................*/ INITIALISATIONS_GENERALES; /* Initialisations generales faites au tout debut... */ iTRANSFORMAT_31(liste_FACTEUR_DU_RAYON,FACTEUR_DU_RAYON_IMPLICITE); /* Initialisation du facteur du facteur du rayon des galaxies. */ iTRANSFORMAT_31(liste_FACTEUR_D_EXPANSION,FACTEUR_D_EXPANSION_IMPLICITE); /* Initialisation du facteur d'expansion de l'univers. */ #define RAYON_DE_VISUALISATION \ FLOT__UNDEF \ /* Introduit le 20061211151259 pour 'v $xrv/champs_5.1A$I RAYON_DE_VISUALISATION'... */ #include xrv/champs_5.1A.I" GET_ARGUMENTSv(nombre_d_arguments ,BLOC(PROCESS_ARGUMENTS_GEOMETRIQUES; PROCESS_ARGUMENT_FICHIER("FACTEUR_DU_RAYON=" ,fichier_FACTEUR_DU_RAYON ,liste_FACTEUR_DU_RAYON ,FACTEUR_DU_RAYON_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("FACTEUR_D_EXPANSION=" ,fichier_FACTEUR_D_EXPANSION ,liste_FACTEUR_D_EXPANSION ,FACTEUR_D_EXPANSION_IMPLICITE ,gTRANSFORMAT_31 ); GET_ARGUMENT_C("fichier=",nom_du_catalogue_des_galaxies); GET_ARGUMENT_F("vitesse=""recession=",vitesse_de_recession_maximale); PROCESS_ARGUMENTS_DE_VISUALISATION_PRIMAIRES; GET_ARGUMENT_F("puissance=",puissance_du_rayon_de_visualisation); GET_ARGUMENT_F("facteurR=",facteur_du_rayon_de_visualisation); GET_ARGUMENT_L("aleatoire=",colorier_aleatoirement_les_galaxies); GET_ARGUMENT_I("graine=""g=",graine_du_generateur_d_evenements); GET_ARGUMENT_L("affiner_rdn=",rdnIFnD_____affiner_la_generation); GET_ARGUMENT_L("iterer_rdn=",rdnIFnD_____iterer_la_generation); ) ); #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. */ Test(IFGT(nombre_de_periodes_de_la_simulation,NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION)) Bblock PRINT_ERREUR("la simulation demandee est trop longue"); EGAL(nombre_de_periodes_de_la_simulation,NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION); /* Et on seuille le nombre de periodes... */ Eblock ATes Bblock Eblock ETes Test(PAS_D_ERREUR(CODE_ERROR(Iget_catalogue_des_galaxies(liste_des_galaxies_pertinentes ,ADRESSE(derniere_galaxie) ,nom_du_catalogue_des_galaxies ,vitesse_de_recession_maximale ,increment_de_Rlongitude_de_la_galaxie ,increment_de_Rlatitude_de_la_galaxie ) ) ) ) /* Lecture du fichier des galaxies, et generation de la liste des galaxies pertinentes... */ Bblock DEFINITION_DE_L_ESPACE_PHYSIQUE; /* Initialisation de la definition de l'espace physique apres que les dimensions des images */ /* aient ete definies... */ Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation) Bblock INITIALISATIONS_RELATIVES_A_CHAQUE_NOUVELLE_IMAGE(numero_de_la_periode_courante); /* Initialisations necessaires avant le calcul et la generation de chaque nouvelle image. */ EGAL(facteur_du_facteur_du_rayon_de_visualisation,sFACTEUR_DU_RAYON(numero_de_la_periode_courante)); /* Calcul du facteur du facteur du rayon des galaxies. */ EGAL(facteur_d_expansion,sFACTEUR_D_EXPANSION(numero_de_la_periode_courante)); /* Calcul du facteur d'expansion de l'univers. */ FORCAGE_DE_LA_REINITIALISATION_DU_GENERATEUR_D_EVENEMENTS; /* Afin de forcer la (re-)initialisation du generateur d'evenements au cas ou il serait */ /* utilise pour le coloriage des galaxies. On notera que cela ne peut etre fait ci-dessus */ /* (dans 'INITIALISATIONS_RELATIVES_A_CHAQUE_NOUVELLE_IMAGE') car en effet, certains */ /* programmes demandent un generateur qui ne se re-initialise jamais, alors qu'ici, il faut */ /* que les couleurs se conservent d'une image a l'utre... */ DoIn(index_de_la_liste_des_galaxies_pertinentes,PREMIERE_GALAXIE,derniere_galaxie,I); Bblock DEFV(genere_Float,INIT(niveau_ROUGE_normalise,FLOT__NIVEAU_UNDEF)); DEFV(genere_Float,INIT(niveau_VERTE_normalise,FLOT__NIVEAU_UNDEF)); DEFV(genere_Float,INIT(niveau_BLEUE_normalise,FLOT__NIVEAU_UNDEF)); /* Composantes de couleur de la galaxie... */ GENERATION_D_UNE_COMPOSANTE_DE_COULEUR_D_UNE_GALAXIE(niveau_ROUGE_normalise ,seuil_inferieur_du_ROUGE ,seuil_superieur_du_ROUGE ); GENERATION_D_UNE_COMPOSANTE_DE_COULEUR_D_UNE_GALAXIE(niveau_VERTE_normalise ,seuil_inferieur_du_VERTE ,seuil_superieur_du_VERTE ); GENERATION_D_UNE_COMPOSANTE_DE_COULEUR_D_UNE_GALAXIE(niveau_BLEUE_normalise ,seuil_inferieur_du_BLEUE ,seuil_superieur_du_BLEUE ); /* Calcul des composantes de couleur de la galaxie... */ EGAL(rayon_de_visualisation ,RAYON(ASD1(ITb1(liste_des_galaxies_pertinentes ,index_de_la_liste_des_galaxies_pertinentes ) ,magnitude ) ) ); /* Rayon de visualisation de la galaxie courante... */ CALi(memorisation_1_point_07(EXPANSION_DE_L_UNIVERS(ASD2(ITb1(liste_des_galaxies_pertinentes ,index_de_la_liste_des_galaxies_pertinentes ) ,Gcoordonnees ,x ) ) ,EXPANSION_DE_L_UNIVERS(ASD2(ITb1(liste_des_galaxies_pertinentes ,index_de_la_liste_des_galaxies_pertinentes ) ,Gcoordonnees ,y ) ) ,EXPANSION_DE_L_UNIVERS(ASD2(ITb1(liste_des_galaxies_pertinentes ,index_de_la_liste_des_galaxies_pertinentes ) ,Gcoordonnees ,z ) ) ,niveau_ROUGE_normalise ,niveau_VERTE_normalise ,niveau_BLEUE_normalise ,index_de_la_liste_des_galaxies_pertinentes ) ); /* Memorisation du point courant apres toutes les transformations geometriques, et selon */ /* les coordonnees de visualisation... */ /* */ /* Le 20090806105515 fut reintroduit 'EXPANSION_DE_L_UNIVERS(...)' qui semblait avoir */ /* disparu longtemps ('v $Darchives/recherches/relativite/19980930095249/univers.10$K' qui */ /* le reference et 'v $Darchives/recherches/relativite/20060516132126/univers.10.K' qui ne */ /* le reference plus), soit donc plus de 10 ans !!! */ Eblock EDoI; #include xrk/attractor.1A.I" GENERATION_D_UNE_IMAGE_ET_PASSAGE_A_LA_SUIVANTE(BLOC(VIDE;)); /* Generation de l'image courante... */ Eblock EKom Eblock ATes Bblock PRINT_ERREUR("le fichier contenant le catalogue des galaxies est inaccessible"); Eblock ETes RETU_Commande; Eblock ECommande