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