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