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