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