/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V I S U A L I S A T I O N   D ' U N   E N S E M B L E   D E   P A R T I C U L E S  :                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        ATTENTION :                                                                                                                */
/*                                                                                                                                   */
/*                    Apres le 1995051500, les coordonnees et les                                                                    */
/*                  couleurs des points a visualiser doivent etre                                                                    */
/*                  definies ainsi en coordonnees cartesiennes :                                                                     */
/*                                                                                                                                   */
/*                                      x E [0,1]                                                                                    */
/*                                      y E [0,1]                                                                                    */
/*                                      z E [0,1]           (l'axe 'OZ' etant dirige vers l'observateur)                             */
/*                                                                                                                                   */
/*                  alors qu'avant le 1995051500, les definitions                                                                    */
/*                  se faisaient dans :                                                                                              */
/*                                                                                                                                   */
/*                                      x E [0,1]                                                                                    */
/*                                      y E [0,1]                                                                                    */
/*                                      z E [-0.5,+0.5]     (l'axe 'OZ' etant dirige vers l'observateur)                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    En coordonnees spheriques, il n'y a pas de                                                                     */
/*                  changement (il convient malgre tout de forcer                                                                    */
/*                  "AXYZ=1" et "BXYZ=0" comme cela est rappele                                                                      */
/*                  ci-apres...) :                                                                                                   */
/*                                                                                                                                   */
/*                                      rho   E [0,1]                                                                                */
/*                                      phi   E [0,2.pi]                                                                             */
/*                                      theta E [0,pi]                                                                               */
/*                                                                                                                                   */
/*                  (les intervalles de 'x' et 'y' etant choisis pour des raisons de compatibilite                                   */
/*                  avec les versions anterieures ; en effet, a partir du 1995051500, le facteur                                     */
/*                  d'homothetie et la translation des coordonnees sont passes des valeurs respectives                               */
/*                  1 et 0 aux valeurs 2 et -1 pour permettre une gestion correcte des formats d'images                              */
/*                  quelconques, auquel cas, il est suggere d'utiliser "BZ=0.5")                                                     */
/*                                                                                                                                   */
/*                                      RAYON E [0,1]                                                                                */
/*                                                                                                                                   */
/*                                      ROUGE E [NOIR,BLANC]                                                                         */
/*                                      VERTE E [NOIR,BLANC]                                                                         */
/*                                      BLEUE E [NOIR,BLANC]                                                                         */
/*                                                                                                                                   */
/*                  en vraies couleurs, et :                                                                                         */
/*                                                                                                                                   */
/*                                      NIVEAU E [NOIR,BLANC]                                                                        */
/*                                                                                                                                   */
/*                  ou en option (a compter du 20131204095011) :                                                                     */
/*                                                                                                                                   */
/*                                      NIVEAU E [0,1]                                                                               */
/*                                                                                                                                   */
/*                  en fausses couleurs (lorsque une palette est demandee via 'nom_paletteA').                                       */
/*                                                                                                                                   */
/*                    Dans le cas de niveaux normalises, ils sont donc a priori dans [0,1], mais                                     */
/*                  ce n'est pas une obligation : en effet ils sont en fait traites "modulo"                                         */
/*                  via '$xrv/particule.51$I __DENORMALISE_NIVEAU_AVEC_MODULO____', ce qui                                           */
/*                  permet de periodiser des palettes qui ne le sont pas a priori (voir a                                            */
/*                  ce sujet 'v $xiirv/.GOLD.81.1.$U _____NiveauMaximal')...                                                         */
/*                                                                                                                                   */
/*                    Le calcul des parametres de renormalisation des coordonnees {x,y,z}                                            */
/*                  pourra se faire a l'aide de 'v $xcg/extrema.01$Z', ou encore a l'aide                                            */
/*                  de 'v $xrv/extrema.01$K' ou enfin ici en local, grace a l'option                                                 */
/*                  'ajuster_automatiquement_les_coordonnees_cartesiennes'.                                                          */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Pour visualiser des coordonnees dans [-1,+1] (ce qui est le cas si "cartesiennes=FAUX") :                                  */
/*                                                                                                                                   */
/*                    Theoriquement, il suffit d'utiliser les                                                                        */
/*                  parametres :                                                                                                     */
/*                                                                                                                                   */
/*                                      AXYZ=1 BXYZ=0                                                                                */
/*                                                                                                                                   */
/*                  en faisant attention au cas ou un facteur                                                                        */
/*                  de zoom different de 1 est utilise (voir                                                                         */
/*                  a ce propos ce qui est dit plus bas...).                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Cadrage automatique d'une structure bidimensionnelle :                                                                     */
/*                                                                                                                                   */
/*                    Pour cadrer automatiquement une structure                                                                      */
/*                  bidimensionnelle, il conviendra de placer tous                                                                   */
/*                  les points dans le plan :                                                                                        */
/*                                                                                                                                   */
/*                                      Z=0.5                                                                                        */
/*                                                                                                                                   */
/*                  puis d'utiliser l'option :                                                                                       */
/*                                                                                                                                   */
/*                                      zoom_automatique=VRAI                                                                        */
/*                                                                                                                                   */
/*                  et le tour sera joue...                                                                                          */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Note sur le plan image :                                                                                                   */
/*                                                                                                                                   */
/*                    Pour faire correspondre les coordonnees {X,Y}                                                                  */
/*                  du plan image avec les coordonnees {X,Y,Z} projetee                                                              */
/*                  de ce programme, il suffit de choisir :                                                                          */
/*                                                                                                                                   */
/*                                      Z=0.5                                                                                        */
/*                                      ZOOM=1                                                                                       */
/*                                                                                                                                   */
/*                  Un exemple est donne par 'v $xiird/.ACIN.Z1.2.$U G_Zoom'                                                         */
/*                  ou les coordonnees {X,Y} de 'v $xci/mire$K' et les coordonnees                                                   */
/*                  {X,Y,Z} projetees de 'v $xrv/particule.10$K' correspondent a                                                     */
/*                  epsilon pres. Un meilleur exemple est 'v $xiirv/CARE.11' defini                                                  */
/*                  par 'v $xiirv/$Fnota Debut_listG_CARE_11' qui illustre                                                           */
/*                  parfaitement les principes de cela...                                                                            */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Utilisation de '$xrv/particule.10$K' en sortie d'un autre programme :                                                      */
/*                                                                                                                                   */
/*                    Un programme tel 'v $xrr/N_corps.11$K' peut                                                                    */
/*                  grace aux options :                                                                                              */
/*                                                                                                                                   */
/*                                      lister_les_points=VRAI                                                                       */
/*                                      lister_les_points_apres=FAUX                                                                 */
/*                                                                                                                                   */
/*                  donner la liste des cordonnees {X,Y,Z} des                                                                       */
/*                  corps manipules (plus d'autres informations).                                                                    */
/*                  Ces coordonnees peuvent etre reprises par ce                                                                     */
/*                  programme '$xrv/particule.10$K' a condition                                                                      */
/*                  de lui donner les options suivantes :                                                                            */
/*                                                                                                                                   */
/*                                      zoom_automatique=FAUX ZOOM=1.0                                                               */
/*                                      coordonnees_dans_0_1=FAUX                                                                    */
/*                                      AXYZ=1 BXYZ=0                                                                                */
/*                                                                                                                                   */
/*                  l'option "coordonnees_dans_0_1=FAUX" garantit que les                                                            */
/*                  proportions sont conservees ; cela signifie, par                                                                 */
/*                  exemple, qu'un cercle reste un cercle alors que                                                                  */
/*                  dans le cas 'VRAI', il devient une ellipse de grand                                                              */
/*                  axe vertical. On verra a ce propos :                                                                             */
/*                                                                                                                                   */
/*                                      xivPdf 9 2 / .NCOR.1.22.$U                                                                   */
/*                                                                                                                                   */
/*                  ou cela est utilise...                                                                                           */
/*                                                                                                                                   */
/*                    Les rayons devant etre ajustes en consequences (en                                                             */
/*                  general, leur valeur devra etre divisee par 2).                                                                  */
/*                  Ces parametres sont aussi utilisables lorsque les                                                                */
/*                  coordonnees viennent de 'v $xci/valeurs_albu$K'.                                                                 */
/*                  Ceci sera par exemple tres utile pour visualiser                                                                 */
/*                  le centre de gravite d'un ensemble de points...                                                                  */
/*                  On notera de plus que grace au programme 'v $xrv/SOUS.11$K',                                                     */
/*                  il est possible de placer tout ensemble de particules {X,Y,Z}                                                    */
/*                  dans un referentiel lie a leur centre de gravite 'G' {XG,YG,ZG}                                                  */
/*                  en visualisant le fichier des {X-XG,Y-YG,Z-ZG}...                                                                */
/*                                                                                                                                   */
/*                    Lorsqu'un facteur de zoom different de 1 est                                                                   */
/*                  utilise, on aura plus qu'interet a faire :                                                                       */
/*                                                                                                                                   */
/*                                      zoom_automatique=FAUX ZOOM=...                                                               */
/*                                      coordonnees_dans_0_1=FAUX                                                                    */
/*                                      AXYZ=1 BXYZ=0                                                                                */
/*                                      TRANSLATION_OX=0.5 TRANSLATION_OY=0.5                                                        */
/*                                                                                                                                   */
/*                  puisque le zoom est "centre" par rapport au                                                                      */
/*                  centre {0,0,0} de l'univers et qu'avec des                                                                       */
/*                  coordonnees deja dans [0,1], le centre {0,0,0}                                                                   */
/*                  devient le coin inferieur gauche. On verra a ce propos :                                                         */
/*                                                                                                                                   */
/*                                      xivPdf 9 2 / .NCOR.1.22.$U                                                                   */
/*                                                                                                                                   */
/*                  ou cela est utilise...                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrv/particule.10$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1993??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
@define   PRAGMA_CL_____MODULE_NON_OPTIMISABLE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE
#include  image_image_IMAGESF_EXT
                                        /* Introduit le 20150604143255...                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E   B A S E   E T   U N I V E R S E L L E S  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/dimensionnement.01.vv.I"
                                        /* Introduit le 20111209173529...                                                            */

#include  xrk/attractor.11.I"
#include  xrv/particule.41.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*                                                                                    3                                              */
/*        D E F I N I T I O N   D E   L ' E S P A C E   P H Y S I Q U E   D A N S   R     ( D E B U T )  :                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Les extrema des coordonnees {x,y,z}                                                                            */
/*                  ainsi que ceux de leurs differentielles                                                                          */
/*                  {dx,dy,dz} sont fixees un peu arbitrairement                                                                     */
/*                  et sans etre parametrees.                                                                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* ATTENTION, les coordonnees des points a visualiser doivent etre definies ainsi :          */
                                        /*                                                                                           */
                                        /*                  x E [0,1]                                                                */
                                        /*                  y E [0,1]                                                                */
                                        /*                  z E [0,1]                                                                */
                                        /*                                                                                           */

#define   hXmin_ESPACE                                                                                                                  \
                    PARE(-1.0)
#define   hYmin_ESPACE                                                                                                                  \
                    PARE(-1.0)
#define   hZmin_ESPACE                                                                                                                  \
                    PARE(-1.0)
                                        /* Definition du "coin" inferieur-gauche-arriere de l'espace physique.                       */

#define   hXmax_ESPACE                                                                                                                  \
                    PARE(1.0)
#define   hYmax_ESPACE                                                                                                                  \
                    PARE(1.0)
#define   hZmax_ESPACE                                                                                                                  \
                    PARE(1.0)
                                        /* Definition du "coin" superieur-droite-avant de l'espace physique.                         */

                                        /* ATTENTION, les coordonnees des points a visualiser doivent etre definies ainsi :          */
                                        /*                                                                                           */
                                        /*                  x E [0,1]                                                                */
                                        /*                  y E [0,1]                                                                */
                                        /*                  z E [0,1]                                                                */
                                        /*                                                                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*                                                                                    3                                              */
/*        D E F I N I T I O N   D E   L ' E S P A C E   P H Y S I Q U E   D A N S   R     ( D E B U T )  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/attractor.12.I"

#define   dXmin_ESPACE                                                                                                                  \
                    PARE(0.0)
#define   dYmin_ESPACE                                                                                                                  \
                    PARE(0.0)
#define   dZmin_ESPACE                                                                                                                  \
                    PARE(0.0)
                                        /* Definition des minima des differentielles {dx,dy,dz}.                                     */
#define   dXmax_ESPACE                                                                                                                  \
                    PARE(1.0)
#define   dYmax_ESPACE                                                                                                                  \
                    PARE(1.0)
#define   dZmax_ESPACE                                                                                                                  \
                    PARE(1.0)
                                        /* Definition des maxima des differentielles {dx,dy,dz}.                                     */

#include  xrk/attractor.1D.I"
                                        /* Formules de renormalisation des differentielles dans [0,1] ; elles sont utilisees lorsque */
                                        /* la production d'images en couleurs est demandee (voir 'visualiser_en_RVB').               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   GENERER_DES_POINTS_ISOLES                                                                                                     \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(generer_des_points_isoles,GENERER_DES_POINTS_ISOLES)));
                                        /* Indique si l'on visualise des points isoles ('VRAI') ou des couples de points ('FAUX')    */
                                        /* materialises par une chaine de points interpoles sur toutes les caracteristiques.         */
#define   JOINDRE_A_UN_CORPS_CENTRAL                                                                                                    \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(joindre_a_un_corps_central,JOINDRE_A_UN_CORPS_CENTRAL)));
                                        /* Indique lorsque 'IL_FAUT(generer_des_points_isoles)' si ces points isoles doivent etre    */
                                        /* malgre tout joints avec le corps de reference ('VRAI') ou etre vraiment isoles ('FAUX')   */
                                        /* comme c'etait le cas avant le 19991007145622.                                             */

#define   FILTRER_LA_LONGUEUR_DES_SEGMENTS                                                                                              \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(filtrer_la_longueur_des_segments,FILTRER_LA_LONGUEUR_DES_SEGMENTS)));
#define   BORNE_INFERIEURE_DE_LA_LONGUEUR_DES_SEGMENTS                                                                                  \
                    FZERO
#define   BORNE_SUPERIEURE_DE_LA_LONGUEUR_DES_SEGMENTS                                                                                  \
                    FU
DEFV(Local,DEFV(Float,INIT(borne_inferieure_de_la_longueur_des_segments,BORNE_INFERIEURE_DE_LA_LONGUEUR_DES_SEGMENTS)));
DEFV(Local,DEFV(Float,INIT(borne_superieure_de_la_longueur_des_segments,BORNE_SUPERIEURE_DE_LA_LONGUEUR_DES_SEGMENTS)));
                                        /* Introduit le 20120806100234 afin de pouvoir tracer uniquement les segments dont la        */
                                        /* longueur est dans un certain intervalle (introduit pour 'v $xiirf/FRB3.D6.2')...          */

#define   CHAINER_AUTOMATIQUEMENT_LES_POINTS                                                                                            \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(chainer_automatiquement_les_points,CHAINER_AUTOMATIQUEMENT_LES_POINTS)));
                                        /* Lorsque 'IL_NE_FAUT_PAS(generer_des_points_isoles)', indique si l'on genere des suites    */
                                        /* de segments du type {A,B,B,...B} ('VRAI') ou du type {{A,B},{A,B},...,{A,B}} ('FAUX')     */
                                        /* ce qui correspond au comportement anterieur au 19971127142342...                          */
                                        /*                                                                                           */
                                        /* Pour etre plus clair, ces deux modes peuvent etre aussi definis par ('Pii' designant      */
                                        /* le point de numero 'ii') :                                                                */
                                        /*                                                                                           */
                                        /*                  {A,B,B,...B}                = {P01-P02-P03-...-Pnn}                      */
                                        /*                                                                                           */
                                        /* et ;                                                                                      */
                                        /*                                                                                           */
                                        /*                  {{A,B},{A,B},...,{A,B}}     = {{P01-P02},{P03-P04},...}                  */
                                        /*                                                                                           */
                                        /* le premier mode chainant automatiquement et le second etant plutot du type "pointilles".  */

#define   LE_DERNIER_POINT_EST_LE_PREMIER_POINT                                                                                         \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(le_dernier_point_est_le_premier_point,LE_DERNIER_POINT_EST_LE_PREMIER_POINT)));
                                        /* Lorsque 'IL_FAUT(chainer_automatiquement_les_points)' indique si le dernier point a       */
                                        /* utiliser est en fait le premier. Dans ce cas il y a donc au total un point de plus que    */
                                        /* demande. Cette possibilite a ete introduite le 20060808110301...                          */

#define   NOMBRE_ABSOLU_DE_POINTS_SUR_UNE_CHAINE_DE_CONNEXION                                                                           \
                    SEIZE
DEFV(Local,DEFV(Positive,INIT(nombre_absolu_de_points_sur_une_chaine_de_connexion
                             ,NOMBRE_ABSOLU_DE_POINTS_SUR_UNE_CHAINE_DE_CONNEXION
                              )
                )
     );
                                        /* Nombre de points (non compris les extremites) destines a materialiser les couples         */
                                        /* de points.                                                                                */

#define   AJUSTER_AUTOMATIQUEMENT_LE_NOMBRE_DE_POINTS_SUR_UNE_CHAINE_DE_CONNEXION                                                       \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(ajuster_automatiquement_le_nombre_de_points_sur_une_chaine_de_connexion
                            ,AJUSTER_AUTOMATIQUEMENT_LE_NOMBRE_DE_POINTS_SUR_UNE_CHAINE_DE_CONNEXION
                             )
                )
     );
                                        /* Indique si l'on doit ajuster automatiquement le nombre de points sur une chaine de        */
                                        /* connexion ('VRAI') ou bien utiliser 'nombre_absolu_de_points_sur_une_chaine_de_connexion' */
                                        /* ('FAUX').                                                                                 */
#define   FACTEUR_DU_NOMBRE_RELATIF_DE_POINTS_SUR_UNE_CHAINE_DE_CONNEXION                                                               \
                    FU
DEFV(Local,DEFV(Float,INIT(facteur_du_nombre_relatif_de_points_sur_une_chaine_de_connexion
                          ,FACTEUR_DU_NOMBRE_RELATIF_DE_POINTS_SUR_UNE_CHAINE_DE_CONNEXION
                           )
                )
     );
                                        /* En fait facteur multiplicatif permettant de passer de la longueur d'une chaine de         */
                                        /* connexion au nombre de points a utiliser. ATTENTION, avant le 19971114085357, la          */
                                        /* valeur par defaut de ce parametre etait :                                                 */
                                        /*                                                                                           */
                                        /*                  GRO8(FU)                                                                 */
                                        /*                                                                                           */
                                        /* mais, le 19971113103239, le calcul du rayon projete des particules ayant ete corrige      */
                                        /* (de facon correcte), il a fallu donner a ce parametre sa valeur correcte permettant       */
                                        /* un chevauchement correct (sur une longueur d'un rayon) des particules d'une chaine de     */
                                        /* connexion...                                                                              */

#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  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   nombre_de_corps                                                                                                               \
                    nombre_d_iterations                                                                                                 \
                                        /* ATTENTION, a ne pas confondre :                                                           */ \
                                        /*                                                                                           */ \
                                        /* 1-'nombre_de_periodes_de_la_simulation' qui definit finalement le nombre d'images que     */ \
                                        /* l'on va generer et qui conditionne toutes les listes (sans exception...) definies par     */ \
                                        /* 'fTRANSFORMAT_31(...)', et                                                                */ \
                                        /*                                                                                           */ \
                                        /* 2-'nombre_d_iterations' qui definit le nombre de particules visualisees dans chaque       */ \
                                        /* image ; les listes relatives aux particules sont definies elles-aussi a l'aide de la      */ \
                                        /* procedure 'dTRANSFORMAT_31(...)' ce qui signifie que 'nombre_d_iterations' est limite     */ \
                                        /* par 'NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION'...                                      */ \
                                        /*                                                                                           */

#define   EDITER_LES_MESSAGES_DE_MAUVAIS_ENCADREMENT_DES_NIVEAUX_INTERPOLES                                                             \
                    FAUX                                                                                                                \
                                        /* Introduit le 20181227110833 lors de la mise au point de 'v $xrrv/CARR.35' avec            */ \
                                        /* "_____DistanceMini=0.050"...                                                              */
#include  xrk/attractor.14.I"

#define   NOMBRE_MAXIMAL_DE_POINTS_GERABLES                                                                                             \
                    MIN2(NOMBRE_MAXIMAL_DE_POINTS_VISUALISABLES,NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION)                            \
                                        /* Cette constante permet de gerer d'une facon homogene les listes de dimension              */ \
                                        /* 'nombre_de_periodes_de_la_simulation' comme celles de dimension 'nombre_d_iterations'.    */

                                        /* ATTENTION, a ne pas confondre :                                                           */
                                        /*                                                                                           */
                                        /* 1-'nombre_de_periodes_de_la_simulation' qui definit finalement le nombre d'images que     */
                                        /* l'on va generer et qui conditionne toutes les listes (sans exception...) definies par     */
                                        /* 'fTRANSFORMAT_31(...)', et                                                                */
                                        /*                                                                                           */
                                        /* 2-'nombre_d_iterations' qui definit le nombre de particules visualisees dans chaque       */
                                        /* image ; les listes relatives aux particules sont definies elles-aussi a l'aide de la      */
                                        /* procedure 'dTRANSFORMAT_31(...)' ce qui signifie que 'nombre_d_iterations' est limite     */
                                        /* par 'NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION'...                                      */
                                        /*                                                                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P O S S I B I L I T E   D E   " C R O S S - S E C T I O N "  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   FAIRE_UNE_CROSS_SECTION                                                                                                       \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(faire_une_cross_section,FAIRE_UNE_CROSS_SECTION)));
                                        /* Faut-il ou pas faire une "cross-section" (introduit le 20031217151137) ?                  */
                                        /*                                                                                           */
                                        /* On notera que le centre et les trois demi-axes de l'ellipsoide de "cross-section" sont    */
                                        /* choisis de facon a ce que le "trou" creuse par cet ellipsoide ressemble a un diedre       */
                                        /* dont l'axe est 'OY' et dont l'angle d'ouverture ('theta') est petit et symetrique par     */
                                        /* rapport a l'axe 'OZ', soit :                                                              */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                                      '                                                    */
                                        /*                                  Y  /|\                                                   */
                                        /*                                      |                                                    */
                                        /*                                    . |                                                    */
                                        /*                                 .    |                                                    */
                                        /*                              .       |.                                                   */
                                        /*                           .          |                                                    */
                                        /*                        .             | .                                                  */
                                        /*                     .                |                                                    */
                                        /*                  .                   |  .                                                 */
                                        /*                  |                   |                                                    */
                                        /*                  |                   |   .                                                */
                                        /*                  |                   |                                                    */
                                        /*                  |                   |    .                                               */
                                        /*                  |                   |                                                    */
                                        /*                  |                DIE DRE  .                                              */
                                        /*                  |                   |     |                                              */
                                        /*                  |                   |     |                                              */
                                        /*                  |                   |     |                                              */
                                        /*                  |                 . O-----|------------------------------>               */
                                        /*                  |              .   /      |                                              */
                                        /*                  |           .     /  .    |                             X                */
                                        /*                  |        .       /        |                                              */
                                        /*                  |     .         /     .   |                                              */
                                        /*                  |  .  theta/2  /          |                                              */
                                        /*                  .             /        .  |                                              */
                                        /*                               / theta/2    |                                              */
                                        /*                              /           . |                                              */
                                        /*                             /              |                                              */
                                        /*                            /              .|                                              */
                                        /*                           /                |                                              */
                                        /*                          /                 .                                              */
                                        /*                       Z /                                                                 */
                                        /*                                                                                           */
                                        /*                                                                                           */

