/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E C U I T   S I M U L E   D E V A N T   C O N D U I R E   A   U N   R E S E A U   O R T H O N O R M E                    */
/*        D A N S   L ' E S P A C E   T R I D I M E N S I O N N E L  :                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                               ........                                                            */
/*                                                           .-:OoOo .-.--OOooooo:-..--...........                                   */
/*                                                       .--%o    .O.-O-  :-    ...-.o.     .......                                  */
/*                                                   ....-.      .-:%     -%......   -.. ...... -..                                  */
/*                                                ..:%-O.:O:-......................   :.....     ..                                  */
/*                                             .-o#    :o...-o.O%.  %%.....::-----.......        :..                                 */
/*                                          .-......   ..-:.    -o. .-...-...O.   ........        ..                                 */
/*                                       ..::.O. .:-.....-o      O%...-    :-.%%o...:--.....      o..                                */
/*                                     .-O.   .:. ..-:-o.-.....-#....O% ::O-o:.....   -...ooooooo-.-.                                */
/*                                  .-:-       ...:.   o- .Ooo..........-   .....  .:.: ...     ......                               */
/*                               ...:        ...o:     .-Ooo.......:O:........:..-.-.   ...   .... .-.                               */
/*                                .-.........:. .oo  :O%.....O  -... %%o......o:-....    -.....     :.                               */
/*                                 .O.     ......-#o%:....-.-#oO#....o....%%...:-..------....       :..                              */
/*                                  .o     ..- .........:o:#O%%   .....-%.--:...:.o%##%-.....-.      :.                              */
/*                                   .o.    ..-O  ..............:..... :-..:#o...-.  ....:-...-oO%::o:..                             */
/*                                    .o  :O%..:   -:..OO...............%oO-   ........:   O..     -..-.                             */
/*                                     ..::.  ..:   -:..  .#:# O-.....................     .-..  o..  :.                             */
/*                                      .O.....:.o-%:o...%. .o..#...#..-.o.   .....oO#::o.. O..:..    -:.                            */
/*                                       .%     ...-:#o....  o%......%...%o ........ .:OOo..-:..       o.                            */
/*                                       .-O     .-O.......::...%O... ...-....#o.....      o....Oo:    -..                           */
/*                                        .:%   :%..-  .......-oO.-...o-....#O.   ....   --.. ..  .:%:o.o.                           */
/*                                         .-OOO.  .:. .O.................--o-.    ... .-..   -..      O-.                           */
/*                                          .--Oo   .-  -O....  .:......%-. ....-.o...:..     .-.    ::..                            */
/*                                            .:..--O-oo.oO#... .::::... ...     ......-o      -.  .:..                              */
/*                                               oO  ...-o: ....%o:.:.... ::      o.... ..-o%:....:..                                */
/*                                                .o% .-.....-..-..-oO%......  .O... ...     ..o:..                                  */
/*                                                  .o%.:.    ....:.  ....%--:o...    ...    o-..                                    */
/*                                                    -o.:  .#:......-- ...Oo-..%:-    ... o-..                                      */
/*                                                     ...-%-.  ...  .......... .....:-o....                                         */
/*                                                       .-o%.   ...   ::...           -..                                           */
/*                                                          ..-:O....-o.. ...        o..                                             */
/*                                                              ..-....   ...      -...                                              */
/*                                                                  ..:o   ...   :...                                                */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                      (d'apres '$xiirk/RECS.3.11$ROUGE')                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota important :                                                                                                           */
/*                                                                                                                                   */
/*                    A partir d'une solution calculee a                                                                             */
/*                  l'aide de la methode ci-dessous, toute                                                                           */
/*                  configuration obtenue par rotation de                                                                            */
/*                  celle-ci (dans le plan, comme dans                                                                               */
/*                  l'espace) est aussi solution. On pourra                                                                          */
/*                  utiliser cette propriete pour obtenir                                                                            */
/*                  une solution souhaitee mais non produite                                                                         */
/*                  par le programme.                                                                                                */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrk/recuit_3D.11$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1994??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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_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"
#include  xrv/particule.41.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(-1.0)
#define   hYmin_ESPACE                                                                                                                  \
                    PARE(-1.0)
#define   hZmin_ESPACE                                                                                                                  \
                    PARE(-1.0)
                                        /* Definition du "coin" inferieur-gauche-arriere de l'espace physique.                       */

#define   hXmax_ESPACE                                                                                                                  \
                    PARE(1.0)
#define   hYmax_ESPACE                                                                                                                  \
                    PARE(1.0)
#define   hZmax_ESPACE                                                                                                                  \
                    PARE(1.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.0)
#define   dYmin_ESPACE                                                                                                                  \
                    PARE(0.0)
#define   dZmin_ESPACE                                                                                                                  \
                    PARE(0.0)
                                        /* Definition des minima des differentielles {dx,dy,dz}.                                     */
#define   dXmax_ESPACE                                                                                                                  \
                    PARE(1.0)
#define   dYmax_ESPACE                                                                                                                  \
                    PARE(1.0)
#define   dZmax_ESPACE                                                                                                                  \
                    PARE(1.0)
                                        /* Definition des maxima des differentielles {dx,dy,dz}.                                     */

#include  xrk/attractor.1D.I"
                                        /* Formules de renormalisation des differentielles dans [0,1] ; elles sont utilisees lorsque */
                                        /* la production d'images en couleurs est demandee (voir 'visualiser_en_RVB').               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   R E S E A U   O R T H O N O R M E   A U Q U E L                                                */
/*        D O I T   A B O U T I R   L E   P R O C E S S U S  :                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/recuit_2D.11.I"

#define   POINT_INTERMEDIAIRE_DU_RESEAU                                                                                                 \
                    LSTX(PREMIER_POINT_DU_RESEAU,EXP2(dimension_lineaire_du_reseau))                                                    \
                                        /* Definition du point qui est le plus eloigne de 'PREMIER_POINT_DU_RESEAU' tout en          */ \
                                        /* etant sur la meme facette. Ce point a ete introduit afin de "stabiliser" le cube dans     */ \
                                        /* l'espace, car, en effet, en passant en dans l'espace tridimensionnel, il faut fixer       */ \
                                        /* trois points dans l'espace si l'on veut que son orientation, a la fin du processus,       */ \
                                        /* soit  celle qui est definie dans 'liste_des_points_dans_leurs_positions_theoriques'.      */

#define   NOMBRE_DE_POINTS_DU_RESEAU                                                                                                    \
                    EXP3(dimension_lineaire_du_reseau)                                                                                  \
                                        /* Nombre de points contenus dans le reseau...                                               */
#define   BLOQUER_LE_POINT_INTERMEDIAIRE_DU_RESEAU                                                                                      \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(bloquer_le_point_intermediaire_du_reseau,BLOQUER_LE_POINT_INTERMEDIAIRE_DU_RESEAU)));
                                        /* Indique si le point intermediaire du reseau doit etre bloque dans sa position "cible"...  */
                                        /* On notera que la valeur implicite est 'FAUX' alors que pour le premier et le dernier      */
                                        /* point, elle est 'VRAI'. Cela vient du fait qu'imposer trop de contraintes peut amener     */
                                        /* le reseau dans un etat deforme, ou tous les points sont bien places relativement les uns  */
                                        /* aux autres, sauf les points "bloques" ; les points "bloques" sont bien entendu bien       */
                                        /* localises dans l'espace, alors que les autres sont globalement translates par rapport     */
                                        /* a eux (les points "bloques"...) ; voir a ce propos la sequence :                          */
                                        /*                                                                                           */
                                        /*                  xivPdf 1 2 / 020578_020705                                               */
                                        /*                                                                                           */
                                        /* qui montre clairement ce defaut.                                                          */
                                        /*                                                                                           */
                                        /* Cette difference entre le probleme bidimensionnel (qui accepte sans probleme le blocage   */
                                        /* de 2 points) et le probleme tridimensionnel (qui n'accepte pas le blocage de 3 points)    */
                                        /* est-il lie au fait que dans le dernier cas, les rotations forment un groupe non abelien   */
                                        /* (non commutatif) contrairement au premier cas ?                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   P R O C E S S U S   A L E A T O I R E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/recuit_2D.13.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A T E R I A L I S A T I O N   D E S   C O N N E X I O N S  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/recuit_2D.14.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O C E D U R E S   D ' A C C E S   A U X   D I F F E R E N T E S   L I S T E S  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/recuit_2D.15.I"

#define   DIMENSION_LINEAIRE_REELLE_DU_RESEAU_DANS_L_ESPACE_PHYSIQUE                                                                    \
                    MIN3(SOUS(ASD2(espace_physique,extremite,x),ASD2(espace_physique,origine,x))                                        \
                        ,SOUS(ASD2(espace_physique,extremite,y),ASD2(espace_physique,origine,y))                                        \
                        ,SOUS(ASD2(espace_physique,extremite,z),ASD2(espace_physique,origine,z))                                        \
                         )                                                                                                              \
                                        /* Etant donne que l'on souhaite un reseau orthonorme, il est imperatif que les dimensions   */ \
                                        /* reelles horizontales et verticales soient les memes, ce que l'on calcule ici...           */

#define   CONVERSION_IJK_INDICE_HORIZONTAL(ijk)                                                                                         \
                    REST(REST(SOUS(ijk,PREMIER_POINT_DU_RESEAU),EXP2(dimension_lineaire_du_reseau)),dimension_lineaire_du_reseau)
#define   CONVERSION_IJK_X(ijk)                                                                                                         \
                    ADD2(Xcentre_ESPACE                                                                                                 \
                        ,SOUS(SCAL(CONVERSION_IJK_INDICE_HORIZONTAL(ijk)                                                                \
                                  ,TRMU(dimension_lineaire_du_reseau)                                                                   \
                                  ,DIMENSION_LINEAIRE_REELLE_DU_RESEAU_DANS_L_ESPACE_PHYSIQUE                                           \
                                   )                                                                                                    \
                             ,MOIT(DIMENSION_LINEAIRE_REELLE_DU_RESEAU_DANS_L_ESPACE_PHYSIQUE)                                          \
                              )                                                                                                         \
                         )
                                        /* Conversion d'un numero de point 'pointI' en la coordonnee 'X' attendue pour ce point a    */
                                        /* a la fin du processus de recuit simule...                                                 */
#define   CONVERSION_IJK_INDICE_VERTICAL(ijk)                                                                                           \
                    DIVI(REST(SOUS(ijk,PREMIER_POINT_DU_RESEAU),EXP2(dimension_lineaire_du_reseau)),dimension_lineaire_du_reseau)
#define   CONVERSION_IJK_Y(ijk)                                                                                                         \
                    ADD2(Ycentre_ESPACE                                                                                                 \
                        ,SOUS(SCAL(CONVERSION_IJK_INDICE_VERTICAL(ijk)                                                                  \
                                  ,TRMU(dimension_lineaire_du_reseau)                                                                   \
                                  ,DIMENSION_LINEAIRE_REELLE_DU_RESEAU_DANS_L_ESPACE_PHYSIQUE                                           \
                                   )                                                                                                    \
                             ,MOIT(DIMENSION_LINEAIRE_REELLE_DU_RESEAU_DANS_L_ESPACE_PHYSIQUE)                                          \
                              )                                                                                                         \
                         )
                                        /* Conversion d'un numero de point 'pointJ' en la coordonnee 'Y' attendue pour ce point a    */
                                        /* a la fin du processus de recuit simule...                                                 */
#define   CONVERSION_IJK_INDICE_PROFOND(ijk)                                                                                            \
                    DIVI(SOUS(ijk,PREMIER_POINT_DU_RESEAU),EXP2(dimension_lineaire_du_reseau))
#define   CONVERSION_IJK_Z(ijk)                                                                                                         \
                    ADD2(Zcentre_ESPACE                                                                                                 \
                        ,SOUS(SCAL(CONVERSION_IJK_INDICE_PROFOND(ijk)                                                                   \
                                  ,TRMU(dimension_lineaire_du_reseau)                                                                   \
                                  ,DIMENSION_LINEAIRE_REELLE_DU_RESEAU_DANS_L_ESPACE_PHYSIQUE                                           \
                                   )                                                                                                    \
                             ,MOIT(DIMENSION_LINEAIRE_REELLE_DU_RESEAU_DANS_L_ESPACE_PHYSIQUE)                                          \
                              )                                                                                                         \
                         )
                                        /* Conversion d'un numero de point 'pointK' en la coordonnee 'Z' attendue pour ce point a    */
                                        /* a la fin du processus de recuit simule...                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M E T H O D E   D E S   M O I N D R E S   C A R R E S  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/recuit_2D.1C.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_ET_DES_DERIVEES'.   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  xrk/attractor.14.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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/recuit_2D.16.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
=define   ZOOM_IMPLICITE                                                                                                                \
                    GRO6(FRA10(FU))                                                                                                     \
                                        /* Afin d'etre sur de voir toutes les particules generees. On notera que contrairement a     */ \
                                        /* '$xrk/recuit_2D.11$K', on utilise 'GRO6(FRA10(FU))' et non pas 'GRO7(FRA10(FU))' ; ceci   */ \
                                        /* est du a l'introduction de 'BLOQUER_LE_POINT_INTERMEDIAIRE_DU_RESEAU' qui fait que        */ \
                                        /* l'orientation finale du cube n'est pas connu initialement...                              */

#include  xrk/attractor.17.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   P R O C E S S U S   I T E R A T I F  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/recuit_2D.12.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"

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E C U I T   S I M U L E   D E V A N T   C O N D U I R E   A   U N   R E S E A U   O R T H O N O R M E                    */
/*        D A N S   L ' E S P A C E   T R I D I M E N S I O N N E L  :                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     INITIALISATIONS_GENERALES;
                                        /* Initialisations generales faites au tout debut...                                         */

     iTRANSFORMAT_31(liste_VARIABLE_essais,VARIABLE_essais_IMPLICITE);
                                        /* Initialisation de la valeur initiale du nombre d'essais par image.                        */

#include  xrv/champs_5.1A.I"

     GET_ARGUMENTSv(nombre_d_arguments
                   ,BLOC(PROCESS_ARGUMENTS_GEOMETRIQUES;

                         PROCESS_ARGUMENT_FICHIER("VARIABLE_essais="
                                                 ,fichier_VARIABLE_essais
                                                 ,liste_VARIABLE_essais
                                                 ,VARIABLE_essais_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );

                         PROCESS_ARGUMENTS_DE_VISUALISATION;

                         GET_ARGUMENT_L("temperature=",utiliser_une_temperature);
                         GET_ARGUMENT_L("chaque_essai=",changer_la_temperature_a_chaque_essai);
                         GET_ARGUMENT_F("K=",constante_K_de_temperature);
                         GET_ARGUMENT_F("t0=",temperature_initiale);
                         GET_ARGUMENT_F("tf=",temperature_finale);

                         GET_ARGUMENT_I("dimension=",dimension_lineaire_du_reseau);
                         GET_ARGUMENT_I("essais=",nombre_d_essais_par_image);

                         GET_ARGUMENT_L("premier=",bloquer_le_premier_point_du_reseau);
                         GET_ARGUMENT_L("intermediaire=",bloquer_le_point_intermediaire_du_reseau);
                         GET_ARGUMENT_L("dernier=",bloquer_le_dernier_point_du_reseau);

                         GET_ARGUMENT_F("amplitudeD=",amplitude_maximale_du_deplacement_aleatoire_des_points_au_depart);
                         GET_ARGUMENT_F("amplitudeA=",amplitude_maximale_du_deplacement_aleatoire_des_points_a_l_arrivee);

                         GET_ARGUMENT_I("graine=""g=",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("grossissement=",grossissement_du_rayon_de_visualisation_des_points);

                         GET_ARGUMENT_L("connexions=",materialiser_les_connexions);
                         GET_ARGUMENT_F("ponderation=",ponderation_des_connexions_par_la_longueur);
                         GET_ARGUMENT_I("points=",nombre_absolu_de_points_sur_une_chaine_de_connexion);
                         GET_ARGUMENT_F("facteur=",facteur_de_la_longueur);
                         )
                    );

#include  xrv/champs_5.19.I"
                                        /* Pour eviter le message :                                                                  */
                                        /*                                                                                           */
                                        /*                  Static function is not referenced.                                       */
                                        /*                                                                                           */
                                        /* sur 'SYSTEME_ES9000_AIX_CC'...                                                            */

#include  xrk/recuit_2D.1F.I"
                                        /* Initialisations utiles a l'utilisation d'une temperature.                                 */

#include  xrk/attractor.19.I"
                                        /* Validations et definition de l'espace physique.                                           */

     begin_nouveau_block
          Bblock
#include  xrk/recuit_2D.1D.I"
                                        /* Allocation des diverses listes utiles...                                                  */

          DoIn(point,PREMIER_POINT_DU_RESEAU,DERNIER_POINT_DU_RESEAU,I)
               Bblock
               INITIALISATION_POINT_3D(ACCES_CIBLE(point),CONVERSION_IJK_X(point),CONVERSION_IJK_Y(point),CONVERSION_IJK_Z(point));
                                        /* Initialisation de la position "theorique" des points, c'est-a-dire celle qui est esperee  */
                                        /* a la fin du processus. Elles sont initialisees sur un reseau orthonorme. La configuration */
                                        /* attendue des points a la fin du processus est donc du type (en supposant que l'on         */
                                        /* utilise 4x4 points et que l'on illustre le processus bidimensionnellement) :              */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                 0         1         2         3                                           */
                                        /*                  + - - - - + - - - - + - - - - +                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                 4|        5|        6|        7|                                          */
                                        /*                  + - - - - + - - - - + - - - - +                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                 8|        9|       10|       11|                                          */
                                        /*                  + - - - - + - - - - + - - - - +                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                12|       13|       14|       15|                                          */
                                        /*                  + - - - - + - - - - + - - - - +                                          */
                                        /*                                                                                           */
                                        /* Les points sont materialises par des croix "+", mais precisons bien qu'il s'agit la       */
                                        /* de leurs positions a la fin du processus, et non pas au debut, puisqu'a ce moment la      */
                                        /* elles sont aleatoires (sauf en ce qui concerne le premier et le dernier...).              */
               Eblock
          EDoI

          DoIn(pointI,PREMIER_POINT_DU_RESEAU,DERNIER_POINT_DU_RESEAU,I)
               Bblock
               DoIn(pointJ,PREMIER_POINT_DU_RESEAU,DERNIER_POINT_DU_RESEAU,I)
                    Bblock
                                        /* Initialisation relativement arbitraire de la matrice des connexions sur la 8-connexite,   */
                                        /* c'est-a-dire sur les plus proches voisins...                                              */
                    Test(I3OU(I3ET(IFEQ(SOUA(CONVERSION_IJK_INDICE_HORIZONTAL(pointI),CONVERSION_IJK_INDICE_HORIZONTAL(pointJ)),UN)
                                  ,IFEQ(CONVERSION_IJK_INDICE_VERTICAL(pointI),CONVERSION_IJK_INDICE_VERTICAL(pointJ))
                                  ,IFEQ(CONVERSION_IJK_INDICE_PROFOND(pointI),CONVERSION_IJK_INDICE_PROFOND(pointJ))
                                   )
                             ,I3ET(IFEQ(CONVERSION_IJK_INDICE_HORIZONTAL(pointI),CONVERSION_IJK_INDICE_HORIZONTAL(pointJ))
                                  ,IFEQ(SOUA(CONVERSION_IJK_INDICE_VERTICAL(pointI),CONVERSION_IJK_INDICE_VERTICAL(pointJ)),UN)
                                  ,IFEQ(CONVERSION_IJK_INDICE_PROFOND(pointI),CONVERSION_IJK_INDICE_PROFOND(pointJ))
                                   )
                             ,I3ET(IFEQ(CONVERSION_IJK_INDICE_HORIZONTAL(pointI),CONVERSION_IJK_INDICE_HORIZONTAL(pointJ))
                                  ,IFEQ(CONVERSION_IJK_INDICE_VERTICAL(pointI),CONVERSION_IJK_INDICE_VERTICAL(pointJ))
                                  ,IFEQ(SOUA(CONVERSION_IJK_INDICE_PROFOND(pointI),CONVERSION_IJK_INDICE_PROFOND(pointJ)),UN)
                                   )
                              )
                         )
                         Bblock
                         EGAL(ACCES_CONNEXION(pointI,pointJ),VRAI);
                                        /* Lorsque les points 'pointI' et 'pointJ' sont plus proches voisins, ils sont 8-connectes.  */
                         Eblock
                    ATes
                         Bblock
                         EGAL(ACCES_CONNEXION(pointI,pointJ),FAUX);
                                        /* Cas ou les points 'pointI' et 'pointJ' ne sont pas 8-connectes...                         */
                         Eblock
                    ETes
                    Eblock
               EDoI
               Eblock
          EDoI

                                        /* Nota : il est possible de modifier ici la liste "theorique" (par exemple en utilisant     */
                                        /* 'PROCESS_ARGUMENT_C(...)').                                                               */

#include  xrk/recuit_2D.17.I"
                                        /* Calcul de la matrice des distances correspondant a la position "theorique" des points,    */
                                        /* c'est-a-dire celle qui est esperee a la fin du processus...                               */

                                        /* ATTENTION : le 1993123100, les sequences d'initialisation aleatoire des couleurs des      */
                                        /* points et d'initialisation aleatoire des coordonnees des points ont vu leur ordre         */
                                        /* s'inverser (le nouvel ordre est plus logique). Dans ces conditions, il n'est plus         */
                                        /* possible de recalculer exactement les sequences anterieures...                            */

          DoIn(point,PREMIER_POINT_DU_RESEAU,DERNIER_POINT_DU_RESEAU,I)
               Bblock
               CHoi(point)
                    Bblock
                    Test(IL_FAUT(bloquer_le_premier_point_du_reseau))
                         Bblock
                         CAse(PREMIER_POINT_DU_RESEAU)
                              Bblock
                              TRANSFERT_POINT_3D(ACCES_POINT(point),ACCES_CIBLE(point));
                                        /* Initialisation du premier point du reseau a l'origine de l'espace...                      */
                              Eblock
                         ECAs
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    Test(IL_FAUT(bloquer_le_point_intermediaire_du_reseau))
                         Bblock
                         CAse(POINT_INTERMEDIAIRE_DU_RESEAU)
                              Bblock
                              TRANSFERT_POINT_3D(ACCES_POINT(point),ACCES_CIBLE(point));
                                        /* Initialisation d'un point intermediaire afin de "stabiliser" le cube dans l'espace...     */
                              Eblock
                         ECAs
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    Test(IL_FAUT(bloquer_le_dernier_point_du_reseau))
                         Bblock
                         CAse(DERNIER_POINT_DU_RESEAU)
                              Bblock
                              TRANSFERT_POINT_3D(ACCES_POINT(point),ACCES_CIBLE(point));
                                        /* Initialisation du dernier point du reseau a l'extremite de l'espace...                    */
                              Eblock
                         ECAs
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    DEfo
                         Bblock
                         GENERATION_D_UN_POINT(ACCES_POINT(point));
                                        /* Les autres points sont places aleatoirement dans l'espace...                              */
                         Eblock
                    EDEf
                    Eblock
               ECHo
               Eblock
          EDoI

                                        /* ATTENTION : le 1993123100, les sequences d'initialisation aleatoire des couleurs des      */
                                        /* points et d'initialisation aleatoire des coordonnees des points ont vu leur ordre         */
                                        /* s'inverser (le nouvel ordre est plus logique). Dans ces conditions, il n'est plus         */
                                        /* possible de recalculer exactement les sequences anterieures...                            */

#include  xrk/recuit_2D.18.I"
                                        /* Choix aleatoire initial (afin de ne pas avoir de problemes de coherence temporel, mais    */
                                        /* aussi d'optimiser) de la couleur des points...                                            */

                                        /* ATTENTION : le 1993123100, les sequences d'initialisation aleatoire des couleurs des      */
                                        /* points et d'initialisation aleatoire des coordonnees des points ont vu leur ordre         */
                                        /* s'inverser (le nouvel ordre est plus logique). Dans ces conditions, il n'est plus         */
                                        /* possible de recalculer exactement les sequences anterieures...                            */

          Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation)
               Bblock
               DEFV(Int,INIT(numero_des_points,UNDEF));
                                        /* A priori inutile mais reference dans 'memorisation_1_point_08(...)'.                      */
               DEFV(Int,INIT(numero_de_l_essai,UNDEF));
                                        /* Numero de l'essai courant...                                                              */

               RE_INITIALISATION_DE_L_HORLOGE;
               INITIALISATIONS_RELATIVES_A_CHAQUE_NOUVELLE_IMAGE(numero_de_la_periode_courante);
                                        /* Initialisations necessaires avant le calcul et la generation de chaque nouvelle image.    */

               vTRANSFORMAT_31(nombre_d_essais_par_image,sVARIABLE_essais,numero_de_la_periode_courante,fichier_VARIABLE_essais);
                                        /* Calcul du nombre d'essais par image.                                                      */

#include  xrk/recuit_2D.19.I"
                                        /* Memorisation des points courants et des chaines de connexite...                           */

#include  xrk/attractor.1A.I"

               PARALLELISME(BLOC(GENERATION_D_UNE_IMAGE_ET_PASSAGE_A_LA_SUIVANTE(BLOC(VIDE;));
                                        /* Generation de l'image courante...                                                         */
                                 )
                           ,BLOC(PASSAGE_A_L_IMAGE_SUIVANTE;)
                           ,numero_de_la_periode_courante
                            );

               Test(IFLT(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation))
                    Bblock
                                        /* Cas ou l'on n'est pas sur la derniere periode de la simulation :                          */
                    Komp(numero_de_l_essai,nombre_d_essais_par_image)
                         Bblock
#include  xrk/recuit_2D.1A.I"
                                        /* Memorisation des points avant le deplacement...                                           */

                         DoIn(point,PREMIER_POINT_DU_RESEAU,DERNIER_POINT_DU_RESEAU,I)
                              Bblock
                              Test(I3ET(IFOU(IL_NE_FAUT_PAS(bloquer_le_premier_point_du_reseau)
                                            ,IFNE(point,PREMIER_POINT_DU_RESEAU)
                                             )
                                       ,IFOU(IL_NE_FAUT_PAS(bloquer_le_point_intermediaire_du_reseau)
                                            ,IFNE(point,POINT_INTERMEDIAIRE_DU_RESEAU)
                                             )
                                       ,IFOU(IL_NE_FAUT_PAS(bloquer_le_dernier_point_du_reseau)
                                            ,IFNE(point,DERNIER_POINT_DU_RESEAU)
                                             )
                                        )
                                   )
                                   Bblock
                                   DEFV(Float,INIT(perturbation_en_X,FLOT__UNDEF));
                                   DEFV(Float,INIT(perturbation_en_Y,FLOT__UNDEF));
                                   DEFV(Float,INIT(perturbation_en_Z,FLOT__UNDEF));
                                   GENERATION_D_UNE_VALEUR(perturbation_en_X
                                                          ,NEGA(AMPLITUDE_ALEATOIRE_EN_X)
                                                          ,NEUT(AMPLITUDE_ALEATOIRE_EN_X)
                                                           );
                                   GENERATION_D_UNE_VALEUR(perturbation_en_Y
                                                          ,NEGA(AMPLITUDE_ALEATOIRE_EN_Y)
                                                          ,NEUT(AMPLITUDE_ALEATOIRE_EN_Y)
                                                           );
                                   GENERATION_D_UNE_VALEUR(perturbation_en_Z
                                                          ,NEGA(AMPLITUDE_ALEATOIRE_EN_Z)
                                                          ,NEUT(AMPLITUDE_ALEATOIRE_EN_Z)
                                                           );
                                        /* Valeurs de perturbation des coordonnees 'X', 'Y' et 'Z'...                                */
                                   INCR(ASD1(ACCES_POINT(point),x),LIMITATION_DE_L_AMPLITUDE_ALEATOIRE(perturbation_en_X));
                                   INCR(ASD1(ACCES_POINT(point),y),LIMITATION_DE_L_AMPLITUDE_ALEATOIRE(perturbation_en_Y));
                                   INCR(ASD1(ACCES_POINT(point),z),LIMITATION_DE_L_AMPLITUDE_ALEATOIRE(perturbation_en_Z));
                                        /* Perturbation aleatoire des points a l'exception du premier et du dernier.                 */
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes
                              Eblock
                         EDoI

#include  xrk/recuit_2D.1B.I"
                                        /* Evaluation de la nouvelle situation des points, et si necessaire, retour a l'etat         */
                                        /* anterieur...                                                                              */
                         Eblock
                    EKom
                    Eblock
               ATes
                    Bblock
                                        /* Cas ou l'on est sur la derniere periode de la simulation : il est inutile de calculer...  */
                    Eblock
               ETes
               Eblock
          EKom

#include  xrk/recuit_2D.1E.I"
                                        /* Liberation des differentes listes...                                                      */
          Eblock
     end_nouveau_block

     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.