/*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S G E N E R A L E S D E V I S U A L I S A T I O N : */ /* */ /* */ /* Author of '$xrs/surfaces.14$I' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 19990120132005). */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.1D.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S D I F F E R E N T S E S P A C E S E T D E L ' E F F E T D E B R U M E : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.13.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A I D E A U C A D R A G E D E S I M A G E S : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.1C.I" DONNEES_DE_RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES /* Definition des extrema des coordonnees et des derivees. On notera bien l'absence de */ /* point-virgule apres 'DONNEES_DE_RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES'. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E N E R A T I O N D E S I M A G E S : */ /* */ /*************************************************************************************************************************************/ #include xrv/champs_5.14.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S G E N E R A L E S R E L A T I V E S A L A V I S U A L I S A T I O N : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.14.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E C H A N T I L L O N N A G E D E L A S U R F A C E : */ /* */ /* */ /* Definition : */ /* */ /* Le 20021008094407 et le 20021009095952 */ /* a ete introduit un dispositif permettant */ /* de visualiser le maillage suivant les */ /* paralleles et les meridiens de la surface. */ /* Notons (suivant 'v $xrs/surfaces.13$I PROCESS_ARGUMENTS_DE_DEFINITION_DES_COORDONNEES_CURVILIGNES') : */ /* */ /* pu = pas_de_u */ /* eu = echantillonnage_de_u */ /* dpu = diviseur_du_pas_de_u */ /* */ /* pv = pas_de_v */ /* ev = echantillonnage_de_v */ /* dpv = diviseur_du_pas_de_v */ /* */ /* */ /* Les pas effectifs en 'u' (latitude) et 'v' (longitude) sont donc : */ /* */ /* pu/dpu */ /* pv/dpv */ /* */ /* respectivement. Les meridiens seront espaces */ /* de 'ev' points et les paralleles de 'eu' points. */ /* Ainsi, par exemple si : */ /* */ /* eu == dpu */ /* ev == dpv */ /* */ /* les meridiens et les paralleles seront espaces */ /* de 'pv' et 'pu' respectivement. Mais, en general, */ /* {eu,ev} et {dpu,dpv} ne seront pas "correles"... */ /* */ /* */ /* La surface va alors etre visualisee de */ /* la facon suivante : */ /* */ /* */ /* 'ev' points */ /* <-------------------> */ /* */ /* pv/dpv */ /* <----> */ /* */ /* . . . . * . . . . * . . . . * . . */ /* | | | */ /* | u == constante | | */ /* *----*----*----*----*----*----*----*----*----*----*----*----*----*----*----*----* */ /* /|\ | ("paralleles") | v | " */ /* | | | = | m */ /* | . . . . * . . . . * . . . . c * e . . */ /* 'eu' | /|\ | | o | r */ /* | pu/dpu | | | n | i */ /* points | \|/. . . . * . . . . * . . . . s * d . . */ /* | | | t | i */ /* | | | a | e */ /* \|/ . . . . * . . . . * . . . . n * n . . */ /* | | t | s */ /* | | e | " */ /* *----*----*----*----*----*----*----*----*----*----*----*----*----*----*----*----* */ /* | | | */ /* | | | */ /* . . . . * . . . . * . . . . * . . */ /* */ /* */ /* ou les caracteres "*" materialisent les */ /* points reellement visualises de la surface. */ /* Les caracteres "-" et "|" ne sont la que pour */ /* materialiser les paralleles et les meridiens */ /* respectivement, alors que les caracteres "." */ /* montrent l'echantillonnage effectif de la */ /* surface. */ /* */ /* */ /* Le 20041112104457 on notera donc bien (car */ /* il apparait que cela n'etait pas tres clair) */ /* que : */ /* */ /* echantillonnage horizontal : pv/dpv */ /* echantillonnage vertical : pu/dpu */ /* */ /* meridiens espaces de : ev.(pv/dpv) */ /* paralleles espaces de : eu.(pu/dpu) */ /* */ /* Cela signifie que si, par exemple, seuls {dpu,dpv} */ /* sont modifies (et augmentes), les pas {pu/dpu,pv/dpv} */ /* sont reduits et donc les meridiens et les paralleles */ /* sont rapproches. Pour les eloigner, il faudra modifier */ /* (augmenter dans l'exemple precedent) {eu,ev} comme */ /* l'ont ete {dpu,dpv} (dans le meme rapport...). */ /* */ /* */ /* Ainsi, par exemple : */ /* */ /* pu=1 dpu=1024 eu=64 */ /* pv=1 dpv=1024 ev=64 */ /* */ /* fera dans l'expace {u,v} un quadrillage de 16x16 */ /* (16=1024/64) carres dont les cotes mesurent 64 points. */ /* */ /* D'une maniere generale, on aura interet a choisir : */ /* */ /* p?=1 dp?=NCxTC e?=TC */ /* */ /* ou 'TC' designe la taille des cotes en nombre de points */ /* et 'NC' designe le nombre de carres suivant la direction */ /* horizontale et/ou verticale... */ /* */ /* */ /* Je rappelle le 20191015170625 qu'une nouvelle */ /* simplification a ete introduite le 20160414104726 */ /* dans 'v $xrs/surfaces.13$I 20160414104726'. Alors, */ /* il suffit de definir dans cet ordre (en effet, */ /* "faciliter_parametrage_u_v=VRAI" doit apparaitre */ /* apres la definition du parametrage de 'u' et de */ /* 'v' afin de declencher le calcul des parametres */ /* effectifs...) : */ /* */ /* nombre_inter_paralleles=... (coordonnee 'u') */ /* nombre_points_entre_deux_paralleles=... (coordonnee 'u') */ /* */ /* nombre_inter_meridiens=... (coordonnee 'v') */ /* nombre_points_entre_deux_meridiens=... (coordonnee 'v') */ /* */ /* faciliter_parametrage_u_v=VRAI */ /* */ /* pour parametrer plus facilement l'espace {u,v}... */ /* */ /* */ /*************************************************************************************************************************************/ DEFV(Logical,INIT(c_est_le_calcul_de__cx__cy__cz,LUNDEF)); DEFV(Logical,INIT(c_est_le_calcul_de__differentielle_x__differentielle_y__differentielle_z,LUNDEF)); DEFV(Logical,INIT(c_est_le_calcul_de__dXdu__dYdu__dZdu,LUNDEF)); DEFV(Logical,INIT(c_est_le_calcul_de__dXdv__dYdv__dZdv,LUNDEF)); /* Indicateurs introduits le 20170308111116 afin d'eliminer des appels a certaines */ /* fonctions (par exemple dans 'v $xrs/referentiel3D.11$I c_est_le_calcul_de__cx__cy__cz'. */ #define MAJORATION_DU_MAXIMUM_DES_COORDONNEES_u_v_____COMPATIBILITE_20160414 \ FAUX DEFV(Local,DEFV(Logical,INIT(majoration_du_maximum_des_coordonnees_u_v_____compatibilite_20160414 ,MAJORATION_DU_MAXIMUM_DES_COORDONNEES_u_v_____COMPATIBILITE_20160414 ) ) ); #define EPSILON_DE_MAJORATION_DU_MAXIMUM_DES_COORDONNEES_u_v \ gEPSILON DEFV(Local,DEFV(Float,INIT(epsilon_de_majoration_du_maximum_des_coordonnees_u_v ,EPSILON_DE_MAJORATION_DU_MAXIMUM_DES_COORDONNEES_u_v ) ) ); /* Afin d'assurer la compatibilite avec les resultats obtenus anterieurement a la date */ /* du 20160414100813... */ /* */ /* Ceci a ete introduit a cette date apres avoir note que les 'v $xrs/surfaces.12$I FDoIn' */ /* n'atteignent pas toujours le maximum. Ainsi, par exemple : */ /* */ /* FDoIn(uv,-0.5,+0.5,0.050) ==> 'uv' atteint +0.5 */ /* */ /* alors que : */ /* */ /* FDoIn(uv,-0.5,+0.5,0.025) ==> 'uv' n'atteint que +0.475000 */ /* */ /* (voir a ce propos 'v $xtc/test_for_flottant.01$c'). */ /* */ /* L'espilon parametrable a ete introduit le 20160414144922... */ /* */ /* Au passage, faire : */ /* */ /* epsilon = 0 */ /* */ /* est une autre facon d'assurer la "compatibilite_20160414"... */ #ifndef MINIMUM_DE_U # define MINIMUM_DE_U \ FLOT__UNDEF \ /* Introduit le 20060824085027 a cause de 'v $xrq/diffract.21$K .include..xrs.surfaces.11.I' */ \ /* (de meme que 'v $xrq/f_propres.11$K' et 'v $xrq/synapse.11$K'...). */ #Aifndef MINIMUM_DE_U #Eifndef MINIMUM_DE_U #ifndef MAXIMUM_DE_U # define MAXIMUM_DE_U \ FLOT__UNDEF \ /* Introduit le 20060824085027 a cause de 'v $xrq/diffract.21$K .include..xrs.surfaces.11.I' */ \ /* (de meme que 'v $xrq/f_propres.11$K' et 'v $xrq/synapse.11$K'...). */ #Aifndef MAXIMUM_DE_U #Eifndef MAXIMUM_DE_U #ifndef PAS_DE_U # define PAS_DE_U \ FLOT__UNDEF \ /* Introduit le 20060824085027 a cause de 'v $xrq/diffract.21$K .include..xrs.surfaces.11.I' */ \ /* (de meme que 'v $xrq/f_propres.11$K' et 'v $xrq/synapse.11$K'...). */ #Aifndef PAS_DE_U #Eifndef PAS_DE_U #ifndef MINIMUM_DE_V # define MINIMUM_DE_V \ FLOT__UNDEF \ /* Introduit le 20060824085027 a cause de 'v $xrq/diffract.21$K .include..xrs.surfaces.11.I' */ \ /* (de meme que 'v $xrq/f_propres.11$K' et 'v $xrq/synapse.11$K'...). */ #Aifndef MINIMUM_DE_V #Eifndef MINIMUM_DE_V #ifndef MAXIMUM_DE_V # define MAXIMUM_DE_V \ FLOT__UNDEF \ /* Introduit le 20060824085027 a cause de 'v $xrq/diffract.21$K .include..xrs.surfaces.11.I' */ \ /* (de meme que 'v $xrq/f_propres.11$K' et 'v $xrq/synapse.11$K'...). */ #Aifndef MAXIMUM_DE_V #Eifndef MAXIMUM_DE_V #ifndef PAS_DE_V # define PAS_DE_V \ FLOT__UNDEF \ /* Introduit le 20060824085027 a cause de 'v $xrq/diffract.21$K .include..xrs.surfaces.11.I' */ \ /* (de meme que 'v $xrq/f_propres.11$K' et 'v $xrq/synapse.11$K'...). */ #Aifndef PAS_DE_V #Eifndef PAS_DE_V /* Le 20060818091921, a cause de l'introduction de la possibilite de tracer sur la */ /* surface une droite du plan {u,v}, les definitions des coordonnees {u,v} ont ete */ /* Le 20060818091921, a cause de l'introduction de la possibilite de tracer sur la */ /* surface une droite du plan {u,v}, les definitions des coordonnees {u,v} ont ete */ /* mises en commun alors qu'anterieurement elles etaient definies specifiquement pour */ /* chaque surface dans le fichier '$xrs/*.14$I' (par exemple 'v $xrs/tore.14$I'). Cela */ /* a permis de simplifier l'introduction des extrema de {u,v} definissant le domaine de */ /* definition d'une eventuelle droite dans le plan {u,v}... */ DEFV(Local,DEFV(Float,INIT(minimum_de_u,MINIMUM_DE_U))); DEFV(Local,DEFV(Float,INIT(minimum_de_u_du_domaine_d_une_droite_du_plan_uv,MINIMUM_DE_U))); DEFV(Local,DEFV(Float,INIT(maximum_de_u,MAXIMUM_DE_U))); DEFV(Local,DEFV(Float,INIT(maximum_de_u_du_domaine_d_une_droite_du_plan_uv,MAXIMUM_DE_U))); DEFV(Local,DEFV(Float,INIT(pas_de_u,PAS_DE_U))); DEFV(Local,DEFV(Float,INIT(d_u,d_FVARIABLES_DE_DERIVATION))); DEFV(Local,DEFV(Float,INIT(d_pas_de_u_de_differentiation,d_FVARIABLES_DE_DERIVATION))); /* Definition de la coordonnee parametrique 'u' de la surface (appelee aussi 'distance */ /* polaire' ou 'theta'). */ /* */ /* Le 20161202114030, 'd_pas_de_u_de_differentiation' a ete introduit a cause de */ /* 'v $xrs/huit.11$K VISUALISATION_DE_LA_SURFACE_AVEC_DIFFERENCES____' qui, bien que */ /* n'utilisant donc pas la derivation formelle pour visualiser la surface, fait malgre */ /* tout de la derivation formelle ('v $xrs/huit.11$I d#') dans la definition de la */ /* surface... */ DEFV(Local,DEFV(Float,INIT(minimum_de_v,MINIMUM_DE_V))); DEFV(Local,DEFV(Float,INIT(minimum_de_v_du_domaine_d_une_droite_du_plan_uv,MINIMUM_DE_V))); DEFV(Local,DEFV(Float,INIT(maximum_de_v,MAXIMUM_DE_V))); DEFV(Local,DEFV(Float,INIT(maximum_de_v_du_domaine_d_une_droite_du_plan_uv,MAXIMUM_DE_V))); DEFV(Local,DEFV(Float,INIT(pas_de_v,PAS_DE_V))); DEFV(Local,DEFV(Float,INIT(d_v,d_FVARIABLES_DE_DERIVATION))); DEFV(Local,DEFV(Float,INIT(d_pas_de_v_de_differentiation,d_FVARIABLES_DE_DERIVATION))); /* Definition de la coordonnee parametrique 'v' de la surface (appelee aussi 'longitude' */ /* ou 'phi'). */ /* */ /* Le 20161202114030, 'd_pas_de_v_de_differentiation' a ete introduit a cause de */ /* 'v $xrs/huit.11$K VISUALISATION_DE_LA_SURFACE_AVEC_DIFFERENCES____' qui, bien que */ /* n'utilisant donc pas la derivation formelle pour visualiser la surface, fait malgre */ /* tout de la derivation formelle ('v $xrs/huit.11$I d#') dans la definition de la */ /* surface... */ #define VISUALISER_LES_POINTS_DU_MAILLAGE_UV \ VRAI DEFV(Local,DEFV(Logical,INIT(visualiser_les_points_du_maillage_uv,VISUALISER_LES_POINTS_DU_MAILLAGE_UV))); /* Ceci fut introduit le 20060814185311 en complement de l'indicateur (introduit le */ /* 20060813110846) 'tracer_une_droite_du_plan_uv' afin de permettre de ne tracer que */ /* cette droite dans le plan {u,v}... */ #define LISTER_LES_COORDONNEES_u_v_DES_POINTS \ FAUX DEFV(Local,DEFV(Logical,INIT(lister_les_coordonnees_u_v_des_points,LISTER_LES_COORDONNEES_u_v_DES_POINTS))); /* Ceci fut introduit le 20060410111049 car, en effet, a de nombreux endroits on teste */ /* "^periode=" en sortie d'un programme de '$xrs' ('v $xiirv/$Fnota periode='). Il faut */ /* que l'edition de {u,v} soit facultative et inhibee par defaut, puisque {u,v} sont */ /* avant "periode=" ('v $xrs/surfaces.12$I LISTER_LA_LISTE_DES_COULEURS_DES_POINTS'). */ #define ECHANTILLONNAGE_DE_u_ET_DE_v \ UN DEFV(Local,DEFV(Int,INIT(echantillonnage_de_u,ECHANTILLONNAGE_DE_u_ET_DE_v))); DEFV(Local,DEFV(Int,INIT(echantillonnage_de_v,ECHANTILLONNAGE_DE_u_ET_DE_v))); /* Ce dispositif introduit le 20021008094407 permet d'echantillonner la surface ce qui */ /* permet donc de mieux materialiser les lignes {u=constante} et {v=constante}, ce que */ /* l'on peut appeler : */ /* */ /* u=constante : "paralleles", */ /* v=constante : "meridiens". */ /* */ /* Pour cela, il suffit par exemple de prendre un pas pour 'u' et 'v' qui soit 'N' fois plus */ /* petit qu'habituellement, puis de prendre comme echantillonnage en 'u' et 'v' la valeur */ /* 'N'. On notera qu'avec la valeur 'UN' par defaut, la compatibilite anterieure est */ /* assuree... */ #define TRANSLATION_DE_L_ECHANTILLONNAGE_DE_u_ET_DE_v \ ZERO DEFV(Local,DEFV(Int,INIT(translation_de_l_echantillonnage_de_u,TRANSLATION_DE_L_ECHANTILLONNAGE_DE_u_ET_DE_v))); DEFV(Local,DEFV(Int,INIT(translation_de_l_echantillonnage_de_v,TRANSLATION_DE_L_ECHANTILLONNAGE_DE_u_ET_DE_v))); /* Dispositif introduit le 20040330111844 qui permet, par sa variation (0, 1, 2,...) de */ /* faire "glisser" la grille d'echantillonnage sur la surface... */ #define DIVISEUR_DU_PAS_DE_u_ET_DE_v \ FU DEFV(Local,DEFV(Float,INIT(diviseur_du_pas_de_u,DIVISEUR_DU_PAS_DE_u_ET_DE_v))); DEFV(Local,DEFV(Float,INIT(diviseur_du_pas_de_v,DIVISEUR_DU_PAS_DE_u_ET_DE_v))); /* Ce dispositif introduit le 20021009095952 permet d'utiliser le dispositif precedent */ /* d'echantillonnage precedent et ce sans avoir a toucher aux pas des coordonnees {u,v}. */ /* Il suffira, par exemple, d'utiliser des diviseurs egaux aux echantillonnages... */ #define LE_PAS_DE_u_ET_DE_v_DE_DIFFERENTIATION_EST_HOMOTHETIQUE \ VRAI DEFV(Local,DEFV(Logical,INIT(le_pas_de_u_de_differentiation_est_homothetique ,LE_PAS_DE_u_ET_DE_v_DE_DIFFERENTIATION_EST_HOMOTHETIQUE ) ) ); DEFV(Local,DEFV(Logical,INIT(le_pas_de_v_de_differentiation_est_homothetique ,LE_PAS_DE_u_ET_DE_v_DE_DIFFERENTIATION_EST_HOMOTHETIQUE ) ) ); /* Ce dispositif introduit le 20041119145430 permet de faire que le pas de differentiation */ /* en {u,v} est homothetique ('VRAI'), c'est-a-dire qu'il est alors calcule a partir de */ /* {pas_de_u_effectif,pas_de_v_effectif} ou bien ('FAUX') a partir de {pas_de_u,pas_de_v}. */ #define DIVISEUR_DE_DIFFERENTIATION_DE_u_ET_DE_v \ FU DEFV(Local,DEFV(Float,INIT(diviseur_de_differentiation_de_u,DIVISEUR_DE_DIFFERENTIATION_DE_u_ET_DE_v))); DEFV(Local,DEFV(Float,INIT(diviseur_de_differentiation_de_v,DIVISEUR_DE_DIFFERENTIATION_DE_u_ET_DE_v))); /* Ce dispositif introduit le 20041107150057 ne sert que lorsque la differentiation */ /* est approchee (dans 'GENERATION_D_UNE_IMAGE_DE_LA_SURFACE_AVEC_DIFFERENCES____(...)'). */ #define ZERO_D_UNE_DROITE_DU_PLAN_UV \ FZERO #define TRACER_UNE_DROITE_DU_PLAN_UV \ FAUX DEFV(Local,DEFV(Logical,INIT(tracer_une_droite_du_plan_uv,TRACER_UNE_DROITE_DU_PLAN_UV))); /* Ce dispositif introduit le 20060813110846 permet de tracer sur la surface une droite */ /* definie dans le plan {u,v}. Voir a ce propos 'v $xrs/surfaces.12$I 20060813111731' qui */ /* donne de precieuses informations sur les contraintes a respecter entre les coefficients */ /* {A,B,C}, les pas de {u,v} et les extremas {Um,UM} et {Vm,VM}... */ #define TRACER_UNE_DROITE_DU_PLAN_UV_____COMPATIBILITE_20170130 \ FAUX DEFV(Local,DEFV(Logical,INIT(tracer_une_droite_du_plan_uv_____compatibilite_20170130 ,TRACER_UNE_DROITE_DU_PLAN_UV_____COMPATIBILITE_20170130 ) ) ); /* Introduit le 20170130143255 lors des experiences d'helices autour de 'v $xiirs/HELI.11'. */ #define COEFFICIENT_A_D_UNE_DROITE_DU_PLAN_UV \ NEUT(FU) #define COEFFICIENT_B_D_UNE_DROITE_DU_PLAN_UV \ NEGA(FU) #define COEFFICIENT_C_D_UNE_DROITE_DU_PLAN_UV \ FZERO #define COEFFICIENT_F_D_UNE_DROITE_DU_PLAN_UV \ FZERO #define COEFFICIENT_G_D_UNE_DROITE_DU_PLAN_UV \ FZERO #define COEFFICIENT_H_D_UNE_DROITE_DU_PLAN_UV \ FZERO #define EPSILON_DE_DEFINITION_D_UNE_DROITE_DU_PLAN_UV \ mgEPSILON DEFV(Local,DEFV(Float,INIT(coefficient_A_d_une_droite_du_plan_uv,COEFFICIENT_A_D_UNE_DROITE_DU_PLAN_UV))); DEFV(Local,DEFV(Float,INIT(coefficient_B_d_une_droite_du_plan_uv,COEFFICIENT_B_D_UNE_DROITE_DU_PLAN_UV))); DEFV(Local,DEFV(Float,INIT(coefficient_C_d_une_droite_du_plan_uv,COEFFICIENT_C_D_UNE_DROITE_DU_PLAN_UV))); DEFV(Local,DEFV(Float,INIT(coefficient_F_d_une_droite_du_plan_uv,COEFFICIENT_F_D_UNE_DROITE_DU_PLAN_UV))); DEFV(Local,DEFV(Float,INIT(coefficient_G_d_une_droite_du_plan_uv,COEFFICIENT_G_D_UNE_DROITE_DU_PLAN_UV))); DEFV(Local,DEFV(Float,INIT(coefficient_H_d_une_droite_du_plan_uv,COEFFICIENT_H_D_UNE_DROITE_DU_PLAN_UV))); DEFV(Local,DEFV(Float,INIT(epsilon_de_definition_d_une_droite_du_plan_uv,EPSILON_DE_DEFINITION_D_UNE_DROITE_DU_PLAN_UV))); /* Definition d'une droite dans le plan {u,v} (introduite le 20060813110846) sous la */ /* forme : */ /* */ /* A.u + B.v + C = 0 */ /* */ /* a "epsilon pres" ('v $xrs/surfaces.12$I 20060813111731'). */ /* */ /* Le 20170124105849, cette droite a ete "generalisee" de la facon suivante : */ /* */ /* 2 2 */ /* A.u + B.v + C + F.u + G.u.v + H.v = 0 */ /* */ /* avec, par defaut, une "vraie" droite (F=G=H=0). */ DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_imageA_Droite_uv),NOM_PIPE_Local))); /* Nom de l'image donnant eventuellement une initialisation arbitraire de la "droite" */ /* dans le plan {u,v} (qui n'est donc plus necessairement une droite... */ #define VISUALISER_LA_DROITE_TRACEE_DANS_LE_PLAN_UV \ FAUX DEFV(Local,DEFV(Logical,INIT(visualiser_la_droite_tracee_dans_le_plan_uv,VISUALISER_LA_DROITE_TRACEE_DANS_LE_PLAN_UV))); DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_imageR_Droite_uv),NOM_PIPE_Local))); /* Nom de l'image de la droite dans le plan {u,v} s'il faut la visualiser. Ceci fut */ /* introduit le 20060817180327. */ /* */ /* ATTENTION : ceci ne peut se faire que si les trois conditions : */ /* */ /* IL_FAUT(generer_les_trois_projections_de_la_surface) */ /* */ /* (a cause de 'v $xrs/surfaces.12$I ._de_projection') et : */ /* */ /* IL_FAUT(visualiser_les_points_du_maillage_uv) */ /* */ /* et enfin : */ /* */ /* IL_FAUT(forcer_les_extrema_de_u_v_lors_de_la_projection_de_la_surface) */ /* */ /* sont reunies. */ /* */ /* Le 20170210125603, 'nom_imageDroite_uv' a ete remplace par 'nom_imageR_Droite_uv' suite */ /* a l'introduction de 'nom_imageA_Droite_uv' a cette date... */ #define FACTEUR_DE_LA_TRANSLATION_DE_u_v_EFFECTIFS_LORS_D_UN_LISTER \ FZERO DEFV(Local,DEFV(Float,INIT(facteur_de_la_translation_de_u_effectif_lors_d_un_lister ,FACTEUR_DE_LA_TRANSLATION_DE_u_v_EFFECTIFS_LORS_D_UN_LISTER ) ) ); DEFV(Local,DEFV(Float,INIT(facteur_de_la_translation_de_v_effectif_lors_d_un_lister ,FACTEUR_DE_LA_TRANSLATION_DE_u_v_EFFECTIFS_LORS_D_UN_LISTER ) ) ); /* Introduit le 20091102091133 pour des programmes tel 'v $xrs/CalabiYau.12$K' dans lequel */ /* un meme couple {u,v} reapparaissait plusieurs fois rendant le travail de la commande */ /* 'v $xrs/SurfParti.01$Z' impossible. La valeur par defaut garantit la compatibilite */ /* anterieure... */ /* */ /* Je note le 20091113181227 grace a 'v $xiirs/CAYA.A1.5x5.6' qu'il semble que l'on passe */ /* d'un patch a son voisin par une rotation de pi/2. Donc plus que de translater les */ /* coordonnees {u,v}, il conviendrait de les permuter, mais malheureusement, elles ne */ /* sont pas definies dans le meme segment : */ /* */ /* u E [0 , p/2] */ /* v E [-1 , +1]. */ /* */ /* d'ou un gros probleme, mais de toutes facons, est-ce aussi simple ? */ #define FACILITER_LE_PARAMETRAGE_DE_u_v \ FAUX #define NOMBRE_D_INTERS_u \ NEGA(UN) #define NOMBRE_D_INTERS_v \ NEGA(UN) #define NOMBRE_DE_POINTS_DANS_UN_INTER_u \ NEGA(UN) #define NOMBRE_DE_POINTS_DANS_UN_INTER_v \ NEGA(UN) DEFV(Local,DEFV(Logical,INIT(faciliter_le_parametrage_de_u_v,FACILITER_LE_PARAMETRAGE_DE_u_v))); DEFV(Local,DEFV(Int,INIT(nombre_d_inters_u,NOMBRE_D_INTERS_u))); DEFV(Local,DEFV(Int,INIT(nombre_de_points_dans_un_inter_u,NOMBRE_DE_POINTS_DANS_UN_INTER_u))); DEFV(Local,DEFV(Int,INIT(nombre_d_inters_v,NOMBRE_D_INTERS_v))); DEFV(Local,DEFV(Int,INIT(nombre_de_points_dans_un_inter_v,NOMBRE_DE_POINTS_DANS_UN_INTER_v))); /* Ceci a ete introduit le 20160414104726 afin de faciliter la definition du maillage */ /* en {u,v} des surfaces. */ /* */ /* Les valeurs par defaut 'UN' ont ete remplaces par 'NEGA(UN)' (une valeur impossible */ /* a priori) le 20220611094319 afin de forcer leur definition lors de l'appel des '$X's */ /* correspondants... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* U T I L I S A T I O N E V E N T U E L L E D U " GooF ' : */ /* */ /*************************************************************************************************************************************/ #ifdef PRAGMA_CPP_____AUTORISER_LE_GooF # define UTILISER_L_ARITHMETIQUE_ETENDUE_ET_NON_BASIQUE \ FAUX DEFV(Local,DEFV(Logical,INIT(Fx_Fy_Fz_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ,UTILISER_L_ARITHMETIQUE_ETENDUE_ET_NON_BASIQUE ) ) ); DEFV(Local,DEFV(Logical,INIT(dFx_dFy_dFz_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ,UTILISER_L_ARITHMETIQUE_ETENDUE_ET_NON_BASIQUE ) ) ); /* Indicateurs introduits le 20080126082946 et mis dans ce fichier le 20080126100708, la */ /* situation anterieure dans 'v $xrs/surfaces.12$I USe_GooF______CONDITIONNEL' n'etant pas */ /* compatible evidemment avec leurs references dans 'v $xrs/surfaces.13$I 20080126083600'... */ #Aifdef PRAGMA_CPP_____AUTORISER_LE_GooF #Eifdef PRAGMA_CPP_____AUTORISER_LE_GooF /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I F F E R E N T I A T I O N P A R D I F F E R E N C E S D E L A S U R F A C E : */ /* */ /*************************************************************************************************************************************/ #define CALCUL_DES_DIFFERENTIELLES_AVEC_u_v_____COMPATIBILITE_2009110217 \ FAUX DEFV(Local,DEFV(Logical,INIT(calcul_des_differentielles_avec_u_v_____compatibilite_2009110217 ,CALCUL_DES_DIFFERENTIELLES_AVEC_u_v_____COMPATIBILITE_2009110217 ) ) ); /* Afin d'assurer la compatibilite avec les resultats obtenus anterieurement a la date */ /* du 20091102174157... */ #define PONDERATION_DE__u_____DANS_dx \ FZERO #define PONDERATION_DE__v_____DANS_dx \ FZERO DEFV(Local,DEFV(Float,INIT(ponderation_de__u_____dans_dx,PONDERATION_DE__u_____DANS_dx))); DEFV(Local,DEFV(Float,INIT(ponderation_de__v_____dans_dx,PONDERATION_DE__v_____DANS_dx))); /* Introduit le 20090723220632... */ #define PONDERATION_DE_Fx_____DANS_dx \ FZERO #define PONDERATION_DE_Fx_u___DANS_dx \ FZERO #define PONDERATION_DE_Fx___v_DANS_dx \ FZERO #define PONDERATION_DE_Fx_u_v_DANS_dx \ FU DEFV(Local,DEFV(Float,INIT(ponderation_de_Fx_____dans_dx,PONDERATION_DE_Fx_____DANS_dx))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fx_u___dans_dx,PONDERATION_DE_Fx_u___DANS_dx))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fx___v_dans_dx,PONDERATION_DE_Fx___v_DANS_dx))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fx_u_v_dans_dx,PONDERATION_DE_Fx_u_v_DANS_dx))); #define PONDERATION_DE_Fy_____DANS_dx \ FZERO #define PONDERATION_DE_Fy_u___DANS_dx \ FZERO #define PONDERATION_DE_Fy___v_DANS_dx \ FZERO #define PONDERATION_DE_Fy_u_v_DANS_dx \ FZERO DEFV(Local,DEFV(Float,INIT(ponderation_de_Fy_____dans_dx,PONDERATION_DE_Fy_____DANS_dx))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fy_u___dans_dx,PONDERATION_DE_Fy_u___DANS_dx))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fy___v_dans_dx,PONDERATION_DE_Fy___v_DANS_dx))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fy_u_v_dans_dx,PONDERATION_DE_Fy_u_v_DANS_dx))); #define PONDERATION_DE_Fz_____DANS_dx \ FZERO #define PONDERATION_DE_Fz_u___DANS_dx \ FZERO #define PONDERATION_DE_Fz___v_DANS_dx \ FZERO #define PONDERATION_DE_Fz_u_v_DANS_dx \ FZERO DEFV(Local,DEFV(Float,INIT(ponderation_de_Fz_____dans_dx,PONDERATION_DE_Fz_____DANS_dx))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fz_u___dans_dx,PONDERATION_DE_Fz_u___DANS_dx))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fz___v_dans_dx,PONDERATION_DE_Fz___v_DANS_dx))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fz_u_v_dans_dx,PONDERATION_DE_Fz_u_v_DANS_dx))); #define PONDERATION_DE__u_____DANS_dy \ FZERO #define PONDERATION_DE__v_____DANS_dy \ FZERO DEFV(Local,DEFV(Float,INIT(ponderation_de__u_____dans_dy,PONDERATION_DE__u_____DANS_dy))); DEFV(Local,DEFV(Float,INIT(ponderation_de__v_____dans_dy,PONDERATION_DE__v_____DANS_dy))); /* Introduit le 20090723220632... */ #define PONDERATION_DE_Fx_____DANS_dy \ FZERO #define PONDERATION_DE_Fx_u___DANS_dy \ FZERO #define PONDERATION_DE_Fx___v_DANS_dy \ FZERO #define PONDERATION_DE_Fx_u_v_DANS_dy \ FZERO DEFV(Local,DEFV(Float,INIT(ponderation_de_Fx_____dans_dy,PONDERATION_DE_Fx_____DANS_dy))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fx_u___dans_dy,PONDERATION_DE_Fx_u___DANS_dy))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fx___v_dans_dy,PONDERATION_DE_Fx___v_DANS_dy))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fx_u_v_dans_dy,PONDERATION_DE_Fx_u_v_DANS_dy))); #define PONDERATION_DE_Fy_____DANS_dy \ FZERO #define PONDERATION_DE_Fy_u___DANS_dy \ FZERO #define PONDERATION_DE_Fy___v_DANS_dy \ FZERO #define PONDERATION_DE_Fy_u_v_DANS_dy \ FU DEFV(Local,DEFV(Float,INIT(ponderation_de_Fy_____dans_dy,PONDERATION_DE_Fy_____DANS_dy))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fy_u___dans_dy,PONDERATION_DE_Fy_u___DANS_dy))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fy___v_dans_dy,PONDERATION_DE_Fy___v_DANS_dy))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fy_u_v_dans_dy,PONDERATION_DE_Fy_u_v_DANS_dy))); #define PONDERATION_DE_Fz_____DANS_dy \ FZERO #define PONDERATION_DE_Fz_u___DANS_dy \ FZERO #define PONDERATION_DE_Fz___v_DANS_dy \ FZERO #define PONDERATION_DE_Fz_u_v_DANS_dy \ FZERO DEFV(Local,DEFV(Float,INIT(ponderation_de_Fz_____dans_dy,PONDERATION_DE_Fz_____DANS_dy))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fz_u___dans_dy,PONDERATION_DE_Fz_u___DANS_dy))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fz___v_dans_dy,PONDERATION_DE_Fz___v_DANS_dy))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fz_u_v_dans_dy,PONDERATION_DE_Fz_u_v_DANS_dy))); #define PONDERATION_DE__u_____DANS_dz \ FZERO #define PONDERATION_DE__v_____DANS_dz \ FZERO DEFV(Local,DEFV(Float,INIT(ponderation_de__u_____dans_dz,PONDERATION_DE__u_____DANS_dz))); DEFV(Local,DEFV(Float,INIT(ponderation_de__v_____dans_dz,PONDERATION_DE__v_____DANS_dz))); /* Introduit le 20090723220632... */ #define PONDERATION_DE_Fx_____DANS_dz \ FZERO #define PONDERATION_DE_Fx_u___DANS_dz \ FZERO #define PONDERATION_DE_Fx___v_DANS_dz \ FZERO #define PONDERATION_DE_Fx_u_v_DANS_dz \ FZERO DEFV(Local,DEFV(Float,INIT(ponderation_de_Fx_____dans_dz,PONDERATION_DE_Fx_____DANS_dz))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fx_u___dans_dz,PONDERATION_DE_Fx_u___DANS_dz))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fx___v_dans_dz,PONDERATION_DE_Fx___v_DANS_dz))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fx_u_v_dans_dz,PONDERATION_DE_Fx_u_v_DANS_dz))); #define PONDERATION_DE_Fy_____DANS_dz \ FZERO #define PONDERATION_DE_Fy_u___DANS_dz \ FZERO #define PONDERATION_DE_Fy___v_DANS_dz \ FZERO #define PONDERATION_DE_Fy_u_v_DANS_dz \ FZERO DEFV(Local,DEFV(Float,INIT(ponderation_de_Fy_____dans_dz,PONDERATION_DE_Fy_____DANS_dz))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fy_u___dans_dz,PONDERATION_DE_Fy_u___DANS_dz))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fy___v_dans_dz,PONDERATION_DE_Fy___v_DANS_dz))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fy_u_v_dans_dz,PONDERATION_DE_Fy_u_v_DANS_dz))); #define PONDERATION_DE_Fz_____DANS_dz \ FZERO #define PONDERATION_DE_Fz_u___DANS_dz \ FZERO #define PONDERATION_DE_Fz___v_DANS_dz \ FZERO #define PONDERATION_DE_Fz_u_v_DANS_dz \ FU DEFV(Local,DEFV(Float,INIT(ponderation_de_Fz_____dans_dz,PONDERATION_DE_Fz_____DANS_dz))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fz_u___dans_dz,PONDERATION_DE_Fz_u___DANS_dz))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fz___v_dans_dz,PONDERATION_DE_Fz___v_DANS_dz))); DEFV(Local,DEFV(Float,INIT(ponderation_de_Fz_u_v_dans_dz,PONDERATION_DE_Fz_u_v_DANS_dz))); /* Ce dispositif introduit le 20041118143227 permet d'utiliser les differentes derivees */ /* partielles obtenues par differences pour colorier la surface... */ /* */ /* Le 20090606171802 furent introduites les ponderations relatives a {cx,cy,cz} (baptisees */ /* 'ponderation_de_F?_____dans_d?') nulles par defaut pour des raisons de compatibilite */ /* anterieure... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P R O J E C T I O N D E L A S U R F A C E : */ /* */ /*************************************************************************************************************************************/ #include xci/acces.11.I" /* Introduit le 20050120120558 pour definir 'CONSERVER_LE_ZERO'... */ #define GENERER_LES_TROIS_PROJECTIONS_DE_LA_SURFACE \ FAUX DEFV(Local,DEFV(Logical,INIT(generer_les_trois_projections_de_la_surface,GENERER_LES_TROIS_PROJECTIONS_DE_LA_SURFACE))); /* Indique si l'on visualise la surface ('FAUX') ou bien si l'on genere ses projections */ /* ('VRAI'). Ceci a ete introduit le 20041126093618 afin d'etre compatible et utilisable */ /* par 'v $xrs/project2D.11$K P.R.O.J.E.C.T.O.R'. */ /* */ /* On notera le 20050202175042 que lorsque les projections sont generees dans le but de */ /* reinjecter les trois champs "standard=FAUX" dans 'v $xrs/project2D.11$K', par exemple, */ /* dans le cas de 'v $xrs/sphere.11$K', il faudra utiliser : */ /* */ /* Mu=6.283185307179586 ($dpi) */ /* PARAMETRE_R=1 */ /* */ /* si l'on souhaite que n'apparaissent pas des artefacts. Dans 'v $xrs/project2D.11$K' il */ /* faudra alors utiliser : */ /* */ /* mu=0.0 Mu=0.5 */ /* mv=0.0 Mv=1.0 */ /* */ /* afin de respecter les symetries... */ #define FAIRE_LES_INITIALISATIONS_SPECIFIQUES_DE_PROJECTION_DE_LA_SURFACE \ VRAI DEFV(Local,DEFV(Logical,INIT(faire_les_initialisations_specifiques_de_projection_de_la_surface ,FAIRE_LES_INITIALISATIONS_SPECIFIQUES_DE_PROJECTION_DE_LA_SURFACE ) ) ); /* Indique s'il faut executer 'INITIALISATIONS_SPECIFIQUES_DE_PROJECTION_DE_LA_SURFACE(...)' */ /* ('VRAI') ou pas ('FAUX') ? Ceci fut introduit le 20060502142115... */ #define FORCER_LES_EXTREMA_DE_u_v_LORS_DE_LA_PROJECTION_DE_LA_SURFACE \ VRAI DEFV(Local,DEFV(Logical,INIT(forcer_les_extrema_de_u_v_lors_de_la_projection_de_la_surface ,FORCER_LES_EXTREMA_DE_u_v_LORS_DE_LA_PROJECTION_DE_LA_SURFACE ) ) ); /* Indique si l'on force les extrema de {u,v} via une procedure 'v $xrs/surfaces.12$I Pxyz' */ /* ('VRAI') ou bien si l'on utilise ceux qui ont ete donnes en parametres ('FAUX'). Ceci fut */ /* introduit le 20060306160444. La valeur par defaut garantit la compatibilite anterieure... */ #TestADef LES_TROIS_PROJECTIONS_DE_LA_SURFACE_DOIVENT_ETRE_TRANSFORMEES \ FAUX DEFV(Local,DEFV(Logical,INIT(les_trois_projections_de_la_surface_doivent_etre_transformees ,LES_TROIS_PROJECTIONS_DE_LA_SURFACE_DOIVENT_ETRE_TRANSFORMEES ) ) ); /* Si 'IL_FAUT(generer_les_trois_projections_de_la_surface)', ces projections doivent-elles */ /* etre transformees avant toute autre chose via les 'ROTATION_O?'s et 'TRANSLATION_O?'s ? */ /* Cette possibilite a ete introduite le 20090606104024. */ #TestADef LES_TROIS_PROJECTIONS_DE_LA_SURFACE_SONT_EN_FAIT_CELLES_DE_LA_TEXTURE \ FAUX DEFV(Local,DEFV(Logical,INIT(les_trois_projections_de_la_surface_sont_en_fait_celles_de_la_texture ,LES_TROIS_PROJECTIONS_DE_LA_SURFACE_SONT_EN_FAIT_CELLES_DE_LA_TEXTURE ) ) ); /* Si 'IL_FAUT(generer_les_trois_projections_de_la_surface)', ces projections sont-elles */ /* {cx,cy,cz} ('FAUX') ou bien la texture ('VRAI') ? Ceci fut introduit le 20050713143505. */ /* Le 'define' est devenu un 'TestADef' le 20050714093144 et ce afin d'etre utilise dans */ /* 'v $xrs/project2D.13$I LES_TROIS_PROJECTIONS_DE_LA_SURFACE_SONT_EN_FAIT_CELLES_DE_LA_T.'. */ #define LES_TROIS_PROJECTIONS_DE_LA_TEXTURE_SONT_MAPPEES_SUR_LA_SURFACE \ VRAI DEFV(Local,DEFV(Logical,INIT(les_trois_projections_de_la_texture_sont_mappees_sur_la_surface ,LES_TROIS_PROJECTIONS_DE_LA_TEXTURE_SONT_MAPPEES_SUR_LA_SURFACE ) ) ); /* Si 'EST_VRAI(les_trois_projections_de_la_surface_sont_en_fait_celles_de_la_texture)', */ /* doit-on montrer simplement la texture utilisee ('FAUX') ou bien montrer comment elle */ /* est distordue lors de son mapping. Ceci fut introduit le 20050820082028... */ #define TEXTURES_PERIODISER \ VRAI DEFV(Local,DEFV(Logical,INIT(textures_periodiser_X,TEXTURES_PERIODISER))); DEFV(Local,DEFV(Logical,INIT(textures_periodiser_Y,TEXTURES_PERIODISER))); #define TEXTURES_SYMETRISER \ FAUX DEFV(Local,DEFV(Logical,INIT(textures_symetriser_X,TEXTURES_SYMETRISER))); DEFV(Local,DEFV(Logical,INIT(textures_symetriser_Y,TEXTURES_SYMETRISER))); #define TEXTURES_PROLONGER \ FAUX DEFV(Local,DEFV(Logical,INIT(textures_prolonger_X,TEXTURES_PROLONGER))); DEFV(Local,DEFV(Logical,INIT(textures_prolonger_Y,TEXTURES_PROLONGER))); #define TEXTURES_NIVEAU_HORS_IMAGE \ FLOT__NOIR DEFV(Local,DEFV(genere_Float,INIT(textures_niveau_hors_image,TEXTURES_NIVEAU_HORS_IMAGE))); /* Si 'EST_VRAI(les_trois_projections_de_la_surface_sont_en_fait_celles_de_la_texture)' */ /* donnent les conditions d'acces aux trois textures (introduit le 20050713171550). */ /* */ /* La possibilite de symetriser a ete introduite le 20050721100553... */ /* */ /* Jusqu'au 20060117133441, 'textures_niveau_hors_image' etait un 'genere_p' par erreur... */ #define LES_TROIS_PROJECTIONS_DE_LA_SURFACE_SONT_DES_IMAGES_STANDARDS \ FAUX DEFV(Local,DEFV(Logical,INIT(les_trois_projections_de_la_surface_sont_des_images_standards ,LES_TROIS_PROJECTIONS_DE_LA_SURFACE_SONT_DES_IMAGES_STANDARDS ) ) ); /* Indique si 'IL_FAUT(generer_les_trois_projections_de_la_surface)' si les trois */ /* sont des images standards ('VRAI') ou non ('FAUX'). Ceci a ete introduit le */ /* 20050115112502. */ #define CONSERVER_LE_ZERO_DES_TROIS_PROJECTIONS_DE_LA_SURFACE \ CONSERVER_LE_ZERO DEFV(Local,DEFV(Logical,INIT(conserver_le_zero_des_trois_projections_de_la_surface ,CONSERVER_LE_ZERO_DES_TROIS_PROJECTIONS_DE_LA_SURFACE ) ) ); /* Indique si 'EST_VRAI(les_trois_projections_de_la_surface_sont_des_images_standards)' si */ /* le zero doit etre conserve ('VRAI') ou pas ('FAUX') ? La valeur par defaut est choisie */ /* de facon a etre compatible avec celle de 'v $xci/acces.01$I CONSERVER_LE_ZERO'... */ DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_imageProjectionFx),NOM_PIPE_Local))); DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_imageProjectionFy),NOM_PIPE_Local))); DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_imageProjectionFz),NOM_PIPE_Local))); /* Nom des trois projections. */ DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_imageProjection),NOM_PIPE_Local))); /* Racine (eventuelle) des trois projections (introduite le 20120531144849). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N D E S C O R D O N N E E S ' u ' E T ' v ' : */ /* */ /*************************************************************************************************************************************/ #define TRANSFORMER_u_v \ FAUX DEFV(Local,DEFV(Logical,INIT(transformer_u_v,TRANSFORMER_u_v))); #define TROUER_u_v \ FAUX DEFV(Local,DEFV(Logical,INIT(trouer_u_v,TROUER_u_v))); /* Afin de pouvoir transformer {u,v} de facon quelconque (introduit le 20060117132226)... */ /* Le "trouage" a ete desolidarise de la transformation le 20060530151539... */ /* */ /* On notera le 20060117173116 une consequence de cela au sujet de l'intersection des */ /* paralleles et des meridiens. Lorsque 'IL_NE_FAUT_PAS(transformer_u_v)', les mailles */ /* ainsi formees sont regulieres et leur espacement varie d'une facon "douce". Dans le cas */ /* contraire, les variations de {u,v} effectifs n'etant plus necessairement regulieres, les */ /* mailles peuvent alors evoluer de facon erratique... */ /* */ /* Le 20060117174943, je note que les resultats de 'v $xrs/sphere.21$K' (utilisee avec */ /* "PARAMETRE_T=1") peuvent etre obtenus avec 'v $xrs/sphere.11$K' a condition d'activer */ /* cette nouvelle option via (d'ou le "C=1" pour le champ '$xTV/CHAMP.1.v') : */ /* */ /* UV_transformer=VRAI */ /* */ /* et en lui communiquant les champs {u,v} calcules de la facon suivante : */ /* */ /* */ /* :Debut_listG: */ /* */ /* $Z $xci/lineaire$X \ */ /* $Z A=1 B=0 C=1 \ */ /* $Z standard=FAUX \ */ /* $Z $formatI | \ */ /* $Z $xci/normalise.01$X \ */ /* $Z origine=0 extremite=$pi \ */ /* $Z R=$xTV/CHAMP.u \ */ /* $Z $formatI */ /* */ /* $Z $xci/lineaire$X \ */ /* $Z A=0 B=1 C=1 \ */ /* $Z standard=FAUX \ */ /* $Z $formatI | \ */ /* $Z $xci/normalise.01$X \ */ /* $Z origine=0 extremite=$dpi \ */ /* $Z R=$xTV/CHAMP.1.v \ */ /* $Z $formatI */ /* */ /* $Z $xci/sinus$X \ */ /* $Z cx=1 cy=0 \ */ /* $Z phase=$pis2 \ */ /* $Z carre_X_CHAMP_3D=FAUX carre_Y_CHAMP_3D=FAUX \ */ /* $Z standard=FAUX \ */ /* $Z $formatI | \ */ /* $Z $xci/normalise.01$X \ */ /* $Z origine=-1 extremite=+1 \ */ /* $Z R=$xTV/CHAMP.2.v \ */ /* $Z $formatI */ /* */ /* $Z $xci/somme_02$X \ */ /* $Z standard=FAUX \ */ /* $Z A1=$xTV/CHAMP.1.v \ */ /* $Z A2=$xTV/CHAMP.2.v \ */ /* $Z R=$xTV/CHAMP.v \ */ /* $Z $formatI */ /* */ /* $Z $DELETE $xTV/CHAMP.1.v */ /* $Z $DELETE $xTV/CHAMP.2.v */ /* */ /* :Fin_listG: */ /* */ /* */ /* et le tour est joue, ou du moins presque car, en effet, le champ '$xTV/CHAMP.v' n'est */ /* pas sur un tore ('v $xiirs/SPHE.92' qui n'est pas fermee a cause donc de la coordonnee */ /* 'v'...). */ #define GESTION_TORIQUE_DE_u_v \ FAUX DEFV(Local,DEFV(Logical,INIT(gestion_torique_de_u,GESTION_TORIQUE_DE_u_v))); DEFV(Local,DEFV(Logical,INIT(gestion_torique_de_v,GESTION_TORIQUE_DE_u_v))); /* Afin de savoir s'il faut proceder a une gestion "torique" des coordonnees {u,v} */ /* effectives, c'est-a-dire apres la transformation eventuelle des coordonnees {u,v}. */ /* Ceci fut introduit le 20060601132151. */ #define TRANSFORMER_u_v_PERIODISER \ VRAI DEFV(Local,DEFV(Logical,INIT(transformer_u_v_periodiser_u,TRANSFORMER_u_v_PERIODISER))); DEFV(Local,DEFV(Logical,INIT(transformer_u_v_periodiser_v,TRANSFORMER_u_v_PERIODISER))); DEFV(Local,DEFV(Logical,INIT(trouer_u_v_periodiser_u,TRANSFORMER_u_v_PERIODISER))); DEFV(Local,DEFV(Logical,INIT(trouer_u_v_periodiser_v,TRANSFORMER_u_v_PERIODISER))); #define TRANSFORMER_u_v_SYMETRISER \ FAUX DEFV(Local,DEFV(Logical,INIT(transformer_u_v_symetriser_u,TRANSFORMER_u_v_SYMETRISER))); DEFV(Local,DEFV(Logical,INIT(transformer_u_v_symetriser_v,TRANSFORMER_u_v_SYMETRISER))); DEFV(Local,DEFV(Logical,INIT(trouer_u_v_symetriser_u,TRANSFORMER_u_v_SYMETRISER))); DEFV(Local,DEFV(Logical,INIT(trouer_u_v_symetriser_v,TRANSFORMER_u_v_SYMETRISER))); #define TRANSFORMER_u_v_PROLONGER \ FAUX DEFV(Local,DEFV(Logical,INIT(transformer_u_v_prolonger_u,TRANSFORMER_u_v_PROLONGER))); DEFV(Local,DEFV(Logical,INIT(transformer_u_v_prolonger_v,TRANSFORMER_u_v_PROLONGER))); DEFV(Local,DEFV(Logical,INIT(trouer_u_v_prolonger_u,TRANSFORMER_u_v_PROLONGER))); DEFV(Local,DEFV(Logical,INIT(trouer_u_v_prolonger_v,TRANSFORMER_u_v_PROLONGER))); #define TRANSFORMER_u_v_NIVEAU_HORS_IMAGE \ FZERO DEFV(Local,DEFV(genere_Float,INIT(transformer_u_v_niveau_hors_image,TRANSFORMER_u_v_NIVEAU_HORS_IMAGE))); /* Afin de parametrer l'acces aux transformations de {u,v}... */ DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_transformation_u),NOM_PIPE_Local))); DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_transformation_v),NOM_PIPE_Local))); /* Nom des transformation des coordonnees {u,v} (introduit le 20060117135208...). */ #define LA_SURFACE_EST_INTEGRE \ FLOT(VRAI) DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_trouage_u_v),NOM_PIPE_Local))); /* Le 20060529133037 a ete introduit la possibilite de trouer de facon quelconque (connexe */ /* ou pas) la surface ('v $xrs/surfaces.12$I 20060529131510'). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T E X T U R A G E D E L A S U R F A C E : */ /* */ /*************************************************************************************************************************************/ #define TEXTURE_____COMPATIBILITE_20170303 \ FAUX DEFV(Local,DEFV(Logical,INIT(texture_____compatibilite_20170303,TEXTURE_____COMPATIBILITE_20170303))); /* Afin d'assurer la compatibilite avec les resultats obtenus anterieurement a la date */ /* du 20170303103205... */ #define AXES_COORDONNEES_FERMES_OUVERTS__TEXTURAGE_SURFACES_____COMPATIBILITE_20130220 \ FAUX DEFV(Local,DEFV(Logical,INIT(AXES_COORDONNEES_FERMES_OUVERTS__texturage_surfaces_____compatibilite_20130220 ,AXES_COORDONNEES_FERMES_OUVERTS__TEXTURAGE_SURFACES_____COMPATIBILITE_20130220 ) ) ); /* Afin d'assurer la compatibilite avec les resultats obtenus anterieurement a la date */ /* du 20130220134703... */ #define LES_TEXTURES_SONT_DES_IMAGES_STANDARDS \ VRAI DEFV(Local,DEFV(Logical,INIT(les_textures_sont_des_images_standards,LES_TEXTURES_SONT_DES_IMAGES_STANDARDS))); /* Indique si les textures sont des images "standard"s (introduit le 20050715181436)... */ #define LA_DYNAMIQUE_DES_TEXTURES_STANDARDS_DOIT_ETRE_CONSERVEE \ FAUX DEFV(Local,DEFV(Logical,INIT(la_dynamique_des_textures_standards_doit_etre_conservee ,LA_DYNAMIQUE_DES_TEXTURES_STANDARDS_DOIT_ETRE_CONSERVEE ) ) ); /* Indique si les textures "standard"s doivent conserver leur dynamique. Ceci a ete */ /* introduit le 20221005114221 lors de la mise au point de 'v $xiirv/NFRI.F1'. La valeur */ /* par defaut garantit la compatibilite anterieure... */ DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_textureR),NOM_PIPE_Local))); DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_textureV),NOM_PIPE_Local))); DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_textureB),NOM_PIPE_Local))); /* Nom des trois textures. */ #define ACCES_AUX_IMAGES(texture,nom_de_texture) \ /* Le 20050715184628 l'argument 'image' a ete rebaptise 'texture' a cause de l'introduction */ \ /* du 'BDEFV(image,...)' ci-apres le 20050715181436 (par symetrie 'nom_d_image' a ete change */ \ /* en 'nom_de_texture'...). */ \ Bblock \ Test(EST_VRAI(les_textures_sont_des_images_standards)) \ Bblock \ BDEFV(image,texture_standard); \ CALi(Iload_image_si_present(texture_standard,nom_de_texture,NOM_PIPE_Local,BLANC)); \ \ Test(EST_VRAI(la_dynamique_des_textures_standards_doit_etre_conservee)) \ /* Test introduit le 20221005114221 lors de la mise au point de 'v $xiirv/NFRI.F1'... */ \ Bblock \ CALS(Istd_float_brutal_normalise(texture,texture_standard)); \ /* Acces a une texture "standard" et conversion en conservant la dynamique... */ \ Eblock \ ATes \ Bblock \ CALS(Istd_float(texture,______________NOIR_NORMALISE,______________BLANC_NORMALISE,texture_standard)); \ /* Acces a une texture "standard" et conversion... */ \ Eblock \ ETes \ EDEFV(image,texture_standard); \ Eblock \ ATes \ Bblock \ CALi(IloadF_image_si_present(texture,nom_de_texture,NOM_PIPE_Local,______________BLANC_NORMALISE)); \ Eblock \ ETes \ Eblock \ /* Acces a une image "standard" lorsque cela est necessaire et sinon, mise a 'BLANC'... */ #TestADef PONDERATION_ROUGE_VERTE_BLEUE_POUR_dcx_dcy_dcz \ FZERO \ /* Le 20060130115333 'define' est devenu 'TestADef' pour permettre la compatibilite */ \ /* anterieure de 'v $xrs/CalabiYau.12$K PONDERATION_ROUGE_VERTE_BLEUE_POUR_dcx_dcy_dcz' */ \ /* et de 'v $xrs/CalabiYau.22$K PONDERATION_ROUGE_VERTE_BLEUE_POUR_dcx_dcy_dcz'... */ DEFV(Local,DEFV(Float,INIT(ponderation_ROUGE_pour_dcx,PONDERATION_ROUGE_VERTE_BLEUE_POUR_dcx_dcy_dcz))); DEFV(Local,DEFV(Float,INIT(ponderation_VERTE_pour_dcy,PONDERATION_ROUGE_VERTE_BLEUE_POUR_dcx_dcy_dcz))); DEFV(Local,DEFV(Float,INIT(ponderation_BLEUE_pour_dcz,PONDERATION_ROUGE_VERTE_BLEUE_POUR_dcx_dcy_dcz))); /* Facteurs permettant de definir la facon de colorier les spheres : */ /* */ /* 0 : avec {dcx,dcy,dcz} (valeur par defaut...), */ /* 1 : avec {Image_ROUGE,Image_VERTE,Image_BLEUE}. */ /* */ /* sachant que l'on peut utiliser aussi toutes valeurs intermediaires... */ /* Le 20060201095118, l'indicateur 'prendre_la_valeur_absolue_des_differentielles' fut */ /* transfere dans 'v $xrk/attractor.1C$I 20060201095118' pour en augmenter la portee... */ #define ACCES_AUX_IMAGES_FLOTTANTES(image,nom_d_image,valeur_par_defaut) \ Bblock \ CALi(IloadF_image_si_present(image,nom_d_image,NOM_PIPE_Local,valeur_par_defaut)); \ Eblock \ /* Acces a une image flottante lorsque cela est necessaire et sinon, initialisation... Cela */ \ /* a ete introduit le 20041229174140... */ DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_rayon),NOM_PIPE_Local))); /* Nom du champ de rayon (introduit le 20041229173739)... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V I S U A L I S A T I O N D E L A N O R M A L E : */ /* */ /*************************************************************************************************************************************/ #define VISUALISER_LA_NORMALE \ FAUX DEFV(Local,DEFV(Logical,INIT(visualiser_la_normale,VISUALISER_LA_NORMALE))); /* Indique si l'on visualise la normale ('VRAI') ou uniquement la surface ('FAUX'). */ #define NOMBRE_ABSOLU_DE_POINTS_SUR_UNE_NORMALE \ SEIZE DEFV(Local,DEFV(Positive,INIT(nombre_absolu_de_points_sur_une_normale,NOMBRE_ABSOLU_DE_POINTS_SUR_UNE_NORMALE))); /* Nombre de points (non compris les extremites) destines a materialiser les normales. */ #define FACTEUR_DE_LA_NORMALE \ FRA1(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(facteur_de_la_normale,FACTEUR_DE_LA_NORMALE))); /* Facteur de "renormalisation" de la normale... */ #define FACTEUR_DU_RAYON_DE_VISUALISATION_POUR_LA_NORMALE \ FDU DEFV(Local,DEFV(Float,INIT(facteur_du_rayon_de_visualisation_pour_la_normale,FACTEUR_DU_RAYON_DE_VISUALISATION_POUR_LA_NORMALE))); /* Facteur permettant de donner a priori un aspect "effile" a la normale. */ #define FACTEUR_DU_ROUGE_POUR_LA_NORMALE \ FU #define FACTEUR_DU_VERTE_POUR_LA_NORMALE \ FU #define FACTEUR_DU_BLEUE_POUR_LA_NORMALE \ FU DEFV(Local,DEFV(Float,INIT(facteur_du_ROUGE_pour_la_normale,FACTEUR_DU_ROUGE_POUR_LA_NORMALE))); DEFV(Local,DEFV(Float,INIT(facteur_du_VERTE_pour_la_normale,FACTEUR_DU_VERTE_POUR_LA_NORMALE))); DEFV(Local,DEFV(Float,INIT(facteur_du_BLEUE_pour_la_normale,FACTEUR_DU_BLEUE_POUR_LA_NORMALE))); /* Facteur permettant d'attenuer les couleurs sur la normale. Cela fut introduit le */ /* 20060207093507, les valeurs par defaut garantissant la compatibilite anterieure... */ #define NIVEAU_ROUGE_POUR_LA_NORMALE \ FU #define NIVEAU_VERTE_POUR_LA_NORMALE \ FU #define NIVEAU_BLEUE_POUR_LA_NORMALE \ FU DEFV(Local,DEFV(Float,INIT(niveau_ROUGE_pour_la_normale,NIVEAU_ROUGE_POUR_LA_NORMALE))); DEFV(Local,DEFV(Float,INIT(niveau_VERTE_pour_la_normale,NIVEAU_VERTE_POUR_LA_NORMALE))); DEFV(Local,DEFV(Float,INIT(niveau_BLEUE_pour_la_normale,NIVEAU_BLEUE_POUR_LA_NORMALE))); /* Niveaux pouvant participer au coloriage de la normale (introduits le 20060207111036). */ /* */ /* Jusqu'au les valeurs par defaut etaient {dXmax_ESPACE,dYmax_ESPACE}, mais a cause */ /* de 'v $xrs/surfaces.12$I gNORMALISATION_ACCROISSEMENT_3D.normale' qui realise une */ /* normalisation de la normale, je suis passe a {FU,FU,FU} le 20060207140530... */ #define PONDERATION1_ROUGE_POUR_LA_NORMALE \ FZERO #define PONDERATION1_VERTE_POUR_LA_NORMALE \ FZERO #define PONDERATION1_BLEUE_POUR_LA_NORMALE \ FZERO DEFV(Local,DEFV(Float,INIT(ponderation1_ROUGE_pour_la_normale,PONDERATION1_ROUGE_POUR_LA_NORMALE))); DEFV(Local,DEFV(Float,INIT(ponderation1_VERTE_pour_la_normale,PONDERATION1_VERTE_POUR_LA_NORMALE))); DEFV(Local,DEFV(Float,INIT(ponderation1_BLEUE_pour_la_normale,PONDERATION1_BLEUE_POUR_LA_NORMALE))); /* Facteurs de type 'p1' participant au coloriage de la normale... */ #define PONDERATION2_ROUGE_POUR_LA_NORMALE \ FZERO #define PONDERATION2_VERTE_POUR_LA_NORMALE \ FZERO #define PONDERATION2_BLEUE_POUR_LA_NORMALE \ FZERO DEFV(Local,DEFV(Float,INIT(ponderation2_ROUGE_pour_la_normale,PONDERATION2_ROUGE_POUR_LA_NORMALE))); DEFV(Local,DEFV(Float,INIT(ponderation2_VERTE_pour_la_normale,PONDERATION2_VERTE_POUR_LA_NORMALE))); DEFV(Local,DEFV(Float,INIT(ponderation2_BLEUE_pour_la_normale,PONDERATION2_BLEUE_POUR_LA_NORMALE))); /* Facteurs de type 'p2' participant au coloriage de la normale... */ /* */ /* L'utilisation conjointe des facteurs {p1,p2} conduit, par exemple, aux coloriages */ /* suivants : */ /* */ /* (p1=0,p2=0) : uniformement avec {dcx,dcy,dcz}, */ /* (p1=1,p2=0) : par interpolation entre {dXdu,dYdu,dZdu} en 'A' et */ /* {dXdv,dYdv,dZdv} en 'B', */ /* (p1=1,p2=1) : uniformement avec les niveaux 'niveau_?????_pour_la_normale'. */ /* */ /* sachant que l'on peut utiliser aussi toutes valeurs intermediaires... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P E R M U T A T I O N E V E N T U E L L E D E S C O O R D O N N E E S */ /* E T D E S D I F F E R E N T I E L L E S : */ /* */ /*************************************************************************************************************************************/ #define PERMUTER_LES_COORDONNEES_ET_LES_DIFFERENTIELLES \ FAUX DEFV(Local,DEFV(Logical,INIT(permuter_les_coordonnees_et_les_differentielles,PERMUTER_LES_COORDONNEES_ET_LES_DIFFERENTIELLES))); /* Permuter ('VRAI') ou pas les coordonnees et les differentielles ('FAUX'). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F O N C T I O N D E M E M O R I S A T I O N D U P O I N T C O U R A N T : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.16.I" #define RAYON_DE_VISUALISATION_____COMPATIBILITE_20170303 \ FAUX DEFV(Local,DEFV(Logical,INIT(rayon_de_visualisation_____compatibilite_20170303,RAYON_DE_VISUALISATION_____COMPATIBILITE_20170303))); /* Afin d'assurer la compatibilite avec les resultats obtenus anterieurement a la date */ /* du 20170303103205... */ #TestADef RAYON_DE_VISUALISATION \ FRA2(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation,RAYON_DE_VISUALISATION))); /* Rayon du disque materialisant une iteration. */ #define GROSSISSEMENT_DU_RAYON_DE_VISUALISATION_AUX_INTERSECTIONS_DES_LIGNES_DE_COORDONNEES \ FU DEFV(Local,DEFV(Float,INIT(grossissement_du_rayon_de_visualisation_aux_intersections_des_lignes_de_coordonnees ,GROSSISSEMENT_DU_RAYON_DE_VISUALISATION_AUX_INTERSECTIONS_DES_LIGNES_DE_COORDONNEES ) ) ); /* Facteur de grossissement du rayon de visualisation aux intersections des meridiens */ /* et des paralleles (introduit le 20041229182707)... */ #define RAYON_PERIODISER \ VRAI DEFV(Local,DEFV(Logical,INIT(rayon_periodiser_X,RAYON_PERIODISER))); DEFV(Local,DEFV(Logical,INIT(rayon_periodiser_Y,RAYON_PERIODISER))); #define RAYON_SYMETRISER \ FAUX DEFV(Local,DEFV(Logical,INIT(rayon_symetriser_X,RAYON_SYMETRISER))); DEFV(Local,DEFV(Logical,INIT(rayon_symetriser_Y,RAYON_SYMETRISER))); #define RAYON_PROLONGER \ FAUX DEFV(Local,DEFV(Logical,INIT(rayon_prolonger_X,RAYON_PROLONGER))); DEFV(Local,DEFV(Logical,INIT(rayon_prolonger_Y,RAYON_PROLONGER))); /* Introduit le 20170303105024... */ #define RAYON_NIVEAU_HORS_IMAGE \ RAYON_DE_VISUALISATION DEFV(Local,DEFV(genere_Float,INIT(rayon_niveau_hors_image,RAYON_NIVEAU_HORS_IMAGE))); /* Introduit le 20170303105024... */ #define IGNORER_LES_POINTS_TROP_LOINTAINS \ FAUX DEFV(Local,DEFV(Logical,INIT(ignorer_les_points_trop_lointains,IGNORER_LES_POINTS_TROP_LOINTAINS))); #define DISTANCE_DES_POINTS_TROP_LOINTAINS \ F_INFINI DEFV(Local,DEFV(Float,INIT(distance_des_points_trop_lointains,DISTANCE_DES_POINTS_TROP_LOINTAINS))); /* Introduit le 20120606143945 pour faciliter, par exemple, l'usage de pseudo-projections */ /* incompletes (voir 'v $xiirs/PROJ.s1$COORD_X$COORD_Y$COORD_Z'...). */ #define CHOIX_DU_COLORIAGE(derivee) \ COND(IL_FAUT(colorier_avec_le_numero_des_points),numero_des_points,derivee) #define INCREMENT_DES_NUMEROS_DE_POINT \ FU #define COLORIER_AVEC_LE_NUMERO_DES_POINTS \ FAUX DEFV(Local,DEFV(Logical,INIT(colorier_avec_le_numero_des_points,COLORIER_AVEC_LE_NUMERO_DES_POINTS))); DEFV(Local,DEFV(Float,INIT(numero_des_points,FU))); /* Introduit le 20170213101629 afin de colorier les points a l'aide de leur numero. Ceci */ /* est destine a comprendre pourquoi les images 'v $xiirs/BKLN.5C' et 'v $xiirs/BKLN.3C' */ /* contiennent deux helices et non pas une seule. Le 20170213114835, le mystere est perce */ /* et l'explication est donnee dans 'v $xiirs/$Fnota 20170213114227'... */ BFonctionI DEFV(Local,DEFV(FonctionI,memorisation_1_point_06(AXf,AYf,AZf,AdXf,AdYf,AdZf))) DEFV(Argument,DEFV(Float,AXf)); DEFV(Argument,DEFV(Float,AYf)); DEFV(Argument,DEFV(Float,AZf)); /* Definition de la position {x,y,z} de l'iteration courante. */ DEFV(Argument,DEFV(Float,AdXf)); DEFV(Argument,DEFV(Float,AdYf)); DEFV(Argument,DEFV(Float,AdZf)); /* Definition des differentielles {dx,dy,dz} de la position de l'iteration courante. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock INIT_ERROR; /*..............................................................................................................................*/ Test(IFOU(IL_NE_FAUT_PAS(ignorer_les_points_trop_lointains) ,IFET(IL_FAUT(ignorer_les_points_trop_lointains) ,IFLT(RdisF3D(AXf,AYf,AZf,FXorigine,FYorigine,FZorigine),distance_des_points_trop_lointains) ) ) ) /* Test introduit le 20120606143945... */ /* */ /* On notera que l'on utilise {FXorigine,FYorigine,FZorigine} et non pas, comme */ /* anterieurement au 20120607085133 {Xcentre_ESPACE,Ycentre_ESPACE,Zcentre_ESPACE} a */ /* cause de 'v $xrs/surfaces.12$I CALS.memorisation_1_point_06.SOUS.cx.Xcentre_ESPACE.'. */ Bblock DEFV(Int,INIT(numero_de_l_iteration_courante,UNDEF)); /* Pour des raisons de compatibilite avec 'ATTENUATION(...)'. */ #include xrk/attractor.15.I" EGAL(nombre_d_iterations_visualisees,NOMBRE_D_ITERATIONS_VISUALISEES); EGAL(attenuation_de_la_premiere_iteration,ATTENUATION_DE_LA_PREMIERE_ITERATION); EGAL(attenuation_de_la_derniere_iteration,ATTENUATION_DE_LA_DERNIERE_ITERATION); /* Pour des raisons de compatibilite avec 'ATTENUATION(...)'. */ MEMORISATION_DU_POINT_COURANT(CHOIX_DU_COLORIAGE(X_DERIVEE_DANS_01(AdXf)) ,CHOIX_DU_COLORIAGE(Y_DERIVEE_DANS_01(AdYf)) ,CHOIX_DU_COLORIAGE(Z_DERIVEE_DANS_01(AdZf)) ); /* Memorisation du point courant en Noir et Blanc ou en Couleurs, mais uniquement s'il est */ /* visible en fonction des conditions de visualisation... */ INCR(numero_des_points,INCREMENT_DES_NUMEROS_DE_POINT); Eblock ATes Bblock Eblock ETes RETU_ERROR; Eblock #undef CHOIX_DU_COLORIAGE #undef DISTANCE_DES_POINTS_TROP_LOINTAINS #undef IGNORER_LES_POINTS_TROP_LOINTAINS EFonctionI /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F O N C T I O N S D E V I S U A L I S A T I O N E T D ' I N T E R P O L A T I O N : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.17.I"