/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D ' U N E H Y P E R - S P H E R E : */
/* */
/* */
/* Author of '$xrs/hyper_sphere.11$I' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20191125105848). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/* :Debut_listMN_HYPER_SPHERE_11: */
/*************************************************************************************************************************************/
/* */
/* 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/hyper_sphere.11$K') : */
/* */
/* L'Hyper-Sphere est definie dans un espace reel */
/* a 4 dimensions. Elle est parametree a l'aide de */
/* 3 coordonnees {u,v,w}. Le point courant {x1,x2,x3,x4} */
/* est alors defini par : */
/* */
/* x = A.Xcartesienne_4D(R,w,u,v) */
/* 1 */
/* */
/* x = B.Ycartesienne_4D(R,w,u,v) */
/* 2 */
/* */
/* x = C.Zcartesienne_4D(R,w,u,v) */
/* 3 */
/* */
/* x = D.Tcartesienne_4D(R,w,u,v) */
/* 4 */
/* */
/* */
/* avec pour les parametres {u,v,w} : */
/* */
/* u E [ 0 , p ] */
/* */
/* v E [ 0 , 2.p ] */
/* */
/* w E [ 0 , p ] */
/* */
/* (ou 'p' designe 'pi'). */
/* */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_HYPER_SPHERE_11: */
/*************************************************************************************************************************************/
/* */
/* */
/* 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 x1 + A x2 + A x3 + A x4 */
/* x xx1 xx2 xx3 xx4 */
/* */
/* F (u,v,w) = A x1 + A x2 + A x3 + A x4 */
/* y yx1 yx2 yx3 yx4 */
/* */
/* F (u,v,w) = A x1 + A x2 + A x3 + A x4 */
/* z zx1 zx2 zx3 zx4 */
/* */
/* Une possible matrice 'A' sera : */
/* */
/* | 1 0 0 1 | */
/* | 0 1 0 1 | */
/* | 0 0 1 1 | */
/* */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(Float,x1));
DEFV(Local,DEFV(Float,x2));
DEFV(Local,DEFV(Float,x3));
DEFV(Local,DEFV(Float,x4));
/* Definition des coordonnees {x1,x2,x3,x4} de la variete reelle a 4 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_DEL_L_HYPER_SPHERE_1(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... */ \
\
EGAL(x1,MUL2(parametre_A,Xcartesienne_4D(parametre_R,w,u,v))); \
EGAL(x2,MUL2(parametre_B,Ycartesienne_4D(parametre_R,w,u,v))); \
EGAL(x3,MUL2(parametre_C,Zcartesienne_4D(parametre_R,w,u,v))); \
EGAL(x4,MUL2(parametre_D,Tcartesienne_4D(parametre_R,w,u,v))); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Calcul sur la variete reelle a 4 dimensions. */
BFonctionV
DEFV(Local,DEFV(FonctionV,FHyperSphere_1(u,v,w)))
DEFV(Argument,DEFV(Float,u));
DEFV(Argument,DEFV(Float,v));
DEFV(Argument,DEFV(Float,w));
/* Definition des coordonnees parametriques. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
GENERATION_DEL_L_HYPER_SPHERE_1(u,v,w);
/* Calcul, si besoin est, de {z1,z2}. */
RETU_VIDE;
Eblock
EFonctionV
#undef GENERATION_DEL_L_HYPER_SPHERE_1
BFonctionF
DEFV(Local,DEFV(FonctionF,FFx_HyperSphere_1(u,v,w)))
DEFV(Argument,DEFV(Float,u));
DEFV(Argument,DEFV(Float,v));
DEFV(Argument,DEFV(Float,w));
/* Definition des coordonnees parametriques. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
CALS(FHyperSphere_1(u,v,w));
/* Calcul, si besoin est, de {x1,x2,x3,x4}. */
RETU(PROJECTION_PARALLELE_01_4D_3D_X(x1,x2,x3,x4));
/* Calcul de : */
/* */
/* F (u,v,w) = A x1 + A x2 + A x3 + A x4 */
/* x xx1 xx2 xx3 xx4 */
/* */
/* 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_HyperSphere_1(u,v,w)))
DEFV(Argument,DEFV(Float,u));
DEFV(Argument,DEFV(Float,v));
DEFV(Argument,DEFV(Float,w));
/* Definition des coordonnees parametriques. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
CALS(FHyperSphere_1(u,v,w));
/* Calcul, si besoin est, de {x1,x2,x3,x4}. */
RETU(PROJECTION_PARALLELE_01_4D_3D_Y(x1,x2,x3,x4));
/* Calcul de : */
/* */
/* F (u,v,w) = A x1 + A x2 + A x3 + A x4 */
/* y yx1 yx2 yx3 yx4 */
/* */
/* 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_HyperSphere_1(u,v,w)))
DEFV(Argument,DEFV(Float,u));
DEFV(Argument,DEFV(Float,v));
DEFV(Argument,DEFV(Float,w));
/* Definition des coordonnees parametriques. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
CALS(FHyperSphere_1(u,v,w));
/* Calcul, si besoin est, de {x1,x2,x3,x4}. */
RETU(PROJECTION_PARALLELE_01_4D_3D_Z(x1,x2,x3,x4));
/* Calcul de : */
/* */
/* F (u,v,w) = A x1 + A x2 + A x3 + A x4 */
/* z zx1 zx2 zx3 zx4 */
/* */
/* 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?_HyperSphere_1(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_HyperSphere_1(u,v,w) \
FFx_HyperSphere_1(u,v,w) \
/* Definition de la fonction F (u,v,w). */ \
/* x */
#define Fy_HyperSphere_1(u,v,w) \
FFy_HyperSphere_1(u,v,w) \
/* Definition de la fonction F (u,v,w). */ \
/* y */
#define Fz_HyperSphere_1(u,v,w) \
FFz_HyperSphere_1(u,v,w) \
/* Definition de la fonction F (u,v,w). */ \
/* z */
/* ATTENTION : on notera bien que les trois fonctions 'F?_HyperSphere_1(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'. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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_HyperSphere_1 \
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'... */