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