/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D ' U N " R U B A N D E M O B I U S " T R I D I M E N S I O N N E L : */
/* */
/* */
/* Author of '$xrs/Mobius3D.21$I' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20040402104912). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/* :Debut_listMN_RUBAN_DE_MOBIUS_TRIDIMENSIONNEL_21: */
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S T R O I S F O N C T I O N S ' F ' : */
/* */
/* */
/* Definition ('v $xrs/Mobius3D.21$K') : */
/* */
/* Le ruban de Mobius tridimensionnel est */
/* defini dans un espace reel a 4 dimensions */
/* (ou complexe a 2 dimensions {Z1,Z2}). Il est */
/* parametre a l'aide de 3 coordonnees {u,v,w} */
/* (en assimilant le ruban de Mobius tridimensionnel */
/* a un tore, la coordonnee 'v' decrit un grand cercle */
/* de ce tore). Le point courant {Z1,Z2} est alors */
/* defini par : */
/* */
/* i.v */
/* Z = (u+t).e */
/* 1 */
/* */
/* v */
/* i.--- */
/* d */
/* Z = w.e */
/* 2 */
/* */
/* avec en general : */
/* */
/* d = +2 */
/* t = +1 */
/* */
/* avec pour les parametres {u,v,w} : */
/* */
/* u E [ -p/8 , +p/8 ] */
/* */
/* v E [ -p , +p ] */
/* */
/* w E [ -p/8 , +p/8 ] */
/* */
/* (ou 'p' designe 'pi'). */
/* */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_RUBAN_DE_MOBIUS_TRIDIMENSIONNEL_21: */
/*************************************************************************************************************************************/
/* */
/* */
/* Cette variete est donc a 4 dimensions, et la */
/* surface a 3 dimensions que l'on visualisera */
/* sera definie par : */
/* */
/* F (u,v,w) = A R(Z ) + A I(Z ) + A R(Z ) + A I(Z ) */
/* x xR1 1 xI1 1 xR2 2 xI2 2 */
/* */
/* F (u,v,w) = A R(Z ) + A I(Z ) + A R(Z ) + A I(Z ) */
/* y yR1 1 yI1 1 yR2 2 yI2 2 */
/* */
/* F (u,v,w) = A R(Z ) + A I(Z ) + A R(Z ) + A I(Z ) */
/* z zR1 1 zI1 1 zR2 2 zI2 2 */
/* */
/* (ou 'R(...)' et 'I(...)' designent respectivement */
/* les parties Reelle et Imaginaire). Une possible */
/* matrice 'A' sera : */
/* */
/* | 1 0 0 1 | */
/* | 0 1 0 1 | */
/* | 0 0 1 1 | */
/* */
/* Le 20040331085528 ont ete introduites les procedures */
/* de projection 'v $ximd/operator.1$FON PROJECTION_PARALLELE_01_4D_3D_'. */
/* */
/*************************************************************************************************************************************/
__________pushdef(%%D%%z1%%F%%,z1_2)
__________pushdef(%%D%%z2%%F%%,z2_2)
__________pushdef(%%D%%coordonnee_u%%F%%,coordonnee_u_2)
__________pushdef(%%D%%coordonnee_v%%F%%,coordonnee_v_2)
__________pushdef(%%D%%coordonnee_w%%F%%,coordonnee_w_2)
__________pushdef(%%D%%initialiser_les_coordonnees_u_v_w%%F%%,initialiser_les_coordonnees_u_v_w_2)
/* En vue d'interpolation de surfaces pour eviter des doubles definitions (introduit le */
/* 20040501120056). */
DEFV(Local,DEFV(complexe,z1));
DEFV(Local,DEFV(complexe,z2));
/* Definition des coordonnees {z1,z2} de la variete complexe a 2 dimensions. */
DEFV(Local,DEFV(Float,INIT(coordonnee_u,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(coordonnee_v,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(coordonnee_w,FLOT__UNDEF)));
/* Definition des coordonnees parametriques {u,v,w}. */
DEFV(Local,DEFV(Logical,INIT(initialiser_les_coordonnees_u_v_w,VRAI)));
/* Controle de l'initialisation des coordonnees parametriques {u,v,w}. */
#define GENERATION_DU_RUBAN_DE_MOBIUS_TRIDIMENSIONNEL_2(u,v,w) \
Bblock \
Test(IFOU(IL_FAUT(initialiser_les_coordonnees_u_v_w) \
,IFET(IL_NE_FAUT_PAS(initialiser_les_coordonnees_u_v_w) \
,I3OU(IFNE(u,coordonnee_u) \
,IFNE(v,coordonnee_v) \
,IFNE(w,coordonnee_w) \
) \
) \
) \
) \
Bblock \
EGAL(initialiser_les_coordonnees_u_v_w,FAUX); \
EGAL(coordonnee_u,u); \
EGAL(coordonnee_v,v); \
EGAL(coordonnee_w,w); \
/* Initialisation et optimisation du processus... */ \
\
Cinitialisation_polaire(z1,ADD2(u,parametre_t),NEUT(v)); \
/* Calcul de : */ \
/* */ \
/* i.v */ \
/* z = (u+t).e */ \
/* 1 */ \
/* */ \
Cinitialisation_polaire(z2,NEUT(w),DIVI(v,parametre_d)); \
/* Calcul de : */ \
/* */ \
/* v */ \
/* i.--- */ \
/* d */ \
/* z = w.e */ \
/* 2 */ \
/* */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Calcul sur la variete complexe a 2 dimensions. */
BFonctionV
DEFV(Local,DEFV(FonctionV,FMobius3D_2(u,v,w)))
DEFV(Argument,DEFV(Float,u));
DEFV(Argument,DEFV(Float,v));
DEFV(Argument,DEFV(Float,w));
/* Definition des coordonnees parametriques. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
GENERATION_DU_RUBAN_DE_MOBIUS_TRIDIMENSIONNEL_2(u,v,w);
/* Calcul, si besoin est, de {z1,z2}. */
RETU_VIDE;
/* Introduit le 20071130135017... */
Eblock
EFonctionV
#undef GENERATION_DU_RUBAN_DE_MOBIUS_TRIDIMENSIONNEL_2
BFonctionF
DEFV(Local,DEFV(FonctionF,FFx_Mobius3D_2(u,v,w)))
DEFV(Argument,DEFV(Float,u));
DEFV(Argument,DEFV(Float,v));
DEFV(Argument,DEFV(Float,w));
/* Definition des coordonnees parametriques. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
CALS(FMobius3D_2(u,v,w));
/* Calcul, si besoin est, de {z1,z2}. */
RETU(PROJECTION_PARALLELE_01_4D_3D_X(Reelle(z1)
,Imaginaire(z1)
,Reelle(z2)
,Imaginaire(z2)
)
);
/* Calcul de : */
/* */
/* F (u,v,w) = A R(Z ) + A I(Z ) + A R(Z ) + A I(Z ) */
/* x xR1 1 xI1 1 xR2 2 xI2 2 */
/* */
/* ATTENTION : on notera bien que 'Fx(u,v,w)' est la fonction projetee par l'operateur */
/* 'PROJECTION_PARALLELE_01_4D_3D_X(...)' et donc tridimensionnelle... */
Eblock
EFonctionF
BFonctionF
DEFV(Local,DEFV(FonctionF,FFy_Mobius3D_2(u,v,w)))
DEFV(Argument,DEFV(Float,u));
DEFV(Argument,DEFV(Float,v));
DEFV(Argument,DEFV(Float,w));
/* Definition des coordonnees parametriques. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
CALS(FMobius3D_2(u,v,w));
/* Calcul, si besoin est, de {z1,z2}. */
RETU(PROJECTION_PARALLELE_01_4D_3D_Y(Reelle(z1)
,Imaginaire(z1)
,Reelle(z2)
,Imaginaire(z2)
)
);
/* Calcul de : */
/* */
/* F (u,v,w) = A R(Z ) + A I(Z ) + A R(Z ) + A I(Z ) */
/* y yR1 1 yI1 1 yR2 2 yI2 2 */
/* */
/* ATTENTION : on notera bien que 'Fy(u,v,w)' est la fonction projetee par l'operateur */
/* 'PROJECTION_PARALLELE_01_4D_3D_Y(...)' et donc tridimensionnelle... */
Eblock
EFonctionF
BFonctionF
DEFV(Local,DEFV(FonctionF,FFz_Mobius3D_2(u,v,w)))
DEFV(Argument,DEFV(Float,u));
DEFV(Argument,DEFV(Float,v));
DEFV(Argument,DEFV(Float,w));
/* Definition des coordonnees parametriques. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
CALS(FMobius3D_2(u,v,w));
/* Calcul, si besoin est, de {z1,z2}. */
RETU(PROJECTION_PARALLELE_01_4D_3D_Z(Reelle(z1)
,Imaginaire(z1)
,Reelle(z2)
,Imaginaire(z2)
)
);
/* Calcul de : */
/* */
/* F (u,v,w) = A R(Z ) + A I(Z ) + A R(Z ) + A I(Z ) */
/* z zR1 1 zI1 1 zR2 2 zI2 2 */
/* */
/* ATTENTION : on notera bien que 'Fz(u,v,w)' est la fonction projetee par l'operateur */
/* 'PROJECTION_PARALLELE_01_4D_3D_Z(...)' et donc tridimensionnelle... */
Eblock
EFonctionF
/* ATTENTION : on notera bien que les trois fonctions 'F?_Mobius3D_2(u,v,w)' sont les */
/* fonctions projetees par les operateurs 'PROJECTION_PARALLELE_01_4D_3D_?(...)' et */
/* sont donc tridimensionnelles. Cela implique, par exemple, qu'une modification des */
/* parametres 'coefficient_de_projection_parallele_01_4D_3D_x?_?' modifie leur valeur */
/* et donc les valeurs des differentielles qui sont calculees eventuellement pour le */
/* coloriage dans 'v $xrs/volumes.12$I DERIVATION_PARTIELLE'. */
#define Fx_Mobius3D_2(u,v,w) \
FFx_Mobius3D_2(u,v,w) \
/* Definition de la fonction F (u,v,w). */ \
/* x */
#define Fy_Mobius3D_2(u,v,w) \
FFy_Mobius3D_2(u,v,w) \
/* Definition de la fonction F (u,v,w). */ \
/* y */
#define Fz_Mobius3D_2(u,v,w) \
FFz_Mobius3D_2(u,v,w) \
/* Definition de la fonction F (u,v,w). */ \
/* z */
/* ATTENTION : on notera bien que les trois fonctions 'F?_Mobius3D_2(u,v,w)' sont les */
/* fonctions projetees par les operateurs 'PROJECTION_PARALLELE_01_4D_3D_?(...)' et */
/* sont donc tridimensionnelles. Cela implique, par exemple, qu'une modification des */
/* parametres 'coefficient_de_projection_parallele_01_4D_3D_x?_?' modifie leur valeur */
/* et donc les valeurs des differentielles qui sont calculees eventuellement pour le */
/* coloriage dans 'v $xrs/volumes.12$I DERIVATION_PARTIELLE'. */
__________popdef(%%D%%initialiser_les_coordonnees_u_v_w%%F%%)
__________popdef(%%D%%coordonnee_w%%F%%)
__________popdef(%%D%%coordonnee_v%%F%%)
__________popdef(%%D%%coordonnee_u%%F%%)
__________popdef(%%D%%z2%%F%%)
__________popdef(%%D%%z1%%F%%)
/* En vue d'interpolation de surfaces pour eviter des doubles definitions (introduit le */
/* 20040501121636). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N I T I A L I S A T I O N S R E L A T I V E S A L A P S E U D O - P R O J E C T I O N : */
/* */
/*************************************************************************************************************************************/
#define Pxyz_Mobius3D_2 \
Bblock \
BLOC(VIDE;); \
Eblock \
/* Initialisations specifiques a ce volume destinees a permettre la reinjection des */ \
/* trois pseudo-projections {Projection_de_Fx,Projection_de_Fy,Projection_de_Fz} dans */ \
/* 'v $xrs/project3D.11$K' (introduit le 20050628085851)... */