/*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N D E T R O I S I M A G E S P A R L ' A T T R A C T E U R D E L O R E N Z : */ /* */ /* */ /* Author of '$xrk/lorenz.31$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20080629103746). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I C H I E R S D ' I N C L U D E S : */ /* */ /*************************************************************************************************************************************/ #include INCLUDES_BASE #include image_image_IMAGESF_EXT /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S D E B A S E E T U N I V E R S E L L E S : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.11.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 3 */ /* D E F I N I T I O N D E L ' E S P A C E P H Y S I Q U E D A N S R ( D E B U T ) : */ /* */ /* */ /* Nota : */ /* */ /* Les extrema des coordonnees {x,y,z} */ /* ainsi que ceux de leurs differentielles */ /* {dx,dy,dz} sont fixees un peu arbitrairement */ /* et sans etre parametrees. Elles ont ete */ /* obtenues a l'aide du programme 'v $xtc/lorenz.01$c'. */ /* */ /* */ /*************************************************************************************************************************************/ #define hXmin_ESPACE \ PARE(-30.0) #define hYmin_ESPACE \ PARE(-30.0) #define hZmin_ESPACE \ PARE(0.0) /* Definition du "coin" inferieur-gauche-arriere de l'espace physique. */ #define hXmax_ESPACE \ PARE(30.0) #define hYmax_ESPACE \ PARE(30.0) #define hZmax_ESPACE \ PARE(60.0) /* Definition du "coin" superieur-droite-avant de l'espace physique. */ /* */ /* ATTENTION, il y a eu pendant longtemps : */ /* */ /* #define hZmax_ESPACE \ */ /* 55.0 */ /* */ /* mais etant donne qu'il est plus intelligent de travailler avec un espace cubique (a cause */ /* des rotations tridimensionnelles en particulier), j'ai remplace (le 1993061400) '55' par */ /* '60' qui correspond a '30-(-30)' (voir 'X' et 'Y'). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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(-2.4) #define dYmin_ESPACE \ PARE(-5.5) #define dZmin_ESPACE \ PARE(-2.8) /* Definition des minima des differentielles {dx,dy,dz}. */ #define dXmax_ESPACE \ PARE(1.8) #define dYmax_ESPACE \ PARE(3.8) #define dZmax_ESPACE \ PARE(4.8) /* 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 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" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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/lorenz.11.I" #include xrk/attractor.14.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E L ' A T T R A C T E U R D E L O R E N Z : */ /* */ /* */ /* Definition : */ /* */ /* Il est classiquement defini par */ /* le systeme d'equations differentielles : */ /* */ /* dx */ /* ---- = -10.x + 10.y */ /* dt */ /* */ /* dy */ /* ---- = 28.x - y - x.z */ /* dt */ /* */ /* dz 8 */ /* ---- = - ---.z + x.y */ /* dt 3 */ /* */ /* ce que l'on peut generaliser en : */ /* */ /* dx */ /* ---- = (X .x + X .y + X .z) + (X .x.y + X .y.z + X .z.x) + (X .x.y.z) = F (x,y,z) */ /* dt x y z xy yz zx xyz x */ /* */ /* dy */ /* ---- = (Y .x + Y .y + Y .z) + (Y .x.y + Y .y.z + Y .z.x) + (Y .x.y.z) = F (x,y,z) */ /* dt x y z xy yz zx xyz y */ /* */ /* dz */ /* ---- = (Z .x + Z .y + Z .z) + (Z .x.y + Z .y.z + Z .z.x) + (Z .x.y.z) = F (x,y,z) */ /* dt x y z xy yz zx xyz z */ /* */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D U P A S S A G E D E L ' I M A G E A L ' E S P A C E D E S P H A S E S : */ /* */ /*************************************************************************************************************************************/ #define COEFFICIENT_Xi_Xl \ FU #define COEFFICIENT_Yi_Xl \ FZERO #define COEFFICIENT_Zi_Xl \ FZERO #define TRANSLATION_i_Xl \ FZERO DEFV(Local,DEFV(Float,INIT(coefficient_Xi_Xl,COEFFICIENT_Xi_Xl))); DEFV(Local,DEFV(Float,INIT(coefficient_Yi_Xl,COEFFICIENT_Yi_Xl))); DEFV(Local,DEFV(Float,INIT(coefficient_Zi_Xl,COEFFICIENT_Zi_Xl))); DEFV(Local,DEFV(Float,INIT(translation_i_Xl,TRANSLATION_i_Xl))); /* Passage de l'image a la coordonnee 'X' de l'espace des phases. */ #define COEFFICIENT_Xi_Yl \ FZERO #define COEFFICIENT_Yi_Yl \ FU #define COEFFICIENT_Zi_Yl \ FZERO #define TRANSLATION_i_Yl \ FZERO DEFV(Local,DEFV(Float,INIT(coefficient_Xi_Yl,COEFFICIENT_Xi_Yl))); DEFV(Local,DEFV(Float,INIT(coefficient_Yi_Yl,COEFFICIENT_Yi_Yl))); DEFV(Local,DEFV(Float,INIT(coefficient_Zi_Yl,COEFFICIENT_Zi_Yl))); DEFV(Local,DEFV(Float,INIT(translation_i_Yl,TRANSLATION_i_Yl))); /* Passage de l'image a la coordonnee 'Y' de l'espace des phases. */ #define COEFFICIENT_Xi_Zl \ FZERO #define COEFFICIENT_Yi_Zl \ FZERO #define COEFFICIENT_Zi_Zl \ FU #define TRANSLATION_i_Zl \ FZERO DEFV(Local,DEFV(Float,INIT(coefficient_Xi_Zl,COEFFICIENT_Xi_Zl))); DEFV(Local,DEFV(Float,INIT(coefficient_Yi_Zl,COEFFICIENT_Yi_Zl))); DEFV(Local,DEFV(Float,INIT(coefficient_Zi_Zl,COEFFICIENT_Zi_Zl))); DEFV(Local,DEFV(Float,INIT(translation_i_Zl,TRANSLATION_i_Zl))); /* Passage de l'image a la coordonnee 'Z' de l'espace des phases. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D U P A S S A G E D E L ' E S P A C E D E S P H A S E S A L ' I M A G E : */ /* */ /*************************************************************************************************************************************/ #define COEFFICIENT_Xl_Xi \ FU #define COEFFICIENT_Yl_Xi \ FZERO #define COEFFICIENT_Zl_Xi \ FZERO #define TRANSLATION_l_Xi \ FZERO DEFV(Local,DEFV(Float,INIT(coefficient_Xl_Xi,COEFFICIENT_Xl_Xi))); DEFV(Local,DEFV(Float,INIT(coefficient_Yl_Xi,COEFFICIENT_Yl_Xi))); DEFV(Local,DEFV(Float,INIT(coefficient_Zl_Xi,COEFFICIENT_Zl_Xi))); DEFV(Local,DEFV(Float,INIT(translation_l_Xi,TRANSLATION_l_Xi))); /* Passage de l'espace des phases a la coordonnee 'X' de l'image. */ #define COEFFICIENT_Xl_Yi \ FZERO #define COEFFICIENT_Yl_Yi \ FU #define COEFFICIENT_Zl_Yi \ FZERO #define TRANSLATION_l_Yi \ FZERO DEFV(Local,DEFV(Float,INIT(coefficient_Xl_Yi,COEFFICIENT_Xl_Yi))); DEFV(Local,DEFV(Float,INIT(coefficient_Yl_Yi,COEFFICIENT_Yl_Yi))); DEFV(Local,DEFV(Float,INIT(coefficient_Zl_Yi,COEFFICIENT_Zl_Yi))); DEFV(Local,DEFV(Float,INIT(translation_l_Yi,TRANSLATION_l_Yi))); /* Passage de l'espace des phases a la coordonnee 'Y' de l'image. */ #define COEFFICIENT_Xl_Zi \ FZERO #define COEFFICIENT_Yl_Zi \ FZERO #define COEFFICIENT_Zl_Zi \ FU #define TRANSLATION_l_Zi \ FZERO DEFV(Local,DEFV(Float,INIT(coefficient_Xl_Zi,COEFFICIENT_Xl_Zi))); DEFV(Local,DEFV(Float,INIT(coefficient_Yl_Zi,COEFFICIENT_Yl_Zi))); DEFV(Local,DEFV(Float,INIT(coefficient_Zl_Zi,COEFFICIENT_Zl_Zi))); DEFV(Local,DEFV(Float,INIT(translation_l_Zi,TRANSLATION_l_Zi))); /* Passage de l'espace des phases au niveau de l'image. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E L ' I N T E G R A T I O N D U S Y S T E M E */ /* D ' E Q U A T I O N S D I F F E R E N T I E L L E S : */ /* */ /*************************************************************************************************************************************/ #include xrk/integr.1B.vv.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S I N I T I A L I S A T I O N S : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #define imageAX \ IFmageA1 #define imageAY \ IFmageA2 #define imageAZ \ IFmageA3 #define imageRX \ IFmageR1 #define imageRY \ IFmageR2 #define imageRZ \ IFmageR3 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N D E T R O I S I M A G E S P A R L ' A T T R A C T E U R D E L O R E N Z : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageAX),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageAY),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageAZ),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageRX),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageRY),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageRZ),NOM_PIPE)); /*..............................................................................................................................*/ GET_ARGUMENTSv(nombre_d_arguments ,BLOC(GET_ARGUMENT_C("imageAX=""AX=",nom_imageAX); GET_ARGUMENT_C("imageAY=""AY=",nom_imageAY); GET_ARGUMENT_C("imageAZ=""AZ=",nom_imageAZ); GET_ARGUMENT_C("imageRX=""RX=",nom_imageRX); GET_ARGUMENT_C("imageRY=""RY=",nom_imageRY); GET_ARGUMENT_C("imageRZ=""RZ=",nom_imageRZ); GET_ARGUMENT_L("standard=",les_images_sont_standards); GET_ARGUMENT_F("COEFFICIENT_Xx=",Xx); GET_ARGUMENT_F("COEFFICIENT_Xy=",Xy); GET_ARGUMENT_F("COEFFICIENT_Xz=",Xz); GET_ARGUMENT_F("COEFFICIENT_Xxy=",Xxy); GET_ARGUMENT_F("COEFFICIENT_Xyz=",Xyz); GET_ARGUMENT_F("COEFFICIENT_Xzx=",Xzx); GET_ARGUMENT_F("COEFFICIENT_Xxyz=",Xxyz); GET_ARGUMENT_F("COEFFICIENT_Yx=",Yx); GET_ARGUMENT_F("COEFFICIENT_Yy=",Yy); GET_ARGUMENT_F("COEFFICIENT_Yz=",Yz); GET_ARGUMENT_F("COEFFICIENT_Yxy=",Yxy); GET_ARGUMENT_F("COEFFICIENT_Yyz=",Yyz); GET_ARGUMENT_F("COEFFICIENT_Yzx=",Yzx); GET_ARGUMENT_F("COEFFICIENT_Yxyz=",Yxyz); GET_ARGUMENT_F("COEFFICIENT_Zx=",Zx); GET_ARGUMENT_F("COEFFICIENT_Zy=",Zy); GET_ARGUMENT_F("COEFFICIENT_Zz=",Zz); GET_ARGUMENT_F("COEFFICIENT_Zxy=",Zxy); GET_ARGUMENT_F("COEFFICIENT_Zyz=",Zyz); GET_ARGUMENT_F("COEFFICIENT_Zzx=",Zzx); GET_ARGUMENT_F("COEFFICIENT_Zxyz=",Zxyz); GET_ARGUMENT_F("Xi_Xl=",coefficient_Xi_Xl); GET_ARGUMENT_F("Yi_Xl=",coefficient_Yi_Xl); GET_ARGUMENT_F("Zi_Xl=",coefficient_Zi_Xl); GET_ARGUMENT_F("i_Xl=""Ti_Xl=",translation_i_Xl); GET_ARGUMENT_F("Xi_Yl=",coefficient_Xi_Yl); GET_ARGUMENT_F("Yi_Yl=",coefficient_Yi_Yl); GET_ARGUMENT_F("Zi_Yl=",coefficient_Zi_Yl); GET_ARGUMENT_F("i_Yl=""Ti_Yl=",translation_i_Yl); GET_ARGUMENT_F("Xi_Zl=",coefficient_Xi_Zl); GET_ARGUMENT_F("Yi_Zl=",coefficient_Yi_Zl); GET_ARGUMENT_F("Zi_Zl=",coefficient_Zi_Zl); GET_ARGUMENT_F("i_Zl=""Ti_Zl=",translation_i_Zl); GET_ARGUMENT_F("Xl_Xi=",coefficient_Xl_Xi); GET_ARGUMENT_F("Yl_Xi=",coefficient_Yl_Xi); GET_ARGUMENT_F("Zl_Xi=",coefficient_Zl_Xi); GET_ARGUMENT_F("l_Xi=""Tl_Xi=",translation_l_Xi); GET_ARGUMENT_F("Xl_Yi=",coefficient_Xl_Yi); GET_ARGUMENT_F("Yl_Yi=",coefficient_Yl_Yi); GET_ARGUMENT_F("Zl_Yi=",coefficient_Zl_Yi); GET_ARGUMENT_F("l_Yi=""Tl_Yi=",translation_l_Yi); GET_ARGUMENT_F("Xl_Zi=",coefficient_Xl_Zi); GET_ARGUMENT_F("Yl_Zi=",coefficient_Yl_Zi); GET_ARGUMENT_F("Zl_Zi=",coefficient_Zl_Zi); GET_ARGUMENT_F("l_Zi=""Tl_Zi=",translation_l_Zi); GET_ARGUMENT_I("n=""iterations=",nombre_d_iterations); GET_ARGUMENT_F("dt=""dct=",dct); GET_ARGUMENT_I("ordre=""methode=""integration=",ordre_de_la_methode_d_integration); /* Les synonymes de "ordre=", ont ete introduits le 20060608151515... */ ) ); #include xrk/attractor.19.I" /* Validations et definition de l'espace physique. */ Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageAX,nom_imageAX)))) Bblock Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageAY,nom_imageAY)))) Bblock Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageAZ,nom_imageAZ)))) Bblock CALi(IFinitialisation(imageRX,FZERO)); CALi(IFinitialisation(imageRY,FZERO)); CALi(IFinitialisation(imageRZ,FZERO)); /* Nettoyage des images Resultats {X,Y,Z}. */ begin_image Bblock DEFV(Float,INIT(X_courant,loadF_point(imageAX,X,Y))); DEFV(Float,INIT(Y_courant,loadF_point(imageAY,X,Y))); DEFV(Float,INIT(Z_courant,loadF_point(imageAZ,X,Y))); /* Point courant definissant les conditions initiales de l'integration courante... */ /* Pour chaque point {X,Y} de l'image Argument, on reinitialise l'integration : */ RE_INITIALISATION_DE_L_HORLOGE; /* Initialisation du temps. */ EGAL(cx ,X_01_DANS_PHYSIQUE(LIN3(coefficient_Xi_Xl,X_courant ,coefficient_Yi_Xl,Y_courant ,coefficient_Zi_Xl,Z_courant ,translation_i_Xl ) ) ); EGAL(cy ,Y_01_DANS_PHYSIQUE(LIN3(coefficient_Xi_Yl,X_courant ,coefficient_Yi_Yl,Y_courant ,coefficient_Zi_Yl,Z_courant ,translation_i_Yl ) ) ); EGAL(cz ,Z_01_DANS_PHYSIQUE(LIN3(coefficient_Xi_Zl,X_courant ,coefficient_Yi_Zl,Y_courant ,coefficient_Zi_Zl,Z_courant ,translation_i_Zl ) ) ); /* Initialisation des conditions initiales a partir de l'image. */ EGAL(dcx,FZERO); EGAL(dcy,FZERO); EGAL(dcz,FZERO); /* Initialisation des differentielles a priori. On notera que 'FZERO' est la valeur la */ /* plus "logique"... */ Komp(numero_de_l_iteration_courante,nombre_d_iterations) Bblock INTEGRATION_D_UN_SYSTEME_D_EQUATIONS_DIFFERENTIELLES_O1(temps_courant,dct); /* Integration du systeme d'equations differentielles suivant la methode choisie... */ INCREMENTATION_DE_L_HORLOGE(dct); /* Simulation du temps de la simulation... */ Eblock EKom storeF_point_valide(LIN3(coefficient_Xl_Xi,X_PHYSIQUE_DANS_01(cx) ,coefficient_Yl_Xi,Y_PHYSIQUE_DANS_01(cy) ,coefficient_Zl_Xi,Z_PHYSIQUE_DANS_01(cz) ,translation_l_Xi ) ,imageRX ,X ,Y ); storeF_point_valide(LIN3(coefficient_Xl_Yi,X_PHYSIQUE_DANS_01(cx) ,coefficient_Yl_Yi,Y_PHYSIQUE_DANS_01(cy) ,coefficient_Zl_Yi,Z_PHYSIQUE_DANS_01(cz) ,translation_l_Yi ) ,imageRY ,X ,Y ); storeF_point_valide(LIN3(coefficient_Xl_Zi,X_PHYSIQUE_DANS_01(cx) ,coefficient_Yl_Zi,Y_PHYSIQUE_DANS_01(cy) ,coefficient_Zl_Zi,Z_PHYSIQUE_DANS_01(cz) ,translation_l_Zi ) ,imageRZ ,X ,Y ); Eblock end_image CALi(IupdateF_image(nom_imageRX,imageRX)); CALi(IupdateF_image(nom_imageRY,imageRY)); CALi(IupdateF_image(nom_imageRZ,imageRZ)); Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes RETU_Commande; Eblock ECommande