/*************************************************************************************************************************************/
/* */
/* C O N S T R U C T I O N D ' U N E F I G U R E D E D I F F R A C T I O N : */
/* A V E C S U P E R P O S I T I O N D E S E V E N E M E N T S : */
/* */
/* */
/* Par deux fentes (pX=1 et pY=0) : */
/* */
/* */
/* . */
/* . .- . . o */
/* . :::.: - :.. . .: : .-+ + +*-.: ...*.+. */
/* .: o .:::-*+o+:..:.. -#o . - .:.-+. -:+ oo+...-+. :. *.: -..-..o */
/* +. .o:# :-..-:+.+:-. :+:-..+*-+-.::++..#-.:.:.-- *+o...+.:.- . */
/* :*.o..* ...+.o: +::#.+ .*.o.#-oo++ +*:-:*#**.:-*+##..:-o .-.:--. */
/* * .... .+.:o #:..#-o--**o- +#. .- o.++ +. : ..+-. + .:#*:.:.. */
/* . .+.o+-*. +#: .:- : ..- .-.o-o.# .:* :o. * + -: . oo */
/* - .# + - * . # o : .. */
/* +. : */
/* .-. .#. o: -. -#.o +.-:#. .: .. ... + -- .. */
/* o .: : . :: ::.: ..*# :* .*- *oo##+..+::o.*#.o-#.+*o :+o++:o */
/* :..- -.:oo**-*+...*.-..*:#+::+--.:-oo *#.+:o.- o .o..+.:o.::..: */
/* -..:.+o--.+...-#++:+.*.*+#:#o*.o.:#+*:*+.*o+#*#.:.:#*+o.-.o:.:.: */
/* :..#- +.:-*...#.-...#o.-oo.:.. o##-o# :o--#o #::.. #-+. -: :::.- */
/* ..o o-:... o ++-.o:# +++#*- **o *. .. :-.* -+ # *..- :. :: */
/* . + . # . o .: # #.: ** +.- * o : . o- o.. . */
/* */
/* . . .- o .. o. . - + :. */
/* - .# -- .-- .oo.##-+ .o * *#.# o+-:+ #. -o.:-#oo.**: */
/* -.#.-++ **:*# .##::o.:+.* :-. .. +--o +*o++ :-. . -o++:. .- */
/* -.-#.:.o::o .o-::oo.-.:.+.-*+*#.:o.++#o.::.*o*..-#...o..- :.:.-. */
/* #.+..- .:+..#...:*. --.+*..#*o+ .::+#. .*+. oo##.*-+-+. .o.:++: */
/* .: o--.: +..+o :-::- ::..-: .o-#+* ..:..::-+- :.-:.-+ :.- */
/* o:.: .o. . : :+. #. #+...- . - - .... */
/* : . */
/* .o .- . . .: - + . */
/* :o:.:.o +- - :: .. . -o*: oooo.+ :.: + .-*oo:-o..* .. */
/* # :..:.-:+ .:# +*- :+ o+ .o:-- *.:*..#.*.++ +.:.-oo.-.o.o.:...# */
/* .+: o::..:+o .:.+.***-.::-...-o+#o .: +*.*++*..-.+ #..o :.:- */
/* :......:+:.--.*. : -.++ **:.:o.-. o* o-:oo+-...:+o:-. -::::.+.o */
/* ..-#-+-..:+o*- . *.-:#... -:**:+.:.:.:-+.. *o.+..#:.+# ..+.:.*.- */
/* */
/* */
/* Par un reseau cubique (pX=0 et pY=0) : */
/* */
/* */
/* .-.. .:: .: . ..-: . +* . +- *.. */
/* .-.oo ..-.-+.* ..+...o--. *- .:o:.-.:. .:..-. o+::. */
/* ..:..+*:..+* : o-::-. ::. . --ooo . -o+ :.-o + */
/* o .:::-+ o. .. o #.*o.-o. : :-.+ oo+.... *.++-..-. */
/* ..# .-. - :+:o: . :+...--.:.:.: +... .:. */
/* o.. .+ o :o .*. .: #* . . -...: */
/* . .. o o .: *. */
/* . .. */
/* . o.- #. * :. . . .-. . .:. ..o */
/* -.*. ..- .+ :.+.::*:. --.o+:*-. #+#oo.o */
/* ..: -:. - -+..+# :.+#*.: .-. +. ++-.o. */
/* ::.-+#.#::. : +.*##:.-o. : *-#*#.:-:o.: *oo ::o++-. */
/* : .- -.:oo**:o .*.o..o:#+ ++.+ *#. :..- # .+.:o.::.. */
/* . :.+.- . . .+:+.*.*+# # # *. +.*o+:+ *: -..:.:.. */
/* ..#+ # .. # o. #o #. #.* . . */
/* . */
/* . . .+ .. :..# .. -+. .:: * : . */
/* .o * .-o o o o-*-## . # - . *:- * # . oo+o.:: : */
/* : +.o.--..- o.-.**-: -..o+.*# - -+ : * : */
/* . .*o-- .. : :#++..+ * + #..o*- o ::-#oo.+:. */
/* ..-- *o.* #.o.:+.* :-. : + +*o+. o+ :. : */
/* . .:.o::o + o .-.:.+ .* +#+.::. o* :o. - :.:. */
/* .... :+ .# -* . # .::.#. + o. . .: : */
/* : .o */
/* : . # + . : */
/* o.. - - o +. ::* *. . + .. # # #o --: */
/* :.+.:-:*** .. :+-*+. .:. .. . +#*: . - - . .:*#. */
/* : : .*.+. .+.. .. o.: #.. ..-++.+.- *- .. : :+:.*-. */
/* -:....-:+ - . .-. :+ +: *.-#.*.+* .. -...o.o: --* */
/* + #+* .:o +.** -.::-.. . .: *.*++* #. * : - */
/* . . . :.* : - + ** .: . :oo+..: *. .. ::+. */
/* .* . ...o . . */
/* */
/* */
/* Author of '$xrq/diffract.11$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1993??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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_____MODULE_NON_DERIVABLE
@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 B A S E E T U N I V E R S E L L E S : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.11.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 3 */
/* D E F I N I T I O N D E L ' E S P A C E P H Y S I Q U E D A N S R ( D E B U T ) : */
/* */
/* */
/* Nota : */
/* */
/* Les extrema des coordonnees {x,y,z} */
/* ainsi que ceux de leurs differentielles */
/* {dx,dy,dz} sont fixees un peu arbitrairement */
/* et sans etre parametrees. */
/* */
/* */
/*************************************************************************************************************************************/
#define hXmin_ESPACE \
PARE(-2.0)
#define hYmin_ESPACE \
PARE(-2.0)
#define hZmin_ESPACE \
PARE(-2.0)
/* Definition du "coin" inferieur-gauche-arriere de l'espace physique. */
#define hXmax_ESPACE \
PARE(2.0)
#define hYmax_ESPACE \
PARE(2.0)
#define hZmax_ESPACE \
PARE(2.0)
/* Definition du "coin" superieur-droite-avant de l'espace physique. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 ) : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.12.I"
#define dXmin_ESPACE \
PARE(0.00)
#define dYmin_ESPACE \
PARE(0.00)
#define dZmin_ESPACE \
PARE(0.00)
/* Definition des minima des differentielles {dx,dy,dz}. */
#define dXmax_ESPACE \
PARE(1.00)
#define dYmax_ESPACE \
PARE(1.00)
#define dZmax_ESPACE \
PARE(1.00)
/* Definition des maxima des differentielles {dx,dy,dz}. */
#include xrk/attractor.1D.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S D I F F E R E N T S E S P A C E S E T D E L ' E F F E T D E B R U M E : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.13.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* A I D E A U C A D R A G E D E S I M A G E S : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.1C.I"
DONNEES_DE_RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES
/* Definition des extrema des coordonnees et des derivees. On notera bien l'absence de */
/* point-virgule apres 'DONNEES_DE_RECHERCHE_DES_EXTREMA_DES_COORDONNEES'. */
/* */
/* Le 20061211133708 'DONNEES_DE_RECHERCHE_DES_EXTREMA_DES_COORDONNEES' a ete remplace par */
/* 'DONNEES_DE_RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES' a cause de la */
/* definition de 'prendre_la_valeur_absolue_des_differentielles' necessaires dans */
/* 'v $xrv/champs_5.1A$I prendre_la_valeur_absolue_des_differentielles'... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S G E N E R A L E S R E L A T I V E S A L A V I S U A L I S A T I O N : */
/* */
/*************************************************************************************************************************************/
#include xrv/particule.41.I"
#include xrk/attractor.14.I"
#include xrq/diffract.14.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... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N D E M E M O R I S A T I O N D U P O I N T C O U R A N T : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.16.I"
#define RAYON_DE_VISUALISATION \
FRA4(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation,RAYON_DE_VISUALISATION)));
/* Rayon du disque materialisant une iteration. */
BFonctionI
DEFV(Local,DEFV(FonctionI,memorisation_1_point_07(AXf,AYf,AZf,AdXf,AdYf,AdZf,numero_de_l_iteration_courante)))
DEFV(Argument,DEFV(Float,AXf));
DEFV(Argument,DEFV(Float,AYf));
DEFV(Argument,DEFV(Float,AZf));
/* Definition de la position {x,y,z} de l'iteration courante. */
DEFV(Argument,DEFV(Float,AdXf));
DEFV(Argument,DEFV(Float,AdYf));
DEFV(Argument,DEFV(Float,AdZf));
/* Definition des differentielles {dx,dy,dz} de la position de l'iteration courante. */
DEFV(Argument,DEFV(Int,numero_de_l_iteration_courante));
/* Numero de l'iteration courante afin d'attenuer eventuellement la luminance des points */
/* materialisant chaque iteration en fonction de leur numero (les premieres iterations etant */
/* plus sombres, et les dernieres etant plus lumineuses). */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
#include xrk/attractor.15.I"
INIT_ERROR;
/*..............................................................................................................................*/
MEMORISATION_DU_POINT_COURANT(X_DERIVEE_DANS_01(AdXf)
,Y_DERIVEE_DANS_01(AdYf)
,Z_DERIVEE_DANS_01(AdZf)
);
/* Memorisation du point courant en Noir et Blanc ou en Couleurs, mais uniquement s'il est */
/* visible en fonction des conditions de visualisation... */
RETU_ERROR;
Eblock
EFonctionI
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L A C O N S T R U C T I O N D ' U N E F I G U R E D E D I F F R A C T I O N : */
/* */
/* */
/* Definition : */
/* */
/* Elle est definie par accumulation */
/* de points dont les coordonnees sont */
/* calculees de la facon suivante : */
/* */
/* X = aleatoire dans [hXmin_ESPACE,hXmax_ESPACE] suivant une loi de probabilite donnee, */
/* Y = aleatoire dans [hYmin_ESPACE,hYmax_ESPACE] suivant une loi de probabilite donnee, */
/* Z = Zcentre_espace. */
/* */
/* La loi de probabilite est soit uniforme */
/* (par exemple le long de 'OX' afin de voir */
/* apparaitre des bandes horizontales), soit */
/* "sinusoidale" ; pour ce faire, le long de */
/* l'axe sur lequel cette loi est utilisee, la */
/* fonction suivante : */
/* */
/* 2 */
/* [ sin(N.t) ] */
/* S(t) = [----------] */
/* [ sin(t) ] */
/* */
/* est evaluee (ou 'N' represente le parametre */
/* 'resserrement_de_la_probabilite'). On notera */
/* que pour les petites valeurs de 't' : */
/* */
/* 2 2 */
/* [ sin(N.t) ] [ N.t ] 2 */
/* [----------] ~ [-----] = N */
/* [ sin(t) ] [ t ] */
/* */
/* d'ou : */
/* */
/* 2 */
/* lim[S(t)] = N */
/* t --> 0 */
/* */
/* cette valeur 'N' est utilisee a priori comme */
/* valeur maximale de la fonction 'S(...)' pour */
/* la renormaliser dans [0,1]. */
/* */
/* */
/*************************************************************************************************************************************/
=define ZOOM_IMPLICITE \
GRO7(FRA8(FU)) \
/* Afin d'etre sur de voir toutes les particules generees... */
#include xrk/attractor.17.I"
dfTRANSFORMAT_31(liste_NOMBRE_D_ITERATIONS,fichier_NOMBRE_D_ITERATIONS,NOMBRE_D_ITERATIONS_IMPLICITE,NOMBRE_D_ITERATIONS)
/* Definition du fichier des nombres d'iterations. */
#define sNOMBRE_D_ITERATIONS(numero_de_la_periode) \
INTE(sTRANSFORMAT_31(numero_de_la_periode,liste_NOMBRE_D_ITERATIONS)) \
/* Formule generale definissant les variations du nombre d'iterations. */
#define PULSATION \
GRO4(FU)
#define PHASE \
FZERO
DEFV(Local,DEFV(Float,INIT(pulsation,PULSATION)));
DEFV(Local,DEFV(Float,INIT(phase,PHASE)));
/* Definition de la valeur de la pulsation et de la phase du generateur aleatoire le long */
/* de l'axe 'OY' au cours du temps. */
#define EDITER_LE_NOMBRE_D_EVENEMENTS \
FAUX
DEFV(Local,DEFV(Logical,INIT(editer_le_nombre_d_evenements,EDITER_LE_NOMBRE_D_EVENEMENTS)));
/* Option permettant d'editer le nombre d'evenements (nombre de particules marquees) par */
/* image... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N S D E V I S U A L I S A T I O N E T D ' I N T E R P O L A T I O N : */
/* */
/*************************************************************************************************************************************/
dfTRANSFORMAT_31(liste_PULSATION,fichier_PULSATION,PULSATION_IMPLICITE,PULSATION)
dfTRANSFORMAT_31(liste_PHASE,fichier_PHASE,PHASE_IMPLICITE,PHASE)
/* Definition des fichiers de la pulsation et de la phase du generateur aleatoire le long */
/* de l'axe 'OY'. */
#define sPULSATION(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_PULSATION))
#define sPHASE(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_PHASE))
/* Formule generale definissant les variations de la pulsation et de la phase du generateur */
/* aleatoire le long de l'axe 'OY' au cours du temps. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S L O I S D E P R O B A B I L I T E : */
/* */
/*************************************************************************************************************************************/
#include xrq/nucleon.LC.I"
#define PONDERATION_DE_LA_PROBABILITE_LE_LONG_DE_OX \
EVENEMENT_CERTAIN
#define PONDERATION_DE_LA_PROBABILITE_LE_LONG_DE_OY \
EVENEMENT_IMPOSSIBLE
DEFV(Local,DEFV(Float,INIT(ponderation_de_la_probabilite_le_long_de_OX,PONDERATION_DE_LA_PROBABILITE_LE_LONG_DE_OX)));
DEFV(Local,DEFV(Float,INIT(ponderation_de_la_probabilite_le_long_de_OY,PONDERATION_DE_LA_PROBABILITE_LE_LONG_DE_OY)));
/* La valeur 'EVENEMENT_CERTAIN' permet d'ignorer les probabilites le long de l'axe */
/* correspondant, alors que 'EVENEMENT_IMPOSSIBLE' les prend en compte... */
#define RESSERREMENT_DE_LA_PROBABILITE \
FDEUX
DEFV(Local,DEFV(Float,INIT(resserrement_de_la_probabilite,RESSERREMENT_DE_LA_PROBABILITE)));
/* Constante permettant de definir la largeur des pics de fortes probabilites... */
#define ANGLE(coordonnee) \
AXPB(pulsation,coordonnee,phase) \
/* Passge d'une coordonnee a un angle... */
#define PROBABILITE_LE_LONG_D_UN_AXE(coordonnee,ponderation) \
MAX2(ponderation \
,COND(IZNE(ANGLE(coordonnee)) \
,EXP2(DIVI(SINX(MUL2(resserrement_de_la_probabilite,ANGLE(coordonnee))) \
,MUL2(resserrement_de_la_probabilite,SINX(ANGLE(coordonnee))) \
) \
) \
,FU \
) \
) \
/* Calcul d'une probabilite le long d'un axe... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P O U R D E S R A I S O N S D E C O M P A T I B I L I T E : */
/* */
/*************************************************************************************************************************************/
#include xrk/integr.1B.vv.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S I N I T I A L I S A T I O N S : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.18.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C O N S T R U C T I O N D ' U N E F I G U R E D E D I F F R A C T I O N : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
INITIALISATIONS_GENERALES;
/* Initialisations generales faites au tout debut... */
iTRANSFORMAT_31(liste_PULSATION,PULSATION_IMPLICITE);
iTRANSFORMAT_31(liste_PHASE,PHASE_IMPLICITE);
/* Initialisation de la pulsation et de la phase du generateur aleatoire le long de l'axe */
/* 'OY'. */
iTRANSFORMAT_31(liste_NOMBRE_D_ITERATIONS,NOMBRE_D_ITERATIONS_IMPLICITE);
/* Initialisation du nombre d'iterations. */
#include xrv/champs_5.1A.I"
GET_ARGUMENTSv(nombre_d_arguments
,BLOC(PROCESS_ARGUMENTS_GEOMETRIQUES;
PROCESS_ARGUMENT_FICHIER("PULSATION="
,fichier_PULSATION
,liste_PULSATION
,PULSATION_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("PHASE="
,fichier_PHASE
,liste_PHASE
,PHASE_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("NOMBRE_D_ITERATIONS="
,fichier_NOMBRE_D_ITERATIONS
,liste_NOMBRE_D_ITERATIONS
,NOMBRE_D_ITERATIONS_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENTS_DE_VISUALISATION;
GET_ARGUMENT_I("n=""iterations=",nombre_d_iterations);
GET_ARGUMENT_L("evenements=",editer_le_nombre_d_evenements);
GET_ARGUMENT_I("graine=",graine_du_generateur_d_evenements);
GET_ARGUMENT_L("affiner_rdn=",rdnIFnD_____affiner_la_generation);
GET_ARGUMENT_L("iterer_rdn=",rdnIFnD_____iterer_la_generation);
GET_ARGUMENT_F("resserrement=",resserrement_de_la_probabilite);
GET_ARGUMENT_F("ponderation_OX=""pX=",ponderation_de_la_probabilite_le_long_de_OX);
GET_ARGUMENT_F("ponderation_OY=""pY=",ponderation_de_la_probabilite_le_long_de_OY);
)
);
#include xrv/champs_5.19.I"
/* Pour eviter le message : */
/* */
/* Static function is not referenced. */
/* */
/* sur 'SYSTEME_ES9000_AIX_CC'... */
#include xrk/attractor.19.I"
/* Validations et definition de l'espace physique. */
Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation)
Bblock
INITIALISATIONS_RELATIVES_A_CHAQUE_NOUVELLE_IMAGE(numero_de_la_periode_courante);
/* Initialisations necessaires avant le calcul et la generation de chaque nouvelle image. */
FORCAGE_DE_LA_REINITIALISATION_DU_GENERATEUR_D_EVENEMENTS;
/* Afin de forcer la (re-)initialisation du generateur d'evenements afin de garantir la */
/* "continuite" entre les differentes images... */
EGAL(pulsation,sPULSATION(numero_de_la_periode_courante));
EGAL(phase,sPHASE(numero_de_la_periode_courante));
/* Calcul de la valeur de la pulsation et de la phase du generateur aleatoire le long de */
/* l'axe 'OY'. */
EGAL(dcx,FZERO);
EGAL(dcy,FZERO);
EGAL(dcz,FZERO);
/* Initialisation des differentielles au cas ou... */
vTRANSFORMAT_31(nombre_d_iterations
,sNOMBRE_D_ITERATIONS,numero_de_la_periode_courante,fichier_NOMBRE_D_ITERATIONS
);
/* Calcul du nombre d'iterations lorsqu'il est variable. */
Komp(numero_de_l_iteration_courante,nombre_d_iterations)
Bblock
DEFV(Logical,INIT(une_particule_a_ete_creee,FAUX));
/* Cet indicateur permet de savoir si une particule a ete creee ou pas... */
Tant(EST_FAUX(une_particule_a_ete_creee))
Bblock
GENERATION_D_UNE_COORDONNEE(cx,x);
GENERATION_D_UNE_COORDONNEE(cy,y);
EGAL(cz,Zcentre_ESPACE);
/* Generation d'un point completement aleatoire dans le plan (OX,OY). */
Test(IFOU(IL_FAUT(visualiser_le_fantome)
,IFGE(numero_de_l_iteration_courante,PREMIERE_ITERATION_VISUALISEE)
)
)
Bblock
DEFV(Float,INIT(probabilite,FLOT__UNDEF));
GENERATION_D_UNE_PROBABILITE_01(probabilite);
/* Generation d'une valeur aleatoire. */
Test(IFET(IFLE(probabilite
,PROBABILITE_LE_LONG_D_UN_AXE(cx,ponderation_de_la_probabilite_le_long_de_OX)
)
,IFLE(probabilite
,PROBABILITE_LE_LONG_D_UN_AXE(cy,ponderation_de_la_probabilite_le_long_de_OY)
)
)
)
Bblock
RECHERCHE_DES_EXTREMA_DES_COORDONNEES;
/* On notera que cette recherche n'est pas conditionnee par 'editer_les_extrema', car les */
/* extrema pourraient etre utilises pour la visualisation... */
CALS(memorisation_1_point_07(SOUS(cx,Xcentre_ESPACE)
,SOUS(cy,Ycentre_ESPACE)
,SOUS(cz,Zcentre_ESPACE)
,dcx
,dcy
,dcz
,numero_de_l_iteration_courante
)
);
/* Memorisation du point courant... */
EGAL(une_particule_a_ete_creee,VRAI);
/* Cet indicateur permet de savoir qu'une particule vient d'etre creee. On notera qu'en */
/* toute rigueur, elle peut etre "hors-image"... */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ETan
Eblock
EKom
#include xrk/attractor.1A.I"
GENERATION_D_UNE_IMAGE_ET_PASSAGE_A_LA_SUIVANTE(BLOC(VIDE;));
/* Generation de l'image courante... */
Test(IFNE(compteur_des_spheres_dans_l_image,nombre_d_iterations))
Bblock
PRINT_ATTENTION("le nombre de particules generees n'est pas egal au nombre de particules visualisees");
CAL2(Prin1("generees=%d\n"
,nombre_d_iterations
)
);
CAL2(Prin1("visualisees=%d\n"
,compteur_des_spheres_dans_l_image
)
);
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(editer_le_nombre_d_evenements))
Bblock
CAL2(Prin2("periode=%d evenements=%d\n"
,numero_de_la_periode_courante_de_la_simulation
,compteur_des_spheres_dans_l_image
)
);
Eblock
ATes
Bblock
Eblock
ETes
Eblock
EKom
Test(IL_FAUT(editer_le_nombre_d_evenements))
Bblock
CAL2(Prin0("\n"));
Eblock
ATes
Bblock
Eblock
ETes
EDITION_DES_EXTREMA_DES_COORDONNEES;
/* Edition facultative des extrema des coordonnees. */
RETU_Commande;
Eblock
ECommande