/*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D ' U N E V A R I E T E D E C A L A B I - Y A U 4 - D I M E N S I O N N E L L E : */ /* */ /* */ /* Author of '$xrs/CalabiYau.11$I' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20010525140949). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /* :Debut_listMN_VARIETE_DE_CALABI_YAU_4_DIMENSIONNELLE_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/CalabiYau.12$K') : */ /* */ /* Une variete complexe de Calabi-Yau */ /* 4-dimensionnelle est definie */ /* implicitement par : */ /* */ /* / \n1 / \n2 */ /* | Z' | | Z' | */ /* | 1 | | 2 | */ /* | ---- | + | ---- | = 1 */ /* | A | | B | */ /* \ / \ / */ /* */ /* posons : */ /* */ /* Z' */ /* 1 */ /* Z = ---- */ /* 1 A */ /* */ /* Z' */ /* 2 */ /* Z = ---- */ /* 2 B */ /* */ /* d'ou : */ /* */ /* n1 n2 */ /* Z + Z = 1 */ /* 1 2 */ /* */ /* ou 'Z1' et 'Z2' sont deux nombres complexes. */ /* Cela peut se reecrire : */ /* */ /* 2 2 */ /* / n1 \ / n2 \ */ /* | ---- | | ---- | */ /* | 2 | | 2 | */ /* | Z | + | Z | = 1 */ /* \ 1 / \ 2 / */ /* */ /* ou encore : */ /* */ /* 2 2 */ /* cos(Z) + sin(Z) = 1 */ /* */ /* d'ou : */ /* */ /* n1 2 */ /* Z = cos(Z) */ /* 1 */ /* */ /* n2 2 */ /* Z = sin(Z) */ /* 2 */ /* */ /* (ou 'Z' est un "angle" complexe) d'ou : */ /* */ /* 1 */ /* k1 / \ ---- */ /* 2ip.---- | | n1 */ /* n1 | 2 | */ /* Z = e | cos(Z) | */ /* 1 \ / */ /* */ /* 1 */ /* k2 / \ ---- */ /* 2ip.---- | | n2 */ /* n2 | 2 | */ /* Z = e | sin(Z) | */ /* 2 \ / */ /* */ /* */ /* ou 'i' represente l'imaginaire pur (0,1). */ /* */ /* D'ou : */ /* */ /* k1 2 */ /* 2ip.---- ---- */ /* n1 n1 */ /* Z = e .cos(Z) */ /* 1 */ /* */ /* k2 2 */ /* 2ip.---- ---- */ /* n2 n2 */ /* Z = e .sin(Z) */ /* 2 */ /* */ /* et : */ /* */ /* Z' = A.Z */ /* 1 1 */ /* */ /* Z' = B.Z */ /* 2 2 */ /* */ /* ou 'k1' et 'k2' indicent les racines n-iemes */ /* de l'unite (n = {n1,n2}) : */ /* */ /* k1 E [ 0 , n1-1 ] */ /* */ /* k2 E [ 0 , n2-1 ] */ /* */ /* La variete est ainsi composee de n1.n2 "patches" */ /* parametres chacun par {u,v}, avec : */ /* */ /* u E [ 0 , p/2 ] */ /* */ /* v E [ -1 , +1 ] */ /* */ /* (ou 'p' designe 'pi') et : */ /* */ /* Z = u + i.v */ /* */ /* (voir a ce propos 'v $xrs/CalabiYau.14$I permutation.de..u..et.de..v.' */ /* pour la justification des bornes de 'u' et de 'v', en particulier). */ /* */ /* */ /* [d'apres "A Construction for Computer Complex Curves" de Andrew J. Hanson */ /* publie dans "Notices of the American Mathematical Society" du 11-12/1994] */ /* */ /* */ /*************************************************************************************************************************************/ /* :Fin_listMN_VARIETE_DE_CALABI_YAU_4_DIMENSIONNELLE_11: */ /*************************************************************************************************************************************/ /* */ /* */ /* Cette variete est donc a 4 dimensions, et la */ /* surface a 3 dimensions que l'on visualisera */ /* sera definie par : */ /* */ /* */ /* F (u,v) = A R(Z ) + A I(Z ) + A R(Z ) + A I(Z ) */ /* x xR1 1 xI1 1 xR2 2 xI2 2 */ /* */ /* */ /* F (u,v) = A R(Z ) + A I(Z ) + A R(Z ) + A I(Z ) */ /* y yR1 1 yI1 1 yR2 2 yI2 2 */ /* */ /* */ /* F (u,v) = A R(Z ) + A I(Z ) + A R(Z ) + A I(Z ) */ /* z zR1 1 zI1 1 zR2 2 zI2 2 */ /* */ /* */ /* soit, par defaut : */ /* */ /* */ /* F (u,v) = R(Z ) + I(Z ) */ /* x 1 2 */ /* */ /* */ /* F (u,v) = I(Z ) + I(Z ) */ /* y 1 2 */ /* */ /* */ /* F (u,v) = R(Z ) + I(Z ) */ /* z 2 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_1) __________pushdef(%%D%%z2%%F%%,z2_1) __________pushdef(%%D%%coordonnee_u%%F%%,coordonnee_u_1) __________pushdef(%%D%%coordonnee_v%%F%%,coordonnee_v_1) __________pushdef(%%D%%initialiser_les_coordonnees_u_v%%F%%,initialiser_les_coordonnees_u_v_1) /* En vue d'interpolation de surfaces pour eviter des doubles definitions (introduit le */ /* 20040501115047). */ 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))); /* Definition des coordonnees parametriques {u,v}. */ DEFV(Local,DEFV(Logical,INIT(initialiser_les_coordonnees_u_v,VRAI))); /* Controle de l'initialisation des coordonnees parametriques {u,v}. */ #define GENERATION_DU_CALABI_YAU_1(u,v) \ Bblock \ Test(IFOU(IL_FAUT(initialiser_les_coordonnees_u_v) \ ,IFET(IL_NE_FAUT_PAS(initialiser_les_coordonnees_u_v) \ ,IFOU(IFNE(u,coordonnee_u) \ ,IFNE(v,coordonnee_v) \ ) \ ) \ ) \ ) \ Bblock \ DEFV(Float,INIT(exposant_n1,parametre_n1)); \ DEFV(Float,INIT(demi_exposant_n1,MOIT(parametre_n1))); \ /* Exposant (n1) et demi-exposant (n1/2). */ \ DEFV(Float,INIT(exposant_n2,parametre_n2)); \ DEFV(Float,INIT(demi_exposant_n2,MOIT(parametre_n2))); \ /* Exposant (n2) et demi-exposant (n2/2). */ \ DEFV(complexe,zuv); \ DEFV(complexe,cosinus_zuv); \ DEFV(complexe,sinus_zuv); \ DEFV(complexe,puissance_de_cosinus_zuv); \ DEFV(complexe,puissance_de_sinus_zuv); \ DEFV(complexe,racine_de_l_unite_1); \ DEFV(complexe,racine_de_l_unite_2); \ /* Nombres complexes de manoeuvre... */ \ \ EGAL(initialiser_les_coordonnees_u_v,FAUX); \ EGAL(coordonnee_u,u); \ EGAL(coordonnee_v,v); \ /* Initialisation et optimisation du processus... */ \ \ Cinitialisation(zuv,u,v); \ /* Calcul de : */ \ /* */ \ /* z = u + i.v */ \ /* uv */ \ /* */ \ /* (voir a ce propos 'v $xrs/CalabiYau.14$I permutation.de..u..et.de..v.'). */ \ Ccosinus(cosinus_zuv,zuv); \ /* Calcul de : */ \ /* */ \ /* cos(z ) */ \ /* uv */ \ /* */ \ Csinus(sinus_zuv,zuv); \ /* Calcul de : */ \ /* */ \ /* sin(z ) */ \ /* uv */ \ /* */ \ Cpuissance(puissance_de_cosinus_zuv,cosinus_zuv,INVE(demi_exposant_n1)); \ /* Calcul de : */ \ /* */ \ /* 2 */ \ /* ---- */ \ /* n1 */ \ /* cos(z ) */ \ /* uv */ \ /* */ \ Cpuissance(puissance_de_sinus_zuv,sinus_zuv,INVE(demi_exposant_n2)); \ /* Calcul de : */ \ /* */ \ /* 2 */ \ /* ---- */ \ /* n2 */ \ /* sin(z ) */ \ /* uv */ \ /* */ \ Cdefinition_trigonometrique(racine_de_l_unite_1 \ ,C_MODULE_UNITAIRE \ ,SCAL(CERCLE_TRIGONOMETRIQUE,exposant_n1,parametre_k1) \ ); \ /* Calcul de : */ \ /* */ \ /* k1 */ \ /* 2ip.---- */ \ /* n1 */ \ /* e */ \ /* */ \ Cdefinition_trigonometrique(racine_de_l_unite_2 \ ,C_MODULE_UNITAIRE \ ,SCAL(CERCLE_TRIGONOMETRIQUE,exposant_n2,parametre_k2) \ ); \ /* Calcul de : */ \ /* */ \ /* k2 */ \ /* 2ip.---- */ \ /* n2 */ \ /* e */ \ /* */ \ Cproduit(z1,racine_de_l_unite_1,puissance_de_cosinus_zuv); \ /* Calcul de : */ \ /* */ \ /* k1 2 */ \ /* 2ip.---- ---- */ \ /* n1 n1 */ \ /* e .cos(z ) */ \ /* uv */ \ /* */ \ Cproduit(z2,racine_de_l_unite_2,puissance_de_sinus_zuv); \ /* Calcul de : */ \ /* */ \ /* k2 2 */ \ /* 2ip.---- ---- */ \ /* n2 n2 */ \ /* e .sin(z ) */ \ /* uv */ \ /* */ \ Cproduit(z1,parametre_zA,z1); \ /* Calcul de : */ \ /* */ \ /* k1 2 */ \ /* 2ip.---- ---- */ \ /* n1 n1 */ \ /* A.e .cos(z ) */ \ /* uv */ \ /* */ \ Cproduit(z2,parametre_zB,z2); \ /* Calcul de : */ \ /* */ \ /* k2 2 */ \ /* 2ip.---- ---- */ \ /* n2 n2 */ \ /* B.e .sin(z ) */ \ /* uv */ \ /* */ \ \ Test(IL_FAUT(valider_la_qualite_du_calcul_de_z1_et_de_z2)) \ Bblock \ DEFV(complexe,z1_puissance_n1); \ DEFV(complexe,z2_puissance_n2); \ DEFV(complexe,validation); \ /* Nombres complexes de manoeuvre... */ \ \ Cpuissance(z1_puissance_n1,z1,parametre_n1); \ /* Calcul de : */ \ /* */ \ /* n1 */ \ /* z */ \ /* 1 */ \ /* */ \ Cpuissance(z2_puissance_n2,z2,parametre_n2); \ /* Calcul de : */ \ /* */ \ /* n2 */ \ /* z */ \ /* 2 */ \ /* */ \ Csomme(validation,z1_puissance_n1,z2_puissance_n2); \ /* Calcul de : */ \ /* */ \ /* n1 n2 */ \ /* z + z */ \ /* 1 2 */ \ /* */ \ \ Test(CTestIFNE_a_peu_pres_absolu(validation,C_____nombre_complexe_p1__0 \ ,epsilon_de_validation_du_calcul_de_z1_et_de_z2 \ ) \ ) \ Bblock \ PRINT_ERREUR("le calcul de 'z1' et de 'z2' est incorrect"); \ PRINT_DANS_C("zuv",zuv); \ /* Introduit le 20230323092518... */ \ PRINT_DANS_C("z1",z1); \ PRINT_DANS_C("z2",z2); \ CAL1(Prer4("(%+.^^^,%+.^^^) est obtenu au lieu de (%+.^^^,%+.^^^)\n" \ ,Reelle(validation),Imaginaire(validation) \ ,Reelle(C_____nombre_complexe_p1__0),Imaginaire(C_____nombre_complexe_p1__0) \ ) \ ); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Calcul sur la variete complexe a 2 dimensions. */ BFonctionV DEFV(Local,DEFV(FonctionV,FCalabiYau_1(u,v))) DEFV(Argument,DEFV(Float,u)); DEFV(Argument,DEFV(Float,v)); /* Definition des coordonnees parametriques. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ GENERATION_DU_CALABI_YAU_1(u,v); /* Calcul, si besoin est, de {z1,z2}. */ RETU_VIDE; /* Introduit le 20071130134757... */ Eblock EFonctionV #undef GENERATION_DU_CALABI_YAU_1 #define EDITION_EVENTUELLE_DES_PROJECTIONS(nom_de_la_coordonnee,valeur_de_la_coordonnee) \ Bblock \ Test(IL_FAUT(editer_les_projections)) \ Bblock \ CAL3(Prme0("{")); \ \ CAL3(Prme2("{%+.^^^,%+.^^^}" \ ,Reelle(z1) \ ,Imaginaire(z1) \ ) \ ); \ \ CAL3(Prme0(",")); \ \ CAL3(Prme2("{%+.^^^,%+.^^^}" \ ,Reelle(z2) \ ,Imaginaire(z2) \ ) \ ); \ \ CAL3(Prme0("} ")); \ \ CAL3(Prme1(" R=%+.^^^" \ ,COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_4D_3D_R(Reelle(z1) \ ,Imaginaire(z1) \ ,Reelle(z2) \ ,Imaginaire(z2) \ ) \ ) \ ); \ \ CAL3(Prme0(" --> ")); \ \ CAL3(Prme2(" %s=%+.^^^\n" \ ,nom_de_la_coordonnee \ ,valeur_de_la_coordonnee \ ) \ ); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Procedure introduite le 20230317100815... */ BFonctionF DEFV(Local,DEFV(FonctionF,FFx_CalabiYau_1(u,v))) DEFV(Argument,DEFV(Float,u)); DEFV(Argument,DEFV(Float,v)); /* Definition des coordonnees parametriques. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(coordonnee_projetee_X,FLOT__UNDEF)); /* Coordonnee 'X' projetee introduite explicitement le 20230317095348... */ /*..............................................................................................................................*/ CALS(FCalabiYau_1(u,v)); /* Calcul, si besoin est, de {z1,z2}. */ EGAL(coordonnee_projetee_X ,COND(IL_FAUT(faire_une_projection_parallele) ,PROJECTION_PARALLELE_01_4D_3D_X(Reelle(z1) ,Imaginaire(z1) ,Reelle(z2) ,Imaginaire(z2) ) ,PROJECTION_PERSPECTIVE_01_4D_3D_X(Reelle(z1) ,Imaginaire(z1) ,Reelle(z2) ,Imaginaire(z2) ) ) ); /* Calcul de : */ /* */ /* F (u,v) = A R(Z ) + A I(Z ) + A R(Z ) + A I(Z ) */ /* x xR1 1 xI1 1 xR2 2 xI2 2 */ /* */ EDITION_EVENTUELLE_DES_PROJECTIONS("X",coordonnee_projetee_X); /* Introduit le 20230317100815... */ RETU(coordonnee_projetee_X); Eblock EFonctionF BFonctionF DEFV(Local,DEFV(FonctionF,FFy_CalabiYau_1(u,v))) DEFV(Argument,DEFV(Float,u)); DEFV(Argument,DEFV(Float,v)); /* Definition des coordonnees parametriques. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(coordonnee_projetee_Y,FLOT__UNDEF)); /* Coordonnee 'Y' projetee introduite explicitement le 20230317095348... */ /*..............................................................................................................................*/ CALS(FCalabiYau_1(u,v)); /* Calcul, si besoin est, de {z1,z2}. */ EGAL(coordonnee_projetee_Y ,COND(IL_FAUT(faire_une_projection_parallele) ,PROJECTION_PARALLELE_01_4D_3D_Y(Reelle(z1) ,Imaginaire(z1) ,Reelle(z2) ,Imaginaire(z2) ) ,PROJECTION_PERSPECTIVE_01_4D_3D_Y(Reelle(z1) ,Imaginaire(z1) ,Reelle(z2) ,Imaginaire(z2) ) ) ); /* Calcul de : */ /* */ /* F (u,v) = A R(Z ) + A I(Z ) + A R(Z ) + A I(Z ) */ /* y yR1 1 yI1 1 yR2 2 yI2 2 */ /* */ EDITION_EVENTUELLE_DES_PROJECTIONS("Y",coordonnee_projetee_Y); /* Introduit le 20230317100815... */ RETU(coordonnee_projetee_Y); Eblock EFonctionF BFonctionF DEFV(Local,DEFV(FonctionF,FFz_CalabiYau_1(u,v))) DEFV(Argument,DEFV(Float,u)); DEFV(Argument,DEFV(Float,v)); /* Definition des coordonnees parametriques. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(coordonnee_projetee_Z,FLOT__UNDEF)); /* Coordonnee 'Z' projetee introduite explicitement le 20230317095348... */ /*..............................................................................................................................*/ CALS(FCalabiYau_1(u,v)); /* Calcul, si besoin est, de {z1,z2}. */ EGAL(coordonnee_projetee_Z ,COND(IL_FAUT(faire_une_projection_parallele) ,PROJECTION_PARALLELE_01_4D_3D_Z(Reelle(z1) ,Imaginaire(z1) ,Reelle(z2) ,Imaginaire(z2) ) ,PROJECTION_PERSPECTIVE_01_4D_3D_Z(Reelle(z1) ,Imaginaire(z1) ,Reelle(z2) ,Imaginaire(z2) ) ) ); /* Calcul de : */ /* */ /* F (u,v) = A R(Z ) + A I(Z ) + A R(Z ) + A I(Z ) */ /* z zR1 1 zI1 1 zR2 2 zI2 2 */ /* */ EDITION_EVENTUELLE_DES_PROJECTIONS("Z",coordonnee_projetee_Z); /* Introduit le 20230317100815... */ RETU(coordonnee_projetee_Z); Eblock EFonctionF #undef EDITION_EVENTUELLE_DES_PROJECTIONS #define Fx_CalabiYau_1(u,v) \ FFx_CalabiYau_1(u,v) \ /* Definition de la fonction F (u,v). */ \ /* x */ #define Fy_CalabiYau_1(u,v) \ FFy_CalabiYau_1(u,v) \ /* Definition de la fonction F (u,v). */ \ /* y */ #define Fz_CalabiYau_1(u,v) \ FFz_CalabiYau_1(u,v) \ /* Definition de la fonction F (u,v). */ \ /* z */ __________popdef(%%D%%initialiser_les_coordonnees_u_v%%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 */ /* 20040501121852). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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_CalabiYau_1 \ Bblock \ BLOC(VIDE;); \ Eblock /* Initialisations specifiques a cette surface destinees a permettre la reinjection des */ /* trois pseudo-projections {Projection_de_Fx,Projection_de_Fy,Projection_de_Fz} dans */ /* 'v $xrs/project2D.11$K' (introduit le 20050203092240)... */