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



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.