#define   X_CENTRE_ELLIPSOIDE_DE_CROSS_SECTION                                                                                          \
                    FZERO
#define   Y_CENTRE_ELLIPSOIDE_DE_CROSS_SECTION                                                                                          \
                    FZERO
#define   Z_CENTRE_ELLIPSOIDE_DE_CROSS_SECTION                                                                                          \
                    FLOT(CENT)
DEFV(Local,DEFV(Float,INIT(X_centre_ellipsoide_de_cross_section,X_CENTRE_ELLIPSOIDE_DE_CROSS_SECTION)));
DEFV(Local,DEFV(Float,INIT(Y_centre_ellipsoide_de_cross_section,Y_CENTRE_ELLIPSOIDE_DE_CROSS_SECTION)));
DEFV(Local,DEFV(Float,INIT(Z_centre_ellipsoide_de_cross_section,Z_CENTRE_ELLIPSOIDE_DE_CROSS_SECTION)));
                                        /* Centre de l'ellipsoide de "cross-section".                                                */

#define   X_DEMI_AXE_ELLIPSOIDE_DE_CROSS_SECTION                                                                                        \
                    FDEUX
#define   Y_DEMI_AXE_ELLIPSOIDE_DE_CROSS_SECTION                                                                                        \
                    Z_CENTRE_ELLIPSOIDE_DE_CROSS_SECTION
#define   Z_DEMI_AXE_ELLIPSOIDE_DE_CROSS_SECTION                                                                                        \
                    Z_CENTRE_ELLIPSOIDE_DE_CROSS_SECTION
DEFV(Local,DEFV(Float,INIT(X_demi_axe_ellipsoide_de_cross_section,X_DEMI_AXE_ELLIPSOIDE_DE_CROSS_SECTION)));
DEFV(Local,DEFV(Float,INIT(Y_demi_axe_ellipsoide_de_cross_section,Y_DEMI_AXE_ELLIPSOIDE_DE_CROSS_SECTION)));
DEFV(Local,DEFV(Float,INIT(Z_demi_axe_ellipsoide_de_cross_section,Z_DEMI_AXE_ELLIPSOIDE_DE_CROSS_SECTION)));
                                        /* Demi-axe de l'ellipsoide de "cross-section".                                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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                                                                                                        \
                    FRA5(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation,RAYON_DE_VISUALISATION)));
                                        /* Rayon du disque materialisant une iteration.                                              */

#define   PUISSANCE_DU_RAYON_DE_VISUALISATION                                                                                           \
                    UN
#include  xrv/champs_5.1B.I"
                                        /* Afin de generer des spheres dont on maitrise soit le rayon (=1), soit la surface (=2),    */
                                        /* soit enfin le volume (=3).                                                                */

BFonctionI

DEFV(Local,DEFV(FonctionI,memorisation_1_point_07(AXf,AYf,AZf,AdXf,AdYf,AdZf,numero_de_l_iteration_courante)))
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.         */
DEFV(Argument,DEFV(Int,numero_de_l_iteration_courante));
                                        /* Numero de l'iteration courante afin d'attenuer eventuellement la luminance des points     */
                                        /* materialisant chaque iteration en fonction de leur numero (les premieres iterations etant */
                                        /* plus sombres, et les dernieres etant plus lumineuses).                                    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
#include  xrk/attractor.15.I"

     DEFV(Logical,INIT(memoriser_le_point_courant,VRAI));
                                        /* A priori, le point courant sera memorise...                                               */

     INIT_ERROR;
     /*..............................................................................................................................*/
     Test(IL_FAUT(faire_une_cross_section))
          Bblock
          Test(IFLE(ADD3(EXP2(DIVZ(SOUS(AXf,X_centre_ellipsoide_de_cross_section),X_demi_axe_ellipsoide_de_cross_section))
                        ,EXP2(DIVZ(SOUS(AYf,Y_centre_ellipsoide_de_cross_section),Y_demi_axe_ellipsoide_de_cross_section))
                        ,EXP2(DIVZ(SOUS(AZf,Z_centre_ellipsoide_de_cross_section),Z_demi_axe_ellipsoide_de_cross_section))
                         )
                   ,FU
                    )
               )
               Bblock
               EGAL(memoriser_le_point_courant,FAUX);
                                        /* Les points interieurs a l'ellipsoide de "cross-section" ne sont pas visualises...         */
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IL_FAUT(memoriser_le_point_courant))
                                        /* Ceci a donc ete introduit le 20031217151137...                                            */
          Bblock
          MEMORISATION_DU_POINT_COURANT(X_DERIVEE_DANS_01(AdXf)
                                       ,Y_DERIVEE_DANS_01(AdYf)
                                       ,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...                                    */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETU_ERROR;
     Eblock

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  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   __VERSION__PERMETTRE_L_UTILISATION_D_UN_FOND                                                                                  \
                                        /* Afin de permettre la mise en place d'un fond pour chaque image generee (definition        */ \
                                        /* deplacee ici le 20030311095504). D'autre part 'PERMETTRE_L_UTILISATION_D_UN_FOND'         */ \
                                        /* a ete change en '__VERSION__PERMETTRE_L_UTILISATION_D_UN_FOND' le 20030313145928          */ \
                                        /* afin de permettre sa recuperation dans 'v $xcc/cpp$Z _VERSION_'.                          */

#include  xrk/attractor.17.I"

#include  xrv/particule.31.I"

#define   LAMBDA_EXTRAPOLATION_A                                                                                                        \
                    FU
#define   LAMBDA_EXTRAPOLATION_B                                                                                                        \
                    FU
DEFV(Local,DEFV(Float,INIT(lambda_extrapolation_A,LAMBDA_EXTRAPOLATION_A)));
DEFV(Local,DEFV(Float,INIT(lambda_extrapolation_B,LAMBDA_EXTRAPOLATION_B)));
                                        /* Introduit le 20171121134718 afin de permettre l'extrapolation des segments [A,B]...       */
                                        /* Les valeurs par defaut devrait garantir la neutralite :                                   */
                                        /*                                                                                           */
                                        /*                  BARY(B,A,1) = A                                                          */
                                        /*                  BARY(A,B,1) = B                                                          */
                                        /*                                                                                           */
                                        /* mais ce n'est malheureusement pas tout a fait vrai a cause des erreurs d'arrondi...       */

#define   VISUALISATION_D_UN_SEGMENT_VARIABLE(Acx,Acy,Acz,Adcx,Adcy,Adcz,Ar,Bcx,Bcy,Bcz,Bdcx,Bdcy,Bdcz,Br,Adx,Ady,Adz,Bdx,Bdy,Bdz)      \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(EAcx,Acx));                                                                                         \
                    DEFV(Float,INIT(EAcy,Acy));                                                                                         \
                    DEFV(Float,INIT(EAcz,Acz));                                                                                         \
                                        /* Extrapolation du point 'A' neutre par defaut (introduite le 20171121134718).....          */ \
                                        /*                                                                                           */ \
                                        /* On notera que le 'BARY(...)' neutre n'est pas fait ici, apparemment pour des raisons      */ \
                                        /* liees a des problemes d'arrondi. Des experiences faites a cette date ont montre que       */ \
                                        /* malheureusement :                                                                         */ \
                                        /*                                                                                           */ \
                                        /*                  BARY(B,A,1) # A     (mais tres legerement...)                            */ \
                                        /*                                                                                           */ \
                    DEFV(Float,INIT(EBcx,Bcx));                                                                                         \
                    DEFV(Float,INIT(EBcy,Bcy));                                                                                         \
                    DEFV(Float,INIT(EBcz,Bcz));                                                                                         \
                                        /* Extrapolation du point 'B' neutre par defaut (introduite le 20171121134718)...            */ \
                                        /*                                                                                           */ \
                                        /* On notera que le 'BARY(...)' neutre n'est pas fait ici, apparemment pour des raisons      */ \
                                        /* liees a des problemes d'arrondi. Des experiences faites a cette date ont montre que       */ \
                                        /* malheureusement :                                                                         */ \
                                        /*                                                                                           */ \
                                        /*                  BARY(A,B,1) # B     (mais tres legerement...)                            */ \
                                        /*                                                                                           */ \
                                                                                                                                        \
                    DEFV(Int,INIT(nombre_effectif_de_points_sur_une_chaine_de_connexion,UNDEF));                                        \
                                        /* Nombre de points effectif sur une chaine de connexion.                                    */ \
                    DEFV(Float,INIT(rayon_de_visualisation_moyen,MOYE(Ar,Br)));                                                         \
                                        /* Introduit le 20031220091528 pour le test suivant...                                       */ \
                                                                                                                                        \
                    Test(IFNE(lambda_extrapolation_A,LAMBDA_EXTRAPOLATION_A))                                                           \
                         Bblock                                                                                                         \
                         EGAL(EAcx,BARY(Bcx,Acx,lambda_extrapolation_A));                                                               \
                         EGAL(EAcy,BARY(Bcy,Acy,lambda_extrapolation_A));                                                               \
                         EGAL(EAcz,BARY(Bcz,Acz,lambda_extrapolation_A));                                                               \
                                        /* Extrapolation du point 'A' (introduite le 20171121134718) :                               */ \
                                        /*                                                                                           */ \
                                        /*                  BARY(B,A,lambda) = [(1-lambda).B] + [(lambda-0).A]                       */ \
                                        /*                                                                                           */ \
                                        /* et pour lambda=1 :                                                                        */ \
                                        /*                                                                                           */ \
                                        /*                  BARY(B,A,1)      = A                    (extrapolation par defaut)       */ \
                                        /*                                                                                           */ \
                                        /* L'extrapolation a lieu pour lambda>1...                                                   */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IFNE(lambda_extrapolation_B,LAMBDA_EXTRAPOLATION_B))                                                           \
                         Bblock                                                                                                         \
                         EGAL(EBcx,BARY(Acx,Bcx,lambda_extrapolation_B));                                                               \
                         EGAL(EBcy,BARY(Acy,Bcy,lambda_extrapolation_B));                                                               \
                         EGAL(EBcz,BARY(Acz,Bcz,lambda_extrapolation_B));                                                               \
                                        /* Extrapolation du point 'B' (introduite le 20171121134718) :                               */ \
                                        /*                                                                                           */ \
                                        /*                  BARY(A,B,lambda) = [(1-lambda).A] + [(lambda-0).B]                       */ \
                                        /*                                                                                           */ \
                                        /* et pour lambda=1 :                                                                        */ \
                                        /*                                                                                           */ \
                                        /*                  BARY(A,B,1)      = B                    (extrapolation par defaut)       */ \
                                        /*                                                                                           */ \
                                        /* L'extrapolation a lieu pour lambda>1...                                                   */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    AIDE_A_LA_MISE_AU_POINT_DE__VISUALISATION_D_UNE_CHAINE_DE_CONNEXION                                                 \
                        (                                                                                                               \
                         Bblock                                                                                                         \
                         CAL2(Prin1("     NombreAbsoluDePoints('points=')=%d\n",nombre_absolu_de_points_sur_une_chaine_de_connexion));  \
                         Eblock                                                                                                         \
                         );                                                                                                             \
                                                                                                                                        \
                    Test(IFET(IL_FAUT(ajuster_automatiquement_le_nombre_de_points_sur_une_chaine_de_connexion)                          \
                             ,IZNE(rayon_de_visualisation_moyen)                                                                        \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Le test de non nullite du rayon moyen a ete introduit le 20031220091528 pour eviter       */ \
                                        /* une eventuelle division par 0 ci-apres. On notera au passage que la nullite simultanee    */ \
                                        /* de 'Ar' et de 'Br' est une anomalie qui ne peut se produire que si les parametres         */ \
                                        /* d'appel de ce programme sont incorrets et/ou incoherents...                               */ \
                         Bblock                                                                                                         \
                         AIDE_A_LA_MISE_AU_POINT_DE__VISUALISATION_D_UNE_CHAINE_DE_CONNEXION                                            \
                             (                                                                                                          \
                              Bblock                                                                                                    \
                              CAL2(Prin1("     Ajustement automatique (facteur('nombreR=')=%f) "                                        \
                                        ,facteur_du_nombre_relatif_de_points_sur_une_chaine_de_connexion                                \
                                         )                                                                                              \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                              );                                                                                                        \
                                                                                                                                        \
                         EGAL(nombre_effectif_de_points_sur_une_chaine_de_connexion                                                     \
                             ,TRPU(ARRI(MUL2(facteur_du_nombre_relatif_de_points_sur_une_chaine_de_connexion                            \
                                            ,DIVI(RdisF3D(EAcx,EAcy,EAcz                                                                \
                                                         ,EBcx,EBcy,EBcz                                                                \
                                                          )                                                                             \
                                                 ,rayon_de_visualisation_moyen                                                          \
                                                  )                                                                                     \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                              );                                                                                                        \
                                        /* Cas ou il y a ajustement automatique du nombre de points : celui-ci est alors fonction    */ \
                                        /* de la distance d(A,B) et des rayons de visualisation (sans oublier que ceux-ci sont       */ \
                                        /* definis dans [0,1] et non pas dans l'espace physique ; de plus 'lY_PHYSIQUE_DANS_01(...)' */ \
                                        /* est justifie par 'v $xrv/champs_5.26$I rayon_reel_de_visualisation' ou l'on calcule le    */ \
                                        /* 'rayon_reel_de_visualisation' a partir de 'Yf_au_pole_nord_de_la_sphere' qui lui-meme     */ \
                                        /* procede a un 'Y_PHYSIQUE_DANS_01(ADD2(Yf,RAYON_DU_POINT_COURANT(champ_RAYON)))').         */ \
                                        /*                                                                                           */ \
                                        /* Mais ATTENTION, avant le 19971114085357, la formule utilisee etait :                      */ \
                                        /*                                                                                           */ \
                                        /*        DIVI(DIVI(RdisF3D(Acx,Acy,Acz                                                      */ \
                                        /*                         ,Bcx,Bcy,Bcz                                                      */ \
                                        /*                          )                                                                */ \
                                        /*                 ,diagonale_ESPACE                                                         */ \
                                        /*                  )                                                                        */ \
                                        /*            ,lY_PHYSIQUE_DANS_01(MOYE(Ar,Br))                                              */ \
                                        /*             )                                                                             */ \
                                        /*                                                                                           */ \
                                        /* mais, le 19971113103239, le calcul du rayon projete des particules ayant ete corrige      */ \
                                        /* (de facon correcte), il a fallu donner a cette formule son expression correcte permettant */ \
                                        /* un chevauchement correct (sur une longueur d'un rayon) des particules d'une chaine de     */ \
                                        /* connexion...                                                                              */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         EGAL(nombre_effectif_de_points_sur_une_chaine_de_connexion                                                     \
                             ,nombre_absolu_de_points_sur_une_chaine_de_connexion                                                       \
                              );                                                                                                        \
                                        /* Cas ou il n'y a pas d'ajustement automatique du nombre de points...                       */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    AIDE_A_LA_MISE_AU_POINT_DE__VISUALISATION_D_UNE_CHAINE_DE_CONNEXION                                                 \
                        (                                                                                                               \
                         Bblock                                                                                                         \
                         CAL2(Prin1(" NombreEffectifDePoints=%d\n",nombre_effectif_de_points_sur_une_chaine_de_connexion));             \
                         Eblock                                                                                                         \
                         );                                                                                                             \
                                                                                                                                        \
                    EGAL(nombre_effectif_de_points_sur_une_chaine_de_connexion                                                          \
                        ,MAX2(nombre_effectif_de_points_sur_une_chaine_de_connexion,DEUX)                                               \
                         );                                                                                                             \
                                        /* Il faut malgre tout visualiser au moins 2 points (les 2 extremites 'A' et 'B').           */ \
                                                                                                                                        \
                    VISUALISATION_D_UNE_CHAINE_DE_CONNEXION(EAcx,EAcy,EAcz                                                              \
                                                           ,Adcx,Adcy,Adcz                                                              \
                                                           ,Ar                                                                          \
                                                           ,EBcx,EBcy,EBcz                                                              \
                                                           ,Bdcx,Bdcy,Bdcz                                                              \
                                                           ,Br                                                                          \
                                                           ,nombre_effectif_de_points_sur_une_chaine_de_connexion                       \
                                                           ,numero_des_points                                                           \
                                                           ,interpoler_les_chaines_de_connexion_par_des_splines_cubiques                \
                                                           ,Adx,Ady,Adz                                                                 \
                                                           ,Bdx,Bdy,Bdz                                                                 \
                                                            );                                                                          \
                    Eblock                                                                                                              \
                                        /* Visualisation d'une chaine de connexion avec ajustement eventuel des parametres...        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   D I F F E R E N T E S   T R A N S F O R M A T I O N S   L I N E A I R E S  :                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DONNEES_gFACTEUR_D_HOMOTHETIE_gCONSTANTE_DE_TRANSLATION(ajuster,minimum_3,maximum_3,minimum_1,maximum_1)                      \
                                        /* Les extrema de type '_1' portent sur une seule des trois composantes (de 'XYZ' ou de      */ \
                                        /* 'RVB'), alors que les extrema de type '_3' portent sur les trois composantes (de 'XYZ'    */ \
                                        /* ou de 'RVB').                                                                             */ \
                    DEFV(Float,INIT(minimum_effectif                                                                                    \
                                   ,COND(IL_FAUT(ajuster)                                                                               \
                                        ,minimum_1                                                                                      \
                                        ,minimum_3                                                                                      \
                                         )                                                                                              \
                                    )                                                                                                   \
                         );                                                                                                             \
                    DEFV(Float,INIT(maximum_effectif                                                                                    \
                                   ,COND(IL_FAUT(ajuster)                                                                               \
                                        ,maximum_1                                                                                      \
                                        ,maximum_3                                                                                      \
                                         )                                                                                              \
                                    )                                                                                                   \
                         );                                                                                                             \
                                        /* Donnees utiles (procedure introduite le 20091027091754).                                  */
#define   gFACTEUR_D_HOMOTHETIE(ajuster,facteur_d_homothetie,minimum_3,maximum_3,minimum_1,maximum_1,MINIMUM_1,MAXIMUM_1)               \
                                        /* Les extrema de type '_1' portent sur une seule des trois composantes (de 'XYZ' ou de      */ \
                                        /* 'RVB'), alors que les extrema de type '_3' portent sur les trois composantes (de 'XYZ'    */ \
                                        /* ou de 'RVB').                                                                             */ \
                    Bblock                                                                                                              \
                    DONNEES_gFACTEUR_D_HOMOTHETIE_gCONSTANTE_DE_TRANSLATION(ajuster,minimum_3,maximum_3,minimum_1,maximum_1);           \
                                                                                                                                        \
                    Test(IFNE(minimum_effectif,maximum_effectif))                                                                       \
                         Bblock                                                                                                         \
                         EGAL(facteur_d_homothetie                                                                                      \
                             ,DIVI(SOUS(MAXIMUM_1,MINIMUM_1)                                                                            \
                                  ,SOUS(maximum_effectif,minimum_effectif)                                                              \
                                   )                                                                                                    \
                              );                                                                                                        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Procedure de calcul d'un facteur d'homothetie (introduite le 20091026182237).             */
#define   gCONSTANTE_DE_TRANSLATION(ajuster,constante_de_translation,minimum_3,maximum_3,minimum_1,maximum_1,MINIMUM_1,MAXIMUM_1)       \
                                        /* Les extrema de type '_1' portent sur une seule des trois composantes (de 'XYZ' ou de      */ \
                                        /* 'RVB'), alors que les extrema de type '_3' portent sur les trois composantes (de 'XYZ'    */ \
                                        /* ou de 'RVB').                                                                             */ \
                    Bblock                                                                                                              \
                    DONNEES_gFACTEUR_D_HOMOTHETIE_gCONSTANTE_DE_TRANSLATION(ajuster,minimum_3,maximum_3,minimum_1,maximum_1);           \
                                                                                                                                        \
                    Test(IFNE(minimum_effectif,maximum_effectif))                                                                       \
                         Bblock                                                                                                         \
                         EGAL(constante_de_translation                                                                                  \
                             ,DIVI(DET2(MINIMUM_1,MAXIMUM_1                                                                             \
                                       ,minimum_effectif,maximum_effectif                                                               \
                                        )                                                                                               \
                                  ,SOUS(maximum_effectif,minimum_effectif)                                                              \
                                   )                                                                                                    \
                              );                                                                                                        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Procedure de calcul d'une constante de translation (introduite le 20091026182237).        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N S   L I N E A I R E S   D E S   C O O R D O N N E E S  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   UTILISER_LES_COORDONNEES_CARTESIENNES                                                                                         \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(utiliser_les_coordonnees_cartesiennes,UTILISER_LES_COORDONNEES_CARTESIENNES)));
                                        /* Indique si l'on doit introduire des coordonnees cartesiennes {X,Y,Z} ('VRAI') ou bien     */
                                        /* des coordonnees spheriques {rho,theta,phi} ('FAUX'). On notera que pour faire une         */
                                        /* representation bidimensionnelle en coordonnees polaires, il convient de ne pas oublier    */
                                        /* que c'est alors 'phi' qui joue le role de 'theta' des veritables coordonnees polaires     */
                                        /* ('v $ximD/definit.1$DEF cartesienne_3D') ; de plus, il faudra alors prendre :             */
                                        /*                                                                                           */
                                        /*                  theta=$pis2                                                              */
                                        /*                                                                                           */
                                        /* et donc utiliser :                                                                        */
                                        /*                                                                                           */
                                        /*                  {rho,phi}                                                                */
                                        /*                                                                                           */
                                        /* ATTENTION, si 'IL_NE_FAUT_PAS(utiliser_les_coordonnees_cartesiennes)', on se retrouve     */
                                        /* avec des coordonnees dans [-1,+1], auquel cas, il faut utiliser :                         */
                                        /*                                                                                           */
                                        /*                  AXYZ=1 BXYZ=0                                                            */
                                        /*                                                                                           */

#define   FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_RHO                                                                                     \
                    FU
#define   CONSTANTE_DE_TRANSLATION_DE_LA_COORDONNEE_RHO                                                                                 \
                    FZERO
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_de_la_coordonnee_RHO,FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_RHO)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_de_la_coordonnee_RHO,CONSTANTE_DE_TRANSLATION_DE_LA_COORDONNEE_RHO)));

#define   FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_THETA                                                                                   \
                    FU
#define   CONSTANTE_DE_TRANSLATION_DE_LA_COORDONNEE_THETA                                                                               \
                    FZERO
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_de_la_coordonnee_THETA,FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_THETA)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_de_la_coordonnee_THETA,CONSTANTE_DE_TRANSLATION_DE_LA_COORDONNEE_THETA)));

