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