/*************************************************************************************************************************************/
/* */
/* I N T E G R A T I O N T R I D I M E N S I O N N E L L E D ' U N E S U I T E D ' I M A G E S A V E C */
/* V I S U A L I S A T I O N D E Q U A T R E C H A M P S S C A L A I R E S S I M U L T A N E M E N T : */
/* */
/* */
/* Nota : */
/* */
/* Ce programme est tres inspire de la */
/* commande 'v $xci/accumule.02$K'. */
/* */
/* */
/* Author of '$xrv/champs_5.20$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_CPP_____POUR_LES_Iload_NE_PAS_VERIFIER_LES_MULTIPLES_UTILISATIONS_DE_L_IMAGE_____ImageA2
@define PRAGMA_CPP_____POUR_LES_Iload_NE_PAS_VERIFIER_LES_MULTIPLES_UTILISATIONS_DE_L_IMAGE_____ImageA3
@define PRAGMA_CPP_____POUR_LES_Iload_NE_PAS_VERIFIER_LES_MULTIPLES_UTILISATIONS_DE_L_IMAGE_____ImageA4
@define PRAGMA_CPP_____POUR_LES_Iload_NE_PAS_VERIFIER_LES_MULTIPLES_UTILISATIONS_DE_L_IMAGE_____ImageA5
/* Introduit le 20060124092425. */
@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
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E L A C O M P I L A T I O N : */
/* */
/*************************************************************************************************************************************/
#define __VERSION__GENERATION_D_UN_NUCLEON \
/* Et oui, car on veut faire croire que l'on est dans '$xrq/nucleon.L0$K'... */
#include xrq/nucleon.L1.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E S C O N S T A N T E S U N I V E R S E L L E S : */
/* */
/*************************************************************************************************************************************/
#include xrq/nucleon.L2.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D U T E M P S : */
/* */
/*************************************************************************************************************************************/
#include xrq/nucleon.L3.I"
#include xrv/particule.41.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 Xtranslation \
MOIT(dimX)
#define Ytranslation \
MOIT(dimY)
#define Ztranslation \
MOIT(dimZ)
/* Definition des demi-longueurs des trois axes. */
#define hXmin_ESPACE \
SOUS(Xmin,Xtranslation)
#define hYmin_ESPACE \
SOUS(Ymin,Ytranslation)
#define hZmin_ESPACE \
SOUS(Zmin,Ztranslation)
/* Definition du "coin" inferieur-gauche-arriere de l'espace physique. */
#define hXmax_ESPACE \
ADD2(Xmin,Xtranslation)
#define hYmax_ESPACE \
ADD2(Ymin,Ytranslation)
#define hZmax_ESPACE \
ADD2(Zmin,Ztranslation)
/* Definition du "coin" superieur-droite-avant de l'espace physique. */
#include xrk/attractor.12.I"
#include xrk/attractor.1D.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E S D I F F E R E N T S E S P A C E S : */
/* */
/*************************************************************************************************************************************/
#include xrq/nucleon.L4.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E S T I O N D E L A B R U M E E V E N T U E L L E : */
/* */
/*************************************************************************************************************************************/
#include xrv/champs_5.16.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P O U R S E S I M P L I F I E R L A V I E : */
/* */
/*************************************************************************************************************************************/
#include xrq/nucleon.L5.I"
#include xrq/nucleon.L6.I"
#include xrq/nucleon.LB.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* A N T I - A L I A S I N G : */
/* */
/*************************************************************************************************************************************/
#include xrq/nucleon.LP.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E L A S O U R C E L U M I N E U S E : */
/* */
/*************************************************************************************************************************************/
#include xrq/nucleon.LQ.I"
#include xrv/champs_5.21.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 E S F O N D U S : */
/* */
/*************************************************************************************************************************************/
#include xrq/nucleon.LR.2.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E L A G E S T I O N D U " D E P T H - C U E I N G " : */
/* */
/*************************************************************************************************************************************/
#define AJUSTER_AUTOMATIQUEMENT_PROFONDEUR_MINIMALE_ET_PROFONDEUR_MAXIMALE \
VRAI \
/* Afin d'ajuster automatiquement lex extrema de la troisieme coordonnee... */
#define PROFONDEUR_MINIMALE_DE_TRONCATION \
GRO3(FRA4(COORDONNEE_BARYCENTRIQUE_MAXIMALE)) \
/* Afin de ne pas avoir trop de depth-cueing... */
#include xrq/nucleon.Ld.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E L A G E S T I O N D U Z O O M : */
/* */
/*************************************************************************************************************************************/
#include xrq/nucleon.Le.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E L A V I S U A L I S A T I O N D ' U N E S P H E R E : */
/* */
/*************************************************************************************************************************************/
#include xrv/champs_5.1C.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E S T R A N S L A T I O N S E T R O T A T I O N S : */
/* */
/*************************************************************************************************************************************/
#include xrq/nucleon.LT.2.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E S T I O N D E S C O U L E U R S : */
/* */
/*************************************************************************************************************************************/
#include xrv/champs_5.15.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E S T I O N D E L A L I S T E D E S P O I N T S D E S T I N E E A F A I R E U N T R I */
/* S U R L A C O O R D O N N E E ' Z ' D ' A R R I E R E E N A V A N T P O U R L U T T E R */
/* E F F I C A C E M E N T C O N T R E L ' A L I A S I N G : */
/* */
/*************************************************************************************************************************************/
#include xrv/champs_5.11.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E S M O D E S D E R E P R E S E N T A T I O N D E S C H A M P S : */
/* */
/*************************************************************************************************************************************/
#define EDITER_LA_DEFINITION_DE_L_ESPACE_PHYSIQUE \
FAUX
DEFV(Local,DEFV(Logical,INIT(editer_la_definition_de_l_espace_physique,EDITER_LA_DEFINITION_DE_L_ESPACE_PHYSIQUE)));
/* Indique si l'on doit ('VRAI') ou pas ('FAUX') editer la definition de l'espace physique. */
#define PAS_HORIZONTAL \
GRO8(PasX)
#define PAS_VERTICAL \
GRO8(PasY)
DEFV(Local,DEFV(Int,INIT(pas_horizontal,PAS_HORIZONTAL)));
DEFV(Local,DEFV(Int,INIT(pas_vertical,PAS_VERTICAL)));
/* Pas de sous-echantillonnage des champs (introduit ici sous forme de 'Int's le */
/* 20111019191657). */
#define CHAMP_X(x,y) \
FLOT(SOUS(COXR(x),Xtranslation)) \
/* Definition de la coordonnee 'X'. */
#define CHAMP_Y(x,y) \
FLOT(SOUS(COYR(y),Ytranslation)) \
/* Definition de la coordonnee 'Y'. */
#define FACTEUR_DU_Z_AUTOMATIQUE \
VRAI
DEFV(Local,DEFV(Logical,INIT(facteur_du_Z_automatique,FACTEUR_DU_Z_AUTOMATIQUE)));
/* Indicateur permettant d'ajuster automatiquement et au mieux 'facteur_du_Z'... */
#define FACTEUR_DU_Z \
FU
DEFV(Local,DEFV(Float,INIT(facteur_du_Z,FACTEUR_DU_Z)));
/* Facteur permettant de "scaler" la troisieme dimension... */
DEFV(Local,DEFV(Int,INIT(tranche_verticale_courante,UNDEF)));
/* Tranche verticale courante. */
#define CHAMP_Z(x,y) \
MUL2(facteur_du_Z,FLOT(SOUS(tranche_verticale_courante,Ztranslation))) \
/* Definition de la coordonnee 'Z'. */
#include xrv/champs_5.1B.I"
#define RAYON_DE_VISUALISATION \
FLOT(HUIT) \
/* Introduit le 20060311100230 a cause de 'v $xrv/champs_5.1A$I PROKESS_ARGUMENT_F' qui */ \
/* en a besoin depuis le 20060224121036... */
#define FACTEUR_DU_RAYON_DE_VISUALISATION \
DIVI(RAYON_DE_VISUALISATION,FU)
DEFV(Local,DEFV(Float,INIT(facteur_du_rayon_de_visualisation,FACTEUR_DU_RAYON_DE_VISUALISATION)));
/* Facteur permettant de "scaler" le rayon des spheres. Il donne aussi le rayon maximal des */
/* spheres de visualisation... */
#define CHAMP_RAYON(x,y) \
RAYON_DES_SPHERES_REPRESENTATIVES(facteur_du_rayon_de_visualisation \
,______NORMALISE_NIVEAU(load_point(ImageA2,x,y)) \
) \
/* Definition du rayon des spheres. */
#define CHAMP_ROUGE(x,y) \
______NORMALISE_NIVEAU(load_point(ImageA3,x,y))
#define CHAMP_VERTE(x,y) \
______NORMALISE_NIVEAU(load_point(ImageA4,x,y))
#define CHAMP_BLEUE(x,y) \
______NORMALISE_NIVEAU(load_point(ImageA5,x,y))
/* Definition des trois composantes (ROUGE,VERTE,BLEUE). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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.24.I"
#include xrv/champs_5.26.I"
BFonctionI
DEFV(Local,DEFV(FonctionI,memorisation_1_point_02(X,Y)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
/* Definition de la position {x,y} du point courant dans les coordonnees des champs. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
#include xrk/attractor.15.I"
/* Donnees utiles... */
INIT_ERROR;
/*..............................................................................................................................*/
MEMORISATION_DU_POINT_COURANT_COMPLET(CHAMP_X(X,Y),CHAMP_Y(X,Y),CHAMP_Z(X,Y)
,CHAMP_RAYON(X,Y)
,CHAMP_ROUGE(X,Y),CHAMP_VERTE(X,Y),CHAMP_BLEUE(X,Y)
);
/* Memorisation du point courant , mais uniquement s'il est visible en fonction des */
/* conditions de visualisation... */
RETU_ERROR;
Eblock
EFonctionI
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N D E V I S U A L I S A T I O N D U P O I N T C O U R A N T : */
/* */
/*************************************************************************************************************************************/
#include xrv/champs_5.12.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E S T I O N D E L A V I S U A L I S A T I O N S T E R E O S C O P I Q U E : */
/* */
/*************************************************************************************************************************************/
#define POSITIONNEMENT_RELATIF_DE_L_OBSERVATEUR_SUR_L_AXE_OZ \
FACTEUR_D_ELOIGNEMENT_EN_Z_D_UN_OBSERVATEUR_LOINTAIN \
/* A priori, on eloigne l'observateur car, en effet, il peut y avoir partout dans l'espace */ \
/* parallelepipedique des points a visualiser et il faut, bien entendu eviter, qu'il soient */ \
/* trop pres de l'observateur en particulier lors d'operations de rotation afin de ne pas */ \
/* induire de fortes distorsions. On notera qu'on ecrase ainsi la definition implicite */ \
/* faite dans '$xrv/champs_5.13$I'. Ceci a ete introduit le 19961021192212. */
#include xrv/champs_5.13.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 : */
/* */
/*************************************************************************************************************************************/
#include xrq/nucleon.LX.2.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 xrv/champs_5.17.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D U S E U I L L A G E : */
/* */
/*************************************************************************************************************************************/
#define LE_SEUILLAGE_EST_ALEATOIRE \
FAUX \
/* Le seuillage est-il aleatoire ('VRAI') ou deterministe ('FAUX') et lie donc aux */ \
/* parametres 'SEUIL_DE_MASQUAGE_INFERIEUR' et 'SEUIL_DE_MASQUAGE_SUPERIEUR'. */
#define GRAINE \
DEUX \
/* Graine initiale. */
#define FACTEUR_DES_NIVEAUX \
FU \
/* Seuil implicite de generation des points. */
#define SEUIL_DE_MASQUAGE_INFERIEUR \
GRIS \
/* Seuil de masquage en-dessous duquel les points des images 'nom_imageA' sont ignores. */
#define SEUIL_DE_MASQUAGE_SUPERIEUR \
BLANC \
/* Seuil de masquage au-dessu duquel les points des images 'nom_imageA' sont ignores. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L A S E Q U E N C E A I N T E G R E R : */
/* */
/*************************************************************************************************************************************/
#include xci/sequence.01.I"
#define INVERSER_L_ORDRE_DE_RECUPERATION_DES_IMAGES \
FAUX \
/* Indique s'il faut inverser l'ordre de parcours de l'ensemble des images. On a : */ \
/* */ \
/* FAUX : l'image d'arriere-plan est la premiere de la liste, */ \
/* VRAI : l'image d'arriere-plan est la derniere de la liste. */ \
/* */
#define PREMIERE_TRANCHE_VERTICALE \
Zmin \
/* Premiere tranche verticale, */
#define DERNIERE_TRANCHE_VERTICALE \
Zmax \
/* Derniere tranche verticale. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* A C C E S A U X I M A G E S : */
/* */
/*************************************************************************************************************************************/
#define SEQUENCES_EVOLUTIVES \
FAUX
DEFV(Local,DEFV(Logical,INIT(sequences_evolutives,SEQUENCES_EVOLUTIVES)));
/* Indicateur precisant si les images 'RAYON', 'ROUGE', 'VERTE' et 'BLEUE' evoluent au */
/* au cours du temps ('VRAI') ou restent "constantes" ('FAUX')... */
#define ACCES_AUX_IMAGES(image,nom_d_image,charger_une_sequence_evolutive,numero_d_image) \
Bblock \
Test(IFNE_chaine(nom_d_image,NOM_PIPE)) \
Bblock \
Test(IL_NE_FAUT_PAS(sequences_evolutives)) \
Bblock \
CALi(Iload_image(image,nom_d_image)); \
/* Chargement d'une image non numerotee... */ \
Eblock \
ATes \
Bblock \
Test(IL_FAUT(charger_une_sequence_evolutive)) \
Bblock \
DEFV(CHAR,INIT(POINTERc(nom_image),NOM_UNDEF)); \
EGAL(nom_image \
,chain_Aconcaten2_sauf_nom_pipe(nom_d_image \
,chain_numero_modulo(NUMERO_D_IMAGE(numero_d_image) \
,nombre_de_chiffres \
) \
) \
); \
/* Le 20221212120721, 'chain_numero_modulo(...)' a remplace 'chain_numero(...)'... */ \
\
CALi(Iload_image(image,nom_image)); \
/* Chargement d'une image numerotee... */ \
CALZ_FreCC(nom_image); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Acces a une image lorsque cela est necessaire... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* N U M E R O T A G E D E S I M A G E S : */
/* */
/*************************************************************************************************************************************/
#define NUMERO_D_IMAGE(numero_d_image) \
COND(IL_NE_FAUT_PAS(inverser_l_ordre_de_recuperation_des_images) \
,numero_d_image \
,SOUS(derniere_image,SOUS(numero_d_image,premiere_image)) \
) \
/* Fonction de calcul du numero de l'image courante... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N T E G R A T I O N T R I D I M E N S I O N N E L L E D ' U N E S U I T E D ' I M A G E S A V E C */
/* V I S U A L I S A T I O N D E Q U A T R E C H A M P S S C A L A I R E S S I M U L T A N E M E N T : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
/* Nom de la sequence a integrer. */
DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
/* Numero de la premiere image, */
DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE));
/* Numero de la derniere image. */
DEFV(Logical,INIT(inverser_l_ordre_de_recuperation_des_images,INVERSER_L_ORDRE_DE_RECUPERATION_DES_IMAGES));
/* Indique s'il faut inverser l'ordre de parcours de l'ensemble des images. On a : */
/* */
/* FAUX : l'image d'arriere-plan est la premiere de la liste, */
/* VRAI : l'image d'arriere-plan est la derniere de la liste. */
/* */
DEFV(Int,INIT(numero_d_image,UNDEF));
/* Numero de l'image courante. */
DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
/* Pas de passage d'un numero d'image a une autre. */
DEFV(CHAR,INIT(POINTERc(nom_image),NOM_UNDEF));
/* Nom courant des images. */
DEFV(Logical,INIT(le_seuillage_est_aleatoire,LE_SEUILLAGE_EST_ALEATOIRE));
/* Le seuillage est-il aleatoire ('VRAI') ou deterministe ('FAUX') et lie donc aux */
/* parametres 'SEUIL_DE_MASQUAGE_INFERIEUR' et 'SEUIL_DE_MASQUAGE_SUPERIEUR'. */
DEFV(Int,INIT(graine,GRAINE));
/* Graine du generateur aleatoire... */
DEFV(Float,INIT(facteur_des_niveaux,FACTEUR_DES_NIVEAUX));
/* Pour calculer le seuil de generation aleatoire a partir d'un niveau. */
DEFV(Float,INIT(borne_inferieure,PROBABILITE_NULLE));
/* Borne inferieure du generateur, */
DEFV(Float,INIT(borne_superieure,PROBABILITE_UNITE));
/* Borne superieure du generateur. */
DEFV(pointI_2D,point_courant);
/* Point (entier) courant. */
DEFV(genere_p,INIT(seuil_de_masquage_inferieur,SEUIL_DE_MASQUAGE_INFERIEUR));
/* Seuil de masquage en-dessous duquel les points des images 'nom_imageA' sont ignores. */
DEFV(genere_p,INIT(seuil_de_masquage_superieur,SEUIL_DE_MASQUAGE_SUPERIEUR));
/* Seuil de masquage au-dessus duquel les points des images 'nom_imageA' sont ignores. */
DEFV(Int,INIT(premiere_tranche_verticale,PREMIERE_TRANCHE_VERTICALE));
/* Premiere tranche verticale, */
DEFV(Int,INIT(derniere_tranche_verticale,DERNIERE_TRANCHE_VERTICALE));
/* Derniere tranche verticale. */
DEFV(CHAR,INIC(POINTERc(nom_imageA_RAYON),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageA_ROUGE),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageA_VERTE),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageA_BLEUE),NOM_PIPE));
/* Nom des quatre champs a visualiser en mode non evolutif ou evolutif selon la valeur de */
/* l'indicateur 'sequences_evolutives'. */
/*..............................................................................................................................*/
INITIALISATIONS_GENERALES;
/* Initialisations generales faites au tout debut... */
SET_FACTEUR_D_ELOIGNEMENT_EN_Z_DE_L_OBSERVATEUR(POSITIONNEMENT_RELATIF_DE_L_OBSERVATEUR_SUR_L_AXE_OZ);
/* A cause de 'v $xrv/champs_5.1A$I 20221022102442', 'facteur_en_Z_de_l_observateur' et */
/* 'Projection_OX_OY_____facteur_d_eloignement_en_Z_de_l_observateur' doivent imperativement */
/* avoir la meme valeur par defaut afin d'eviter le message d'erreur : */
/* */
/* le 'GET_ARGUMENTS2_F(...)' relatif a 'eloignement_Z_observateur=eZo=' */
/* gere des arguments de valeurs par defaut differentes : */
/* {"F1=+2" # "F2=+100"}. */
/* */
/* genere par 'v $xig/fonct$vv$DEF GESTION_DE_L_IMBRICATION____DES_GET_ARGUMENTSn_x' et en */
/* notant que la tabulation suivant 'GET_ARGUMENTS2_F(...) ' est normale et definie */
/* par 'v $xig/fonct$vv$DEF 20190831122149'. Ceci a donc ete mis en place sous cette forme */
/* le 20221023102620... */
#include xrv/champs_5.1A.I"
GET_ARGUMENTSv(nombre_d_arguments
,BLOC(PROCESS_ARGUMENTS_GEOMETRIQUES;
GET_ARGUMENT_L("evolution=",sequences_evolutives);
GET_ARGUMENT_C("imageA=""A=",nom_imageA);
GET_ARGUMENT_C("cRAYON=",nom_imageA_RAYON);
GET_ARGUMENT_C("cROUGE=",nom_imageA_ROUGE);
GET_ARGUMENT_C("cVERTE=",nom_imageA_VERTE);
GET_ARGUMENT_C("cBLEUE=",nom_imageA_BLEUE);
GET_ARGUMENT_I("premiere=",premiere_image);
GET_ARGUMENT_I("derniere=",derniere_image);
GET_ARGUMENT_I("pas=",pas_des_images);
PROCESS_ARGUMENTS_DE_VISUALISATION_PRIMAIRES;
GET_ARGUMENT_L("editer=",editer_la_definition_de_l_espace_physique);
GET_ARGUMENT_L("aleatoire=",le_seuillage_est_aleatoire);
GET_ARGUMENT_I("graine=",graine);
GET_ARGUMENT_L("affiner_rdn=",rdnIFnD_____affiner_la_generation);
GET_ARGUMENT_L("iterer_rdn=",rdnIFnD_____iterer_la_generation);
GET_ARGUMENT_F("facteurN=",facteur_des_niveaux);
GET_ARGUMENT_P("seuilI=""seuil=""masqueI=""masque=",seuil_de_masquage_inferieur);
GET_ARGUMENT_P("seuilS=""masqueS=",seuil_de_masquage_superieur);
GET_ARGUMENT_I("zmin=",premiere_tranche_verticale);
GET_ARGUMENT_I("zmax=",derniere_tranche_verticale);
GET_ARGUMENT_L("Zauto=",facteur_du_Z_automatique);
GET_ARGUMENT_F("facteurZ=",facteur_du_Z);
GET_ARGUMENT_I("pas_horizontal=""pash=",pas_horizontal);
GET_ARGUMENT_I("pas_vertical=""pasv=",pas_vertical);
/* Arguments introduits le 20111019183320... */
PROCESS_ARGUMENTS_DE_DEFINITION_DU_RAYON_DES_SPHERES_REPRESENTATIVES;
GET_ARGUMENT_F("facteurR=",facteur_du_rayon_de_visualisation);
)
);
/* ATTENTION, il y avait autrefois : */
/* */
/* GET_ARGUMENT_I("Zmin=",premiere_tranche_verticale); */
/* GET_ARGUMENT_I("Zmax=",derniere_tranche_verticale); */
/* */
/* mais cela rentrait en conflit avec : */
/* */
/* GET_ARGUMENT_I("Zmin=",Zmin); \ */
/* GET_ARGUMENT_I("Zmax=",Zmax); \ */
/* */
/* dans '$xig/fonct$vv$DEF' ; donc, */
/* */
/* "zmin=" */
/* "zmax=" */
/* */
/* et : */
/* */
/* "Zmin=" */
/* "Zmax=" */
/* */
/* ne doivent pas etre confondus... */
SET_ECHANTILLONNAGE(pas_horizontal,pas_vertical);
/* Introduit le 20111019190907... */
#include xrv/champs_5.19.I"
/* Pour eviter le message : */
/* */
/* Static function is not referenced. */
/* */
/* sur 'SYSTEME_ES9000_AIX_CC'... */
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
DEFINITION_DE_L_ESPACE_PHYSIQUE;
/* Initialisation de la definition de l'espace physique apres que les dimensions des images */
/* aient ete definies... */
Test(IL_FAUT(facteur_du_Z_automatique))
Bblock
EGAL(facteur_du_Z,DIVI(FLOT(MIN2(dimX,dimY)),FLOT(dimZ)));
/* On choisit a priori le rapport de la plus petite des dimensions '{dimX,dimY}' a 'dimZ'... */
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(editer_la_definition_de_l_espace_physique))
Bblock
CAL2(Prin0("definition de l'espace physique :\n"));
CAL2(Prin4("[%g,%g]x[%g,%g]\n"
,CHAMP_X(Xmin,Ymin),CHAMP_X(Xmax,Ymax)
,CHAMP_Y(Xmin,Ymin),CHAMP_Y(Xmax,Ymax)
)
);
EGAL(tranche_verticale_courante,premiere_tranche_verticale);
CAL2(Prin1("x[%g"
,CHAMP_Z(Xmin,Ymin)
)
);
EGAL(tranche_verticale_courante,derniere_tranche_verticale);
CAL2(Prin1(",%g]"
,CHAMP_Z(Xmax,Ymax)
)
);
CAL2(Prin0("\n"));
Eblock
ATes
Bblock
Eblock
ETes
Test(EST_VRAI(le_seuillage_est_aleatoire))
Bblock
INITIALISATION_POINT_2D(point_courant,Xmin,Ymin);
CALS(rdnI2D(ADRESSE(point_courant),UNDEF,RDN_INIT,borne_inferieure,borne_superieure));
/* Initialisation du generateur aleatoire. */
Eblock
ATes
Bblock
Eblock
ETes
CALS(Iblanc(ImageA2));
CALS(Iblanc(ImageA3));
CALS(Iblanc(ImageA4));
CALS(Iblanc(ImageA5));
/* Ainsi, si l'un des champs n'est pas defini, il fournira une contribution maximale... */
ACCES_AUX_IMAGES(ImageA2,nom_imageA_RAYON,FAUX,UNDEF);
ACCES_AUX_IMAGES(ImageA3,nom_imageA_ROUGE,FAUX,UNDEF);
ACCES_AUX_IMAGES(ImageA4,nom_imageA_VERTE,FAUX,UNDEF);
ACCES_AUX_IMAGES(ImageA5,nom_imageA_BLEUE,FAUX,UNDEF);
/* Acces aux images non evolutives... */
Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation)
Bblock
PUSH_ECHANTILLONNAGE;
SET_ECHANTILLONNAGE(PasX,PasY);
INITIALISATIONS_RELATIVES_A_CHAQUE_NOUVELLE_IMAGE(numero_de_la_periode_courante);
/* Initialisations necessaires avant le calcul et la generation de chaque nouvelle image. */
PULL_ECHANTILLONNAGE;
EGAL(tranche_verticale_courante,premiere_tranche_verticale);
/* Initialisation de la tranche verticale courante. */
DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images)
Bblock
EGAL(nom_image
,chain_Aconcaten2_sauf_nom_pipe(nom_imageA,chain_numero_modulo(NUMERO_D_IMAGE(numero_d_image),nombre_de_chiffres))
);
/* Le 20221212120721, 'chain_numero_modulo(...)' a remplace 'chain_numero(...)'... */
Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA1,nom_image))))
Bblock
/* 'ImageA1' donne la couche a l'instant courant. */
ACCES_AUX_IMAGES(ImageA2,nom_imageA_RAYON,VRAI,numero_d_image);
ACCES_AUX_IMAGES(ImageA3,nom_imageA_ROUGE,VRAI,numero_d_image);
ACCES_AUX_IMAGES(ImageA4,nom_imageA_VERTE,VRAI,numero_d_image);
ACCES_AUX_IMAGES(ImageA5,nom_imageA_BLEUE,VRAI,numero_d_image);
/* Acces aux images evolutives... */
begin_image
Bblock
Test(EST_VRAI(le_seuillage_est_aleatoire))
Bblock
INITIALISATION_POINT_2D(point_courant,X,Y);
Eblock
ATes
Bblock
Eblock
ETes
Test(IFOU(IFET(EST_VRAI(le_seuillage_est_aleatoire)
,IFLE(rdnI2D(ADRESSE(point_courant)
,graine
,RDN_GENERE
,FLOT__ARGUMENT_ABSENT,FLOT__ARGUMENT_ABSENT
)
,MUL2(facteur_des_niveaux,______NORMALISE_NIVEAU(load_point(ImageA1,X,Y)))
)
)
,IFET(EST_FAUX(le_seuillage_est_aleatoire)
,IFINff(load_point(ImageA1,X,Y),seuil_de_masquage_inferieur,seuil_de_masquage_superieur)
)
)
)
Bblock
CALi(memorisation_1_point_02(X,Y));
/* Memorisation du point courant apres toutes les transformations geometriques, et selon */
/* les coordonnees de visualisation, mais uniquement s'il est dans la plage definie par */
/* les seuils de masquage... */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
end_image
INCR(tranche_verticale_courante
,DIVZ(SOUS(derniere_tranche_verticale,premiere_tranche_verticale)
,DIVZ(SOUS(derniere_image,premiere_image)
,pas_des_images
)
)
);
/* Mise a jour de la tranche verticale courante. */
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
CALZ_FreCC(nom_image);
Eblock
EDoI
PUSH_ECHANTILLONNAGE;
SET_ECHANTILLONNAGE(PasX,PasY);
CALCUL_DU_PSEUDO_CENTRE_DE_GRAVITE_ET_TRI_D_UNE_LISTE_DE_POINTS;
/* Tri eventuel de la liste des points par 'Z' croissants, avec retour prealable sur le */
/* dernier point memorise dans la liste... */
VISUALISATION_D_UNE_LISTE_DE_POINTS(numero_de_la_periode_courante);
/* Visualisation de la liste des points (eventuellement triees). */
GENERATION_DE_L_EVENTUEL_EFFET_DE_BRUME;
/* Generation de l'eventuel effet de brume... */
PULL_ECHANTILLONNAGE;
GENERATION_D_UNE_IMAGE(numero_de_la_periode_courante);
/* Memorisation de l'image courante. */
INCR(numero_de_la_periode_courante,I);
/* Et passage a l'image suivante... */
Eblock
EKom
RETU_Commande;
Eblock
ECommande