#define   FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_PHI                                                                                     \
                    FU
#define   CONSTANTE_DE_TRANSLATION_DE_LA_COORDONNEE_PHI                                                                                 \
                    FZERO
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_de_la_coordonnee_PHI,FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_PHI)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_de_la_coordonnee_PHI,CONSTANTE_DE_TRANSLATION_DE_LA_COORDONNEE_PHI)));
                                        /* Une transformation du type 'A.c+B' sera appliquee individuellement a chaque coordonnee    */
                                        /* spherique avant toute chose...                                                            */

#define   FACTEUR_D_HOMOTHETIE_XYZ(facteur_d_homothetie,minimum_3,maximum_3,minimum_1,maximum_1,MINIMUM_1,MAXIMUM_1)                    \
                    Bblock                                                                                                              \
                    gFACTEUR_D_HOMOTHETIE(ajuster_automatiquement_les_coordonnees_cartesiennes_independamment_homothetie                \
                                         ,facteur_d_homothetie                                                                          \
                                         ,minimum_3,maximum_3                                                                           \
                                         ,minimum_1,maximum_1                                                                           \
                                         ,MINIMUM_1,MAXIMUM_1                                                                           \
                                          )                                                                                             \
                    Eblock                                                                                                              \
                                        /* Procedure de calcul d'un facteur d'homothetie.                                            */
#define   CONSTANTE_DE_TRANSLATION_XYZ(constante_de_translation,minimum_3,maximum_3,minimum_1,maximum_1,MINIMUM_1,MAXIMUM_1)            \
                    Bblock                                                                                                              \
                    gCONSTANTE_DE_TRANSLATION(ajuster_automatiquement_les_coordonnees_cartesiennes_independamment_translation           \
                                             ,constante_de_translation                                                                  \
                                             ,minimum_3,maximum_3                                                                       \
                                             ,minimum_1,maximum_1                                                                       \
                                             ,MINIMUM_1,MAXIMUM_1                                                                       \
                                              )                                                                                         \
                    Eblock                                                                                                              \
                                        /* Procedure de calcul d'une constante de translation.                                       */

#define   AJUSTER_AUTOMATIQUEMENT_LES_COORDONNEES_CARTESIENNES                                                                          \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(ajuster_automatiquement_les_coordonnees_cartesiennes
                            ,AJUSTER_AUTOMATIQUEMENT_LES_COORDONNEES_CARTESIENNES
                             )
                )
     );
                                        /* Indique si les facteurs d'homothetie et de translation specifiques a 'X', 'Y' et 'Z'      */
                                        /* doivent etre evalues automatiquement ('VRAI') ou forces ('FAUX').                         */
#define   AJUSTER_AUTOMATIQUEMENT_LES_COORDONNEES_CARTESIENNES_INDEPENDAMMENT_HOMOTHETIE                                                \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(ajuster_automatiquement_les_coordonnees_cartesiennes_independamment_homothetie
                            ,AJUSTER_AUTOMATIQUEMENT_LES_COORDONNEES_CARTESIENNES_INDEPENDAMMENT_HOMOTHETIE
                             )
                )
     );
                                        /* Indique si les facteurs d'homothetie specifiques a 'X', 'Y' et 'Z'                        */
                                        /* doivent etre evalues automatiquement, mais independamment les unes des autres ('VRAI')    */
                                        /* ou pas ('FAUX') lorsque 'IL_FAUT(ajuster_automatiquement_les_coordonnees_cartesiennes)'   */
                                        /* (introduit le 20020329160656 pour 'v $xu/Felici.M/GenImages.01$Z Acinus_AjusterInd').     */
#define   AJUSTER_AUTOMATIQUEMENT_LES_COORDONNEES_CARTESIENNES_INDEPENDAMMENT_TRANSLATION                                               \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(ajuster_automatiquement_les_coordonnees_cartesiennes_independamment_translation
                            ,AJUSTER_AUTOMATIQUEMENT_LES_COORDONNEES_CARTESIENNES_INDEPENDAMMENT_TRANSLATION
                             )
                )
     );
                                        /* Indique si les facteurs de translation specifiques a 'X', 'Y' et 'Z'                      */
                                        /* doivent etre evalues automatiquement, mais independamment les unes des autres ('VRAI')    */
                                        /* ou pas ('FAUX') lorsque 'IL_FAUT(ajuster_automatiquement_les_coordonnees_cartesiennes)'   */
                                        /* (introduit le 20020329160656 pour 'v $xu/Felici.M/GenImages.01$Z Acinus_AjusterInd').     */
#define   LISTER_L_AJUSTEMENT_DES_COORDONNEES_CARTESIENNES                                                                              \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(lister_l_ajustement_des_coordonnees_cartesiennes
                            ,LISTER_L_AJUSTEMENT_DES_COORDONNEES_CARTESIENNES
                             )
                )
     );
                                        /* Indique si les facteurs d'homothetie apres ajustement automatique doivent etre listes.    */

#define   SUPER_FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_X                                                                                 \
                    FU
#define   FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_X                                                                                       \
                    FU
#define   CONSTANTE_DE_TRANSLATION_DE_LA_COORDONNEE_X                                                                                   \
                    FZERO
DEFV(Local,DEFV(Float,INIT(super_facteur_d_homothetie_de_la_coordonnee_X,SUPER_FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_X)));
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_de_la_coordonnee_X,FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_X)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_de_la_coordonnee_X,CONSTANTE_DE_TRANSLATION_DE_LA_COORDONNEE_X)));

#define   SUPER_FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_Y                                                                                 \
                    FU
#define   FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_Y                                                                                       \
                    FU
#define   CONSTANTE_DE_TRANSLATION_DE_LA_COORDONNEE_Y                                                                                   \
                    FZERO
DEFV(Local,DEFV(Float,INIT(super_facteur_d_homothetie_de_la_coordonnee_Y,SUPER_FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_Y)));
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_de_la_coordonnee_Y,FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_Y)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_de_la_coordonnee_Y,CONSTANTE_DE_TRANSLATION_DE_LA_COORDONNEE_Y)));

#define   SUPER_FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_Z                                                                                 \
                    FU
#define   FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_Z                                                                                       \
                    FU
#define   CONSTANTE_DE_TRANSLATION_DE_LA_COORDONNEE_Z                                                                                   \
                    FZERO
DEFV(Local,DEFV(Float,INIT(super_facteur_d_homothetie_de_la_coordonnee_Z,SUPER_FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_Z)));
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_de_la_coordonnee_Z,FACTEUR_D_HOMOTHETIE_DE_LA_COORDONNEE_Z)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_de_la_coordonnee_Z,CONSTANTE_DE_TRANSLATION_DE_LA_COORDONNEE_Z)));
                                        /* Une transformation du type 'A.c+B' sera appliquee individuellement a chaque coordonnee    */
                                        /* cartesienne (ou spherique apres conversion en cartesienne) avant toute chose...           */
                                        /*                                                                                           */
                                        /* Les 'super_facteur_d_homothetie_de_la_coordonnee_?' ont ete introduits le 20051220213442  */
                                        /* pour 'v $xiirv/.ENTR.61.1.$U sAX='...                                                     */

#define   FACTEUR_D_HOMOTHETIE_DES_COORDONNEES                                                                                          \
                    FDEUX
#define   CONSTANTE_DE_TRANSLATION_DES_COORDONNEES                                                                                      \
                    NEGA(FU)
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_des_coordonnees,FACTEUR_D_HOMOTHETIE_DES_COORDONNEES)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_des_coordonnees,CONSTANTE_DE_TRANSLATION_DES_COORDONNEES)));
                                        /* Une transformation du type 'A.c+B' sera ensuite appliquee globalement aux coordonnees.    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E X T E N S I O N   D E S   C O O R D O N N E E S   S P H E R I Q U E S  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   COMPATIBILITE_20211211                                                                                                        \
                    FAUX
DEFV(Logical,INIT(compatibilite_20211211,COMPATIBILITE_20211211));
                                        /* Permet de faire des calculs compatibles a ceux faits anterieurement au 20211211115613...  */

#define   UTILISER_LES_COORDONNEES_SPHERIQUES_ETENDUES                                                                                  \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(utiliser_les_coordonnees_spheriques_etendues,UTILISER_LES_COORDONNEES_SPHERIQUES_ETENDUES)));
                                        /* Indique si l'on doit utiliser les coordonnees spheriques "standard" ('FAUX') ou bien      */
                                        /* les etendre ('VRAI'). Ce dispositif a ete introduit le 20150602113353...                  */

Denumer07(INIS(_EXTENSION_ellipsoid,UN)
                                        /* Extension 'v $xrs/ellipsoid.11$I'.                                                        */
              ,_EXTENSION_hyperboloid
                                        /* Extension 'v $xrs/hyperboloid.11$I'.                                                      */
              ,_EXTENSION_cylindre
                                        /* Extension 'v $xrs/cylindre.11$I'.                                                         */
              ,_EXTENSION_tore
                                        /* Extension 'v $xrs/tore.11$I'.                                                             */
              ,_EXTENSION_Mobius2D
                                        /* Extension 'v $xrs/Mobius2D.11$I'.                                                         */
              ,_EXTENSION_project2D
                                        /* Extension 'v $xrs/project2D.11$I'.                                                        */
              ,DERNIERE_EXTENSION
         ,nom_des_EXTENSIONS_DES_COORDONNEES_SPHERIQUES
          );
#define   EXTENSION_ellipsoid                                                                                                           \
                    ENUM(_EXTENSION_ellipsoid)
#define   EXTENSION_hyperboloid                                                                                                         \
                    ENUM(_EXTENSION_hyperboloid)
#define   EXTENSION_cylindre                                                                                                            \
                    ENUM(_EXTENSION_cylindre)
#define   EXTENSION_tore                                                                                                                \
                    ENUM(_EXTENSION_tore)
#define   EXTENSION_Mobius2D                                                                                                            \
                    ENUM(_EXTENSION_Mobius2D)
#define   EXTENSION_project2D                                                                                                           \
                    ENUM(_EXTENSION_project2D)

#define   NUMERO_DE_L_EXTENSION_DES_COORDONNEES_SPHERIQUES                                                                              \
                    EXTENSION_ellipsoid
DEFV(Local,DEFV(Logical,INIT(numero_de_l_extension_des_coordonnees_spheriques,NUMERO_DE_L_EXTENSION_DES_COORDONNEES_SPHERIQUES)));
                                        /* Extension par defaut des coordonnees spheriques...                                        */

#define   PARAMETRES_DES_EXTENSIONS_DES_COORDONNEES_SPHERIQUES                                                                          \
                    FU
DEFV(Local,DEFV(Float,INIT(extension_des_coordonnees_spheriques_parametre_01,PARAMETRES_DES_EXTENSIONS_DES_COORDONNEES_SPHERIQUES)));
DEFV(Local,DEFV(Float,INIT(extension_des_coordonnees_spheriques_parametre_02,PARAMETRES_DES_EXTENSIONS_DES_COORDONNEES_SPHERIQUES)));
DEFV(Local,DEFV(Float,INIT(extension_des_coordonnees_spheriques_parametre_03,PARAMETRES_DES_EXTENSIONS_DES_COORDONNEES_SPHERIQUES)));
DEFV(Local,DEFV(Float,INIT(extension_des_coordonnees_spheriques_parametre_04,PARAMETRES_DES_EXTENSIONS_DES_COORDONNEES_SPHERIQUES)));
DEFV(Local,DEFV(Float,INIT(extension_des_coordonnees_spheriques_parametre_05,PARAMETRES_DES_EXTENSIONS_DES_COORDONNEES_SPHERIQUES)));
DEFV(Local,DEFV(Float,INIT(extension_des_coordonnees_spheriques_parametre_06,PARAMETRES_DES_EXTENSIONS_DES_COORDONNEES_SPHERIQUES)));
DEFV(Local,DEFV(Float,INIT(extension_des_coordonnees_spheriques_parametre_07,PARAMETRES_DES_EXTENSIONS_DES_COORDONNEES_SPHERIQUES)));
DEFV(Local,DEFV(Float,INIT(extension_des_coordonnees_spheriques_parametre_08,PARAMETRES_DES_EXTENSIONS_DES_COORDONNEES_SPHERIQUES)));
DEFV(Local,DEFV(Float,INIT(extension_des_coordonnees_spheriques_parametre_09,PARAMETRES_DES_EXTENSIONS_DES_COORDONNEES_SPHERIQUES)));
                                        /* Parametres des differentes fonctions {Fx,Fy,Fz}...                                        */

#include  xrs/ellipsoid.11.I"
#include  xrs/hyperboloid.11.I"
#include  xrs/cylindre.11.I"
#include  xrs/tore.11.I"
#include  xrs/Mobius2D.11.I"
#include  xrs/project2D.11.I"
                                        /* Liste des extensions disponibles a la date du 20150602113353...                           */

#define   MINIMUM_DE_U_THETA                                                                                                            \
                    FZERO
#define   MAXIMUM_DE_U_THETA                                                                                                            \
                    FU
#define   MINIMUM_DE_V_PHI                                                                                                              \
                    FZERO
#define   MAXIMUM_DE_V_PHI                                                                                                              \
                    FU
DEFV(Local,DEFV(Float,INIT(minimum_de_u_theta,MINIMUM_DE_U_THETA)));
DEFV(Local,DEFV(Float,INIT(maximum_de_u_theta,MAXIMUM_DE_U_THETA)));
DEFV(Local,DEFV(Float,INIT(minimum_de_v_phi,MINIMUM_DE_V_PHI)));
DEFV(Local,DEFV(Float,INIT(maximum_de_v_phi,MAXIMUM_DE_V_PHI)));
                                        /* Donnees specifiques a 'EXTENSION_project2D' (introduites le 20150604211734)...            */
                                        /*                                                                                           */
                                        /* A titre d'exemple, pour les projections {Fx,Fy,Fz} definissant une sphere, on utilisera : */
                                        /*                                                                                           */
                                        /*                  minimum_de_u_theta = 0                                                   */
                                        /*                  maximum_de_u_theta = $dpi                                                */
                                        /*                                                                                           */
                                        /*                  minimum_de_v_phi   = 0                                                   */
                                        /*                  maximum_de_v_phi   = $dpi                                                */
                                        /*                                                                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N S   L I N E A I R E S   D E S   D E R I V E E S  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   FACTEUR_D_HOMOTHETIE_DE_LA_DERIVEE_X                                                                                          \
                    FU
#define   CONSTANTE_DE_TRANSLATION_DE_LA_DERIVEE_X                                                                                      \
                    FZERO
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_de_la_derivee_X,FACTEUR_D_HOMOTHETIE_DE_LA_DERIVEE_X)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_de_la_derivee_X,CONSTANTE_DE_TRANSLATION_DE_LA_DERIVEE_X)));

#define   FACTEUR_D_HOMOTHETIE_DE_LA_DERIVEE_Y                                                                                          \
                    FU
#define   CONSTANTE_DE_TRANSLATION_DE_LA_DERIVEE_Y                                                                                      \
                    FZERO
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_de_la_derivee_Y,FACTEUR_D_HOMOTHETIE_DE_LA_DERIVEE_Y)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_de_la_derivee_Y,CONSTANTE_DE_TRANSLATION_DE_LA_DERIVEE_Y)));

#define   FACTEUR_D_HOMOTHETIE_DE_LA_DERIVEE_Z                                                                                          \
                    FU
#define   CONSTANTE_DE_TRANSLATION_DE_LA_DERIVEE_Z                                                                                      \
                    FZERO
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_de_la_derivee_Z,FACTEUR_D_HOMOTHETIE_DE_LA_DERIVEE_Z)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_de_la_derivee_Z,CONSTANTE_DE_TRANSLATION_DE_LA_DERIVEE_Z)));
                                        /* Une transformation du type 'A.d+B' sera appliquee individuellement a chaque derivee       */
                                        /* avant toute chose...                                                                      */

#define   FACTEUR_D_HOMOTHETIE_DES_DERIVEES                                                                                             \
                    FU
#define   CONSTANTE_DE_TRANSLATION_DES_DERIVEES                                                                                         \
                    FZERO
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_des_derivees,FACTEUR_D_HOMOTHETIE_DES_DERIVEES)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_des_derivees,CONSTANTE_DE_TRANSLATION_DES_DERIVEES)));
                                        /* Une transformation du type 'A.c+B' sera ensuite appliquee globalement aux derivees.       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N S   L I N E A I R E S   D E S   R A Y O N S  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   FACTEUR_D_HOMOTHETIE_DU_RAYON                                                                                                 \
                    FACTEUR_D_HOMOTHETIE_DES_COORDONNEES
#define   CONSTANTE_DE_TRANSLATION_DU_RAYON                                                                                             \
                    FZERO
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_du_rayon,FACTEUR_D_HOMOTHETIE_DU_RAYON)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_du_rayon,CONSTANTE_DE_TRANSLATION_DU_RAYON)));
                                        /* Une transformation du type 'A.r+B' sera appliquee au rayon...                             */
                                        /*                                                                                           */
                                        /* ATTENTION, le 19971113103239, la valeur par defaut 'FACTEUR_D_HOMOTHETIE_DU_RAYON' est    */
                                        /* passee de 'FU' a 'FACTEUR_D_HOMOTHETIE_DES_COORDONNEES' afin qu'implicitement les         */
                                        /* coordonnees et le rayon subissent le meme traitement...                                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N S   L I N E A I R E S   D E S   C O U L E U R S  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   FACTEUR_D_HOMOTHETIE_RVB(facteur_d_homothetie,minimum_3,maximum_3,minimum_1,maximum_1,MINIMUM_1,MAXIMUM_1)                    \
                    Bblock                                                                                                              \
                    gFACTEUR_D_HOMOTHETIE(ajuster_automatiquement_les_couleurs_independamment_homothetie                                \
                                         ,facteur_d_homothetie                                                                          \
                                         ,minimum_3,maximum_3                                                                           \
                                         ,minimum_1,maximum_1                                                                           \
                                         ,MINIMUM_1,MAXIMUM_1                                                                           \
                                          )                                                                                             \
                    Eblock                                                                                                              \
                                        /* Procedure de calcul d'un facteur d'homothetie (introduite le 20091024085314).             */
#define   CONSTANTE_DE_TRANSLATION_RVB(constante_de_translation,minimum_3,maximum_3,minimum_1,maximum_1,MINIMUM_1,MAXIMUM_1)            \
                    Bblock                                                                                                              \
                    gCONSTANTE_DE_TRANSLATION(ajuster_automatiquement_les_couleurs_independamment_translation                           \
                                             ,constante_de_translation                                                                  \
                                             ,minimum_3,maximum_3                                                                       \
                                             ,minimum_1,maximum_1                                                                       \
                                             ,MINIMUM_1,MAXIMUM_1                                                                       \
                                              )                                                                                         \
                    Eblock                                                                                                              \
                                        /* Procedure de calcul d'une constante de translation (introduite le 20091024085314).        */

#define   AJUSTER_AUTOMATIQUEMENT_LES_COULEURS                                                                                          \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(ajuster_automatiquement_les_couleurs
                            ,AJUSTER_AUTOMATIQUEMENT_LES_COULEURS
                             )
                )
     );
                                        /* Indique si les facteurs d'homothetie et de translation specifiques a 'X', 'Y' et 'Z'      */
                                        /* doivent etre evalues automatiquement ('VRAI') ou forces ('FAUX').                         */
#define   AJUSTER_AUTOMATIQUEMENT_LES_COULEURS_INDEPENDAMMENT_HOMOTHETIE                                                                \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(ajuster_automatiquement_les_couleurs_independamment_homothetie
                            ,AJUSTER_AUTOMATIQUEMENT_LES_COULEURS_INDEPENDAMMENT_HOMOTHETIE
                             )
                )
     );
                                        /* Indique si les facteurs d'homothetie specifiques a 'X', 'Y' et 'Z'                        */
                                        /* doivent etre evalues automatiquement, mais independamment les unes des autres ('VRAI')    */
                                        /* ou pas ('FAUX') lorsque 'IL_FAUT(ajuster_automatiquement_les_couleurs)'.                  */
#define   AJUSTER_AUTOMATIQUEMENT_LES_COULEURS_INDEPENDAMMENT_TRANSLATION                                                               \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(ajuster_automatiquement_les_couleurs_independamment_translation
                            ,AJUSTER_AUTOMATIQUEMENT_LES_COULEURS_INDEPENDAMMENT_TRANSLATION
                             )
                )
     );
                                        /* Indique si les facteurs de translation specifiques a 'X', 'Y' et 'Z'                      */
                                        /* doivent etre evalues automatiquement, mais independamment les unes des autres ('VRAI')    */
                                        /* ou pas ('FAUX') lorsque 'IL_FAUT(ajuster_automatiquement_les_couleurs)'.                  */
#define   LISTER_L_AJUSTEMENT_DES_COULEURS                                                                                              \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(lister_l_ajustement_des_couleurs
                            ,LISTER_L_AJUSTEMENT_DES_COULEURS
                             )
                )
     );
                                        /* Indique si les facteurs d'homothetie apres ajustement automatique doivent etre listes.    */

#define   FACTEUR_D_HOMOTHETIE_DES_COULEURS                                                                                             \
                    FU
#define   CONSTANTE_DE_TRANSLATION_DES_COULEURS                                                                                         \
                    FZERO
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_des_couleurs,FACTEUR_D_HOMOTHETIE_DES_COULEURS)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_des_couleurs,CONSTANTE_DE_TRANSLATION_DES_COULEURS)));
                                        /* Une transformation du type 'A.c+B' sera appliquee aux couleurs...                         */
                                        /* Indique si les facteurs d'homothetie apres ajustement automatique doivent etre listes.    */

