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



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.