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



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.