/*************************************************************************************************************************************/ /* */ /* 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 B I D I M E N S I O N N E L : */ /* */ /* */ /* ......... */ /* .....--------::::::::::::::::ooooo.ooooOOOOOoo::--:.. */ /* .- .-- -:. -.. */ /* .- .-- -o. -.. */ /* .- .-- -:. .. */ /* .- .- -:. -. */ /* .- .. .:. -. */ /* .. .. .:. -.. */ /* .. .. .:. ... */ /* .........................------:::::::::----......... */ /* .- .. .:. ... */ /* .- .- .:. ... */ /* .- .- .:. ... */ /* .-. .- .o. ... */ /* .-. .- :. ... */ /* .-. .- :. ... */ /* .-. .- -. ... */ /* .-................-----::::::::ooo-.:::-............. */ /* .-................-.............. -. ... */ /* .-. .- -. ... */ /* .-. .- -. ... */ /* .-. .. -. ... */ /* .- .. -. ... */ /* .- .. -. .. */ /* .- .. -. .. */ /* .- .. .. .. */ /* ..................................................... */ /* */ /* */ /* */ /* */ /* 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 ; voir le probleme de la */ /* carte de France a ce propos : */ /* */ /* */ /* 14=Dunkerque */ /* */ /* *. */ /* ........ */ /* .... ....... */ /* .... .. .... */ /* 13=Cherbourg .... .. .... */ /* * .... 9=Paris .. .... */ /* .. .. ..... . ... .... */ /* .... . .... * ... .... */ /* .... ....... ... .* 15=Strasbourg */ /* 12=Brest *... .. ....... ... ... */ /* .... .... .. ... .. .. */ /* .... ... .. .. .. ... */ /* .... .... . *...........* 11=Mulhouse */ /* *.. ... 10=Dijon .. . */ /* 8=Nantes ... ... ... .. */ /* .. .. ... .. */ /* . .. .. .. */ /* .. . 6=Lyon *. . ......* 7=Chamonix */ /* .. ... ..... ... */ /* .. ... ...... .. */ /* ... .. ... .. . */ /* 4=Bordeaux *. .. .. .. .. */ /* .. .. . ... . ... */ /* .. .... ... ... .. .. */ /* .. ......... ... ..* 3=Menton */ /* .. *. 5=Toulouse .. ..... */ /* *...... . .... ...*.. */ /* 0=Hendaye ......... ..... ........ */ /* . *...... 2=Marseille */ /* */ /* 1=Perpignan */ /* */ /* */ /* (d'apres xivPdf 2 1 / 021218_021345) */ /* */ /* */ /* Author of '$xrk/recuit_2D.11$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1993??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R F A C E ' listG ' : */ /* */ /* */ /* :Debut_listG: */ /* :Fin_listG: */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */ /* */ /*************************************************************************************************************************************/ @define PRAGMA_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 NOMBRE_DE_POINTS_DU_RESEAU \ EXP2(dimension_lineaire_du_reseau) \ /* Nombre de points contenus dans le reseau... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 \ MIN2(SOUS(ASD2(espace_physique,extremite,x),ASD2(espace_physique,origine,x)) \ ,SOUS(ASD2(espace_physique,extremite,y),ASD2(espace_physique,origine,y)) \ ) \ /* 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_IJ_INDICE_HORIZONTAL(ij) \ REST(SOUS(ij,PREMIER_POINT_DU_RESEAU),dimension_lineaire_du_reseau) #define CONVERSION_IJ_X(ij) \ ADD2(Xcentre_ESPACE \ ,SOUS(SCAL(CONVERSION_IJ_INDICE_HORIZONTAL(ij) \ ,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_IJ_INDICE_VERTICAL(ij) \ DIVI(SOUS(ij,PREMIER_POINT_DU_RESEAU),dimension_lineaire_du_reseau) #define CONVERSION_IJ_Y(ij) \ ADD2(Ycentre_ESPACE \ ,SOUS(SCAL(CONVERSION_IJ_INDICE_VERTICAL(ij) \ ,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_Z \ Zcentre_ESPACE \ /* Coordonnee 'Z' ; on notera que celle-ci ne change jamais, mais qu'une extension */ \ /* tridimensionnelle du processus est envisageable... */ #define MODIFIER_LES_POINTS \ FAUX #define CX0 \ Xcentre_ESPACE #define CY0 \ Ycentre_ESPACE /* Afin de ne pas modifier l'initialisation implicite a l'aide du reseau carre... */ #define MODIFICATION_POINT(numero_du_point,modifier_le_point,cx,cy) \ Ca1e(numero_du_point) \ Bblock \ Test(IL_FAUT(modifier_le_point)) \ Bblock \ INITIALISATION_POINT_3D(ACCES_CIBLE(point),cx,cy,CONVERSION_Z); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ ECa1 \ /* Procedure de modification de l'initialisation implicite a l'aide du reseau carre. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 \ GRO7(FRA10(FU)) \ /* Afin d'etre sur de voir toutes les particules generees... */ #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 B I D I M E N S I O N N E L : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Logical,INIT(modifier_le_point00,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx00,CX0)); DEFV(Float,INIT(cy00,CY0)); /* Pour modifier l'initialisation du point '00'... */ DEFV(Logical,INIT(modifier_le_point01,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx01,CX0)); DEFV(Float,INIT(cy01,CY0)); /* Pour modifier l'initialisation du point '01'... */ DEFV(Logical,INIT(modifier_le_point02,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx02,CX0)); DEFV(Float,INIT(cy02,CY0)); /* Pour modifier l'initialisation du point '02'... */ DEFV(Logical,INIT(modifier_le_point03,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx03,CX0)); DEFV(Float,INIT(cy03,CY0)); /* Pour modifier l'initialisation du point '03'... */ DEFV(Logical,INIT(modifier_le_point04,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx04,CX0)); DEFV(Float,INIT(cy04,CY0)); /* Pour modifier l'initialisation du point '04'... */ DEFV(Logical,INIT(modifier_le_point05,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx05,CX0)); DEFV(Float,INIT(cy05,CY0)); /* Pour modifier l'initialisation du point '05'... */ DEFV(Logical,INIT(modifier_le_point06,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx06,CX0)); DEFV(Float,INIT(cy06,CY0)); /* Pour modifier l'initialisation du point '06'... */ DEFV(Logical,INIT(modifier_le_point07,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx07,CX0)); DEFV(Float,INIT(cy07,CY0)); /* Pour modifier l'initialisation du point '07'... */ DEFV(Logical,INIT(modifier_le_point08,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx08,CX0)); DEFV(Float,INIT(cy08,CY0)); /* Pour modifier l'initialisation du point '08'... */ DEFV(Logical,INIT(modifier_le_point09,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx09,CX0)); DEFV(Float,INIT(cy09,CY0)); /* Pour modifier l'initialisation du point '09'... */ DEFV(Logical,INIT(modifier_le_point10,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx10,CX0)); DEFV(Float,INIT(cy10,CY0)); /* Pour modifier l'initialisation du point '10'... */ DEFV(Logical,INIT(modifier_le_point11,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx11,CX0)); DEFV(Float,INIT(cy11,CY0)); /* Pour modifier l'initialisation du point '11'... */ DEFV(Logical,INIT(modifier_le_point12,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx12,CX0)); DEFV(Float,INIT(cy12,CY0)); /* Pour modifier l'initialisation du point '12'... */ DEFV(Logical,INIT(modifier_le_point13,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx13,CX0)); DEFV(Float,INIT(cy13,CY0)); /* Pour modifier l'initialisation du point '13'... */ DEFV(Logical,INIT(modifier_le_point14,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx14,CX0)); DEFV(Float,INIT(cy14,CY0)); /* Pour modifier l'initialisation du point '14'... */ DEFV(Logical,INIT(modifier_le_point15,MODIFIER_LES_POINTS)); DEFV(Float,INIT(cx15,CX0)); DEFV(Float,INIT(cy15,CY0)); /* Pour modifier l'initialisation du point '15'... */ /*..............................................................................................................................*/ 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("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); GET_ARGUMENT_L("p00=",modifier_le_point00); GET_ARGUMENT_F("x00=",cx00); GET_ARGUMENT_F("y00=",cy00); GET_ARGUMENT_L("p01=",modifier_le_point01); GET_ARGUMENT_F("x01=",cx01); GET_ARGUMENT_F("y01=",cy01); GET_ARGUMENT_L("p02=",modifier_le_point02); GET_ARGUMENT_F("x02=",cx02); GET_ARGUMENT_F("y02=",cy02); GET_ARGUMENT_L("p03=",modifier_le_point03); GET_ARGUMENT_F("x03=",cx03); GET_ARGUMENT_F("y03=",cy03); GET_ARGUMENT_L("p04=",modifier_le_point04); GET_ARGUMENT_F("x04=",cx04); GET_ARGUMENT_F("y04=",cy04); GET_ARGUMENT_L("p05=",modifier_le_point05); GET_ARGUMENT_F("x05=",cx05); GET_ARGUMENT_F("y05=",cy05); GET_ARGUMENT_L("p06=",modifier_le_point06); GET_ARGUMENT_F("x06=",cx06); GET_ARGUMENT_F("y06=",cy06); GET_ARGUMENT_L("p07=",modifier_le_point07); GET_ARGUMENT_F("x07=",cx07); GET_ARGUMENT_F("y07=",cy07); GET_ARGUMENT_L("p08=",modifier_le_point08); GET_ARGUMENT_F("x08=",cx08); GET_ARGUMENT_F("y08=",cy08); GET_ARGUMENT_L("p09=",modifier_le_point09); GET_ARGUMENT_F("x09=",cx09); GET_ARGUMENT_F("y09=",cy09); GET_ARGUMENT_L("p10=",modifier_le_point10); GET_ARGUMENT_F("x10=",cx10); GET_ARGUMENT_F("y10=",cy10); GET_ARGUMENT_L("p11=",modifier_le_point11); GET_ARGUMENT_F("x11=",cx11); GET_ARGUMENT_F("y11=",cy11); GET_ARGUMENT_L("p12=",modifier_le_point12); GET_ARGUMENT_F("x12=",cx12); GET_ARGUMENT_F("y12=",cy12); GET_ARGUMENT_L("p13=",modifier_le_point13); GET_ARGUMENT_F("x13=",cx13); GET_ARGUMENT_F("y13=",cy13); GET_ARGUMENT_L("p14=",modifier_le_point14); GET_ARGUMENT_F("x14=",cx14); GET_ARGUMENT_F("y14=",cy14); GET_ARGUMENT_L("p15=",modifier_le_point15); GET_ARGUMENT_F("x15=",cx15); GET_ARGUMENT_F("y15=",cy15); ) ); #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_IJ_X(point),CONVERSION_IJ_Y(point),CONVERSION_Z); /* 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) : */ /* */ /* */ /* 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 4-connexite, */ /* c'est-a-dire sur les plus proches voisins... */ Test(IFOU(IFET(IFEQ(SOUA(CONVERSION_IJ_INDICE_HORIZONTAL(pointI),CONVERSION_IJ_INDICE_HORIZONTAL(pointJ)),UN) ,IFEQ(CONVERSION_IJ_INDICE_VERTICAL(pointI),CONVERSION_IJ_INDICE_VERTICAL(pointJ)) ) ,IFET(IFEQ(CONVERSION_IJ_INDICE_HORIZONTAL(pointI),CONVERSION_IJ_INDICE_HORIZONTAL(pointJ)) ,IFEQ(SOUA(CONVERSION_IJ_INDICE_VERTICAL(pointI),CONVERSION_IJ_INDICE_VERTICAL(pointJ)),UN) ) ) ) Bblock EGAL(ACCES_CONNEXION(pointI,pointJ),VRAI); /* Lorsque les points 'pointI' et 'pointJ' sont plus proches voisins, ils sont 4-connectes. */ Eblock ATes Bblock EGAL(ACCES_CONNEXION(pointI,pointJ),FAUX); /* Cas ou les points 'pointI' et 'pointJ' ne sont pas 4-connectes... */ Eblock ETes Eblock EDoI Eblock EDoI DoIn(point,PREMIER_POINT_DU_RESEAU,DERNIER_POINT_DU_RESEAU,I) /* Nota : il est possible de modifier ici la liste "theorique" (par exemple en utilisant */ /* 'PROCESS_ARGUMENT_C(...)'). */ Bblock Choi(point) Bblock MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,ZERO),modifier_le_point00,cx00,cy00); MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,UN),modifier_le_point01,cx01,cy01); MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,DEUX),modifier_le_point02,cx02,cy02); MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,TROIS),modifier_le_point03,cx03,cy03); MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,QUATRE),modifier_le_point04,cx04,cy04); MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,CINQ),modifier_le_point05,cx05,cy05); MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,SIX),modifier_le_point06,cx06,cy06); MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,SEPT),modifier_le_point07,cx07,cy07); MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,HUIT),modifier_le_point08,cx08,cy08); MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,NEUF),modifier_le_point09,cx09,cy09); MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,DIX),modifier_le_point10,cx10,cy10); MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,ONZE),modifier_le_point11,cx11,cy11); MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,DOUZE),modifier_le_point12,cx12,cy12); MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,TREIZE),modifier_le_point13,cx13,cy13); MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,QUATORZE),modifier_le_point14,cx14,cy14); MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,QUINZE),modifier_le_point15,cx15,cy15); Defo Bblock Eblock EDef Eblock ECho Eblock EDoI #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_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)); EGAL(ASD1(ACCES_POINT(point),z),CONVERSION_Z); /* Les autres points sont places aleatoirement dans le plan... */ 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(IFET(IFOU(IL_NE_FAUT_PAS(bloquer_le_premier_point_du_reseau) ,IFNE(point,PREMIER_POINT_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)); 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) ); /* Valeurs de perturbation des coordonnees 'X' et 'Y'... */ 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)); /* Perturbation aleatoire des points a l'exception du premier et du dernier. On notera que */ /* cette perturbation est bidimensionnelle, mais que l'extension tridimensionnelle est */ /* triviale a condition d'ajouter une dimension au reseau... */ 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