#define   FACTEUR_D_HOMOTHETIE_DE_LA_COULEUR_ROUGE                                                                                      \
                    FU
#define   CONSTANTE_DE_TRANSLATION_DE_LA_COULEUR_ROUGE                                                                                  \
                    FZERO
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_de_la_couleur_ROUGE,FACTEUR_D_HOMOTHETIE_DE_LA_COULEUR_ROUGE)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_de_la_couleur_ROUGE,CONSTANTE_DE_TRANSLATION_DE_LA_COULEUR_ROUGE)));

#define   FACTEUR_D_HOMOTHETIE_DE_LA_COULEUR_VERTE                                                                                      \
                    FU
#define   CONSTANTE_DE_TRANSLATION_DE_LA_COULEUR_VERTE                                                                                  \
                    FZERO
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_de_la_couleur_VERTE,FACTEUR_D_HOMOTHETIE_DE_LA_COULEUR_VERTE)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_de_la_couleur_VERTE,CONSTANTE_DE_TRANSLATION_DE_LA_COULEUR_VERTE)));

#define   FACTEUR_D_HOMOTHETIE_DE_LA_COULEUR_BLEUE                                                                                      \
                    FU
#define   CONSTANTE_DE_TRANSLATION_DE_LA_COULEUR_BLEUE                                                                                  \
                    FZERO
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_de_la_couleur_BLEUE,FACTEUR_D_HOMOTHETIE_DE_LA_COULEUR_BLEUE)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_de_la_couleur_BLEUE,CONSTANTE_DE_TRANSLATION_DE_LA_COULEUR_BLEUE)));
                                        /* Une transformation du type 'A.c+B' sera appliquee individuellement a chaque couleur       */
                                        /* avant toute chose (introduite le 20091024085314)...                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   L I S T E S   D E S C R I P T I V E S   D E S   P A R T I C U L E S  :                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* ATTENTION, a ne pas confondre :                                                           */
                                        /*                                                                                           */
                                        /* 1-'nombre_de_periodes_de_la_simulation' qui definit finalement le nombre d'images que     */
                                        /* l'on va generer et qui conditionne toutes les listes (sans exception...) definies par     */
                                        /* 'fTRANSFORMAT_31(...)', et                                                                */
                                        /*                                                                                           */
                                        /* 2-'nombre_d_iterations' qui definit le nombre de particules visualisees dans chaque       */
                                        /* image ; les listes relatives aux particules sont definies elles-aussi a l'aide de la      */
                                        /* procedure 'dTRANSFORMAT_31(...)' ce qui signifie que 'nombre_d_iterations' est limite     */
                                        /* par 'NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION'...                                      */
                                        /*                                                                                           */

#define   MINIMUM_DES___X                                                                                                               \
                    COORDONNEE_BARYCENTRIQUE_MINIMALE
#define   MAXIMUM_DES___X                                                                                                               \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE

#define   MINIMUM_DES___Y                                                                                                               \
                    COORDONNEE_BARYCENTRIQUE_MINIMALE
#define   MAXIMUM_DES___Y                                                                                                               \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE

#define   MINIMUM_DES___Z                                                                                                               \
                    NEGA(COORDONNEE_BARYCENTRIQUE_CENTRALE)
#define   MAXIMUM_DES___Z                                                                                                               \
                    NEUT(COORDONNEE_BARYCENTRIQUE_CENTRALE)

#define   X_IMPLICITE                                                                                                                   \
                    Xcentre_ESPACE
#define   Y_IMPLICITE                                                                                                                   \
                    Ycentre_ESPACE
#define   Z_IMPLICITE                                                                                                                   \
                    hZmin_ESPACE
                                        /* Definition des coordonnees cartesiennes implicites. On notera l'utilisation de            */
                                        /* 'hZmin_ESPACE' et non pas de 'Zcentre_ESPACE' comme le voudrait la logique ; ceci est     */
                                        /* du au fait que cette derniere valeur interferait malheureusement avec la position de      */
                                        /* l'observateur dans le cube de visualisation, et rendrait invisible les particules...      */
                                        /*                                                                                           */
                                        /* Malgre tout, je note que dans les cas bidimensionnels {OX,OY}, on aura en general         */
                                        /* interet a faire :                                                                         */
                                        /*                                                                                           */
                                        /*                  LISTE_Z=0.5         (c'est-a-dire 'Zcentre_ESPACE')                      */
                                        /*                                                                                           */
                                        /* comme c'est le cas, par exemple, de 'v $xiirv/GOLD.21'...                                 */
fTRANSFORMAT_31(fichier_LISTE_X);
fTRANSFORMAT_31(fichier_LISTE_Y);
fTRANSFORMAT_31(fichier_LISTE_Z);
                                        /* Definition des fichiers de listes de coordonnees cartesiennes.                            */
                                        /*                                                                                           */
                                        /* ATTENTION, les coordonnees cartesiennes des points a visualiser doivent etre definies     */
                                        /* ainsi :                                                                                   */
                                        /*                                                                                           */
                                        /*                  x E [0,1]                                                                */
                                        /*                  y E [0,1]                                                                */
                                        /*                  z E [0,1]                                                                */
                                        /*                                                                                           */

#define   dX_IMPLICITE                                                                                                                  \
                    FZERO
#define   dY_IMPLICITE                                                                                                                  \
                    FZERO
#define   dZ_IMPLICITE                                                                                                                  \
                    FZERO
                                        /* Definition des derivees des coordonnees cartesiennes.                                     */
fTRANSFORMAT_31(fichier_LISTE_dX);
fTRANSFORMAT_31(fichier_LISTE_dY);
fTRANSFORMAT_31(fichier_LISTE_dZ);
                                        /* Definition des fichiers de listes des derivees des coordonnees cartesiennes.              */

#define   RHO_IMPLICITE                                                                                                                 \
                    FZERO
#define   THETA_IMPLICITE                                                                                                               \
                    FZERO
#define   PHI_IMPLICITE                                                                                                                 \
                    FZERO
                                        /* Definition des coordonnees spheriques implicites.                                         */
fTRANSFORMAT_31(fichier_LISTE_RHO);
fTRANSFORMAT_31(fichier_LISTE_THETA);
fTRANSFORMAT_31(fichier_LISTE_PHI);
                                        /* Definition des fichiers de listes de coordonnees spheriques.                              */
                                        /*                                                                                           */
                                        /* ATTENTION, les coordonnees spheriques des points a visualiser doivent etre definies       */
                                        /* ainsi :                                                                                   */
                                        /*                                                                                           */
                                        /*                  rho   E [0,1]                                                            */
                                        /*                  phi   E [0,2.pi]                                                         */
                                        /*                  theta E [0,pi]                                                           */
                                        /*                                                                                           */

#define   tX_IMPLICITE                                                                                                                  \
                    FZERO
#define   tY_IMPLICITE                                                                                                                  \
                    FZERO
#define   tZ_IMPLICITE                                                                                                                  \
                    FZERO
                                        /* Definition des translations implicites des coordonnees.                                   */
fTRANSFORMAT_31(fichier_LISTE_tX);
fTRANSFORMAT_31(fichier_LISTE_tY);
fTRANSFORMAT_31(fichier_LISTE_tZ);
                                        /* Definition des fichiers de listes de translations implicites des coordonnees.             */

#define   RAYON_IMPLICITE                                                                                                               \
                    RAYON_DE_VISUALISATION                                                                                              \
                                        /* Definition de la valeur implicite du rayon de materialisation.                            */
fTRANSFORMAT_31(fichier_LISTE_RAYON);
                                        /* Definition du fichier de liste des rayons.                                                */
                                        /*                                                                                           */
                                        /* ATTENTION, le rayon est en unite d'ecran...                                               */

#define   MINIMUM_DES___ROUGE                                                                                                           \
                    FLOT__NOIR
#define   MAXIMUM_DES___ROUGE                                                                                                           \
                    FLOT__BLANC

#define   MINIMUM_DES___VERTE                                                                                                           \
                    FLOT__NOIR
#define   MAXIMUM_DES___VERTE                                                                                                           \
                    FLOT__BLANC

#define   MINIMUM_DES___BLEUE                                                                                                           \
                    FLOT__NOIR
#define   MAXIMUM_DES___BLEUE                                                                                                           \
                    FLOT__BLANC

#define   ROUGE_IMPLICITE                                                                                                               \
                    FLOT__BLANC
#define   VERTE_IMPLICITE                                                                                                               \
                    FLOT__BLANC
#define   BLEUE_IMPLICITE                                                                                                               \
                    FLOT__BLANC
                                        /* Definition des composantes chromatiques implicites.                                       */

fTRANSFORMAT_31(fichier_LISTE_ROUGE);
fTRANSFORMAT_31(fichier_LISTE_VERTE);
fTRANSFORMAT_31(fichier_LISTE_BLEUE);
                                        /* Definition des fichiers de listes de vraies couleurs (excluant les fausses).              */
                                        /*                                                                                           */
                                        /* ATTENTION, les couleurs des points a visualiser doivent etre definies ainsi :             */
                                        /*                                                                                           */
                                        /*                  ROUGE E [NOIR,BLANC]                                                     */
                                        /*                  VERTE E [NOIR,BLANC]                                                     */
                                        /*                  BLEUE E [NOIR,BLANC]                                                     */
                                        /*                                                                                           */

#define   LES_NIVEAUX_SONT_DENORMALISES                                                                                                 \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(les_niveaux_sont_denormalises,LES_NIVEAUX_SONT_DENORMALISES)));
                                        /* Afin de pouvoir introduire des niveaux denormalises. Ceci a ete introduit le              */
                                        /* 20131204095011 pour 'v $xiirv/.GOLD.81.1.$U niveaux_denormalises'...                      */

#define   NIVEAU_IMPLICITE                                                                                                              \
                    FLOT__BLANC
fTRANSFORMAT_31(fichier_LISTE_NIVEAU);
                                        /* Definition du fichier de listes des fausses couleurs (excluant les vraies couleurs).      */
                                        /*                                                                                           */
                                        /* ATTENTION, les couleurs des points a visualiser doivent etre definies ainsi :             */
                                        /*                                                                                           */
                                        /*                  NIVEAU E [NOIR,BLANC]                                                    */
                                        /*                                                                                           */

#include  xrv/particule.22.I"
                                        /* Recuperation d'un fichier contenant une liste de type {X,Y,Z} ou {R,V,B}.                 */

                                        /* ATTENTION, a ne pas confondre :                                                           */
                                        /*                                                                                           */
                                        /* 1-'nombre_de_periodes_de_la_simulation' qui definit finalement le nombre d'images que     */
                                        /* l'on va generer et qui conditionne toutes les listes (sans exception...) definies par     */
                                        /* 'fTRANSFORMAT_31(...)', et                                                                */
                                        /*                                                                                           */
                                        /* 2-'nombre_d_iterations' qui definit le nombre de particules visualisees dans chaque       */
                                        /* image ; les listes relatives aux particules sont definies elles-aussi a l'aide de la      */
                                        /* procedure 'dTRANSFORMAT_31(...)' ce qui signifie que 'nombre_d_iterations' est limite     */
                                        /* par 'NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION'...                                      */
                                        /*                                                                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   A U T O M A T I Q U E   D E S   D E R I V E E S  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   CALCULER_AUTOMATIQUEMENT_LES_DERIVEES_PAR_DES_DIFFERENCES                                                                     \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(calculer_automatiquement_les_derivees_par_des_differences
                            ,CALCULER_AUTOMATIQUEMENT_LES_DERIVEES_PAR_DES_DIFFERENCES
                             )
                )
     );
                                        /* Afin de permettre le calcul automatique des derivees au point 'N' par des differences     */
                                        /* des valeurs des coordonnees aux points 'N-1' et 'N+1'. Ce dispositif fut introduit le     */
                                        /* 20060809124105...                                                                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   P O I N T   D E   R E F E R E N C E   C O U R A N T  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrr/N_corps.11.I"

#define   CENTRE_REFERENCE(type1,type2)                                                                                                 \
                    COND(IL_FAUT(definir_la_scene_par_rapport_au_centre_de_l_espace)                                                    \
                        ,type1`centre_de_l_espace_pour_la_visualisation                                                                 \
                        ,ACCES_LISTE(liste_initiale_des`type1,corps_de_reference)                                                       \
                         )                                                                                                              \
                                        /* Recherche du corps de reference...                                                        */

#redefine DECENTRAGE_DES_COORDONNEES(coordonnee,type1,type2)                                                                            \
                    SOUS(coordonnee                                                                                                     \
                        ,CENTRE_REFERENCE(type1,type2)                                                                                  \
                         )                                                                                                              \
                                        /* Fonction de "decentrage" des coordonnees. ATTENTION, on notera un point tres important :  */ \
                                        /* le centre de l'espace a pour coordonnees :                                                */ \
                                        /*                                                                                           */ \
                                        /*                  centre={0,0,0}                                                           */ \
                                        /*                                                                                           */ \
                                        /* alors qu'en general, un corps de reference aura des coordonnees de l'ordre de :           */ \
                                        /*                                                                                           */ \
                                        /*                  reference={0.5,0.5,0.5}                                                  */ \
                                        /*                                                                                           */ \
                                        /* et en tout cas differente de celles de 'centre'. Dans ce dernier cas, on aura interet     */ \
                                        /* a utiliser :                                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  TRANSLATION_OX=0.5 TRANSLATION_OY=0.5                                    */ \
                                        /*                                                                                           */ \
                                        /* pour compenser cette difference. On verra a ce propos :                                   */ \
                                        /*                                                                                           */ \
                                        /*                  xivPdf 9 2 / .NCOR.1.22.$U                                               */ \
                                        /*                                                                                           */ \
                                        /* cela est utilise...                                                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D ' U N   E V E N T U E L   P O I N T   D E   J O N C T I O N  :                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   COMPATIBILITE_20171123                                                                                                        \
                    FAUX
DEFV(Logical,INIT(compatibilite_20171123,COMPATIBILITE_20171123));
                                        /* Permet de faire des calculs compatibles a ceux faits anterieurement au 20171123124237...  */

#define   DEFINIR_LE_POINT_DE_JONCTION_AVEC_L_UN_DES_CORPS                                                                              \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(definir_le_point_de_jonction_avec_l_un_des_corps
                            ,DEFINIR_LE_POINT_DE_JONCTION_AVEC_L_UN_DES_CORPS
                             )
                )
     );
                                        /* Indique si le point de jonction est l'un des corps ('VRAI'), ou bien un point arbitraire  */
                                        /* defini ci-apres ('FAUX').                                                                 */
#define   CORPS_DE_JONCTION                                                                                                             \
                    CORPS_DE_REFERENCE
DEFV(Local,DEFV(Int,INIT(corps_de_jonction,CORPS_DE_JONCTION)));
                                        /* Indique, si 'definir_le_point_de_jonction_avec_l_un_des_corps' est 'VRAI', le corps       */
                                        /* de reference sur lequel faire les jonctions.                                              */

#define   POINT_DE_JONCTION(liste,scalaire)                                                                                             \
                    COND(IL_FAUT(definir_le_point_de_jonction_avec_l_un_des_corps)                                                      \
                        ,ACCES_LISTE(liste,corps_de_jonction)                                                                           \
                        ,scalaire                                                                                                       \
                         )                                                                                                              \
                                        /* Recherche du corps de jonction...                                                         */

#define   X_POINT_DE_JONCTION                                                                                                           \
                    Xcentre_ESPACE
#define   Y_POINT_DE_JONCTION                                                                                                           \
                    Ycentre_ESPACE
#define   Z_POINT_DE_JONCTION                                                                                                           \
                    Zcentre_ESPACE
DEFV(Local,DEFV(Float,INIT(X_point_de_jonction,X_POINT_DE_JONCTION)));
DEFV(Local,DEFV(Float,INIT(Y_point_de_jonction,Y_POINT_DE_JONCTION)));
DEFV(Local,DEFV(Float,INIT(Z_point_de_jonction,Z_POINT_DE_JONCTION)));
                                        /* Definition des coordonnees cartesiennes d'un eventuel point de jonction, c'est-a-dire     */
                                        /* un point auquel seront joints tous les points lorsqu'ils sont isoles et lorsque cela      */
                                        /* est demande...                                                                            */

#define   ROUGE_POINT_DE_JONCTION                                                                                                       \
                    FLOT__BLANC
#define   VERTE_POINT_DE_JONCTION                                                                                                       \
                    FLOT__BLANC
#define   BLEUE_POINT_DE_JONCTION                                                                                                       \
                    FLOT__BLANC
DEFV(Local,DEFV(Float,INIT(ROUGE_point_de_jonction,ROUGE_POINT_DE_JONCTION)));
DEFV(Local,DEFV(Float,INIT(VERTE_point_de_jonction,VERTE_POINT_DE_JONCTION)));
DEFV(Local,DEFV(Float,INIT(BLEUE_point_de_jonction,BLEUE_POINT_DE_JONCTION)));
                                        /* Definition des composantes chromatiques d'un eventuel point de jonction...                */

#define   RAYON_DE_VISUALISATION_POINT_DE_JONCTION                                                                                      \
                    RAYON_DE_VISUALISATION
DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation_point_de_jonction,RAYON_DE_VISUALISATION_POINT_DE_JONCTION)));
                                        /* Rayon du disque materialisant un eventuel point de jonction...                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   I N I T I A L I S A T I O N S  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* Jusqu'au 20030311095504, '__VERSION__PERMETTRE_L_UTILISATION_D_UN_FOND' etait defini      */
                                        /* ici, mais cela est contraire aux tests dont il est l'objet dans                           */
                                        /* 'v $xrv/champs_5.12$I __VERSION__PERMETTRE_L_UTILISATION_D_UN_FOND' via                   */
                                        /* 'v $xrk/attractor.17$I champs_5.12', d'ou son deplacement a cette date...                 */

