/*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N D E T R O I S F I C H I E R S N U M E R I Q U E S */ /* A L ' A I D E D E " I T E R A T E D F U N C T I O N S E T " S : */ /* */ /* */ /* Definition : */ /* */ /* Pour chaque point {X,Y,Z} d'une liste, on */ /* iterera N fois la transformation lineaire */ /* suivante : */ /* */ /* / \ / \ */ /* | X | | X | */ /* | | | | */ /* | Y | = M.| Y | + T */ /* | | | | */ /* | Z | | Z | */ /* \ / \ / */ /* */ /* ou la matrice 'M' et le vecteur colonne 'T' */ /* (dit "de translation") sont choisis de facon */ /* aleatoire parmi un ensemble de couples {M(i),T(i)}. */ /* A chacun de ces couples est donc associee une */ /* probabilite 'P(i)'. */ /* */ /* */ /* Author of '$xrv/IFS.01$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20050610141954). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I C H I E R S D ' I N C L U D E S : */ /* */ /*************************************************************************************************************************************/ #include INCLUDES_BASE /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L E U R S I M P L I C I T E S D E S P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define NOMBRE_D_ITERATIONS \ UN \ /* Nombre d'iterations... */ #define N_EDITER_QUE_LA_DERNIERE_ITERATION \ VRAI \ /* Faut-il n'editer que la derniere iteration ('VRAI') ou bien toutes les iterations */ \ /* ('FAUX') ? Cet argument a ete introduit le 20050612162159... */ #define EDITER_LE_NUMERO_TRANSFORMATION_COURANTE \ FAUX \ /* Si 'IL_NE_FAUT_PAS(n_editer_que_la_derniere_iteration)', faut-il editer la valeur */ \ /* calculee ('FAUX') ou bien le numero de la transformation courante qui a permis son */ \ /* calcul ('VRAI') ? Cet argument a ete introduit le 20050612162159... */ #define GRAINE \ PARE(1789) \ /* Definition du generateur aleatoire... */ #define PONDERATION_OX_IMPLICITE \ FZERO #define PONDERATION_OY_IMPLICITE \ FZERO #define PONDERATION_OZ_IMPLICITE \ FZERO /* Ponderation de selection des coordonnees apres transformation. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S " I T E R A T E D F U N C T I O N S E T " S : */ /* */ /*************************************************************************************************************************************/ #define NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION \ MILLE \ /* Definition du nombre d'elements de chacun des treize vecteurs suivants... */ \ /* */ \ /* ATTENTION : evidemment 'NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION' est en fait le */ \ /* nombre maximal de transformations {M(i),T(i)} qui peuvent etre utilisees, et non pas un */ \ /* nombre maximal de periodes qui n'a pas de sens ici... */ #include xrv/champs_5.41.I" #include xrq/particle.M2.I" #include xrq/nucleon.L3.I" #include xrq/nucleon.Lf.2.I" dfTRANSFORMAT_31(liste_ELEMENT_M11,fichier_ELEMENT_M11,ELEMENT_M11_IMPLICITE,FU) dfTRANSFORMAT_31(liste_ELEMENT_M12,fichier_ELEMENT_M12,ELEMENT_M12_IMPLICITE,FZERO) dfTRANSFORMAT_31(liste_ELEMENT_M13,fichier_ELEMENT_M13,ELEMENT_M13_IMPLICITE,FZERO) dfTRANSFORMAT_31(liste_ELEMENT_M21,fichier_ELEMENT_M21,ELEMENT_M21_IMPLICITE,FZERO) dfTRANSFORMAT_31(liste_ELEMENT_M22,fichier_ELEMENT_M22,ELEMENT_M22_IMPLICITE,FU) dfTRANSFORMAT_31(liste_ELEMENT_M23,fichier_ELEMENT_M23,ELEMENT_M23_IMPLICITE,FZERO) dfTRANSFORMAT_31(liste_ELEMENT_M31,fichier_ELEMENT_M31,ELEMENT_M31_IMPLICITE,FZERO) dfTRANSFORMAT_31(liste_ELEMENT_M32,fichier_ELEMENT_M32,ELEMENT_M32_IMPLICITE,FZERO) dfTRANSFORMAT_31(liste_ELEMENT_M33,fichier_ELEMENT_M33,ELEMENT_M33_IMPLICITE,FU) /* Definition des matrices 'M(i)'. */ dfTRANSFORMAT_31(liste_TRANSLATION_OX,fichier_TRANSLATION_OX,TRANSLATION_OX_IMPLICITE,FZERO) dfTRANSFORMAT_31(liste_TRANSLATION_OY,fichier_TRANSLATION_OY,TRANSLATION_OY_IMPLICITE,FZERO) dfTRANSFORMAT_31(liste_TRANSLATION_OZ,fichier_TRANSLATION_OZ,TRANSLATION_OZ_IMPLICITE,FZERO) /* Definition des trois translations 'T(i)'. */ dfTRANSFORMAT_31(liste_PROBABILITE,fichier_PROBABILITE,PROBABILITE_IMPLICITE,FU) /* Definition des probabilites de selection d'un couple {M(i),T(i)}. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S T R O I S F I C H I E R S : */ /* */ /*************************************************************************************************************************************/ #include xrv/ARITHMET.1d.I" /* Passage a l'allocation dynamique le 20060214174631... */ #include xrv/ARITHMET.21.I" #include xrv/champs_5.14.I" #define X_IMPLICITE \ FZERO #define Y_IMPLICITE \ FZERO #define Z_IMPLICITE \ FZERO gGENERATION_D_UN_FICHIER(fichier_LISTE_X,liste_initiale_des_X); gGENERATION_D_UN_FICHIER(fichier_LISTE_Y,liste_initiale_des_Y); gGENERATION_D_UN_FICHIER(fichier_LISTE_Z,liste_initiale_des_Z); /* Definition en memoire des fichiers de coordonnees. */ #define ELEMENT_DU_FICHIER_LISTE_X(index) \ gELEMENT_DU_FICHIER(liste_initiale_des_X,index) #define ELEMENT_DU_FICHIER_LISTE_Y(index) \ gELEMENT_DU_FICHIER(liste_initiale_des_Y,index) #define ELEMENT_DU_FICHIER_LISTE_Z(index) \ gELEMENT_DU_FICHIER(liste_initiale_des_Z,index) /* Acces a un element courant des fichiers de coordonnees. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E L A V A L E U R A E D I T E R : */ /* */ /*************************************************************************************************************************************/ #define VALEUR_A_EDITER \ LIZ3(ponderation_OX,Xf \ ,ponderation_OY,Yf \ ,ponderation_OZ,Zf \ ) \ /* Valeur a editer... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N D E T R O I S F I C H I E R S N U M E R I Q U E S */ /* A L ' A I D E D E " I T E R A T E D F U N C T I O N S E T " S : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock #include xrv/ARITHMET.22.I" #include xci/valeurs.03.I" DEFV(Int,INIT(nombre_d_iterations,NOMBRE_D_ITERATIONS)); /* Nombre d'iterations... */ DEFV(Logical,INIT(n_editer_que_la_derniere_iteration,N_EDITER_QUE_LA_DERNIERE_ITERATION)); /* Faut-il n'editer que la derniere iteration ('VRAI') ou bien toutes les iterations */ /* ('FAUX') ? Cet argument a ete introduit le 20050612162159... */ DEFV(Logical,INIT(editer_le_numero_transformation_courante,EDITER_LE_NUMERO_TRANSFORMATION_COURANTE)); /* Si 'IL_NE_FAUT_PAS(n_editer_que_la_derniere_iteration)', faut-il editer la valeur */ /* calculee ('FAUX') ou bien le numero de la transformation courante qui a permis son */ /* calcul ('VRAI') ? Cet argument a ete introduit le 20050612162159... */ DEFV(Int,INIT(graine,GRAINE)); /* Definition du generateur aleatoire... */ DEFV(pointI_3D,point_courant_de_l_espace_de_parametrage); /* Point courant d'un espace abstrait servant a parametrer le generateur d'evenements. */ SPIRALE_DEFINITION_GENERALE(SPIRALE_DELTA_HORIZONTAL_GLOBAL,SPIRALE_DELTA_VERTICAL_GLOBAL) /* Donnees de generation d'une spirale de parcours d'un espace abstrait bidimensionnel */ /* de parametrage de la generation des evenements. */ DEFV(Float,INIT(ponderation_OX,PONDERATION_OX_IMPLICITE)); DEFV(Float,INIT(ponderation_OY,PONDERATION_OY_IMPLICITE)); DEFV(Float,INIT(ponderation_OZ,PONDERATION_OZ_IMPLICITE)); /* Ponderation de selection des coordonnees apres transformation. */ /*..............................................................................................................................*/ #include xrv/champs_5.1A.I" /* Ceci fut introduit le 20070103171443... */ iTRANSFORMAT_31(liste_ELEMENT_M11,ELEMENT_M11_IMPLICITE); iTRANSFORMAT_31(liste_ELEMENT_M12,ELEMENT_M12_IMPLICITE); iTRANSFORMAT_31(liste_ELEMENT_M13,ELEMENT_M13_IMPLICITE); iTRANSFORMAT_31(liste_ELEMENT_M21,ELEMENT_M21_IMPLICITE); iTRANSFORMAT_31(liste_ELEMENT_M22,ELEMENT_M22_IMPLICITE); iTRANSFORMAT_31(liste_ELEMENT_M23,ELEMENT_M23_IMPLICITE); iTRANSFORMAT_31(liste_ELEMENT_M31,ELEMENT_M31_IMPLICITE); iTRANSFORMAT_31(liste_ELEMENT_M32,ELEMENT_M32_IMPLICITE); iTRANSFORMAT_31(liste_ELEMENT_M33,ELEMENT_M33_IMPLICITE); /* Initialisation des matrices 'M(i)'. */ iTRANSFORMAT_31(liste_TRANSLATION_OX,TRANSLATION_OX_IMPLICITE); iTRANSFORMAT_31(liste_TRANSLATION_OY,TRANSLATION_OY_IMPLICITE); iTRANSFORMAT_31(liste_TRANSLATION_OZ,TRANSLATION_OZ_IMPLICITE); /* Initialisation des trois translations 'T(i)'. */ iTRANSFORMAT_31(liste_PROBABILITE,PROBABILITE_IMPLICITE); /* Initialisation des probabilites de selection d'un couple {M(i),T(i)}. */ INITIALISATION_TRANSFORMATION; /* Mise en place de la transformation neutre... */ GET_ARGUMENTS_(nombre_d_arguments ,BLOC(PROCESS_ARGUMENT_I("nombre_elements=""ne=",nombre_d_elements ,BLOC(VIDE;) ,BLOC(Bblock PRINT_AVERTISSEMENT("'ne=' doit etre defini avant toute entree de fichiers"); Eblock ) ); PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01; PROKESF_ARGUMENT_FICHIER("LISTE_X=" ,fichier_LISTE_X ,liste_initiale_des_X ,X_IMPLICITE ,lTRANSFORMAT_0d ,iGENERATION_D_UN_FICHIER ); PROKESF_ARGUMENT_FICHIER("LISTE_Y=" ,fichier_LISTE_Y ,liste_initiale_des_Y ,Y_IMPLICITE ,lTRANSFORMAT_0d ,iGENERATION_D_UN_FICHIER ); PROKESF_ARGUMENT_FICHIER("LISTE_Z=" ,fichier_LISTE_Z ,liste_initiale_des_Z ,Z_IMPLICITE ,lTRANSFORMAT_0d ,iGENERATION_D_UN_FICHIER ); PROCESS_ARGUMENT_I("nt=",nombre_de_periodes_de_la_simulation /* ATTENTION : evidemment 'nombre_de_periodes_de_la_simulation' est en fait le nombre de */ /* transformations {M(i),T(i)} qui vont etre utilisees, et non pas un nombre de periodes */ /* qui n'a pas de sens ici... */ ,BLOC(VIDE;) ,BLOC( Bblock PRINT_AVERTISSEMENT("'nt=' doit etre defini avant tout fichier"); Test(IFGT(nombre_de_periodes_de_la_simulation ,NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION ) ) Bblock PRINT_ERREUR("trop de transformations sont demandees"); PRINT_ERREUR("elles vont donc etre limitees"); CAL1(Prer1("le nombre de transformations demande etait de %d, " ,nombre_de_periodes_de_la_simulation ) ); CAL1(Prer1("le maximum etant de %d\n" ,NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION ) ); EGAL(nombre_de_periodes_de_la_simulation ,NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION ); /* Et on seuille le nombre de transformations... */ Eblock ATes Bblock Eblock ETes Eblock ) ); PROCESS_ARGUMENT_FICHIER("ELEMENT_M11=" ,fichier_ELEMENT_M11 ,liste_ELEMENT_M11 ,ELEMENT_M11_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("ELEMENT_M12=" ,fichier_ELEMENT_M12 ,liste_ELEMENT_M12 ,ELEMENT_M12_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("ELEMENT_M13=" ,fichier_ELEMENT_M13 ,liste_ELEMENT_M13 ,ELEMENT_M13_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("ELEMENT_M21=" ,fichier_ELEMENT_M21 ,liste_ELEMENT_M21 ,ELEMENT_M21_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("ELEMENT_M22=" ,fichier_ELEMENT_M22 ,liste_ELEMENT_M22 ,ELEMENT_M22_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("ELEMENT_M23=" ,fichier_ELEMENT_M23 ,liste_ELEMENT_M23 ,ELEMENT_M23_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("ELEMENT_M31=" ,fichier_ELEMENT_M31 ,liste_ELEMENT_M31 ,ELEMENT_M31_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("ELEMENT_M32=" ,fichier_ELEMENT_M32 ,liste_ELEMENT_M32 ,ELEMENT_M32_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("ELEMENT_M33=" ,fichier_ELEMENT_M33 ,liste_ELEMENT_M33 ,ELEMENT_M33_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("TRANSLATION_OX=" ,fichier_TRANSLATION_OX ,liste_TRANSLATION_OX ,TRANSLATION_OX_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("TRANSLATION_OY=" ,fichier_TRANSLATION_OY ,liste_TRANSLATION_OY ,TRANSLATION_OY_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("TRANSLATION_OZ=" ,fichier_TRANSLATION_OZ ,liste_TRANSLATION_OZ ,TRANSLATION_OZ_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("PROBABILITE=" ,fichier_PROBABILITE ,liste_PROBABILITE ,PROBABILITE_IMPLICITE ,gTRANSFORMAT_31 ); GET_ARGUMENT_I("iterations=",nombre_d_iterations); GET_ARGUMENT_L("derniere=",n_editer_que_la_derniere_iteration); GET_ARGUMENT_N("toutes=",n_editer_que_la_derniere_iteration); GET_ARGUMENT_L("numero=",editer_le_numero_transformation_courante); GET_ARGUMENT_N("valeur=",editer_le_numero_transformation_courante); GET_ARGUMENT_I("graine=""g=",graine); GET_ARGUMENT_L("affiner_rdn=",rdnIFnD_____affiner_la_generation); GET_ARGUMENT_L("iterer_rdn=",rdnIFnD_____iterer_la_generation); GET_ARGUMENT_F("px=""pX=""Pond1=",ponderation_OX); /* A ne pas confondre avec 'v $xig/fonct$vv$DEF ENTREE_ARGUMENT_pasX'... */ GET_ARGUMENT_F("py=""pY=""Pond2=",ponderation_OY); /* A ne pas confondre avec 'v $xig/fonct$vv$DEF ENTREE_ARGUMENT_pasY'... */ GET_ARGUMENT_F("pz=""pZ=""Pond3=",ponderation_OZ); /* A ne pas confondre avec 'v $xig/fonct$vv$DEF ENTREE_ARGUMENT_pasZ'... */ PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_3; /* Cette procedure fut introduite le 20070103171443... */ PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1; /* Cette procedure fut introduite le 20061226193534... */ PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_5; /* Cette procedure fut introduite le 20211005104350... */ ) ); SPIRALE_VALIDATION; /* Validation des pas de parcours (pasX,pasY) de l'espace abstrait de parametrage du */ /* generateur d'evenements. */ INITIALISATION_POINT_3D(point_courant_de_l_espace_de_parametrage,Xmin,Ymin,Zmin); /* Initialisation de l'espace de parametrage independante du format de l'image, puisque le */ /* point 'min' n'en depend pas... */ gOPERATION_SUR_LES_FICHIERS(BLOC( DEFV(Float,INIT(Xf,ELEMENT_DU_FICHIER_LISTE_X(index))); DEFV(Float,INIT(Yf,ELEMENT_DU_FICHIER_LISTE_Y(index))); DEFV(Float,INIT(Zf,ELEMENT_DU_FICHIER_LISTE_Z(index))); /* Recuperation des coordonnees {X,Y,Z} courantes dans les fichiers. */ Test(IL_FAUT(n_editer_que_la_derniere_iteration)) Bblock Eblock ATes Bblock Test(IL_FAUT(editer_le_numero_transformation_courante)) Bblock Eblock ATes Bblock EDITION_DANS_gOPERATION_SUR_LES_FICHIERS_AVEC_SAUT_DE_LIGNE(VALEUR_A_EDITER); /* Edition des coordonnees {X,Y,Z} avant iteration... */ /* */ /* Introduit sous cette forme le 20160804094346... */ Eblock ETes Eblock ETes Test(IZGT(nombre_de_periodes_de_la_simulation)) Bblock Repe(nombre_d_iterations) Bblock DEFV(Int,INIT(numero_transformation_courante ,NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION ) ); /* Numero de la transformation courante... */ DEFV(Logical,INIT(chercher_une_transformation,VRAI)); /* Il faut rechercher au moins une transformation... */ DEFV(Float,INIT(borne_inferieure,COORDONNEE_BARYCENTRIQUE_MINIMALE)); DEFV(Float,INIT(borne_superieure,COORDONNEE_BARYCENTRIQUE_MAXIMALE)); /* Definition des bornes {inf,sup} du generateur aleatoire... */ DEFV(Float,INIT(valeur_aleatoire,FLOT__UNDEF)); /* Valeur aleatoire courante... */ DEFV(Float,INIT(cumul_des_probabilites,FZERO)); /* Cumul des probabilites des differentes transformations... */ DEFV(Float,INIT(translation_OX,FZERO)); DEFV(Float,INIT(translation_OY,FZERO)); DEFV(Float,INIT(translation_OZ,FZERO)); /* Definition des trois translations. On notera l'initialisation avec 'FZERO' et non pas */ /* 'FLOT__UNDEF' pour le cas ou aucune transformation ne serait selectionnee... */ DEFV(Float,INIT(Xf_transforme,FLOT__UNDEF)); DEFV(Float,INIT(Yf_transforme,FLOT__UNDEF)); DEFV(Float,INIT(Zf_transforme,FLOT__UNDEF)); /* Valeurs transformees par la transformation courante des coordonnees {X,Y,Z} courantes... */ Tant(IL_FAUT(chercher_une_transformation)) Bblock EGAL(valeur_aleatoire ,rdnI3D(ADRESSE(point_courant_de_l_espace_de_parametrage) ,graine ,RDN_INIT_AND_GENERE ,borne_inferieure,borne_superieure ) ); /* Generation d'une valeur aleatoire dans [borne_inferieure,borne_superieure] et parametree */ /* par le point courant de l'espace de parametrage. */ SPIRALE_INITIALISATION; /* Initialisation dynamique de 'spirale_nombre_de_points_a_traiter'. */ SPIRALE_DEPLACEMENT(ASD1(point_courant_de_l_espace_de_parametrage,x) ,ASD1(point_courant_de_l_espace_de_parametrage,y) ); /* Deplacement du point courant de la spirale de l'espace de parametrage. */ SPIRALE_PARCOURS; /* Parcours de la spirale avec rotation eventuelle de PI/2 du bras courant... */ INCR(cumul_des_probabilites ,sTRANSFORMAT_31(numero_transformation_courante,liste_PROBABILITE) ); Test(IFLE(valeur_aleatoire,cumul_des_probabilites)) Bblock EGAL(ASD2(vecteurs_____matrix_3D,cx,cx) ,sTRANSFORMAT_31(numero_transformation_courante,liste_ELEMENT_M11) ); EGAL(ASD2(vecteurs_____matrix_3D,cx,cy) ,sTRANSFORMAT_31(numero_transformation_courante,liste_ELEMENT_M12) ); EGAL(ASD2(vecteurs_____matrix_3D,cx,cz) ,sTRANSFORMAT_31(numero_transformation_courante,liste_ELEMENT_M13) ); EGAL(ASD2(vecteurs_____matrix_3D,cy,cx) ,sTRANSFORMAT_31(numero_transformation_courante,liste_ELEMENT_M21) ); EGAL(ASD2(vecteurs_____matrix_3D,cy,cy) ,sTRANSFORMAT_31(numero_transformation_courante,liste_ELEMENT_M22) ); EGAL(ASD2(vecteurs_____matrix_3D,cy,cz) ,sTRANSFORMAT_31(numero_transformation_courante,liste_ELEMENT_M23) ); EGAL(ASD2(vecteurs_____matrix_3D,cz,cx) ,sTRANSFORMAT_31(numero_transformation_courante,liste_ELEMENT_M31) ); EGAL(ASD2(vecteurs_____matrix_3D,cz,cy) ,sTRANSFORMAT_31(numero_transformation_courante,liste_ELEMENT_M32) ); EGAL(ASD2(vecteurs_____matrix_3D,cz,cz) ,sTRANSFORMAT_31(numero_transformation_courante,liste_ELEMENT_M33) ); EGAL(translation_OX ,sTRANSFORMAT_31(numero_transformation_courante,liste_TRANSLATION_OX) ); EGAL(translation_OY ,sTRANSFORMAT_31(numero_transformation_courante,liste_TRANSLATION_OY) ); EGAL(translation_OZ ,sTRANSFORMAT_31(numero_transformation_courante,liste_TRANSLATION_OZ) ); EGAL(chercher_une_transformation,FAUX); /* On arrete d'iterer puisque l'on a trouve une transformation... */ Eblock ATes Bblock Test(IFLT(numero_transformation_courante ,LSTX(NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION ,nombre_de_periodes_de_la_simulation ) ) ) /* Je note le 20150617100948 que plutot que 'nombre_de_periodes_de_la_simulation', c'est */ /* peut-etre : */ /* */ /* LSTX(NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION */ /* ,nombre_de_periodes_de_la_simulation */ /* ) */ /* */ /* qu'il faudrait utiliser. Finalement je corrige cela le 20150617105120... */ Bblock INCR(numero_transformation_courante,I); /* Passage a la transformation suivante... */ Eblock ATes Bblock PRINT_ERREUR("aucune transformation n'a pu etre selectionnee"); /* Ce sera en fait la derniere transformation prise en compte qui sera utilisee (ou la */ /* transformation par defaut la premier fois...). */ EGAL(chercher_une_transformation,FAUX); /* Et evidemment, on arrete d'iterer... */ Eblock ETes Eblock ETes Eblock ETan Test(IFEXff(cumul_des_probabilites,borne_inferieure,borne_superieure)) Bblock PRINT_ERREUR("le cumul des probabilites est incorrect"); CAL1(Prer1("cumul...........=%f\n",cumul_des_probabilites)); CAL1(Prer1("borne inferieure=%f\n",borne_inferieure)); CAL1(Prer1("borne superieure=%f\n",borne_superieure)); Eblock ATes Bblock Eblock ETes EGAL(Xf_transforme,TRANSFORMATION_GEOMETRIQUE_3D_Fx(Xf,Yf,Zf,translation_OX)); EGAL(Yf_transforme,TRANSFORMATION_GEOMETRIQUE_3D_Fy(Xf,Yf,Zf,translation_OY)); EGAL(Zf_transforme,TRANSFORMATION_GEOMETRIQUE_3D_Fz(Xf,Yf,Zf,translation_OZ)); EGAL(Xf,Xf_transforme); EGAL(Yf,Yf_transforme); EGAL(Zf,Zf_transforme); /* Et enfin, application de la transformation... */ Test(IL_FAUT(n_editer_que_la_derniere_iteration)) Bblock Eblock ATes Bblock Test(IL_FAUT(editer_le_numero_transformation_courante)) Bblock CAL2(Prin1("%d",numero_transformation_courante)); /* Edition du numero de la transformation selectionnee... */ Eblock ATes Bblock EDITION_DANS_gOPERATION_SUR_LES_FICHIERS(VALEUR_A_EDITER); /* Edition des coordonnees {X,Y,Z} apres chaque iteration... */ Eblock ETes CAL2(Prin0("\n")); Eblock ETes Eblock ERep Eblock ATes Bblock Eblock ETes ) ,VALEUR_A_EDITER ,n_editer_que_la_derniere_iteration ,nombre_d_exemplaires_du_resultat_de_l_operation_sur_les_valeurs_courantes ); /* Transformation tridimensionnelle. */ lGENERATION_D_UN_FICHIER(liste_initiale_des_Z,Z_IMPLICITE); lGENERATION_D_UN_FICHIER(liste_initiale_des_Y,Y_IMPLICITE); lGENERATION_D_UN_FICHIER(liste_initiale_des_X,X_IMPLICITE); RETU_Commande; Eblock ECommande