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