#include  xrk/attractor.18.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P O U R   D E S   R A I S O N S   D E   C O M P A T I B I L I T E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/integr.1B.vv.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V I S U A L I S A T I O N   D ' U N   E N S E M B L E   D E   P A R T I C U L E S  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_paletteA),NOM_PIPE));
                                        /* Nom de la palette a utiliser en cas de l'utilisation des fausses couleurs. C'est son      */
                                        /* absence/presence qui provoque le choix entre les vraies et les fausses couleurs...        */

     DONNEES_NECESSAIRES_A_L_UTILISATION_D_UN_FOND;

     gDEFINITION_LISTE(liste_initiale_des_X,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_Y,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_Z,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_dX,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_dY,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_dZ,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_RHO,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_THETA,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_PHI,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_tX,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_tY,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_tZ,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_RAYON,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_ROUGE,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_VERTE,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_BLEUE,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gDEFINITION_LISTE(liste_initiale_des_NIVEAU,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
                                        /* Afin de conserver la valeur initiale des differentes listes...                            */

#define   Image_Fx                                                                                                                      \
                    IFmage_ROUGE
#define   Image_Fy                                                                                                                      \
                    IFmage_VERTE
#define   Image_Fz                                                                                                                      \
                    IFmage_BLEUE

#include  xrs/project2D.1A.I"

DEFV(Local,DEFV(Float,INIT(A_Image_Fx,AMPLIFICATEUR_DES_IMAGES)));
DEFV(Local,DEFV(Float,INIT(A_Image_Fy,AMPLIFICATEUR_DES_IMAGES)));
DEFV(Local,DEFV(Float,INIT(A_Image_Fz,AMPLIFICATEUR_DES_IMAGES)));
DEFV(Local,DEFV(Float,INIT(B_Image_Fx,TRANSLATEUR_DES_IMAGES)));
DEFV(Local,DEFV(Float,INIT(B_Image_Fy,TRANSLATEUR_DES_IMAGES)));
DEFV(Local,DEFV(Float,INIT(B_Image_Fz,TRANSLATEUR_DES_IMAGES)));

#include  xrs/project2D.1B.I"
                                        /* Donnees specifiques au projecteur bidimensionnel (introduites le 20150604145519)...       */
                                        /*                                                                                           */
                                        /* Les transformateurs {A,B} des niveaux de {Fx,Fy,Fz} ont ete introduits le 20150605144605. */
     /*..............................................................................................................................*/
     INITIALISATIONS_GENERALES;
                                        /* Initialisations generales faites au tout debut...                                         */

     gINITIALISATION_LISTE(liste_initiale_des_X,X_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gINITIALISATION_LISTE(liste_initiale_des_Y,Y_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gINITIALISATION_LISTE(liste_initiale_des_Z,Z_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
                                        /* Initialisation des fichiers de listes de coordonnees cartesiennes.                        */
     gINITIALISATION_LISTE(liste_initiale_des_dX,dX_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gINITIALISATION_LISTE(liste_initiale_des_dY,dY_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gINITIALISATION_LISTE(liste_initiale_des_dZ,dZ_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
                                        /* Initialisation des fichiers de listes des derivees des coordonnees cartesiennes.          */
     gINITIALISATION_LISTE(liste_initiale_des_RHO,RHO_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gINITIALISATION_LISTE(liste_initiale_des_THETA,THETA_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gINITIALISATION_LISTE(liste_initiale_des_PHI,PHI_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
                                        /* Initialisation des fichiers de listes de coordonnees spheriques.                          */
     gINITIALISATION_LISTE(liste_initiale_des_tX,tX_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gINITIALISATION_LISTE(liste_initiale_des_tY,tY_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gINITIALISATION_LISTE(liste_initiale_des_tZ,tZ_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
                                        /* Initialisation des fichiers de listes de translations implicites des coordonnees.         */
     gINITIALISATION_LISTE(liste_initiale_des_RAYON,RAYON_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
                                        /* Initialisation du fichier de liste des rayons.                                            */
     gINITIALISATION_LISTE(liste_initiale_des_ROUGE,ROUGE_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gINITIALISATION_LISTE(liste_initiale_des_VERTE,VERTE_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
     gINITIALISATION_LISTE(liste_initiale_des_BLEUE,BLEUE_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
                                        /* Initialisation des fichiers de listes de vraies couleurs.                                 */

     gINITIALISATION_LISTE(liste_initiale_des_NIVEAU,NIVEAU_IMPLICITE,PREMIER_POINT_DES_LISTES,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
                                        /* Initialisation du fichier des listes de fausses couleurs.                                 */

#include  xrs/project2D.1C.I"
                                        /* Introduit le 20150604143557 pour definir les parametres du projecteur bidimensionnel...   */

#include  xrv/champs_5.1A.I"

#define   GET_ARGUMENT_L_____ajuster_automatiquement_les_coordonnees_independamment_homothetie                                          \
                    "ajuster_independamment_homothetie=""ajuster_h=""ajuster_coordonnees_independamment_homothetie="
#define   GET_ARGUMENT_L_____ajuster_automatiquement_les_coordonnees_independamment_translation                                         \
                    "ajuster_t=""ajuster_independamment_translation=""ajuster_coordonnees_independamment_translation="
                                        /* Afin de raccourcir une ligne suivante (introduit le 20070223142707)...                    */

     GET_ARGUMENTSv(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("compatibilite_20171123=",compatibilite_20171123);
                                        /* Option introduite le 20171123124237...                                                    */
                         GET_ARGUMENT_L("compatibilite_20211211=",compatibilite_20211211);
                                        /* Option introduite le 20211211115613...                                                    */
                         GET_ARGUMENT_L("grossissement_rayon_de_visualisation_____compatibilite_20250215=""compatibilite_20250215="
                                       ,grossissement_du_rayon_de_visualisation_des_points_____compatibilite_20250215
                                        );
                                        /* Option introduite le 20250215122855...                                                    */

                         PROCESS_ARGUMENT_I("nombre_points=""npoints=""iterations=",nombre_d_iterations
                                        /* Le 20090128082131 fut introduit "nombre_points=" pour simplifier l'usage...               */
                                           ,BLOC(VIDE;)
                                           ,BLOC(
                                                 Bblock
                                                 PRINT_AVERTISSEMENT("'npoints=''iterations=' doit etre defini avant tout fichier");

                                                 Test(IFGT(nombre_d_iterations,NOMBRE_MAXIMAL_DE_POINTS_GERABLES))
                                                      Bblock
                                                      PRINT_ERREUR("le nombre de points a gerer est trop important");
                                                      PRINT_ERREUR("il va donc etre seuille");
                                                      CAL1(Prer2("Il vaut %d alors que le maximum est de %d.\n"
                                                                ,nombre_d_iterations
                                                                ,NOMBRE_MAXIMAL_DE_POINTS_GERABLES
                                                                 )
                                                           );

                                                      EGAL(nombre_d_iterations,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
                                        /* Et on seuille le nombre de points...                                                      */
                                                      Eblock
                                                 ATes
                                                      Bblock
                                                      Eblock
                                                 ETes
                                                 Eblock
                                                 )
                                            );
                                        /* ATTENTION : la recuperation de 'nombre_d_iterations' doit preceder les                    */
                                        /* 'PROCESS_ARGUMENT_C(...)' qui suivent car ils l'utilisent.                                */

                         PROCESS_ARGUMENTS_GEOMETRIQUES;

                         PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_12;
                                        /* Ces parametres ont ete introduits le 20021104162112 afin de pouvoir etre utilises, si     */
                                        /* necessaires, avant chacun des 'PROCESS_ARGUMENT_C(...,BLOC(lTRANSFORMAT_12(...);))' qui   */
                                        /* suivent. Par exemple, cela permettra d'utiliser le meme fchier pour 'LISTE_X' et          */
                                        /* 'LISTE_Y', mais en les decalant differemment...                                           */

                         PROCESS_ARGUMENT_FICHIER("LISTE_X="
                                                 ,fichier_LISTE_X
                                                 ,liste_initiale_des_X
                                                 ,X_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );
                         PROCESS_ARGUMENT_FICHIER("LISTE_Y="
                                                 ,fichier_LISTE_Y
                                                 ,liste_initiale_des_Y
                                                 ,Y_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );
                         PROCESS_ARGUMENT_FICHIER("LISTE_Z="
                                                 ,fichier_LISTE_Z
                                                 ,liste_initiale_des_Z
                                                 ,Z_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );

                         PROCESS_ARGUMENT_FICHIER("LISTE_dX="
                                                 ,fichier_LISTE_dX
                                                 ,liste_initiale_des_dX
                                                 ,dX_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );
                         PROCESS_ARGUMENT_FICHIER("LISTE_dY="
                                                 ,fichier_LISTE_dY
                                                 ,liste_initiale_des_dY
                                                 ,dY_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );
                         PROCESS_ARGUMENT_FICHIER("LISTE_dZ="
                                                 ,fichier_LISTE_dZ
                                                 ,liste_initiale_des_dZ
                                                 ,dZ_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );

                         PROCESS_ARGUMENT_FICHIER("LISTE_RHO="
                                                 ,fichier_LISTE_RHO
                                                 ,liste_initiale_des_RHO
                                                 ,RHO_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );
                         PROCESS_ARGUMENT_FICHIER("LISTE_THETA="
                                                 ,fichier_LISTE_THETA
                                                 ,liste_initiale_des_THETA
                                                 ,THETA_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );
                         PROCESS_ARGUMENT_FICHIER("LISTE_PHI="
                                                 ,fichier_LISTE_PHI
                                                 ,liste_initiale_des_PHI
                                                 ,PHI_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );

                         PROCESS_ARGUMENT_FICHIER("LISTE_tX="
                                                 ,fichier_LISTE_tX
                                                 ,liste_initiale_des_tX
                                                 ,tX_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );
                         PROCESS_ARGUMENT_FICHIER("LISTE_tY="
                                                 ,fichier_LISTE_tY
                                                 ,liste_initiale_des_tY
                                                 ,tY_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );
                         PROCESS_ARGUMENT_FICHIER("LISTE_tZ="
                                                 ,fichier_LISTE_tZ
                                                 ,liste_initiale_des_tZ
                                                 ,tZ_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );

                         PROCESS_ARGUMENT_FICHIER("LISTE_RAYON="
                                                 ,fichier_LISTE_RAYON
                                                 ,liste_initiale_des_RAYON
                                                 ,RAYON_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );

                         PROCESS_ARGUMENT_FICHIER("LISTE_ROUGE="
                                                 ,fichier_LISTE_ROUGE
                                                 ,liste_initiale_des_ROUGE
                                                 ,ROUGE_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );
                         PROCESS_ARGUMENT_FICHIER("LISTE_VERTE="
                                                 ,fichier_LISTE_VERTE
                                                 ,liste_initiale_des_VERTE
                                                 ,VERTE_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );
                         PROCESS_ARGUMENT_FICHIER("LISTE_BLEUE="
                                                 ,fichier_LISTE_BLEUE
                                                 ,liste_initiale_des_BLEUE
                                                 ,BLEUE_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );

                         GET_ARGUMENT_C("paletteA=""palette=""pA=""p=",nom_paletteA);
                         GET_ARGUMENT_L("niveaux_denormalises=""ndn=",les_niveaux_sont_denormalises);
                         GET_ARGUMENT_N("niveaux_normalises=""nn=",les_niveaux_sont_denormalises);
                                        /* Cette option fut introduite le 20131204095011...                                          */
                         PROCESS_ARGUMENT_FICHIER("LISTE_NIVEAU="
                                                 ,fichier_LISTE_NIVEAU
                                                 ,liste_initiale_des_NIVEAU
                                                 ,NIVEAU_IMPLICITE
                                                 ,lTRANSFORMAT_12
                                                  );

                         PROCESS_ARGUMENTS_DE_VISUALISATION;

                         PROCESS_ARGUMENTS_DE_VISUALISATION_DES_AXES_DE_COORDONNEES;

                         GET_ARGUMENT_L("isoles=",generer_des_points_isoles);
                         GET_ARGUMENT_N("apparies=""paires=",generer_des_points_isoles);
                                        /* Cette option 'GET_ARGUMENT_N(...)' fut introduite le 20081108181251...                    */
                         GET_ARGUMENT_L("joindre_central=""joindre=",joindre_a_un_corps_central);
                         GET_ARGUMENT_L("jonction_a_un_corps=",definir_le_point_de_jonction_avec_l_un_des_corps);
                         GET_ARGUMENT_I("corps_de_jonction=",corps_de_jonction);
                         GET_ARGUMENT_F("Xjonction=",X_point_de_jonction);
                         GET_ARGUMENT_F("Yjonction=",Y_point_de_jonction);
                         GET_ARGUMENT_F("Zjonction=",Z_point_de_jonction);
                         GET_ARGUMENT_F("Rjonction=",ROUGE_point_de_jonction);
                         GET_ARGUMENT_F("Vjonction=",VERTE_point_de_jonction);
                         GET_ARGUMENT_F("Bjonction=",BLEUE_point_de_jonction);
                         GET_ARGUMENT_F("rayon_jonction=",rayon_de_visualisation_point_de_jonction);
                         GET_ARGUMENT_L("chainer=",chainer_automatiquement_les_points);
                         GET_ARGUMENT_L("dernier_premier=""d_p=",le_dernier_point_est_le_premier_point);
                                        /* Cette option fut introduite le 20060808110301...                                          */

                         GET_ARGUMENT_F("lambda_extrapolation_A=""lambdaA=""lA=",lambda_extrapolation_A);
                         GET_ARGUMENT_F("lambda_extrapolation_B=""lambdaB=""lB=",lambda_extrapolation_B);
                                        /* Les options "lambda?="s ont ete introduites le 20171121134718...                          */

                         GET_ARGUMENT_L("filtrer_longueur_segments=""fls=",filtrer_la_longueur_des_segments);
                         GET_ARGUMENT_F("borne_inferieure_longueur_segments=""bils=",borne_inferieure_de_la_longueur_des_segments);
                         GET_ARGUMENT_F("borne_superieure_longueur_segments=""bsls=",borne_superieure_de_la_longueur_des_segments);
                                        /* Ces options furent introduites le 20120806100234...                                       */

                         GET_ARGUMENT_L("ajuster_points=""Pajuster="
                                       ,ajuster_automatiquement_le_nombre_de_points_sur_une_chaine_de_connexion
                                        );
                         GET_ARGUMENT_L("equidistance=",garantir_l_equidistance_des_points_successifs_d_une_chaine_de_connexion);
                                        /* Cette option fut introduite le 20051213135932...                                          */
                         GET_ARGUMENT_L("equidistance_chaine_connexion_____compatibilite_20051230=""compatibilite_20051230="
                                       ,equidistance_des_points_successifs_d_une_chaine_de_connexion_____compatibilite_20051230
                                        );
                                        /* Cette option fut introduite le 20051230131157...                                          */
                         GET_ARGUMENT_L("equidistance_chaine_connexion_____compatibilite_20081109=""compatibilite_20081109="
                                       ,equidistance_des_points_successifs_d_une_chaine_de_connexion_____compatibilite_20081109
                                        );
                                        /* Cette option fut introduite le 20081109113459...                                          */
                         GET_ARGUMENT_F("dm=""distance_minimale=""distance="
                                       ,distance_minimale_entre_deux_points_successifs_d_une_chaine_de_connexion
                                        );
                         GET_ARGUMENT_F("amelioration_lambda=""al=",facteur_d_amelioration_du_lambda_d_une_chaine_de_connexion);
                                        /* Les deux options relatives a l'amelioration iterative du "lambda" ont ete introduits      */
                                        /* le 20051213095218.                                                                        */

                         GET_ARGUMENT_L("aide_mise_au_point_CHAINE_DE_CONNEXION=""ampCC="
                                       ,aider_a_la_mise_au_point_de__VISUALISATION_D_UNE_CHAINE_DE_CONNEXION
                                        );
                                        /* Cette option fut introduite le 20230130125104...                                          */

                         GET_ARGUMENT_I("points=""nombreA=""Apoints=",nombre_absolu_de_points_sur_une_chaine_de_connexion);
                         GET_ARGUMENT_F("nombreR=""Rpoints=",facteur_du_nombre_relatif_de_points_sur_une_chaine_de_connexion);
                         GET_ARGUMENT_F("grossissement=",grossissement_du_rayon_de_visualisation_des_points);
                         GET_ARGUMENT_F("epsilon_grossissement=",epsilon_de_grossissement_du_rayon_de_visualisation_des_points);
                                        /* Cette option fut introduite le 20250215122855...                                          */
                         GET_ARGUMENT_F("lmin=""lambda_minimal=",lambda_minimal_d_une_chaine_de_connexion);
                         GET_ARGUMENT_F("lmax=""lambda_maximal=",lambda_maximal_d_une_chaine_de_connexion);
                         GET_ARGUMENT_L("cubique=",interpoler_les_chaines_de_connexion_par_des_splines_cubiques);
                         GET_ARGUMENT_N("lineaire=",interpoler_les_chaines_de_connexion_par_des_splines_cubiques);
                                        /* Synonyme "complementaire" introduit le 20060808114728...                                  */

                         GET_ARGUMENT_I("methode_modulation_lambda=""mml=",choix_de_la_methode_de_modulation_du_lambda_des_derivees);
                         GET_ARGUMENT_F("facteur_lambda=""fl=",facteur_du_lambda_des_derivees);
                         GET_ARGUMENT_F("translation_lambda=""tl=",translation_du_lambda_des_derivees);
                         GET_ARGUMENT_F("facteur_modulation_lambda=""fml=",facteur_modulation_du_lambda_des_derivees);
                         GET_ARGUMENT_F("translation_modulation_lambda=""tml=",translation_modulation_du_lambda_des_derivees);
                                        /* Ces options furent introduites le 20180528101030...                                       */

                         PROCESS_ARGUMENTS_DE_DEFINITION_DU_RAYON_DES_SPHERES_REPRESENTATIVES;

                         GET_ARGUMENT_L("cartesiennes=""cartesienne=",utiliser_les_coordonnees_cartesiennes);
                         GET_ARGUMENT_N("spheriques=""spherique=",utiliser_les_coordonnees_cartesiennes);
                                        /* Les options "spherique"s ont ete introduites le 20031215165636 afin d'etre                */
                                        /* utilisees dans 'v $xiMo/graphes$vv$Z spheriques='.                                        */

                         GET_ARGUMENT_L("coordonnees_spheriques_etendues=""spheriques_etendues=""spherique_etendue=""se="
                                       ,utiliser_les_coordonnees_spheriques_etendues
                                        );
                         GET_ARGUMENT_I("extension_coordonnees_spheriques=""extension_spheriques=""extension_spherique=""es="
                                       ,numero_de_l_extension_des_coordonnees_spheriques
                                        );
                         GET_ARGUMENT_F("parametre_01=""P01=",extension_des_coordonnees_spheriques_parametre_01);
                         GET_ARGUMENT_F("parametre_02=""P02=",extension_des_coordonnees_spheriques_parametre_02);
                         GET_ARGUMENT_F("parametre_03=""P03=",extension_des_coordonnees_spheriques_parametre_03);
                         GET_ARGUMENT_F("parametre_04=""P04=",extension_des_coordonnees_spheriques_parametre_04);
                         GET_ARGUMENT_F("parametre_05=""P05=",extension_des_coordonnees_spheriques_parametre_05);
                         GET_ARGUMENT_F("parametre_06=""P06=",extension_des_coordonnees_spheriques_parametre_06);
                         GET_ARGUMENT_F("parametre_07=""P07=",extension_des_coordonnees_spheriques_parametre_07);
                         GET_ARGUMENT_F("parametre_08=""P08=",extension_des_coordonnees_spheriques_parametre_08);
                         GET_ARGUMENT_F("parametre_09=""P09=",extension_des_coordonnees_spheriques_parametre_09);
                                        /* L'extension des coordonnees spheriques a ete introduite le 20150602113353...              */

                         ENTREE_DE_LA_DEFINITION_DES_IMAGES_Fx_Fy_Fz;
                                        /* Introduit le 20150604145519 afin de definir les arguments du projecteur bidimensionnel.   */

                         GET_ARGUMENT_F("aFx=",A_Image_Fx);
                         GET_ARGUMENT_F("tFx=""bFx=",B_Image_Fx);

                         GET_ARGUMENT_F("aFy=",A_Image_Fy);
                         GET_ARGUMENT_F("tFy=""bFy=",B_Image_Fy);

                         GET_ARGUMENT_F("aFz=",A_Image_Fz);
                         GET_ARGUMENT_F("tFz=""bFz=",B_Image_Fz);
                                        /* Introduit le 20150605144605...                                                            */

                         GET_ARGUMENT_F("mtheta=""mt=",minimum_de_u_theta);
                         GET_ARGUMENT_F("Mtheta=""Mt=",maximum_de_u_theta);
                         GET_ARGUMENT_F("mphi=""mp=",minimum_de_v_phi);
                         GET_ARGUMENT_F("Mphi=""Mp=",maximum_de_v_phi);
                                        /* Introduit le 20150604211734...                                                            */

                         GET_ARGUMENT_L("lineaire2D=""bilineaire2D="
                                       ,FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire
                                        );
                         GET_ARGUMENT_N("cubique2D=""bicubique2D="
                                       ,FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire
                                        );
                                        /* Introduit hors de 'ENTREE_DE_LA_DEFINITION_DES_IMAGES_Fx_Fy_Fz' afin d'eviter des doubles */
                                        /* definitions avec 'v $xrs/project2D.11$K ENTREE_DE_LA_DEFINITION_DES_IMAGES_Fx_Fy_Fz'.     */

                         GET_ARGUMENT_F("ARHO=",facteur_d_homothetie_de_la_coordonnee_RHO);
                         GET_ARGUMENT_F("BRHO=",constante_de_translation_de_la_coordonnee_RHO);
                         GET_ARGUMENT_F("ATHETA=",facteur_d_homothetie_de_la_coordonnee_THETA);
                         GET_ARGUMENT_F("BTHETA=",constante_de_translation_de_la_coordonnee_THETA);
                         GET_ARGUMENT_F("APHI=",facteur_d_homothetie_de_la_coordonnee_PHI);
                         GET_ARGUMENT_F("BPHI=",constante_de_translation_de_la_coordonnee_PHI);

                         GET_ARGUMENT_L("coordonnees_dans_0_1=",mettre_les_coordonnees_XYZ_dans_0_1);

                         PROCESS_ARGUMENT_N("adapter_coordonnees_format_image=""acfi="
                                           ,super_echelle_____utiliser_le_mode_rectangulaire
                                           ,BLOC(VIDE;)
                                           ,BLOC(Bblock
                                                 CHOIX_DE_LA_SUPER_ECHELLE(NOTL(super_echelle_____utiliser_le_mode_rectangulaire)
                                                                          ,NOTL(super_echelle_____utiliser_le_mode_carre__grand_carre)
                                                                           );
                                                 Eblock
                                                 )
                                            );
                                        /* Introduit le 20090128090632 pour permettre, par exemple au carre :                        */
                                        /*                                                                                           */
                                        /*                  {{0,0},{1,0},{1,1},{0,1}}                                                */
                                        /*                                                                                           */
                                        /* d'apparaitre sous la forme d'un rectangle dont les proportions sont celles de l'image.    */
                                        /* On notera que cela intervient dans 'v $xrv/champs_5.26$I _PHYSIQUE_DANS_01' via           */
                                        /* 'v $xrq/nucleon.L4$I ANTI_SUPER_ECHELLE_O'. Cela "inverse" donc en quelque sorte ce       */
                                        /* qui est fait dans 'v $xrk/attractor.12$I _HOMOTHETIE' lors du "reformatage" de l'espace   */
                                        /* physique (pour lui donner selon 'OX' et 'OY' les proportions de '$formatI'). C'est cette  */
                                        /* inversion qui justifie que l'usage de 'super_echelle_____utiliser_le_mode_rectangulaire'  */
                                        /* soit l'inverse de ce que la logique laisserait supposer. Cela explique que cette option   */
                                        /* fut introduite pour ne pas a avoir a utiliser 'v $xig/fonct$vv$DEF carree=' avec un       */
                                        /* argument 'VRAI/FAUX' inverse de ce que l'on veut faire en realite...                      */
                                        /*                                                                                           */
                                        /* L'usage de 'NOTL(...)' est du a celui de 'PROCESS_ARGUMENT_N(...)' car, en effet, lorsque */
                                        /* 'CHOIX_DE_LA_SUPER_ECHELLE(...)' est execute, le parametre logique en cours de traitement */
                                        /* est alors inverse ('v $xig/fonct$vv$DEF NOTL.valeur_L_par_defaut'). Evidemment ce         */
                                        /* 'NOTL(...)' ne porte que sur 'super_echelle_____utiliser_le_mode_rectangulaire' qui est   */
                                        /* le parametre qui est en train de faire l'objet du 'PROCESS_ARGUMENT_N(...)', alors que    */
                                        /* 'super_echelle_____utiliser_le_mode_carre__grand_carre' est un indicateur que l'on ne     */
                                        /* fait que tester ici (via 'CHOIX_DE_LA_SUPER_ECHELLE(...)') et qui ne fait donc que        */
                                        /* l'objet d'un 'NEUL(...)'...                                                               */
                         PROCESS_ARGUMENT_N("adapter_grandement_coordonnees_format_image=""agcfi="
                                           ,super_echelle_____utiliser_le_mode_carre__grand_carre
                                           ,BLOC(VIDE;)
                                           ,BLOC(Bblock
                                                 CHOIX_DE_LA_SUPER_ECHELLE(NOTL(super_echelle_____utiliser_le_mode_rectangulaire)
                                                                          ,NOTL(super_echelle_____utiliser_le_mode_carre__grand_carre)
                                                                           );
                                        /* L'usage de 'NOTL(...)' est du a celui de 'PROCESS_ARGUMENT_N(...)' car, en effet, lorsque */
                                        /* 'CHOIX_DE_LA_SUPER_ECHELLE(...)' est execute, le parametre logique en cours de traitement */
                                        /* est alors inverse ('v $xig/fonct$vv$DEF NOTL.valeur_L_par_defaut').                       */
                                                 Eblock
                                                 )
                                            );
                                        /* Introduit le 20090128110234 a la suite de "adapter_coordonnees_format_image=" avec les    */
                                        /* memes remarques concernant les "inversions" de conventions...                             */

                         GET_ARGUMENT_L("ajuster_coordonnees=""ajuster=",ajuster_automatiquement_les_coordonnees_cartesiennes);
                         GET_ARGUMENT_L(GET_ARGUMENT_L_____ajuster_automatiquement_les_coordonnees_independamment_homothetie
                                       ,ajuster_automatiquement_les_coordonnees_cartesiennes_independamment_homothetie
                                        );
                         GET_ARGUMENT_L(GET_ARGUMENT_L_____ajuster_automatiquement_les_coordonnees_independamment_translation
                                       ,ajuster_automatiquement_les_coordonnees_cartesiennes_independamment_translation
                                        );
                         GET_ARGUMENT_L("lister=",lister_l_ajustement_des_coordonnees_cartesiennes);

                         GET_ARGUMENT_F("sAX=",super_facteur_d_homothetie_de_la_coordonnee_X);
                         GET_ARGUMENT_F("AX=",facteur_d_homothetie_de_la_coordonnee_X);
                         GET_ARGUMENT_F("BX=",constante_de_translation_de_la_coordonnee_X);
                         GET_ARGUMENT_F("sAY=",super_facteur_d_homothetie_de_la_coordonnee_Y);
                         GET_ARGUMENT_F("AY=",facteur_d_homothetie_de_la_coordonnee_Y);
                         GET_ARGUMENT_F("BY=",constante_de_translation_de_la_coordonnee_Y);
                         GET_ARGUMENT_F("sAZ=",super_facteur_d_homothetie_de_la_coordonnee_Z);
                         GET_ARGUMENT_F("AZ=",facteur_d_homothetie_de_la_coordonnee_Z);
                         GET_ARGUMENT_F("BZ=",constante_de_translation_de_la_coordonnee_Z);

                         GET_ARGUMENT_F("AXYZ=",facteur_d_homothetie_des_coordonnees);
                         GET_ARGUMENT_F("BXYZ=",constante_de_translation_des_coordonnees);

                         GET_ARGUMENT_L("derivees_automatiques=""da=",calculer_automatiquement_les_derivees_par_des_differences);
                                        /* Cette option fut introduite le 20060809124105...                                          */

                         GET_ARGUMENT_F("AdX=",facteur_d_homothetie_de_la_derivee_X);
                         GET_ARGUMENT_F("BdX=",constante_de_translation_de_la_derivee_X);
                         GET_ARGUMENT_F("AdY=",facteur_d_homothetie_de_la_derivee_Y);
                         GET_ARGUMENT_F("BdY=",constante_de_translation_de_la_derivee_Y);
                         GET_ARGUMENT_F("AdZ=",facteur_d_homothetie_de_la_derivee_Z);
                         GET_ARGUMENT_F("BdZ=",constante_de_translation_de_la_derivee_Z);

                         GET_ARGUMENT_F("AdXYZ=",facteur_d_homothetie_des_derivees);
                         GET_ARGUMENT_F("BdXYZ=",constante_de_translation_des_derivees);

                         GET_ARGUMENT_F("cpX=",coefficient_de_la_pente_X_des_chaines_de_connexion);
                         GET_ARGUMENT_F("cpY=",coefficient_de_la_pente_Y_des_chaines_de_connexion);
                         GET_ARGUMENT_F("cpZ=",coefficient_de_la_pente_Z_des_chaines_de_connexion);
                         GET_ARGUMENT_F("cpXYZ=",coefficient_des_pente_XYZ_des_chaines_de_connexion);
                                        /* Arguments introduits le 20180702101313...                                                 */

                         GET_ARGUMENT_L("ajuster_couleurs=""ajusterC=",ajuster_automatiquement_les_couleurs);
                         GET_ARGUMENT_L("ajusterC_h=""ajuster_couleurs_independamment_homothetie="
                                       ,ajuster_automatiquement_les_couleurs_independamment_homothetie
                                        );
                         GET_ARGUMENT_L("ajusterC_t=""ajuster_couleurs_independamment_translation="
                                       ,ajuster_automatiquement_les_couleurs_independamment_translation
                                        );
                         GET_ARGUMENT_L("lister_ajustement_couleurs=""listerC=",lister_l_ajustement_des_couleurs);
                                        /* Arguments introduits le 20091024085314...                                                 */

                         GET_ARGUMENT_F("AR=",facteur_d_homothetie_de_la_couleur_ROUGE);
                         GET_ARGUMENT_F("BR=",constante_de_translation_de_la_couleur_ROUGE);
                         GET_ARGUMENT_F("AV=",facteur_d_homothetie_de_la_couleur_VERTE);
                         GET_ARGUMENT_F("BV=",constante_de_translation_de_la_couleur_VERTE);
                         GET_ARGUMENT_F("AB=",facteur_d_homothetie_de_la_couleur_BLEUE);
                         GET_ARGUMENT_F("BB=",constante_de_translation_de_la_couleur_BLEUE);
                                        /* Arguments introduits le 20091024085314...                                                 */

                         GET_ARGUMENT_F("ARVB=",facteur_d_homothetie_des_couleurs);
                         GET_ARGUMENT_F("BRVB=",constante_de_translation_des_couleurs);

                         GET_ARGUMENT_F("Ar=",facteur_d_homothetie_du_rayon);
                                        /* Je rappelle le 20180515134531 que la valeur par defaut de 'facteur_d_homothetie_du_rayon' */
                                        /* est 2 (et non pas 1...). Ce fut la la cause du probleme rencontre lors des evolutions     */
                                        /* de 'v $xiirv/.GPS2.11.1.$U 20180515134240'...                                             */
                         GET_ARGUMENT_F("Br=",constante_de_translation_du_rayon);

                         GET_ARGUMENT_L("centrer=",definir_la_scene_par_rapport_au_centre_de_l_espace);
                         GET_ARGUMENT_F("Xcentre=",X_centre_de_l_espace_pour_la_visualisation);
                         GET_ARGUMENT_F("Ycentre=",Y_centre_de_l_espace_pour_la_visualisation);
                         GET_ARGUMENT_F("Zcentre=",Z_centre_de_l_espace_pour_la_visualisation);
                         GET_ARGUMENT_I("reference=",corps_de_reference);

                         GET_ARGUMENT_L("cs=""cross_section=",faire_une_cross_section);
                         GET_ARGUMENT_F("Xcs=""Xcross_section=",X_centre_ellipsoide_de_cross_section);
                         GET_ARGUMENT_F("Ycs=""Ycross_section=",Y_centre_ellipsoide_de_cross_section);
                         GET_ARGUMENT_F("Zcs=""Zcross_section=",Z_centre_ellipsoide_de_cross_section);
                         GET_ARGUMENT_F("DXcs=""DXcross_section=",X_demi_axe_ellipsoide_de_cross_section);
                         GET_ARGUMENT_F("DYcs=""DYcross_section=",Y_demi_axe_ellipsoide_de_cross_section);
                         GET_ARGUMENT_F("DZcs=""DZcross_section=",Z_demi_axe_ellipsoide_de_cross_section);

                         PROCESS_ARGUMENTS_DE_GESTION_DE_LA_RELATIVITE_RESTREINTE;
                         )
                    );

#undef    GET_ARGUMENT_L_____ajuster_automatiquement_les_coordonnees_independamment_homothetie
#undef    GET_ARGUMENT_L_____ajuster_automatiquement_les_coordonnees_independamment_translation

#include  xrv/champs_5.19.I"
                                        /* Pour eviter le message :                                                                  */
                                        /*                                                                                           */
                                        /*                  Static function is not referenced.                                       */
                                        /*                                                                                           */
                                        /* sur 'SYSTEME_ES9000_AIX_CC'...                                                            */

#include  xrk/attractor.19.I"
                                        /* Validations et definition de l'espace physique.                                           */

     INITIALISATION_DU_ZOOM_AUTOMATIQUE;
                                        /* Introduit le 20131114165814...                                                            */

     Test(IL_FAUT(utiliser_les_coordonnees_cartesiennes))
          Bblock
          Eblock
     ATes
          Bblock
          Test(IL_NE_FAUT_PAS(utiliser_les_coordonnees_spheriques_etendues))
               Bblock
               Eblock
          ATes
               Bblock
                                        /* Sequence introduite le 20150604143255 afin de faire d'eventuelles initialisations         */
                                        /* specifiques...                                                                            */
               Choi(numero_de_l_extension_des_coordonnees_spheriques)
                    Bblock
                    Ca1e(EXTENSION_ellipsoid)
                         Bblock
                         Eblock
                    ECa1

                    Ca1e(EXTENSION_hyperboloid)
                         Bblock
                         Eblock
                    ECa1

                    Ca1e(EXTENSION_cylindre)
                         Bblock
                         Eblock
                    ECa1

                    Ca1e(EXTENSION_tore)
                         Bblock
                         Eblock
                    ECa1

                    Ca1e(EXTENSION_Mobius2D)
                         Bblock
                         Eblock
                    ECa1

                    Ca1e(EXTENSION_project2D)
                         Bblock
                         Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(Image_Fx,nom_imageFx))))
                              Bblock
                              Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(Image_Fy,nom_imageFy))))
                                   Bblock
                                   Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(Image_Fz,nom_imageFz))))
                                        Bblock
                                        Eblock
                                   ATes
                                        Bblock
                                        Test__CODE_ERREUR__ERREUR07;
                                        Eblock
                                   ETes
                                   Eblock
                              ATes
                                   Bblock
                                   Test__CODE_ERREUR__ERREUR07;
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                              Test__CODE_ERREUR__ERREUR07;
                              Eblock
                         ETes

                         Test(PAS_D_ERREUR(CODE_ERREUR))
                              Bblock
                              Eblock
                         ATes
                              Bblock
                              PRINT_ATTENTION("a cause des erreurs, le mode 'coordonnees spheriques etendues' est inhibe");

                              EGAL(utiliser_les_coordonnees_spheriques_etendues,FAUX);
                              Eblock
                         ETes
                         Eblock
                    ECa1

                    Defo
                         Bblock
                         PRINT_ATTENTION("l'extension des cordonnees spheriques demandee n'existe pas -2-");
                         CAL1(Prer1("cette extension a le numero %d\n",numero_de_l_extension_des_coordonnees_spheriques));
                         PRINT_ATTENTION("le mode 'coordonnees spheriques etendues' est donc inhibe");

                         EGAL(utiliser_les_coordonnees_spheriques_etendues,FAUX);
                         Eblock
                    EDef
                    Eblock
               ECho
               Eblock
          ETes
          Eblock
     ETes

     Test(IFET(IFET(IL_NE_FAUT_PAS(generer_des_points_isoles)
                   ,IL_NE_FAUT_PAS(chainer_automatiquement_les_points)
                    )
              ,EST_IMPAIR(nombre_de_corps)
               )
          )
          Bblock
          PRINT_ATTENTION("dans le mode de jonction des points deux a deux, le nombre de points doit etre pair");
          CAL1(Prer1("il vaut %d et le dernier point sera donc ignore\n",nombre_de_corps));
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFET(IL_FAUT(generer_des_points_isoles)
              ,IL_FAUT(chainer_automatiquement_les_points)
               )
          )
                                        /* Test introduit le 20060808105004...                                                       */
          Bblock
          PRINT_ATTENTION("les options 'isoles=' et 'chainer=' ne sont pas utilisees correctement");
          CAL1(Prer2("(l'utilisation de 'isoles=%s' implique 'chainer=%s' qui est donc force)\n"
                    ,ETAT_LOGIQUE(NEUL(generer_des_points_isoles))
                    ,ETAT_LOGIQUE(NOTL(chainer_automatiquement_les_points))
                     )
               );

          EGAL(chainer_automatiquement_les_points,FAUX);
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFET(IL_FAUT(generer_des_points_isoles)
              ,EST_VRAI(le_dernier_point_est_le_premier_point)
               )
          )
                                        /* Test introduit le 20060808110301...                                                       */
          Bblock
          PRINT_ATTENTION("les options 'isoles=' et 'dernier_premier=' ne sont pas utilisees correctement");
          CAL1(Prer2("(l'utilisation de 'isoles=%s' implique 'dernier_premier=%s' qui est donc force)\n"
                    ,ETAT_LOGIQUE(NEUL(generer_des_points_isoles))
                    ,ETAT_LOGIQUE(NOTL(le_dernier_point_est_le_premier_point))
                     )
               );

          EGAL(le_dernier_point_est_le_premier_point,FAUX);
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFET(IL_NE_FAUT_PAS(definir_la_scene_par_rapport_au_centre_de_l_espace)
              ,NINCff(corps_de_reference,PREMIER_POINT_DES_LISTES,nombre_de_corps)
               )
          )
          Bblock
          PRINT_ATTENTION("le corps de reference demande n'existe pas, on lui substitue la valeur par defaut");
          EGAL(corps_de_reference,CORPS_DE_REFERENCE);
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFET(IL_FAUT(definir_le_point_de_jonction_avec_l_un_des_corps)
              ,NINCff(corps_de_jonction,PREMIER_POINT_DES_LISTES,nombre_de_corps)
               )
          )
          Bblock
          PRINT_ATTENTION("le corps de jonction demande n'existe pas, on lui substitue la valeur par defaut");
          EGAL(corps_de_jonction,CORPS_DE_REFERENCE);
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFET(IL_NE_FAUT_PAS(definir_la_scene_par_rapport_au_centre_de_l_espace)
              ,IL_NE_FAUT_PAS(utiliser_les_coordonnees_cartesiennes)
               )
          )
          Bblock
          PRINT_ATTENTION("le centrage de la scene par rapport a l'un des corps n'est fait qu'en coordonnees cartesiennes");
          Eblock
     ATes
          Bblock
          Eblock
     ETes

#include  xrv/particule.51.I"
                                        /* Gestion des fausses couleurs via 'nom_paletteA'.                                          */

     Test(IL_FAUT(ajuster_automatiquement_les_coordonnees_cartesiennes))
          Bblock
          Test(IL_FAUT(utiliser_les_coordonnees_cartesiennes))
               Bblock
               DEFV(Float,INIT(minimum_des_X,F_INFINI));
               DEFV(Float,INIT(maximum_des_X,F_MOINS_L_INFINI));

               DEFV(Float,INIT(minimum_des_Y,F_INFINI));
               DEFV(Float,INIT(maximum_des_Y,F_MOINS_L_INFINI));

               DEFV(Float,INIT(minimum_des_Z,F_INFINI));
               DEFV(Float,INIT(maximum_des_Z,F_MOINS_L_INFINI));

               DEFV(Float,INIT(minimum_des_XYZ,FLOT__UNDEF));
               DEFV(Float,INIT(maximum_des_XYZ,FLOT__UNDEF));
                                        /* Pour calculer les extrema...                                                              */

               Komp(numero_des_points,nombre_d_iterations)
                    Bblock
                    EGAL(minimum_des_X,MIN2(ACCES_LISTE(liste_initiale_des_X,numero_des_points),minimum_des_X));
                    EGAL(maximum_des_X,MAX2(ACCES_LISTE(liste_initiale_des_X,numero_des_points),maximum_des_X));

                    EGAL(minimum_des_Y,MIN2(ACCES_LISTE(liste_initiale_des_Y,numero_des_points),minimum_des_Y));
                    EGAL(maximum_des_Y,MAX2(ACCES_LISTE(liste_initiale_des_Y,numero_des_points),maximum_des_Y));

                    EGAL(minimum_des_Z,MIN2(ACCES_LISTE(liste_initiale_des_Z,numero_des_points),minimum_des_Z));
                    EGAL(maximum_des_Z,MAX2(ACCES_LISTE(liste_initiale_des_Z,numero_des_points),maximum_des_Z));
                                        /* Calcul des extrema specifiques a 'X', 'Y' et 'Z'.                                         */
                    Eblock
               EKom

               EGAL(minimum_des_XYZ,MIN3(minimum_des_X,minimum_des_Y,minimum_des_Z));
               EGAL(maximum_des_XYZ,MAX3(maximum_des_X,maximum_des_Y,maximum_des_Z));
                                        /* Calcul des extrema globaux...                                                             */

               Test(IFLT(minimum_des_XYZ,maximum_des_XYZ))
                    Bblock
                    FACTEUR_D_HOMOTHETIE_XYZ(facteur_d_homothetie_de_la_coordonnee_X
                                            ,minimum_des_XYZ,maximum_des_XYZ
                                            ,minimum_des_X,maximum_des_X
                                            ,MINIMUM_DES___X,MAXIMUM_DES___X
                                             );
                    CONSTANTE_DE_TRANSLATION_XYZ(constante_de_translation_de_la_coordonnee_X
                                                ,minimum_des_XYZ,maximum_des_XYZ
                                                ,minimum_des_X,maximum_des_X
                                                ,MINIMUM_DES___X,MAXIMUM_DES___X
                                                 );
                                        /* Ajustement des coordonnees 'X'.                                                           */

                    FACTEUR_D_HOMOTHETIE_XYZ(facteur_d_homothetie_de_la_coordonnee_Y
                                            ,minimum_des_XYZ,maximum_des_XYZ
                                            ,minimum_des_Y,maximum_des_Y
                                            ,MINIMUM_DES___Y,MAXIMUM_DES___Y
                                             );
                    CONSTANTE_DE_TRANSLATION_XYZ(constante_de_translation_de_la_coordonnee_Y
                                                ,minimum_des_XYZ,maximum_des_XYZ
                                                ,minimum_des_Y,maximum_des_Y
                                                ,MINIMUM_DES___Y,MAXIMUM_DES___Y
                                                 );
                                        /* Ajustement des coordonnees 'Y'.                                                           */

                    FACTEUR_D_HOMOTHETIE_XYZ(facteur_d_homothetie_de_la_coordonnee_Z
                                            ,minimum_des_XYZ,maximum_des_XYZ
                                            ,minimum_des_Z,maximum_des_Z
                                            ,MINIMUM_DES___Z,MAXIMUM_DES___Z
                                             );
                    CONSTANTE_DE_TRANSLATION_XYZ(constante_de_translation_de_la_coordonnee_Z
                                                ,minimum_des_XYZ,maximum_des_XYZ
                                                ,minimum_des_Z,maximum_des_Z
                                                ,MINIMUM_DES___Z,MAXIMUM_DES___Z
                                                 );
                                        /* Ajustement des coordonnees 'Z'.                                                           */
                    Eblock
               ATes
                    Bblock
                    PRINT_ATTENTION("les extrema des coordonnees sont egaux ou 'inverses', les valeurs par defaut sont conservees");
                    Eblock
               ETes

               Test(IL_FAUT(lister_l_ajustement_des_coordonnees_cartesiennes))
                    Bblock
                                        /* ATTENTION : le 20020331121348, je suis passe de 'CAL2(Prin?(...))' a 'CAL3(Prme?(...))'   */
                                        /* pour faciliter la mise au point des parametres de 'v $xu/Felici.M/GenImages.01$Z'...      */
                    CALS(Fsauts_de_lignes(UN));

                    CAL3(Prme2("X E [%+f,%+f]\n",minimum_des_X,maximum_des_X));
                    CAL3(Prme2("Y E [%+f,%+f]\n",minimum_des_Y,maximum_des_Y));
                    CAL3(Prme2("Z E [%+f,%+f]\n",minimum_des_Z,maximum_des_Z));

                    CALS(Fsauts_de_lignes(UN));

                    CAL3(Prme2("(X,Y,Z) E [%+f,%+f]\n",minimum_des_XYZ,maximum_des_XYZ));

                    CAL3(Prme1("AX=%+f\n",facteur_d_homothetie_de_la_coordonnee_X));
                    CAL3(Prme1("BX=%+f\n",constante_de_translation_de_la_coordonnee_X));
                    CAL3(Prme1("AY=%+f\n",facteur_d_homothetie_de_la_coordonnee_Y));
                    CAL3(Prme1("BY=%+f\n",constante_de_translation_de_la_coordonnee_Y));
                    CAL3(Prme1("AZ=%+f\n",facteur_d_homothetie_de_la_coordonnee_Z));
                    CAL3(Prme1("BZ=%+f\n",constante_de_translation_de_la_coordonnee_Z));

                    CALS(Fsauts_de_lignes(UN));
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               PRINT_ATTENTION("l'ajustement automatique des coordonnees ne peut avoir lieu qu'en coordonnees cartesiennes");
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IL_FAUT(ajuster_automatiquement_les_couleurs))
                                        /* Sequence introduite le 20091024085314...                                                  */
          Bblock
          DEFV(genere_Float,INIT(minimum_des_ROUGE,F_INFINI));
          DEFV(genere_Float,INIT(maximum_des_ROUGE,F_MOINS_L_INFINI));

          DEFV(genere_Float,INIT(minimum_des_VERTE,F_INFINI));
          DEFV(genere_Float,INIT(maximum_des_VERTE,F_MOINS_L_INFINI));

          DEFV(genere_Float,INIT(minimum_des_BLEUE,F_INFINI));
          DEFV(genere_Float,INIT(maximum_des_BLEUE,F_MOINS_L_INFINI));

          DEFV(genere_Float,INIT(minimum_des_RVB,FLOT__NIVEAU_UNDEF));
          DEFV(genere_Float,INIT(maximum_des_RVB,FLOT__NIVEAU_UNDEF));
                                        /* Pour calculer les extrema...                                                              */
                                        /*                                                                                           */
                                        /* Le 20091026102351, les 'Float's ont ete remplaces par des 'genere_Float's plus logiques.  */

          Komp(numero_des_points,nombre_d_iterations)
               Bblock
               EGAL(minimum_des_ROUGE,MIN2(ACCES_LISTE(liste_initiale_des_ROUGE,numero_des_points),minimum_des_ROUGE));
               EGAL(maximum_des_ROUGE,MAX2(ACCES_LISTE(liste_initiale_des_ROUGE,numero_des_points),maximum_des_ROUGE));

               EGAL(minimum_des_VERTE,MIN2(ACCES_LISTE(liste_initiale_des_VERTE,numero_des_points),minimum_des_VERTE));
               EGAL(maximum_des_VERTE,MAX2(ACCES_LISTE(liste_initiale_des_VERTE,numero_des_points),maximum_des_VERTE));

               EGAL(minimum_des_BLEUE,MIN2(ACCES_LISTE(liste_initiale_des_BLEUE,numero_des_points),minimum_des_BLEUE));
               EGAL(maximum_des_BLEUE,MAX2(ACCES_LISTE(liste_initiale_des_BLEUE,numero_des_points),maximum_des_BLEUE));
                                        /* Calcul des extrema specifiques a 'X', 'Y' et 'Z'.                                         */
               Eblock
          EKom

          EGAL(minimum_des_RVB,MIN3(minimum_des_ROUGE,minimum_des_VERTE,minimum_des_BLEUE));
          EGAL(maximum_des_RVB,MAX3(maximum_des_ROUGE,maximum_des_VERTE,maximum_des_BLEUE));
                                        /* Calcul des extrema globaux...                                                             */

          Test(IFLT(minimum_des_RVB,maximum_des_RVB))
               Bblock
               FACTEUR_D_HOMOTHETIE_RVB(facteur_d_homothetie_de_la_couleur_ROUGE
                                       ,minimum_des_RVB,maximum_des_RVB
                                       ,minimum_des_ROUGE,maximum_des_ROUGE
                                       ,MINIMUM_DES___ROUGE,MAXIMUM_DES___ROUGE
                                        );
               CONSTANTE_DE_TRANSLATION_RVB(constante_de_translation_de_la_couleur_ROUGE
                                           ,minimum_des_RVB,maximum_des_RVB
                                           ,minimum_des_ROUGE,maximum_des_ROUGE
                                           ,MINIMUM_DES___ROUGE,MAXIMUM_DES___ROUGE
                                            );
                                        /* Ajustement des couleurs 'ROUGE'.                                                          */

               FACTEUR_D_HOMOTHETIE_RVB(facteur_d_homothetie_de_la_couleur_VERTE
                                       ,minimum_des_RVB,maximum_des_RVB
                                       ,minimum_des_VERTE,maximum_des_VERTE
                                       ,MINIMUM_DES___VERTE,MAXIMUM_DES___VERTE
                                        );
               CONSTANTE_DE_TRANSLATION_RVB(constante_de_translation_de_la_couleur_VERTE
                                           ,minimum_des_RVB,maximum_des_RVB
                                           ,minimum_des_VERTE,maximum_des_VERTE
                                           ,MINIMUM_DES___VERTE,MAXIMUM_DES___VERTE
                                            );
                                        /* Ajustement des couleurs 'VERTE'.                                                          */

               FACTEUR_D_HOMOTHETIE_RVB(facteur_d_homothetie_de_la_couleur_BLEUE
                                       ,minimum_des_RVB,maximum_des_RVB
                                       ,minimum_des_BLEUE,maximum_des_BLEUE
                                       ,MINIMUM_DES___BLEUE,MAXIMUM_DES___BLEUE
                                        );
               CONSTANTE_DE_TRANSLATION_RVB(constante_de_translation_de_la_couleur_BLEUE
                                           ,minimum_des_RVB,maximum_des_RVB
                                           ,minimum_des_BLEUE,maximum_des_BLEUE
                                           ,MINIMUM_DES___BLEUE,MAXIMUM_DES___BLEUE
                                            );
                                        /* Ajustement des couleurs 'BLEUE'.                                                          */
               Eblock
          ATes
               Bblock
               PRINT_ATTENTION("les extrema des couleurs sont egaux ou 'inverses', les valeurs par defaut sont conservees");
               Eblock
          ETes

          Test(IL_FAUT(lister_l_ajustement_des_couleurs))
               Bblock
               CALS(Fsauts_de_lignes(UN));

               CAL3(Prme2("R E [%+f,%+f]\n",minimum_des_ROUGE,maximum_des_ROUGE));
               CAL3(Prme2("V E [%+f,%+f]\n",minimum_des_VERTE,maximum_des_VERTE));
               CAL3(Prme2("B E [%+f,%+f]\n",minimum_des_BLEUE,maximum_des_BLEUE));

               CALS(Fsauts_de_lignes(UN));

               CAL3(Prme2("(R,V,B) E [%+f,%+f]\n",minimum_des_RVB,maximum_des_RVB));

               CAL3(Prme1("AR=%+f\n",facteur_d_homothetie_de_la_couleur_ROUGE));
               CAL3(Prme1("BR=%+f\n",constante_de_translation_de_la_couleur_ROUGE));
               CAL3(Prme1("AV=%+f\n",facteur_d_homothetie_de_la_couleur_VERTE));
               CAL3(Prme1("BV=%+f\n",constante_de_translation_de_la_couleur_VERTE));
               CAL3(Prme1("AB=%+f\n",facteur_d_homothetie_de_la_couleur_BLEUE));
               CAL3(Prme1("BB=%+f\n",constante_de_translation_de_la_couleur_BLEUE));

               CALS(Fsauts_de_lignes(UN));
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Komp(numero_des_points,nombre_d_iterations)
          Bblock
          EGAL(ACCES_LISTE(liste_initiale_des_X,numero_des_points)
              ,AXPB(facteur_d_homothetie_des_coordonnees
                   ,AXPB(facteur_d_homothetie_de_la_coordonnee_X
                        ,ADD2(ACCES_LISTE(liste_initiale_des_X,numero_des_points)
                             ,ACCES_LISTE(liste_initiale_des_tX,numero_des_points)
                              )
                        ,constante_de_translation_de_la_coordonnee_X
                         )
                   ,constante_de_translation_des_coordonnees
                    )
               );
          EGAL(ACCES_LISTE(liste_initiale_des_Y,numero_des_points)
              ,AXPB(facteur_d_homothetie_des_coordonnees
                   ,AXPB(facteur_d_homothetie_de_la_coordonnee_Y
                        ,ADD2(ACCES_LISTE(liste_initiale_des_Y,numero_des_points)
                             ,ACCES_LISTE(liste_initiale_des_tY,numero_des_points)
                              )
                        ,constante_de_translation_de_la_coordonnee_Y
                         )
                   ,constante_de_translation_des_coordonnees
                    )
               );
          EGAL(ACCES_LISTE(liste_initiale_des_Z,numero_des_points)
              ,AXPB(facteur_d_homothetie_des_coordonnees
                   ,AXPB(facteur_d_homothetie_de_la_coordonnee_Z
                        ,ADD2(ACCES_LISTE(liste_initiale_des_Z,numero_des_points)
                             ,ACCES_LISTE(liste_initiale_des_tZ,numero_des_points)
                              )
                        ,constante_de_translation_de_la_coordonnee_Z
                         )
                   ,constante_de_translation_des_coordonnees
                    )
               );
                                        /* Ajustement definitif des coordonnees.                                                     */

          EGAL(ACCES_LISTE(liste_initiale_des_dX,numero_des_points)
              ,AXPB(facteur_d_homothetie_des_derivees
                   ,AXPB(facteur_d_homothetie_de_la_derivee_X
                        ,ACCES_LISTE(liste_initiale_des_dX,numero_des_points)
                        ,constante_de_translation_de_la_derivee_X
                         )
                   ,constante_de_translation_des_derivees
                    )
               );
          EGAL(ACCES_LISTE(liste_initiale_des_dY,numero_des_points)
              ,AXPB(facteur_d_homothetie_des_derivees
                   ,AXPB(facteur_d_homothetie_de_la_derivee_Y
                        ,ACCES_LISTE(liste_initiale_des_dY,numero_des_points)
                        ,constante_de_translation_de_la_derivee_Y
                         )
                   ,constante_de_translation_des_derivees
                    )
               );
          EGAL(ACCES_LISTE(liste_initiale_des_dZ,numero_des_points)
              ,AXPB(facteur_d_homothetie_des_derivees
                   ,AXPB(facteur_d_homothetie_de_la_derivee_Z
                        ,ACCES_LISTE(liste_initiale_des_dZ,numero_des_points)
                        ,constante_de_translation_de_la_derivee_Z
                         )
                   ,constante_de_translation_des_derivees
                    )
               );
                                        /* Ajustement definitif des derivees.                                                        */

          EGAL(ACCES_LISTE(liste_initiale_des_ROUGE,numero_des_points)
              ,______NORMALISE_NIVEAU(AXPB(facteur_d_homothetie_des_couleurs
                                          ,AXPB(facteur_d_homothetie_de_la_couleur_ROUGE
                                               ,ACCES_LISTE(liste_initiale_des_ROUGE,numero_des_points)
                                               ,constante_de_translation_de_la_couleur_ROUGE
                                                )
                                          ,constante_de_translation_des_couleurs
                                           )
                                      )
               );
          EGAL(ACCES_LISTE(liste_initiale_des_VERTE,numero_des_points)
              ,______NORMALISE_NIVEAU(AXPB(facteur_d_homothetie_des_couleurs
                                          ,AXPB(facteur_d_homothetie_de_la_couleur_VERTE
                                               ,ACCES_LISTE(liste_initiale_des_VERTE,numero_des_points)
                                               ,constante_de_translation_de_la_couleur_VERTE
                                                )
                                          ,constante_de_translation_des_couleurs
                                           )
                                      )
               );
          EGAL(ACCES_LISTE(liste_initiale_des_BLEUE,numero_des_points)
              ,______NORMALISE_NIVEAU(AXPB(facteur_d_homothetie_des_couleurs
                                          ,AXPB(facteur_d_homothetie_de_la_couleur_BLEUE
                                               ,ACCES_LISTE(liste_initiale_des_BLEUE,numero_des_points)
                                               ,constante_de_translation_de_la_couleur_BLEUE
                                                )
                                          ,constante_de_translation_des_couleurs
                                           )
                                      )
               );
                                        /* Ajustement definitif des couleurs.                                                        */

          EGAL(ACCES_LISTE(liste_initiale_des_RAYON,numero_des_points)
              ,AXPB(facteur_d_homothetie_du_rayon
                   ,ACCES_LISTE(liste_initiale_des_RAYON,numero_des_points)
                   ,constante_de_translation_du_rayon
                    )
               );
                                        /* Ajustement definitif des rayons.                                                          */
          Eblock
     EKom

     Test(IL_FAUT(compatibilite_20171123))
          Bblock
          Eblock
     ATes
          Bblock
          EGAL(rayon_de_visualisation_point_de_jonction
              ,AXPB(facteur_d_homothetie_du_rayon
                   ,rayon_de_visualisation_point_de_jonction
                   ,constante_de_translation_du_rayon
                    )
               );
                                        /* Ajustement definitif de l'eventuel rayon du point de jonction (introduit le               */
                                        /* 20171123123513 et cela manquait depuis bien longtemps..).                                 */
          Eblock
     ETes

     Komp(numero_des_points,nombre_d_iterations)
          Bblock
          EGAL(ACCES_LISTE(liste_initiale_des_X,numero_des_points)
              ,MUL2(super_facteur_d_homothetie_de_la_coordonnee_X,ACCES_LISTE(liste_initiale_des_X,numero_des_points))
               );
          EGAL(ACCES_LISTE(liste_initiale_des_Y,numero_des_points)
              ,MUL2(super_facteur_d_homothetie_de_la_coordonnee_Y,ACCES_LISTE(liste_initiale_des_Y,numero_des_points))
               );
          EGAL(ACCES_LISTE(liste_initiale_des_Z,numero_des_points)
              ,MUL2(super_facteur_d_homothetie_de_la_coordonnee_Z,ACCES_LISTE(liste_initiale_des_Z,numero_des_points))
               );
                                        /* Mise a l'echelle des coordonnees introduite le 20051220135738. Le 20051220214952, je      */
                                        /* note qu'il est impossible d'utiliser ici 'SUPER_ECHELLE_O?(...)' car, en effet, les       */
                                        /* procedures 'ANTI_SUPER_ECHELLE_O?(...)', complementaires des precedentes, sont utilisees  */
                                        /* dans la fonction 'memorisation_1_point_07(...)' via 'MEMORISATION_DU_POINT_COURANT(...)'  */
                                        /* et annuleraient ainsi leurs effets...                                                     */
          Eblock
     EKom

     RE_INITIALISATION_DE_L_HORLOGE;
                                        /* Depuis que le 19990512152305 a ete mis en place un :                                      */
                                        /*                                                                                           */
                                        /*        INCREMENTATION_DE_L_HORLOGE(dct);                                                  */
                                        /*                                                                                           */
                                        /* apres chaque image, l'initialisation de l'horloge ne doit plus etre faite pour chaque     */
                                        /* image, mais une seul fois, au tout debut...                                               */

     Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation)
          Bblock
          DEFV(Int,INIT(numero_des_points,UNDEF));
                                        /* Pour manipuler les listes...                                                              */
          DEFV(Float,INIT(Acx,FLOT__UNDEF));
          DEFV(Float,INIT(Acy,FLOT__UNDEF));
          DEFV(Float,INIT(Acz,FLOT__UNDEF));
          DEFV(Float,INIT(Adx,FLOT__UNDEF));
          DEFV(Float,INIT(Ady,FLOT__UNDEF));
          DEFV(Float,INIT(Adz,FLOT__UNDEF));
          DEFV(Float,INIT(Adcx,FLOT__UNDEF));
          DEFV(Float,INIT(Adcy,FLOT__UNDEF));
          DEFV(Float,INIT(Adcz,FLOT__UNDEF));
          DEFV(Float,INIT(Arayon_de_visualisation,FLOT__UNDEF));
                                        /* Pour sauvegarder les caracteristiques du point 'A' :                                      */
                                        /*                                                                                           */
                                        /*        {Acx,Acy,Acz}     : coordonnees du point 'A',                                      */
                                        /*        {Adx,Ady,Adz}     : derivees au point 'A' dans le cas de l'interpolation cubique,  */
                                        /*        {Adcx,Adcy,Adcz}  : couleur du point 'A'.                                          */
                                        /*                                                                                           */
          DEFV(Float,INIT(Bcx,FLOT__UNDEF));
          DEFV(Float,INIT(Bcy,FLOT__UNDEF));
          DEFV(Float,INIT(Bcz,FLOT__UNDEF));
          DEFV(Float,INIT(Bdx,FLOT__UNDEF));
          DEFV(Float,INIT(Bdy,FLOT__UNDEF));
          DEFV(Float,INIT(Bdz,FLOT__UNDEF));
          DEFV(Float,INIT(Bdcx,FLOT__UNDEF));
          DEFV(Float,INIT(Bdcy,FLOT__UNDEF));
          DEFV(Float,INIT(Bdcz,FLOT__UNDEF));
          DEFV(Float,INIT(Brayon_de_visualisation,FLOT__UNDEF));
                                        /* Pour sauvegarder les caracteristiques du point 'B' :                                      */
                                        /*                                                                                           */
                                        /*        {Bcx,Bcy,Bcz}     : coordonnees du point 'B',                                      */
                                        /*        {Bdx,Bdy,Bdz}     : derivees au point 'B' dans le cas de l'interpolation cubique,  */
                                        /*        {Bdcx,Bdcy,Bdcz}  : couleur du point 'B'.                                          */
                                        /*                                                                                           */

          DEFV(Logical,INIT(visualiser_le_point_courant,COND(IL_FAUT(generer_des_points_isoles),VRAI,FAUX)));
                                        /* Indique si le point courant de la boucle qui suit est a visualiser...                     */

                                        /* ATTENTION, jusqu'au 19990512152305, il y avait ici :                                      */
                                        /*                                                                                           */
                                        /*        RE_INITIALISATION_DE_L_HORLOGE;                                                    */
                                        /*                                                                                           */
                                        /* mais, depuis que l'on fait apres chaque image :                                           */
                                        /*                                                                                           */
                                        /*        INCREMENTATION_DE_L_HORLOGE(dct);                                                  */
                                        /*                                                                                           */
                                        /* cette initialisation n'a plus de sens...                                                  */

          INITIALISATIONS_RELATIVES_A_CHAQUE_NOUVELLE_IMAGE(numero_de_la_periode_courante);
                                        /* Initialisations necessaires avant le calcul et la generation de chaque nouvelle image.    */

          Komp(numero_des_points
              ,COND(EST_FAUX(le_dernier_point_est_le_premier_point)
                   ,NEUT(nombre_d_iterations)
                   ,SUCC(nombre_d_iterations)
                    )
               )
               Bblock
               DEFV(Int,INIT(numero_effectif_des_points
                            ,COND(EST_FAUX(le_dernier_point_est_le_premier_point)
                                 ,NEUT(numero_des_points)
                                 ,MODU(numero_des_points,PREMIERE_ITERATION_D_UN_Komp,nombre_d_iterations)
                                  )
                             )
                    );
                                        /* Introduit le 20060808110301...                                                            */
               DEFV(Float,INIT(dx,FLOT__UNDEF));
               DEFV(Float,INIT(dy,FLOT__UNDEF));
               DEFV(Float,INIT(dz,FLOT__UNDEF));
                                        /* Pour manipuler les derivees utiles lors des interpolations cubiques...                    */

               Test(IL_FAUT(utiliser_les_coordonnees_cartesiennes))
                    Bblock
                    DEFV(Float,INIT(cx_eventuellement_decentree,FLOT__UNDEF));
                    DEFV(Float,INIT(cy_eventuellement_decentree,FLOT__UNDEF));
                    DEFV(Float,INIT(cz_eventuellement_decentree,FLOT__UNDEF));
                                        /* Coordonnees eventuellement decentrees...                                                  */

                    EGAL(cx,ACCES_LISTE(liste_initiale_des_X,numero_effectif_des_points));
                    EGAL(cy,ACCES_LISTE(liste_initiale_des_Y,numero_effectif_des_points));
                    EGAL(cz,ACCES_LISTE(liste_initiale_des_Z,numero_effectif_des_points));
                                        /* Recuperation du point courant (cx,cy,cz) en coordonnees cartesiennes.                     */
                    EGAL(cx_eventuellement_decentree,DECENTRAGE_DES_COORDONNEES(cx,X,x));
                    EGAL(cy_eventuellement_decentree,DECENTRAGE_DES_COORDONNEES(cy,Y,y));
                    EGAL(cz_eventuellement_decentree,DECENTRAGE_DES_COORDONNEES(cz,Z,z));
                    EGAL(cx,cx_eventuellement_decentree);
                    EGAL(cy,cy_eventuellement_decentree);
                    EGAL(cz,cz_eventuellement_decentree);
                                        /* Et decentrage eventuel...                                                                 */
                    Eblock
               ATes
                    Bblock
                    DEFV(Float,INIT(rho,ACCES_LISTE(liste_initiale_des_RHO,numero_effectif_des_points)));
                    DEFV(Float,INIT(theta,ACCES_LISTE(liste_initiale_des_THETA,numero_effectif_des_points)));
                    DEFV(Float,INIT(phi,ACCES_LISTE(liste_initiale_des_PHI,numero_effectif_des_points)));
                                        /* Recuperation du point courant (cx,cy,cz) en coordonnees spheriques.                       */
                    EGAL(rho,AXPB(facteur_d_homothetie_de_la_coordonnee_RHO,rho,constante_de_translation_de_la_coordonnee_RHO));
                    EGAL(theta,AXPB(facteur_d_homothetie_de_la_coordonnee_THETA,theta,constante_de_translation_de_la_coordonnee_THETA));
                    EGAL(phi,AXPB(facteur_d_homothetie_de_la_coordonnee_PHI,phi,constante_de_translation_de_la_coordonnee_PHI));
                                        /* Puis "homothetie"...                                                                      */

                    Test(IL_NE_FAUT_PAS(utiliser_les_coordonnees_spheriques_etendues))
                                        /* Test introduit le 20150602113353...                                                       */
                         Bblock
                         EGAL(cx,Xcartesienne_3D(rho,phi,theta));
                         EGAL(cy,Ycartesienne_3D(rho,phi,theta));
                         EGAL(cz,Zcartesienne_3D(rho,phi,theta));
                                        /* Et conversion en coordonnees cartesiennes.                                                */
                                        /*                                                                                           */
                                        /* On notera que cela equivaut a l'equation de la sphere :                                   */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = rho.sin(theta).cos(phi)                                  */
                                        /*                   x                                                                       */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = rho.sin(theta).sin(phi)                                  */
                                        /*                   y                                                                       */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = rho.cos(theta)                                           */
                                        /*                   z                                                                       */
                                        /*                                                                                           */
                                        /*        avec :                                                                             */
                                        /*                                                                                           */
                                        /*                            theta E [ 0 , pi ]                                             */
                                        /*                                                                                           */
                                        /*                            phi   E [ 0 , 2.pi ]                                           */
                                        /*                                                                                           */
                         Eblock
                    ATes
                         Bblock
                                        /* On rappelle les correspondances :                                                         */
                                        /*                                                                                           */
                                        /*                  u <--> theta                                                             */
                                        /*                  v <--> phi                                                               */
                                        /*                                                                                           */
                         Choi(numero_de_l_extension_des_coordonnees_spheriques)
                              Bblock
                              Ca1e(EXTENSION_ellipsoid)
                                   Bblock
#define   parametre_a                                                                                                                   \
                    rho
#define   parametre_b                                                                                                                   \
                    extension_des_coordonnees_spheriques_parametre_01
#define   parametre_c                                                                                                                   \
                    extension_des_coordonnees_spheriques_parametre_02
                                        /* Equation de l'ellipsoide :                                                                */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = rho.sin(theta).cos(phi)                                  */
                                        /*                   x                                                                       */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = P01.sin(theta).sin(phi)                                  */
                                        /*                   y                                                                       */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = P02.cos(theta)                                           */
                                        /*                   z                                                                       */
                                        /*                                                                                           */
                                        /*        avec :                                                                             */
                                        /*                                                                                           */
                                        /*                            theta E [ 0 , pi ]                                             */
                                        /*                                                                                           */
                                        /*                            phi   E [ 0 , 2.pi ]                                           */
                                        /*                                                                                           */

                                   EGAL(cx,Fx_Ellipsoide_1(theta,phi));
                                   EGAL(cy,Fy_Ellipsoide_1(theta,phi));
                                   EGAL(cz,Fz_Ellipsoide_1(theta,phi));
                                        /* Et conversion en coordonnees cartesiennes.                                                */

#undef    parametre_c
#undef    parametre_b
#undef    parametre_a
                                   Eblock
                              ECa1

                              Ca1e(EXTENSION_hyperboloid)
                                   Bblock
#define   parametre_a                                                                                                                   \
                    rho
#define   parametre_b                                                                                                                   \
                    extension_des_coordonnees_spheriques_parametre_01
#define   parametre_c                                                                                                                   \
                    extension_des_coordonnees_spheriques_parametre_02
                                        /* Equation de l'hyperboloide :                                                              */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = rho.ch(theta).cos(phi)                                   */
                                        /*                   x                                                                       */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = P01.ch(theta).sin(phi)                                   */
                                        /*                   y                                                                       */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = P02.sh(theta)                                            */
                                        /*                   z                                                                       */
                                        /*                                                                                           */
                                        /*        avec :                                                                             */
                                        /*                                                                                           */
                                        /*                            theta E ] -infini , +infini [                                  */
                                        /*                                                                                           */
                                        /*                            phi   E [ 0 , 2.pi ]                                           */
                                        /*                                                                                           */

                                   EGAL(cx,Fx_Hyperboloide_1(theta,phi));
                                   EGAL(cy,Fy_Hyperboloide_1(theta,phi));
                                   EGAL(cz,Fz_Hyperboloide_1(theta,phi));
                                        /* Et conversion en coordonnees cartesiennes.                                                */

#undef    parametre_c
#undef    parametre_b
#undef    parametre_a
                                   Eblock
                              ECa1

                              Ca1e(EXTENSION_cylindre)
                                   Bblock
#define   parametre_r                                                                                                                   \
                    rho
                                        /* Equation du cylindre :                                                                    */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = rho.cos(phi)                                             */
                                        /*                   x                                                                       */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = rho.sin(phi)                                             */
                                        /*                   y                                                                       */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = theta                                                    */
                                        /*                   z                                                                       */
                                        /*                                                                                           */
                                        /*        avec :                                                                             */
                                        /*                                                                                           */
                                        /*                            theta E [ -1 , +1 ]                                            */
                                        /*                                                                                           */
                                        /*                            phi   E [ 0 , 2.pi ]                                           */
                                        /*                                                                                           */

                                   EGAL(cx,Fx_Cylindre_1(theta,phi));
                                   EGAL(cy,Fy_Cylindre_1(theta,phi));
                                   EGAL(cz,Fz_Cylindre_1(theta,phi));
                                        /* Et conversion en coordonnees cartesiennes.                                                */

#undef    parametre_r
                                   Eblock
                              ECa1

                              Ca1e(EXTENSION_tore)
                                   Bblock
#define   parametre_R1                                                                                                                  \
                    extension_des_coordonnees_spheriques_parametre_01
#define   parametre_R2                                                                                                                  \
                    rho
                                        /* Equation du tore :                                                                        */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = [P01+rho.cos(theta)].cos(phi)                            */
                                        /*                   x                                                                       */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = [P01+rho.cos(theta)].sin(phi)                            */
                                        /*                   y                                                                       */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = rho.sin(theta)                                           */
                                        /*                   z                                                                       */
                                        /*                                                                                           */
                                        /*        avec :                                                                             */
                                        /*                                                                                           */
                                        /*                            theta E [ 0 , 2.pi ]                                           */
                                        /*                                                                                           */
                                        /*                            phi   E [ 0 , 2.pi ]                                           */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /* Ainsi, la coordonnee 'theta' decrit le petit cercle (de rayon 'rho') et 'phi' decrit le   */
                                        /* grand cercle (de rayon 'P01').                                                            */

                                   EGAL(cx,Fx_Tore_1(theta,phi));
                                   EGAL(cy,Fy_Tore_1(theta,phi));
                                   EGAL(cz,Fz_Tore_1(theta,phi));
                                        /* Et conversion en coordonnees cartesiennes.                                                */

#undef    parametre_R2
#undef    parametre_R1
                                   Eblock
                              ECa1

                              Ca1e(EXTENSION_Mobius2D)
                                   Bblock
#define   parametre_a                                                                                                                   \
                    rho
#define   parametre_b                                                                                                                   \
                    extension_des_coordonnees_spheriques_parametre_01
#define   parametre_c                                                                                                                   \
                    extension_des_coordonnees_spheriques_parametre_02
#define   parametre_d                                                                                                                   \
                    extension_des_coordonnees_spheriques_parametre_03
#define   parametre_e                                                                                                                   \
                    extension_des_coordonnees_spheriques_parametre_04
#define   parametre_f                                                                                                                   \
                    extension_des_coordonnees_spheriques_parametre_05
                                        /* Equation du ruban de Mobius :                                                             */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*        F (theta,phi) = BARY[rho.cos(theta)+P03,(rho-P01).cos(2.theta)+P03+P04,phi]        */
                                        /*         x                                                                                 */
                                        /*                                                                                           */
                                        /*        F (theta,phi) = BARY[rho.sin(theta)+P03,(rho-P01).sin(2.theta)+P03,phi]            */
                                        /*         y                                                                                 */
                                        /*                                                                                           */
                                        /*                                      theta    pi                theta     pi              */
                                        /*        F (theta,phi) = BARY[P02.sin(------ - ----)+P05,P02.sin(------- + ----)+P05,phi]   */
                                        /*         z                              2      2                   2       2               */
                                        /*                                                                                           */
                                        /*   avec :                                                                                  */
                                        /*                                                                                           */
                                        /*                  theta E [ 0 , 2.pi ]                                                     */
                                        /*                                                                                           */
                                        /*                  phi   E [ 0 , 1 ]                                                        */
                                        /*                                                                                           */

                                   EGAL(cx,Fx_Mobius2D_1(theta,phi));
                                   EGAL(cy,Fy_Mobius2D_1(theta,phi));
                                   EGAL(cz,Fz_Mobius2D_1(theta,phi));
                                        /* Et conversion en coordonnees cartesiennes.                                                */

#undef    parametre_f
#undef    parametre_e
#undef    parametre_d
#undef    parametre_c
#undef    parametre_b
#undef    parametre_a
                                   Eblock
                              ECa1

                              Ca1e(EXTENSION_project2D)
                                   Bblock
#define   Image_Fx_amplificateur                                                                                                        \
                    MUL2(rho,A_Image_Fx)
#define   Image_Fy_amplificateur                                                                                                        \
                    MUL2(rho,A_Image_Fy)
#define   Image_Fz_amplificateur                                                                                                        \
                    MUL2(rho,A_Image_Fz)
#define   Image_Fx_translateur                                                                                                          \
                    B_Image_Fx
#define   Image_Fy_translateur                                                                                                          \
                    B_Image_Fy
#define   Image_Fz_translateur                                                                                                          \
                    B_Image_Fz
                                        /* Equation de la projection :                                                               */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = [rho.A .ImageX(u,v)] + T                                 */
                                        /*                   x                    x                 x                                */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = [rho.A .ImageY(u,v)] + T                                 */
                                        /*                   y                    y                 y                                */
                                        /*                                                                                           */
                                        /*                  F (theta,phi) = [rho.A .ImageZ(u,v)] + T                                 */
                                        /*                   z                    z                 z                                */
                                        /*                                                                                           */
                                        /*        avec :                                                                             */
                                        /*                                                                                           */
                                        /*                            theta E [ 0 , 1 ]                                              */
                                        /*                                                                                           */
                                        /*                            phi   E [ 0 , 1 ]                                              */
                                        /*                                                                                           */

                                   DEFV(Float,INIT(theta_effectif
                                                  ,NORM(TRON(theta,minimum_de_u_theta,maximum_de_u_theta)
                                                       ,minimum_de_u_theta
                                                       ,maximum_de_u_theta
                                                        )
                                                   )
                                        );
                                   DEFV(Float,INIT(phi_effectif
                                                  ,NORM(TRON(phi,minimum_de_v_phi,maximum_de_v_phi)
                                                       ,minimum_de_v_phi
                                                       ,maximum_de_v_phi
                                                        )
                                                   )
                                        );
                                        /* Cette normalisation est destinee a faciliter des utilisations compatibles a               */
                                        /* 'v $xrs/surfaces.12$I u_NORMALISEE'...                                                    */

                                   EGAL(cx,Fx_Projector2D_1(theta_effectif,phi_effectif));
                                   EGAL(cy,Fy_Projector2D_1(theta_effectif,phi_effectif));
                                   EGAL(cz,Fz_Projector2D_1(theta_effectif,phi_effectif));
                                        /* Et conversion en coordonnees cartesiennes.                                                */

#undef    Image_Fz_translateur
#undef    Image_Fy_translateur
#undef    Image_Fx_translateur
#undef    Image_Fz_amplificateur
#undef    Image_Fy_amplificateur
#undef    Image_Fx_amplificateur
                                   Eblock
                              ECa1

                              Defo
                                   Bblock
                                   PRINT_ATTENTION("l'extension des cordonnees spheriques demandee n'existe pas -1-");
                                   CAL1(Prer1("cette extension a le numero %d\n",numero_de_l_extension_des_coordonnees_spheriques));

                                   EGAL(cx,Xcartesienne_3D(rho,phi,theta));
                                   EGAL(cy,Ycartesienne_3D(rho,phi,theta));
                                   EGAL(cz,Zcartesienne_3D(rho,phi,theta));
                                        /* Et conversion en coordonnees cartesiennes.                                                */
                                   Eblock
                              EDef
                              Eblock
                         ECho
                         Eblock
                    ETes

                    EGAL(cx
                        ,AXPB(facteur_d_homothetie_des_coordonnees
                             ,AXPB(facteur_d_homothetie_de_la_coordonnee_X
                                  ,ADD2(cx
                                       ,ACCES_LISTE(liste_initiale_des_tX,numero_effectif_des_points)
                                        )
                                  ,constante_de_translation_de_la_coordonnee_X
                                   )
                             ,constante_de_translation_des_coordonnees
                              )
                         );
                    EGAL(cy
                        ,AXPB(facteur_d_homothetie_des_coordonnees
                             ,AXPB(facteur_d_homothetie_de_la_coordonnee_Y
                                  ,ADD2(cy
                                       ,ACCES_LISTE(liste_initiale_des_tY,numero_effectif_des_points)
                                        )
                                  ,constante_de_translation_de_la_coordonnee_Y
                                   )
                             ,constante_de_translation_des_coordonnees
                              )
                         );
                    EGAL(cz
                        ,AXPB(facteur_d_homothetie_des_coordonnees
                             ,AXPB(facteur_d_homothetie_de_la_coordonnee_Z
                                  ,ADD2(cz
                                       ,ACCES_LISTE(liste_initiale_des_tZ,numero_effectif_des_points)
                                        )
                                  ,constante_de_translation_de_la_coordonnee_Z
                                   )
                             ,constante_de_translation_des_coordonnees
                              )
                         );
                                        /* Mise du point courant (cx,cy,cz) dans le bon systeme de coordonnees...                    */

                    Test(IL_FAUT(compatibilite_20211211))
                                        /* Test introduit le 20211211115613...                                                       */
                         Bblock
                         Eblock
                    ATes
                         Bblock
                                        /* Cette possibilite introduite le 20211211115613 permet d'outrepasser 'cx' et/ou 'cy'       */
                                        /* et/ou 'cz' calculees en coordonnees spheriques, avec les eventuelles listes cartesiennes  */
                                        /* si elles sont presentes...                                                                */
                         Test(IFNE_chaine(fichier_LISTE_X,NOM_PIPE_Local))
                              Bblock
                              EGAL(cx,ACCES_LISTE(liste_initiale_des_X,numero_effectif_des_points));
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         Test(IFNE_chaine(fichier_LISTE_Y,NOM_PIPE_Local))
                              Bblock
                              EGAL(cy,ACCES_LISTE(liste_initiale_des_Y,numero_effectif_des_points));
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         Test(IFNE_chaine(fichier_LISTE_Z,NOM_PIPE_Local))
                              Bblock
                              EGAL(cz,ACCES_LISTE(liste_initiale_des_Z,numero_effectif_des_points));
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    ETes
                    Eblock
               ETes

               EGAL(dx,ACCES_LISTE(liste_initiale_des_dX,numero_effectif_des_points));
               EGAL(dy,ACCES_LISTE(liste_initiale_des_dY,numero_effectif_des_points));
               EGAL(dz,ACCES_LISTE(liste_initiale_des_dZ,numero_effectif_des_points));
                                        /* Recuperation des derivees {dx,dy,dz} au point courant.                                    */

               Test(IL_FAUT(calculer_automatiquement_les_derivees_par_des_differences))
                    Bblock
                                        /* Test introduit le 20060809124105...                                                       */
                    EGAL(dx
                        ,MUL2(dx
                             ,SOUS(ACCES_LISTE(liste_initiale_des_X
                                              ,MODU(SUCC(numero_effectif_des_points),PREMIERE_ITERATION_D_UN_Komp,nombre_d_iterations)
                                               )
                                  ,ACCES_LISTE(liste_initiale_des_X
                                              ,MODU(PRED(numero_effectif_des_points),PREMIERE_ITERATION_D_UN_Komp,nombre_d_iterations)
                                               )
                                   )
                              )
                         );
                    EGAL(dy
                        ,MUL2(dy
                             ,SOUS(ACCES_LISTE(liste_initiale_des_Y
                                              ,MODU(SUCC(numero_effectif_des_points),PREMIERE_ITERATION_D_UN_Komp,nombre_d_iterations)
                                               )
                                  ,ACCES_LISTE(liste_initiale_des_Y
                                              ,MODU(PRED(numero_effectif_des_points),PREMIERE_ITERATION_D_UN_Komp,nombre_d_iterations)
                                               )
                                   )
                              )
                         );
                    EGAL(dz
                        ,MUL2(dz
                             ,SOUS(ACCES_LISTE(liste_initiale_des_Z
                                              ,MODU(SUCC(numero_effectif_des_points),PREMIERE_ITERATION_D_UN_Komp,nombre_d_iterations)
                                               )
                                  ,ACCES_LISTE(liste_initiale_des_Z
                                              ,MODU(PRED(numero_effectif_des_points),PREMIERE_ITERATION_D_UN_Komp,nombre_d_iterations)
                                               )
                                   )
                              )
                         );
                                        /* Calcul automatique des derivees au point 'N' par des differences finies des coordonnees   */
                                        /* aux points 'N-1' et 'N+1'...                                                              */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               EGAL(dcx,ACCES_LISTE(liste_initiale_des_ROUGE,numero_effectif_des_points));
               EGAL(dcy,ACCES_LISTE(liste_initiale_des_VERTE,numero_effectif_des_points));
               EGAL(dcz,ACCES_LISTE(liste_initiale_des_BLEUE,numero_effectif_des_points));
                                        /* Recuperation des couleurs (dcx,dcy,dcz) au point courant.                                 */

               Test(IFNE_chaine(fichier_LISTE_RAYON,NOM_PIPE_Local))
                    Bblock
                    EGAL(rayon_de_visualisation
                        ,RAYON_DES_SPHERES_REPRESENTATIVES(FU
                                                          ,ACCES_LISTE(liste_initiale_des_RAYON,numero_effectif_des_points)
                                                           )
                         );
                                        /* Recuperation eventuelle du rayon de chaque point...                                       */
                    Eblock
               ATes
                    Bblock
                    Test(IFET(IFEQ(numero_de_la_periode_courante_de_la_simulation,PREMIERE_ITERATION_D_UN_Komp)
                             ,IFEQ(numero_des_points,PREMIERE_ITERATION_D_UN_Komp)
                              )
                         )
                         Bblock
                         EGAL(rayon_de_visualisation
                             ,RAYON_DES_SPHERES_REPRESENTATIVES(FU
                                                               ,AXPB(facteur_d_homothetie_du_rayon
                                                                    ,rayon_de_visualisation
                                                                    ,constante_de_translation_du_rayon
                                                                     )
                                                                )
                              );
                                        /* Transformation du rayon lorsqu'il est commun a toutes les particules, mais cela n'etant   */
                                        /* fait qu'une seule fois evidemment...                                                      */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ETes

               Test(IL_FAUT(generer_des_points_isoles))
                    Bblock
                                        /* Cas de la visualisation de points isoles :                                                */
                    Test(IL_NE_FAUT_PAS(joindre_a_un_corps_central))
                         Bblock
                         CALS(memorisation_1_point_07(SOUS(cx,Xcentre_ESPACE)
                                                     ,SOUS(cy,Ycentre_ESPACE)
                                                     ,SOUS(cz,Zcentre_ESPACE)
                                                     ,dcx
                                                     ,dcy
                                                     ,dcz
                                                     ,numero_des_points
                                                      )
                              );
                                        /* Memorisation du point courant lors d'un trace de points isoles.                           */
                         Eblock
                    ATes
                         Bblock
                         Test(IFET(IFEQ(numero_de_la_periode_courante_de_la_simulation,PREMIERE_ITERATION_D_UN_Komp)
                                  ,IFEQ(numero_des_points,PREMIERE_ITERATION_D_UN_Komp)
                                   )
                              )
                              Bblock
                              EGAL(ROUGE_point_de_jonction
                                  ,POINT_DE_JONCTION(liste_initiale_des_ROUGE,______NORMALISE_NIVEAU(ROUGE_point_de_jonction))
                                   );
                              EGAL(VERTE_point_de_jonction
                                  ,POINT_DE_JONCTION(liste_initiale_des_VERTE,______NORMALISE_NIVEAU(VERTE_point_de_jonction))
                                   );
                              EGAL(BLEUE_point_de_jonction
                                  ,POINT_DE_JONCTION(liste_initiale_des_BLEUE,______NORMALISE_NIVEAU(BLEUE_point_de_jonction))
                                   );
                                        /* Normalisation des couleurs du point de jonction, mais cela n'etant fait qu'une seule      */
                                        /* fois evidemment. On notera qu'il ne faut surtout pas appliquer les differents facteurs    */
                                        /* d'homothetie et les constantes de translation aux coordonnees du point de jonction afin   */
                                        /* de le rendre autonome...                                                                  */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         EGAL(Acx,DECENTRAGE_DES_COORDONNEES(POINT_DE_JONCTION(liste_initiale_des_X,X_point_de_jonction),X,x));
                         EGAL(Acy,DECENTRAGE_DES_COORDONNEES(POINT_DE_JONCTION(liste_initiale_des_Y,Y_point_de_jonction),Y,y));
                         EGAL(Acz,DECENTRAGE_DES_COORDONNEES(POINT_DE_JONCTION(liste_initiale_des_Z,Z_point_de_jonction),Z,z));
                         EGAL(Adx,dx);
                         EGAL(Ady,dy);
                         EGAL(Adz,dz);
                         EGAL(Adcx,ROUGE_point_de_jonction);
                         EGAL(Adcy,VERTE_point_de_jonction);
                         EGAL(Adcz,BLEUE_point_de_jonction);
                         EGAL(Arayon_de_visualisation
                             ,POINT_DE_JONCTION(liste_initiale_des_RAYON,rayon_de_visualisation_point_de_jonction)
                              );
                                        /* Memorisation du point 'A'...                                                              */
                         EGAL(Bcx,cx);
                         EGAL(Bcy,cy);
                         EGAL(Bcz,cz);
                         EGAL(Bdx,dx);
                         EGAL(Bdy,dy);
                         EGAL(Bdz,dz);
                         EGAL(Bdcx,dcx);
                         EGAL(Bdcy,dcy);
                         EGAL(Bdcz,dcz);
                         EGAL(Brayon_de_visualisation,rayon_de_visualisation);
                                        /* Memorisation du point 'B'...                                                              */

                         VISUALISATION_D_UN_SEGMENT_VARIABLE(Acx,Acy,Acz
                                                            ,Adcx,Adcy,Adcz
                                                            ,Arayon_de_visualisation
                                                            ,Bcx,Bcy,Bcz
                                                            ,Bdcx,Bdcy,Bdcz
                                                            ,Brayon_de_visualisation
                                                            ,Adx,Ady,Adz
                                                            ,Bdx,Bdy,Bdz
                                                             );
                                        /* Memorisation du point courant lors d'une jonction ; on notera que les derivees au point   */
                                        /* de jonction sont choisies egales a celles du point courant {dx,dy,dz} car il est          */
                                        /* difficile de faire mieux (en effet, il faudrait avoir un jeu de {dx,dy,dz} par point      */
                                        /* courant..). De plus, le passage par les points 'A' et 'B' intermediaires est rendu        */
                                        /* necessaire pour eviter des problemes de pre-processing avec les noms de certaines         */
                                        /* variables...                                                                              */
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                                        /* Cas de la visualisation de couples de points :                                            */
                    Test(IL_FAUT(visualiser_le_point_courant))
                         Bblock
                         DEFV(Logical,INIT(tracer_le_segment_courant,VRAI));
                                        /* A priori, le segment courant sera trace...                                                */

                         EGAL(Bcx,cx);
                         EGAL(Bcy,cy);
                         EGAL(Bcz,cz);
                         EGAL(Bdx,dx);
                         EGAL(Bdy,dy);
                         EGAL(Bdz,dz);
                         EGAL(Bdcx,dcx);
                         EGAL(Bdcy,dcy);
                         EGAL(Bdcz,dcz);
                         EGAL(Brayon_de_visualisation,rayon_de_visualisation);
                                        /* Memorisation du point 'B'...                                                              */

                         Test(IL_FAUT(filtrer_la_longueur_des_segments))
                              Bblock
                              DEFV(Float,INIT(longueur_du_segment_courant,RdisF3D(Acx,Acy,Acz,Bcx,Bcy,Bcz)));

                              Test(IFEXff(longueur_du_segment_courant
                                         ,borne_inferieure_de_la_longueur_des_segments
                                         ,borne_superieure_de_la_longueur_des_segments
                                          )
                                   )
                                   Bblock
                                   EGAL(tracer_le_segment_courant,FAUX);
                                        /* Un segment dont la longueur n'est pas dans [inf,sup] n'est pas trace (cette possibilite   */
                                        /* fut introduite le 20120806100234...).                                                     */
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         Test(IL_FAUT(tracer_le_segment_courant))
                              Bblock
                              VISUALISATION_D_UN_SEGMENT_VARIABLE(Acx,Acy,Acz
                                                                 ,Adcx,Adcy,Adcz
                                                                 ,Arayon_de_visualisation
                                                                 ,Bcx,Bcy,Bcz
                                                                 ,Bdcx,Bdcy,Bdcz
                                                                 ,Brayon_de_visualisation
                                                                 ,Adx,Ady,Adz
                                                                 ,Bdx,Bdy,Bdz
                                                                  );
                                        /* Visualisation du segment 'AB'.                                                            */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         Test(IL_FAUT(chainer_automatiquement_les_points))
                              Bblock
                              EGAL(Acx,Bcx);
                              EGAL(Acy,Bcy);
                              EGAL(Acz,Bcz);
                              EGAL(Adx,Bdx);
                              EGAL(Ady,Bdy);
                              EGAL(Adz,Bdz);
                              EGAL(Adcx,Bdcx);
                              EGAL(Adcy,Bdcy);
                              EGAL(Adcz,Bdcz);
                              EGAL(Arayon_de_visualisation,Brayon_de_visualisation);
                                        /* Memorisation du point 'A' qui est en fait le point 'B' courant...                         */
                              EGAL(visualiser_le_point_courant,NOTL(visualiser_le_point_courant));
                                        /* Afin d'inverser dans ce cas ('IL_FAUT(chainer_automatiquement_les_points)') deux fois     */
                                        /* de suite 'visualiser_le_point_courant' et ce afin de ne plus positionner le point 'A'     */
                                        /* ci-apres...                                                                               */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         EGAL(Acx,cx);
                         EGAL(Acy,cy);
                         EGAL(Acz,cz);
                         EGAL(Adx,dx);
                         EGAL(Ady,dy);
                         EGAL(Adz,dz);
                         EGAL(Adcx,dcx);
                         EGAL(Adcy,dcy);
                         EGAL(Adcz,dcz);
                         EGAL(Arayon_de_visualisation,rayon_de_visualisation);
                                        /* Memorisation du point 'A'...                                                              */
                         Eblock
                    ETes

                    EGAL(visualiser_le_point_courant,NOTL(visualiser_le_point_courant));
                                        /* "Inversion" des conditions de visualisation...                                            */
                    Eblock
               ETes

               RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES;
                                        /* On notera que cette recherche n'est pas conditionnee par 'editer_les_extrema', car les    */
                                        /* extrema pourraient etre utilises pour la visualisation...                                 */
               Eblock
          EKom

#include  xrk/attractor.1A.I"

          VISUALISATION_DES_AXES_DE_COORDONNEES;
                                        /* Visualisation si necessaire des trois axes de coordonnees.                                */

          GENERATION_D_UNE_IMAGE_ET_PASSAGE_A_LA_SUIVANTE(BLOC(VIDE;));
                                        /* Generation de l'image courante...                                                         */

          INCREMENTATION_DE_L_HORLOGE(dct);
                                        /* Simulation d'un temps arbitraire (introduit le 19990512094356).                           */
          Eblock
     EKom

     EDITION_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES;
                                        /* Edition facultative des extrema des coordonnees et des derivees.                          */

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2019-2025.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2025.