/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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"



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.