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