/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   M A T H E M A T I Q U E S   D E   B A S E   S O U S   F O R M E   D E   " D E F I N E S "  :           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Dans ce fichier, se trouvent les                                                                               */
/*                  fonctions de base utilisees en                                                                                   */
/*                  mathematiques, et particulier le                                                                                 */
/*                  produit scalaire.                                                                                                */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$ximd/operator.1$FON' :                                                                                         */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19870000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O D U I T   S C A L A I R E   G E N E R A L   D E   Q U A T R E   P O I N T S   1 D  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   produit_scalaire_general_I1D(x11,x12,x21,x22)                                                                                 \
                    produit_scalaire_general_F1D(x11,x12,x21,x22)                                                                       \
                                        /* Produit scalaire "entier" a l'origine "0" (introduit le 20040328104842 "par symetrie"     */ \
                                        /* avec les dimensions superieures...).                                                      */

#define   produit_scalaire_general_F1D(x11,x12,x21,x22)                                                                                 \
                    MUL2(SOUS(x12,x11)                                                                                                  \
                        ,SOUS(x22,x21)                                                                                                  \
                         )                                                                                                              \
                                        /* Introduit le 20040328104842 "par symetrie" avec les dimensions superieures...             */
#define   ps0F1D(x12,x22)                                                                                                               \
                    produit_scalaire_general_F1D(FXorigine                                                                              \
                                                ,x12                                                                                    \
                                                ,FXorigine                                                                              \
                                                ,x22                                                                                    \
                                                 )                                                                                      \
                                        /* Produit scalaire "flottant" a l'origine "0" (introduit le 20080708112901).                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O D U I T   S C A L A I R E   G E N E R A L   D E  Q U A T R E   P O I N T S   2 D  :                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Notations :                                                                                                                */
/*                                                                                                                                   */
/*                    En vue d'assurer la liaison entre                                                                              */
/*                  'produit_scalaire_general_F2/3D' et                                                                              */
/*                  'prsF2/3D', on notera les points de                                                                              */
/*                  la facon suivante :                                                                                              */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                         A1                                                                        */
/*                                         11 --------------------------- 12                                                         */
/*                                                                                                                                   */
/*                                      origine                        extremite                                                     */
/*                                                                                                                                   */
/*                                         21 --------------------------- 22                                                         */
/*                                                         A2             | \                                                        */
/*                                                                        |  \                                                       */
/*                                                                        |   numero du point (1=origine, 2=extremite),              */
/*                                                                        |                                                          */
/*                                                                        |                                                          */
/*                                                                        numero du vecteur (1=A1, 2=A2).                            */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   produit_scalaire_general_I2D(x11,y11,x12,y12,x21,y21,x22,y22)                                                                 \
                    produit_scalaire_general_F2D(x11,y11,x12,y12,x21,y21,x22,y22)                                                       \
                                        /* Produit scalaire "entier" a l'origine "0".                                                */

#define   produit_scalaire_general_F2D(x11,y11,x12,y12,x21,y21,x22,y22)                                                                 \
                    ADD2(produit_scalaire_general_F1D(x11,x12,x21,x22)                                                                  \
                        ,produit_scalaire_general_F1D(y11,y12,y21,y22)                                                                  \
                         )
#define   ps0F2D(x12,y12,x22,y22)                                                                                                       \
                    produit_scalaire_general_F2D(FXorigine,FYorigine                                                                    \
                                                ,x12,y12                                                                                \
                                                ,FXorigine,FYorigine                                                                    \
                                                ,x22,y22                                                                                \
                                                 )                                                                                      \
                                        /* Produit scalaire "flottant" a l'origine "0" (introduit le 20080708112901).                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O D U I T   S C A L A I R E   G E N E R A L   D E   Q U A T R E   P O I N T S   3 D  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   produit_scalaire_general_I3D(x11,y11,z11,x12,y12,z12,x21,y21,z21,x22,y22,z22)                                                 \
                    produit_scalaire_general_F3D(x11,y11,z11,x12,y12,z12,x21,y21,z21,x22,y22,z22)                                       \
                                        /* Produit scalaire "entier" a l'origine "0".                                                */

#define   produit_scalaire_general_F3D(x11,y11,z11,x12,y12,z12,x21,y21,z21,x22,y22,z22)                                                 \
                    ADD2(produit_scalaire_general_F2D(x11,y11,x12,y12,x21,y21,x22,y22)                                                  \
                        ,produit_scalaire_general_F1D(z11,z12,z21,z22)                                                                  \
                         )
#define   ps0F3D(x12,y12,z12,x22,y22,z22)                                                                                               \
                    produit_scalaire_general_F3D(FXorigine,FYorigine,FZorigine                                                          \
                                                ,x12,y12,z12                                                                            \
                                                ,FXorigine,FYorigine,FZorigine                                                          \
                                                ,x22,y22,z22                                                                            \
                                                 )                                                                                      \
                                        /* Produit scalaire "flottant" a l'origine "0" (introduit le 20080708112901).                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O D U I T   S C A L A I R E   G E N E R A L   D E   Q U A T R E   P O I N T S   4 D  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   produit_scalaire_general_I4D(x11,y11,z11,t11,x12,y12,z12,t12,x21,y21,z21,t21,x22,y22,z22,t22)                                 \
                    produit_scalaire_general_F4D(x11,y11,z11,t11,x12,y12,z12,t12,x21,y21,z21,t21,x22,y22,z22,t22)                       \
                                        /* Produit scalaire "entier" a l'origine "0".                                                */

#define   produit_scalaire_general_F4D(x11,y11,z11,t11,x12,y12,z12,t12,x21,y21,z21,t21,x22,y22,z22,t22)                                 \
                    ADD2(produit_scalaire_general_F3D(x11,y11,z11,x12,y12,z12,x21,y21,z21,x22,y22,z22)                                  \
                        ,produit_scalaire_general_F1D(t11,t12,t21,t22)                                                                  \
                         )
#define   ps0F4D(x12,y12,z12,t12,x22,y22,z22,t22)                                                                                       \
                    produit_scalaire_general_F4D(FXorigine,FYorigine,FZorigine,FTorigine                                                \
                                                ,x12,y12,z12,t12                                                                        \
                                                ,FXorigine,FYorigine,FZorigine,FTorigine                                                \
                                                ,x22,y22,z22,t22                                                                        \
                                                 )                                                                                      \
                                        /* Produit scalaire "flottant" a l'origine "0" (introduit le 20080708112901).                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I S T A N C E   ( E T   S O N   C A R R E )   D E   D E U X   P O I N T S   1 D  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   disI1D(x1,x2)                                                                                                                 \
                    disF1D(x1,x2)
#define   RdisI1D(x1,x2)                                                                                                                \
                    RACX(disI1D(x1,x2))
                                        /* Distance euclidienne "entiere" (introduit le 20040328105656).                             */

#define   disF1D(x1,x2)                                                                                                                 \
                    produit_scalaire_general_F1D(x1,x2,x1,x2)
#define   RdisF1D(x1,x2)                                                                                                                \
                    RACX(disF1D(x1,x2))
                                        /* Distance euclidienne "flottante" (introduit le 20040328105656).                           */
#define   gpdisF1D(p1,ACCES1,p2,ACCES2)                                                                                                 \
                    produit_scalaire_general_F1D(ACCES1(p1,x)                                                                           \
                                                ,ACCES2(p2,x)                                                                           \
                                                ,ACCES1(p1,x)                                                                           \
                                                ,ACCES2(p2,x)                                                                           \
                                                 )
#define   RgpdisF1D(p1,ACCES1,p2,ACCES2)                                                                                                \
                    RACX(gpdisF1D(p1,ACCES1,p2,ACCES2))
#define   pdisF1D(p1,p2)                                                                                                                \
                    gpdisF1D(p1,ASD1,p2,ASD1)
#define   RpdisF1D(p1,p2)                                                                                                               \
                    RACX(pdisF1D(p1,p2))
                                        /* Distance euclidienne "flottante" entre deux points (introduite le 20120530093728).        */

#define   AXdisF1D(x1,x2)                                                                                                               \
                    SOUA(x1,x2)

#define   AIdisF1D(x1,x2)                                                                                                               \
                    AXdisF1D(x1,x2)
#define   ASdisF1D(x1,x2)                                                                                                               \
                    AXdisF1D(x1,x2)
#define   ACdisF1D(x1,x2)                                                                                                               \
                    AXdisF1D(x1,x2)
#define   AMdisF1D(x1,x2)                                                                                                               \
                    AXdisF1D(x1,x2)
                                        /* Distance dite par "valeur Absolue Inferieure", par "valeur Absolue Superieure", du        */
                                        /* "Chauffeur de taxi" ou enfin par "valeur Absolue Multipliee" (introduit le                */
                                        /* 20040328105656).                                                                          */
                                        /*                                                                                           */
                                        /* La "valeur Absolue Multipliee" fut introduite le 20070715105646 meme si elle a peu        */
                                        /* d'interet mathematique...                                                                 */
                                        /*                                                                                           */
                                        /* Le 20070716162214 fut introduit 'AXdisF1D(...)' pour permettre une definition plus        */
                                        /* generale des fonctions 'A?disF1D(...)'...                                                 */
#define   UdisF1D(x1,x2,Ponderation_R_,Ponderation_AI,Ponderation_AS,Ponderation_AC,Ponderation_AM)                                     \
                    LIO5(Ponderation_R_,RdisF1D(x1,x2)                                                                                  \
                        ,Ponderation_AI,AIdisF1D(x1,x2)                                                                                 \
                        ,Ponderation_AS,ASdisF1D(x1,x2)                                                                                 \
                        ,Ponderation_AC,ACdisF1D(x1,x2)                                                                                 \
                        ,Ponderation_AM,AMdisF1D(x1,x2)                                                                                 \
                        ,FZERO                                                                                                          \
                         )                                                                                                              \
                                        /* Distance dite "Universelle" cumulant toutes les distances possibles (elle fut introduite  */ \
                                        /* le 20071025105113).                                                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I S T A N C E   ( E T   S O N   C A R R E )   D E   D E U X   P O I N T S   2 D  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   disI2D(x1,y1,x2,y2)                                                                                                           \
                    disF2D(x1,y1,x2,y2)
#define   RdisI2D(x1,y1,x2,y2)                                                                                                          \
                    RACX(disI2D(x1,y1,x2,y2))
                                        /* Distance euclidienne "entiere".                                                           */

#define   disF2D(x1,y1,x2,y2)                                                                                                           \
                    produit_scalaire_general_F2D(x1,y1,x2,y2,x1,y1,x2,y2)
#define   RdisF2D(x1,y1,x2,y2)                                                                                                          \
                    RACX(disF2D(x1,y1,x2,y2))
                                        /* Distance euclidienne "flottante".                                                         */
#define   gpdisF2D(p1,ACCES1,p2,ACCES2)                                                                                                 \
                    produit_scalaire_general_F2D(ACCES1(p1,x),ACCES1(p1,y)                                                              \
                                                ,ACCES2(p2,x),ACCES2(p2,y)                                                              \
                                                ,ACCES1(p1,x),ACCES1(p1,y)                                                              \
                                                ,ACCES2(p2,x),ACCES2(p2,y)                                                              \
                                                 )
#define   RgpdisF2D(p1,ACCES1,p2,ACCES2)                                                                                                \
                    RACX(gpdisF2D(p1,ACCES1,p2,ACCES2))
#define   pdisF2D(p1,p2)                                                                                                                \
                    gpdisF2D(p1,ASD1,p2,ASD1)
#define   RpdisF2D(p1,p2)                                                                                                               \
                    RACX(pdisF2D(p1,p2))
                                        /* Distance euclidienne "flottante" entre deux points (introduite le 20120530093728).        */

#define   AIdisF2D(x1,y1,x2,y2)                                                                                                         \
                    MIN2(AIdisF1D(x1,x2),AIdisF1D(y1,y2))
#define   ASdisF2D(x1,y1,x2,y2)                                                                                                         \
                    MAX2(ASdisF1D(x1,x2),ASdisF1D(y1,y2))
#define   ACdisF2D(x1,y1,x2,y2)                                                                                                         \
                    ADD2(ACdisF1D(x1,x2),ACdisF1D(y1,y2))
#define   AMdisF2D(x1,y1,x2,y2)                                                                                                         \
                    MUL2(AMdisF1D(x1,x2),AMdisF1D(y1,y2))
                                        /* Distance dite par "valeur Absolue Inferieure", par "valeur Absolue Superieure", du        */
                                        /* "Chauffeur de taxi" ou enfin par "valeur Absolue Multipliee" (introduit le                */
                                        /* 20040328105656).                                                                          */
                                        /*                                                                                           */
                                        /* La "valeur Absolue Multipliee" fut introduite le 20070715105646 meme si elle a peu        */
                                        /* d'interet mathematique...                                                                 */
#define   UdisF2D(x1,y1,x2,y2,Ponderation_R_,Ponderation_AI,Ponderation_AS,Ponderation_AC,Ponderation_AM)                               \
                    LIO5(Ponderation_R_,RdisF2D(x1,y1,x2,y2)                                                                            \
                        ,Ponderation_AI,AIdisF2D(x1,y1,x2,y2)                                                                           \
                        ,Ponderation_AS,ASdisF2D(x1,y1,x2,y2)                                                                           \
                        ,Ponderation_AC,ACdisF2D(x1,y1,x2,y2)                                                                           \
                        ,Ponderation_AM,AMdisF2D(x1,y1,x2,y2)                                                                           \
                        ,FZERO                                                                                                          \
                         )                                                                                                              \
                                        /* Distance dite "Universelle" cumulant toutes les distances possibles (elle fut introduite  */ \
                                        /* le 20071025105113).                                                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I S T A N C E   ( E T   S O N   C A R R E )   D E   D E U X   P O I N T S   3 D  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   disI3D(x1,y1,z1,x2,y2,z2)                                                                                                     \
                    disF3D(x1,y1,z1,x2,y2,z2)
#define   RdisI3D(x1,y1,z1,x2,y2,z2)                                                                                                    \
                    RACX(disI3D(x1,y1,z1,x2,y2,z2))
                                        /* Distance euclidienne "entiere".                                                           */

#define   disF3D(x1,y1,z1,x2,y2,z2)                                                                                                     \
                    produit_scalaire_general_F3D(x1,y1,z1,x2,y2,z2,x1,y1,z1,x2,y2,z2)
#define   RdisF3D(x1,y1,z1,x2,y2,z2)                                                                                                    \
                    RACX(disF3D(x1,y1,z1,x2,y2,z2))
                                        /* Distance euclidienne "flottante".                                                         */
#define   gpdisF3D(p1,ACCES1,p2,ACCES2)                                                                                                 \
                    produit_scalaire_general_F3D(ACCES1(p1,x),ACCES1(p1,y),ACCES1(p1,z)                                                 \
                                                ,ACCES2(p2,x),ACCES2(p2,y),ACCES2(p2,z)                                                 \
                                                ,ACCES1(p1,x),ACCES1(p1,y),ACCES1(p1,z)                                                 \
                                                ,ACCES2(p2,x),ACCES2(p2,y),ACCES2(p2,z)                                                 \
                                                 )
#define   RgpdisF3D(p1,ACCES1,p2,ACCES2)                                                                                                \
                    RACX(gpdisF3D(p1,ACCES1,p2,ACCES2))
#define   pdisF3D(p1,p2)                                                                                                                \
                    gpdisF3D(p1,ASD1,p2,ASD1)
#define   RpdisF3D(p1,p2)                                                                                                               \
                    RACX(pdisF3D(p1,p2))
                                        /* Distance euclidienne "flottante" entre deux points (introduite le 20120530093728).        */

#define   AIdisF3D(x1,y1,z1,x2,y2,z2)                                                                                                   \
                    MIN2(AIdisF2D(x1,y1,x2,y2),AIdisF1D(z1,z2))
#define   ASdisF3D(x1,y1,z1,x2,y2,z2)                                                                                                   \
                    MAX2(ASdisF2D(x1,y1,x2,y2),ASdisF1D(z1,z2))
#define   ACdisF3D(x1,y1,z1,x2,y2,z2)                                                                                                   \
                    ADD2(ACdisF2D(x1,y1,x2,y2),ACdisF1D(z1,z2))
#define   AMdisF3D(x1,y1,z1,x2,y2,z2)                                                                                                   \
                    MUL2(AMdisF2D(x1,y1,x2,y2),AMdisF1D(z1,z2))
                                        /* Distance dite par "valeur Absolue Inferieure", par "valeur Absolue Superieure", du        */
                                        /* "Chauffeur de taxi" ou enfin par "valeur Absolue Multipliee" (introduit le                */
                                        /* 20040328105656).                                                                          */
                                        /*                                                                                           */
                                        /* La "valeur Absolue Multipliee" fut introduite le 20070715105646 meme si elle a peu        */
                                        /* d'interet mathematique...                                                                 */
#define   UdisF3D(x1,y1,z1,x2,y2,z2,Ponderation_R_,Ponderation_AI,Ponderation_AS,Ponderation_AC,Ponderation_AM)                         \
                    LIO5(Ponderation_R_,RdisF3D(x1,y1,z1,x2,y2,z2)                                                                      \
                        ,Ponderation_AI,AIdisF3D(x1,y1,z1,x2,y2,z2)                                                                     \
                        ,Ponderation_AS,ASdisF3D(x1,y1,z1,x2,y2,z2)                                                                     \
                        ,Ponderation_AC,ACdisF3D(x1,y1,z1,x2,y2,z2)                                                                     \
                        ,Ponderation_AM,AMdisF3D(x1,y1,z1,x2,y2,z2)                                                                     \
                        ,FZERO                                                                                                          \
                         )                                                                                                              \
                                        /* Distance dite "Universelle" cumulant toutes les distances possibles (elle fut introduite  */ \
                                        /* le 20071025105113).                                                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I S T A N C E   ( E T   S O N   C A R R E )   D E   D E U X   P O I N T S   4 D  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   disI4D(x1,y1,z1,t1,x2,y2,z2,t2)                                                                                               \
                    disF4D(x1,y1,z1,t1,x2,y2,z2,t2)
#define   RdisI4D(x1,y1,z1,t1,x2,y2,z2,t2)                                                                                              \
                    RACX(disI4D(x1,y1,z1,t1,x2,y2,z2,t2))
                                        /* Distance euclidienne "entiere".                                                           */

#define   disF4D(x1,y1,z1,t1,x2,y2,z2,t2)                                                                                               \
                    produit_scalaire_general_F4D(x1,y1,z1,t1,x2,y2,z2,t2,x1,y1,z1,t1,x2,y2,z2,t2)
#define   RdisF4D(x1,y1,z1,t1,x2,y2,z2,t2)                                                                                              \
                    RACX(disF4D(x1,y1,z1,t1,x2,y2,z2,t2))
                                        /* Distance euclidienne "flottante".                                                         */

#define   AIdisF4D(x1,y1,z1,t1,x2,y2,z2,t2)                                                                                             \
                    MIN2(AIdisF3D(x1,y1,z1,x2,y2,z2),AIdisF1D(t1,t2))
#define   ASdisF4D(x1,y1,z1,t1,x2,y2,z2,t2)                                                                                             \
                    MAX2(ASdisF3D(x1,y1,z1,x2,y2,z2),ASdisF1D(t1,t2))
#define   ACdisF4D(x1,y1,z1,t1,x2,y2,z2,t2)                                                                                             \
                    ADD2(ACdisF3D(x1,y1,z1,x2,y2,z2),ACdisF1D(t1,t2))
#define   AMdisF4D(x1,y1,z1,t1,x2,y2,z2,t2)                                                                                             \
                    MUL2(AMdisF3D(x1,y1,z1,x2,y2,z2),AMdisF1D(t1,t2))
                                        /* Distance dite par "valeur Absolue Inferieure", par "valeur Absolue Superieure", du        */
                                        /* "Chauffeur de taxi" ou enfin par "valeur Absolue Multipliee" (introduit le                */
                                        /* 20040328105656).                                                                          */
                                        /*                                                                                           */
                                        /* La "valeur Absolue Multipliee" fut introduite le 20070715105646 meme si elle a peu        */
                                        /* d'interet mathematique...                                                                 */
#define   UdisF4D(x1,y1,z1,t1,x2,y2,z2,t2,Ponderation_R_,Ponderation_AI,Ponderation_AS,Ponderation_AC,Ponderation_AM)                   \
                    LIO5(Ponderation_R_,RdisF4D(x1,y1,z1,t1,x2,y2,z2,t2)                                                                \
                        ,Ponderation_AI,AIdisF4D(x1,y1,z1,t1,x2,y2,z2,t2)                                                               \
                        ,Ponderation_AS,ASdisF4D(x1,y1,z1,t1,x2,y2,z2,t2)                                                               \
                        ,Ponderation_AC,ACdisF4D(x1,y1,z1,t1,x2,y2,z2,t2)                                                               \
                        ,Ponderation_AM,AMdisF4D(x1,y1,z1,t1,x2,y2,z2,t2)                                                               \
                        ,FZERO                                                                                                          \
                         )                                                                                                              \
                                        /* Distance dite "Universelle" cumulant toutes les distances possibles (elle fut introduite  */ \
                                        /* le 20071025105113).                                                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I S T A N C E   ( E T   S O N   C A R R E )   D E   D E U X   P O I N T S   5 D   E T   A U - D E L A  :                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   disF5D(X1a,X2a,X3a,X4a,X5a,X1b,X2b,X3b,X4b,X5b)                                                                               \
                    ADD2(disF1D(X1a,X1b)                                                                                                \
                        ,disF4D(X2a,X3a,X4a,X5a                                                                                         \
                               ,X2b,X3b,X4b,X5b                                                                                         \
                                )                                                                                                       \
                         )
#define   RdisF5D(X1a,X2a,X3a,X4a,X5a,X1b,X2b,X3b,X4b,X5b)                                                                              \
                    RACX(disF5D(X1a,X2a,X3a,X4a,X5a                                                                                     \
                               ,X1b,X2b,X3b,X4b,X5b                                                                                     \
                                )                                                                                                       \
                         )
                                        /* Distance euclidienne "flottante" 5D introduite le 20110810144451...                       */

#define   disF6D(X1a,X2a,X3a,X4a,X5a,X6a,X1b,X2b,X3b,X4b,X5b,X6b)                                                                       \
                    ADD2(disF1D(X1a,X1b)                                                                                                \
                        ,disF5D(X2a,X3a,X4a,X5a,X6a                                                                                     \
                               ,X2b,X3b,X4b,X5b,X6b                                                                                     \
                                )                                                                                                       \
                         )
#define   RdisF6D(X1a,X2a,X3a,X4a,X5a,X6a,X1b,X2b,X3b,X4b,X5b,X6b)                                                                      \
                    RACX(disF6D(X1a,X2a,X3a,X4a,X5a,X6a                                                                                 \
                               ,X1b,X2b,X3b,X4b,X5b,X6b                                                                                 \
                                )                                                                                                       \
                         )
                                        /* Distance euclidienne "flottante" 6D introduite le 20110810144451...                       */

#define   disF7D(X1a,X2a,X3a,X4a,X5a,X6a,X7a,X1b,X2b,X3b,X4b,X5b,X6b,X7b)                                                               \
                    ADD2(disF1D(X1a,X1b)                                                                                                \
                        ,disF6D(X2a,X3a,X4a,X5a,X6a,X7a                                                                                 \
                               ,X2b,X3b,X4b,X5b,X6b,X7b                                                                                 \
                                )                                                                                                       \
                         )
#define   RdisF7D(X1a,X2a,X3a,X4a,X5a,X6a,X7a,X1b,X2b,X3b,X4b,X5b,X6b,X7b)                                                              \
                    RACX(disF7D(X1a,X2a,X3a,X4a,X5a,X6a,X7a                                                                             \
                               ,X1b,X2b,X3b,X4b,X5b,X6b,X7b                                                                             \
                                )                                                                                                       \
                         )
                                        /* Distance euclidienne "flottante" 7D introduite le 20110810144451...                       */

#define   disF8D(X1a,X2a,X3a,X4a,X5a,X6a,X7a,X8a,X1b,X2b,X3b,X4b,X5b,X6b,X7b,X8b)                                                       \
                    ADD2(disF1D(X1a,X1b)                                                                                                \
                        ,disF7D(X2a,X3a,X4a,X5a,X6a,X7a,X8a                                                                             \
                               ,X2b,X3b,X4b,X5b,X6b,X7b,X8b                                                                             \
                                )                                                                                                       \
                         )
#define   RdisF8D(X1a,X2a,X3a,X4a,X5a,X6a,X7a,X8a,X1b,X2b,X3b,X4b,X5b,X6b,X7b,X8b)                                                      \
                    RACX(disF8D(X1a,X2a,X3a,X4a,X5a,X6a,X7a,X8a                                                                         \
                               ,X1b,X2b,X3b,X4b,X5b,X6b,X7b,X8b                                                                         \
                                )                                                                                                       \
                         )
                                        /* Distance euclidienne "flottante" 8D introduite le 20110810144451...                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P E N T E S   D U   S E G M E N T   E N T R E   D E U X   P O I N T S   1 D  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PenteX_normalisee_1D(x1,x2)                                                                                                   \
                    DIVZ(SOUS(x2,x1),RdisF1D(x1,x2))
                                        /* Pentes du segment entre deux points 1D (introduites le 20180702095929...).                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P E N T E S   D U   S E G M E N T   E N T R E   D E U X   P O I N T S   2 D  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PenteX_normalisee_2D(x1,y1,x2,y2)                                                                                             \
                    DIVZ(SOUS(x2,x1),RdisF2D(x1,y1,x2,y2))
#define   PenteY_normalisee_2D(x1,y1,x2,y2)                                                                                             \
                    DIVZ(SOUS(y2,y1),RdisF2D(x1,y1,x2,y2))
                                        /* Pentes du segment entre deux points 2D (introduites le 20180702095929...).                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P E N T E S   D U   S E G M E N T   E N T R E   D E U X   P O I N T S   3 D  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PenteX_normalisee_3D(x1,y1,z1,x2,y2,z2)                                                                                       \
                    DIVZ(SOUS(x2,x1),RdisF3D(x1,y1,z1,x2,y2,z2))
#define   PenteY_normalisee_3D(x1,y1,z1,x2,y2,z2)                                                                                       \
                    DIVZ(SOUS(y2,y1),RdisF3D(x1,y1,z1,x2,y2,z2))
#define   PenteZ_normalisee_3D(x1,y1,z1,x2,y2,z2)                                                                                       \
                    DIVZ(SOUS(z2,z1),RdisF3D(x1,y1,z1,x2,y2,z2))
                                        /* Pentes du segment entre deux points 3D (introduites le 20180702095929...).                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I D E N T I T E   D E   D E U X   P O I N T S   1 D  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   IFEQ_Rpoints1D_a_peu_pres(x1,x2,epsilon)                                                                                      \
                    IFLE(RdisF1D(x1,x2),epsilon)
#define   IFEQ_Upoints1D_a_peu_pres(x1,x2,epsilon,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                                    \
                    IFLE(UdisF1D(x1,x2,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM),epsilon)
                                        /* Test d'identite approximatif introduit le 20150617082140...                               */

#define   IFNE_Rpoints1D_a_peu_pres(x1,x2,epsilon)                                                                                      \
                    NOTL(IFEQ_Rpoints1D_a_peu_pres(x1,x2,epsilon))
#define   IFNE_Upoints1D_a_peu_pres(x1,x2,epsilon,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                                    \
                    NOTL(IFEQ_Upoints1D_a_peu_pres(x1,x2,epsilon,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM))
                                        /* Test de non identite approximatif introduit le 20150617082140...                          */

#define   IFEQ_Rpoints1D(x1,x2)                                                                                                         \
                    IFEQ_Rpoints1D_a_peu_pres(x1,x2,FZERO)
#define   IFEQ_Upoints1D(x1,x2,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                                                       \
                    IFEQ_Upoints1D_a_peu_pres(x1,x2,FZERO,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)
                                        /* Test d'identite exact introduit le 20150617105748...                                      */

#define   IFNE_Rpoints1D(x1,x2)                                                                                                         \
                    IFNE_Rpoints1D_a_peu_pres(x1,x2,FZERO)
#define   IFNE_Upoints1D(x1,x2,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                                                       \
                    IFNE_Upoints1D_a_peu_pres(x1,x2,FZERO,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)
                                        /* Test de non identite exact introduit le 20150617105748...                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I D E N T I T E   D E   D E U X   P O I N T S   2 D  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   IFEQ_Rpoints2D_a_peu_pres(x1,y1,x2,y2,epsilon)                                                                                \
                    IFLE(RdisF2D(x1,y1,x2,y2),epsilon)
#define   IFEQ_Upoints2D_a_peu_pres(x1,y1,x2,y2,epsilon,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                              \
                    IFLE(UdisF2D(x1,y1,x2,y2,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM),epsilon)
                                        /* Test d'identite approximatif introduit le 20150617082140...                               */

#define   IFNE_Rpoints2D_a_peu_pres(x1,y1,x2,y2,epsilon)                                                                                \
                    NOTL(IFEQ_Rpoints2D_a_peu_pres(x1,y1,x2,y2,epsilon))
#define   IFNE_Upoints2D_a_peu_pres(x1,y1,x2,y2,epsilon,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                              \
                    NOTL(IFEQ_Upoints2D_a_peu_pres(x1,y1,x2,y2,epsilon,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM))
                                        /* Test de non identite approximatif introduit le 20150617082140...                          */

#define   IFEQ_Rpoints2D(x1,y1,x2,y2)                                                                                                   \
                    IFEQ_Rpoints2D_a_peu_pres(x1,y1,x2,y2,FZERO)
#define   IFEQ_Upoints2D(x1,y1,x2,y2,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                                                 \
                    IFEQ_Upoints2D_a_peu_pres(x1,y1,x2,y2,FZERO,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)
                                        /* Test d'identite exact introduit le 20150617105748...                                      */

#define   IFNE_Rpoints2D(x1,y1,x2,y2)                                                                                                   \
                    IFNE_Rpoints2D_a_peu_pres(x1,y1,x2,y2,FZERO)
#define   IFNE_Upoints2D(x1,y1,x2,y2,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                                                 \
                    IFNE_Upoints2D_a_peu_pres(x1,y1,x2,y2,FZERO,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)
                                        /* Test de non identite exact introduit le 20150617105748...                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I D E N T I T E   D E   D E U X   P O I N T S   3 D  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   IFEQ_Rpoints3D_a_peu_pres(x1,y1,z1,x2,y2,z2,epsilon)                                                                          \
                    IFLE(RdisF3D(x1,y1,z1,x2,y2,z2),epsilon)
#define   IFEQ_Upoints3D_a_peu_pres(x1,y1,z1,x2,y2,z2,epsilon,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                        \
                    IFLE(UdisF3D(x1,y1,z1,x2,y2,z2,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM),epsilon)
                                        /* Test d'identite approximatif introduit le 20150617082140...                               */

#define   IFNE_Rpoints3D_a_peu_pres(x1,y1,z1,x2,y2,z2,epsilon)                                                                          \
                    NOTL(IFEQ_Rpoints3D_a_peu_pres(x1,y1,z1,x2,y2,z2,epsilon))
#define   IFNE_Upoints3D_a_peu_pres(x1,y1,z1,x2,y2,z2,epsilon,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                        \
                    NOTL(IFEQ_Upoints3D_a_peu_pres(x1,y1,z1,x2,y2,z2,epsilon,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM))
                                        /* Test de non identite approximatif introduit le 20150617082140...                          */

#define   IFEQ_Rpoints3D(x1,y1,z1,x2,y2,z2)                                                                                             \
                    IFEQ_Rpoints3D_a_peu_pres(x1,y1,z1,x2,y2,z2,FZERO)
#define   IFEQ_Upoints3D(x1,y1,z1,x2,y2,z2,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                                           \
                    IFEQ_Upoints3D_a_peu_pres(x1,y1,z1,x2,y2,z2,FZERO,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)
                                        /* Test d'identite exact introduit le 20150617105748...                                      */

#define   IFNE_Rpoints3D(x1,y1,z1,x2,y2,z2)                                                                                             \
                    IFNE_Rpoints3D_a_peu_pres(x1,y1,z1,x2,y2,z2,FZERO)
#define   IFNE_Upoints3D(x1,y1,z1,x2,y2,z2,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                                           \
                    IFNE_Upoints3D_a_peu_pres(x1,y1,z1,x2,y2,z2,FZERO,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)
                                        /* Test de non identite exact introduit le 20150617105748...                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I D E N T I T E   D E   D E U X   P O I N T S   4 D  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   IFEQ_Rpoints4D_a_peu_pres(x1,y1,z1,t1,x2,y2,z2,t2,epsilon)                                                                    \
                    IFLE(RdisF4D(x1,y1,z1,t1,x2,y2,z2,t2),epsilon)
#define   IFEQ_Upoints4D_a_peu_pres(x1,y1,z1,t1,x2,y2,z2,t2,epsilon,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                  \
                    IFLE(UdisF4D(x1,y1,z1,t1,x2,y2,z2,t2,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM),epsilon)
                                        /* Test d'identite approximatif introduit le 20150617082140...                               */

#define   IFNE_Rpoints4D_a_peu_pres(x1,y1,z1,t1,x2,y2,z2,t2,epsilon)                                                                    \
                    NOTL(IFEQ_Rpoints4D_a_peu_pres(x1,y1,z1,t1,x2,y2,z2,t2,epsilon))
#define   IFNE_Upoints4D_a_peu_pres(x1,y1,z1,t1,x2,y2,z2,t2,epsilon,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                  \
                    NOTL(IFEQ_Upoints4D_a_peu_pres(x1,y1,z1,t1,x2,y2,z2,t2,epsilon,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM))
                                        /* Test de non identite approximatif introduit le 20150617082140...                          */

#define   IFEQ_Rpoints4D(x1,y1,z1,t1,x2,y2,z2,t2)                                                                                       \
                    IFEQ_Rpoints4D_a_peu_pres(x1,y1,z1,t1,x2,y2,z2,t2,FZERO)
#define   IFEQ_Upoints4D(x1,y1,z1,t1,x2,y2,z2,t2,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                                     \
                    IFEQ_Upoints4D_a_peu_pres(x1,y1,z1,t1,x2,y2,z2,t2,FZERO,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)
                                        /* Test d'identite exact introduit le 20150617105748...                                      */

#define   IFNE_Rpoints4D(x1,y1,z1,t1,x2,y2,z2,t2)                                                                                       \
                    IFNE_Rpoints4D_a_peu_pres(x1,y1,z1,t1,x2,y2,z2,t2,FZERO)
#define   IFNE_Upoints4D(x1,y1,z1,t1,x2,y2,z2,t2,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)                                     \
                    IFNE_Upoints4D_a_peu_pres(x1,y1,z1,t1,x2,y2,z2,t2,FZERO,Ponder_R_,Ponder_AI,Ponder_AS,Ponder_AC,Ponder_AM)
                                        /* Test de non identite exact introduit le 20150617105748...                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O D U I T   S C A L A I R E   D E   D E U X   V E C T E U R S   1 D  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   prsI1D(vectorA1,vectorA2)                                                                                                     \
                    prsF1D(vectorA1,vectorA2)

#define   prsF1D(vectorA1,vectorA2)                                                                                                     \
                    produit_scalaire_general_F1D(ASD2(vectorA1,origine,x)                                                               \
                                                ,ASD2(vectorA1,extremite,x)                                                             \
                                                ,ASD2(vectorA2,origine,x)                                                               \
                                                ,ASD2(vectorA2,extremite,x)                                                             \
                                                 )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O D U I T   S C A L A I R E   D E   D E U X   V E C T E U R S   2 D  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   prsI2D(vectorA1,vectorA2)                                                                                                     \
                    prsF2D(vectorA1,vectorA2)

#define   prsF2D(vectorA1,vectorA2)                                                                                                     \
                    produit_scalaire_general_F2D(ASD2(vectorA1,origine,x),ASD2(vectorA1,origine,y)                                      \
                                                ,ASD2(vectorA1,extremite,x),ASD2(vectorA1,extremite,y)                                  \
                                                ,ASD2(vectorA2,origine,x),ASD2(vectorA2,origine,y)                                      \
                                                ,ASD2(vectorA2,extremite,x),ASD2(vectorA2,extremite,y)                                  \
                                                 )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O D U I T   S C A L A I R E   D E   D E U X   V E C T E U R S   3 D  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   prsI3D(vectorA1,vectorA2)                                                                                                     \
                    prsF3D(vectorA1,vectorA2)

#define   prsF3D(vectorA1,vectorA2)                                                                                                     \
                    produit_scalaire_general_F3D(ASD2(vectorA1,origine,x),ASD2(vectorA1,origine,y),ASD2(vectorA1,origine,z)             \
                                                ,ASD2(vectorA1,extremite,x),ASD2(vectorA1,extremite,y),ASD2(vectorA1,extremite,z)       \
                                                ,ASD2(vectorA2,origine,x),ASD2(vectorA2,origine,y),ASD2(vectorA2,origine,z)             \
                                                ,ASD2(vectorA2,extremite,x),ASD2(vectorA2,extremite,y),ASD2(vectorA2,extremite,z)       \
                                                 )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        N O R M E   D ' U N   V E C T E U R   1 D  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   normI1D(vectorA)                                                                                                              \
                    RACX(FLOT(prsI1D(vectorA,vectorA)))

#define   normF1D(vectorA)                                                                                                              \
                    RACX(prsF1D(vectorA,vectorA))

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        N O R M E   D ' U N   V E C T E U R   2 D  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   normI2D(vectorA)                                                                                                              \
                    RACX(FLOT(prsI2D(vectorA,vectorA)))

#define   normF2D(vectorA)                                                                                                              \
                    RACX(prsF2D(vectorA,vectorA))

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        N O R M E   D ' U N   V E C T E U R   3 D  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   normI3D(vectorA)                                                                                                              \
                    RACX(FLOT(prsI3D(vectorA,vectorA)))

#define   normF3D(vectorA)                                                                                                              \
                    RACX(prsF3D(vectorA,vectorA))

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T H E O R E M E   D E   P Y T H A G O R E   E T   L O N G U E U R   D ' U N   V E C T E U R   1 D  :                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   pytI1D(delta)                                                                                                                 \
                    pytF1D(delta)
#define   longI1D(delta)                                                                                                                \
                    RACX(pytI1D(delta))

-define   GpytF1D(x)                                                                                                                    \
-_-_-_-             ABSO(x)
                                        /* "Theoreme de Pythagore" general introduit le 20040328105656.                              */

#define   pytF1D(delta)                                                                                                                 \
                    prdF1D(delta,delta)
#define   longF1D(delta)                                                                                                                \
                    RACX(pytF1D(delta))

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T H E O R E M E   D E   P Y T H A G O R E   E T   L O N G U E U R   D ' U N   V E C T E U R   2 D  :                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   pytI2D(delta)                                                                                                                 \
                    pytF2D(delta)
#define   longI2D(delta)                                                                                                                \
                    RACX(pytI2D(delta))

-define   GpytF2D(x,y)                                                                                                                  \
-_-_-_-             RACX(ADD2(EXP2(x),EXP2(y)))
                                        /* "Theoreme de Pythagore" general introduit le 20021120101208.                              */

#define   ANGLE_QUELCONQUE                                                                                                              \
                    FZERO
#define   COSINUS_CARRE_PLUS_SINUS_CARRE                                                                                                \
                    GpytF2D(COSX(ANGLE_QUELCONQUE),SINX(ANGLE_QUELCONQUE))
                                        /* Introduit le 20161228094015 pour 'v $xrs/helicoide.11$I COSINUS_CARRE_PLUS_SINUS_CARRE'.  */

#define   pytF2D(delta)                                                                                                                 \
                    prdF2D(delta,delta)
#define   longF2D(delta)                                                                                                                \
                    RACX(pytF2D(delta))

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T H E O R E M E   D E   P Y T H A G O R E   E T   L O N G U E U R   D ' U N   V E C T E U R   3 D  :                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   pytI3D(delta)                                                                                                                 \
                    pytF3D(delta)
#define   longI3D(delta)                                                                                                                \
                    RACX(pytI3D(delta))

-define   GpytF3D(x,y,z)                                                                                                                \
-_-_-_-             RACX(ADD3(EXP2(x),EXP2(y),EXP2(z)))
                                        /* "Theoreme de Pythagore" general introduit le 20021120101208.                              */

#define   pytF3D(delta)                                                                                                                 \
                    prdF3D(delta,delta)
#define   longF3D(delta)                                                                                                                \
                    RACX(pytF3D(delta))

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T H E O R E M E   D E   P Y T H A G O R E   4 D  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
-define   GpytF4D(x,y,z,t)                                                                                                              \
-_-_-_-             RACX(ADD4(EXP2(x),EXP2(y),EXP2(z),EXP2(t)))
                                        /* "Theoreme de Pythagore" general introduit le 20230210100148.                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T H E O R E M E   D E   P Y T H A G O R E   8 D  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
-define   GpytF8D(x1,x2,x3,x4,x5,x6,x7,x8)                                                                                              \
-_-_-_-             RACX(ADD8(EXP2(x1),EXP2(x2),EXP2(x3),EXP2(x4),EXP2(x5),EXP2(x6),EXP2(x7),EXP2(x8)))
                                        /* "Theoreme de Pythagore" general introduit le 20230225122831.                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O D U I T   D E   D E U X   D E P L A C E M E N T S   1 D  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   prdI1D(deltaA1,deltaA2)                                                                                                       \
                    prdF1D(deltaA1,deltaA2)

#define   prdF1D(deltaA1,deltaA2)                                                                                                       \
                    MUL2(ASD1(deltaA1,dx),ASD1(deltaA2,dx))

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O D U I T   D E   D E U X   D E P L A C E M E N T S   2 D  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   prdI2D(deltaA1,deltaA2)                                                                                                       \
                    prdF2D(deltaA1,deltaA2)

#define   prdF2D(deltaA1,deltaA2)                                                                                                       \
                    ADD2(prdF1D(deltaA1,deltaA2)                                                                                        \
                        ,MUL2(ASD1(deltaA1,dy),ASD1(deltaA2,dy))                                                                        \
                         )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O D U I T   D E   D E U X   D E P L A C E M E N T S   3 D  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   prdI3D(deltaA1,deltaA2)                                                                                                       \
                    prdF3D(deltaA1,deltaA2)

#define   prdF3D(deltaA1,deltaA2)                                                                                                       \
                    ADD2(prdF2D(deltaA1,deltaA2)                                                                                        \
                        ,MUL2(ASD1(deltaA1,dz),ASD1(deltaA2,dz))                                                                        \
                         )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E S O L U T I O N   D E   L ' E Q U A T I O N   D U   S E C O N D   D E G R E  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DISCRIMINANT2(a,b,c)                                                                                                          \
                    SOUS(EXP2(b),GRO4(MUL2(a,c)))                                                                                       \
                                        /* Calcul du discriminant :                                                                  */ \
                                        /*                                                                                           */ \
                                        /*                   2                                                                       */ \
                                        /*                  b  - 4ac                                                                 */ \
                                        /*                                                                                           */ \
                                        /* de l'equation du second degre.                                                            */ \
                                        /*                                                                                           */ \
                                        /* Le nom 'DISCRIMINANT2=(...)' a ete change en 'DISCRIMINANT2(...)' le 20110325112639       */ \
                                        /* ce qui rappelle donc le degre (2) de l'equation...                                        */
#define   RDISCRIMINANT2(a,b,c)                                                                                                         \
                    RACX(DISCRIMINANT2(a,b,c))                                                                                          \
                                        /* Calcul de la racine carree du discriminant de l'equation du second degre.                 */ \
                                        /*                                                                                           */ \
                                        /* Le nom 'RDISCRIMINANT2=(...)' a ete change en 'RDISCRIMINANT2(...)' le 20110325112639     */ \
                                        /* ce qui rappelle donc le degre (2) de l'equation...                                        */

#define   RACINES_REELLES_DE_L_EQUATION_DU_SECOND_DEGRE(a,b,c,operateur)                                                                \
                    DIVI(operateur(NEGA(b),RDISCRIMINANT2(a,b,c)),GRO2(a))
#define   RACINE_REELLE_n_DE_L_EQUATION_DU_SECOND_DEGRE(a,b,c)                                                                          \
                    RACINES_REELLES_DE_L_EQUATION_DU_SECOND_DEGRE(a,b,c,SOUS)
#define   RACINE_REELLE_p_DE_L_EQUATION_DU_SECOND_DEGRE(a,b,c)                                                                          \
                    RACINES_REELLES_DE_L_EQUATION_DU_SECOND_DEGRE(a,b,c,ADD2)
                                        /* Calcul des racines reelles de l'equation du second degre.                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D ' U N   D E T E R M I N A N T   1 x 1  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DET1(a11)                                                                                                                     \
                    NEUT(a11)                                                                                                           \
                                        /* Calcul du determinant :                                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  | a11 |                                                                  */ \
                                        /*                                                                                           */
#define   mDET1(matrice)                                                                                                                \
                    DET1(ASD2(matrice,cx,cx)                                                                                            \
                         )                                                                                                              \
                                        /* Calcul du determinant d'une matrice 1D (introduit le 20051107145459).                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D ' U N   D E T E R M I N A N T   2 x 2  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DET2(a11,a12,a21,a22)                                                                                                         \
                    NEUT(ADD2(MUL2(NEUT(a11),DET1(a22))                                                                                 \
                             ,MUL2(NEGA(a12),DET1(a21))                                                                                 \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Calcul du determinant :                                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  | a11 a12 |                                                              */ \
                                        /*                  |         |                                                              */ \
                                        /*                  | a21 a22 |                                                              */ \
                                        /*                                                                                           */
#define   mDET2(matrice)                                                                                                                \
                    DET3(ASD2(matrice,cx,cx),ASD2(matrice,cx,cy)                                                                        \
                        ,ASD2(matrice,cy,cx),ASD2(matrice,cy,cy)                                                                        \
                         )                                                                                                              \
                                        /* Calcul du determinant d'une matrice 2D (introduit le 20051107145459).                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D ' U N   D E T E R M I N A N T   3 x 3  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DET3(a11,a12,a13,a21,a22,a23,a31,a32,a33)                                                                                     \
                    NEUT(ADD3(MUL2(NEUT(a11),DET2(a22,a23,a32,a33))                                                                     \
                             ,MUL2(NEGA(a12),DET2(a21,a23,a31,a33))                                                                     \
                             ,MUL2(NEUT(a13),DET2(a21,a22,a31,a32))                                                                     \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Calcul du determinant :                                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  | a11 a12 a13 |                                                          */ \
                                        /*                  |             |                                                          */ \
                                        /*                  | a21 a22 a23 |                                                          */ \
                                        /*                  |             |                                                          */ \
                                        /*                  | a31 a32 a33 |                                                          */ \
                                        /*                                                                                           */
#define   mDET3(matrice)                                                                                                                \
                    DET3(ASD2(matrice,cx,cx),ASD2(matrice,cx,cy),ASD2(matrice,cx,cz)                                                    \
                        ,ASD2(matrice,cy,cx),ASD2(matrice,cy,cy),ASD2(matrice,cy,cz)                                                    \
                        ,ASD2(matrice,cz,cx),ASD2(matrice,cz,cy),ASD2(matrice,cz,cz)                                                    \
                         )                                                                                                              \
                                        /* Calcul du determinant d'une matrice 3D (introduit le 20051107145459).                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D ' U N   D E T E R M I N A N T   4 x 4  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DET4(a11,a12,a13,a14,a21,a22,a23,a24,a31,a32,a33,a34,a41,a42,a43,a44)                                                         \
                    NEUT(ADD4(MUL2(NEUT(a11),DET3(a22,a23,a24,a32,a33,a34,a42,a43,a44))                                                 \
                             ,MUL2(NEGA(a12),DET3(a21,a23,a24,a31,a33,a34,a41,a43,a44))                                                 \
                             ,MUL2(NEUT(a13),DET3(a21,a22,a24,a31,a32,a34,a41,a42,a44))                                                 \
                             ,MUL2(NEGA(a14),DET3(a21,a22,a23,a31,a32,a33,a41,a42,a43))                                                 \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Calcul du determinant :                                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  | a11 a12 a13 a14 |                                                      */ \
                                        /*                  |                 |                                                      */ \
                                        /*                  | a21 a22 a23 a24 |                                                      */ \
                                        /*                  |                 |                                                      */ \
                                        /*                  | a31 a32 a33 a34 |                                                      */ \
                                        /*                  |                 |                                                      */ \
                                        /*                  | a41 a42 a43 a44 |                                                      */ \
                                        /*                                                                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T E S T   D E   L A   S I T U A T I O N   D ' U N   P O I N T   P A R   R A P P O R T                                      */
/*        A   U N   T R I A N G L E   D U   P L A N   E T   R E N V O I   D E   S E S                                                */
/*        C O O R D O N N E E S   B A R Y C E N T R I Q U E S  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   INTERIEUR_D_UN_TRIANGLE(le_point_est_interieur,alpha,beta,gamma,x,y,x1,y1,x2,y2,x3,y3)                                        \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(determinant,FLOT__UNDEF));                                                                          \
                    DEFV(Float,INIT(determinant_alpha,FLOT__UNDEF));                                                                    \
                    DEFV(Float,INIT(determinant_beta,FLOT__UNDEF));                                                                     \
                    DEFV(Float,INIT(determinant_gamma,FLOT__UNDEF));                                                                    \
                                        /* Definition des trois determinants destines a calculer les coordonnees barycentriques      */ \
                                        /* (alpha,beta,gamma) du point {x,y} dans le triangle [(x1,y1),(x2,y2),(x3,y3)].             */ \
                                                                                                                                        \
                    EGAL(alpha,FLOT__UNDEF);                                                                                            \
                    EGAL(beta,FLOT__UNDEF);                                                                                             \
                    EGAL(gamma,FLOT__UNDEF);                                                                                            \
                                        /* Definition des coordonnees barycentriques du point {x,y} dans le triangle                 */ \
                                        /* [(x1,y1),(x2,y2),(x3,y3)]. Elles sont definies a l'aide du systeme :                      */ \
                                        /*                                                                                           */ \
                                        /*                  alpha.x1 + beta.x2 + gamma.x3 = x                                        */ \
                                        /*                  alpha.y1 + beta.y2 + gamma.y3 = y                                        */ \
                                        /*                  alpha.1  + beta.1  + gamma.1  = 1                                        */ \
                                        /*                                                                                           */ \
                                        /* Le point {x,y} sera a l'interieur du triangle [(x1,y1),(x2,y2),(x3,y3)] si les trois      */ \
                                        /* conditions suivantes sont satisfaites :                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  0 <= alpha <= 1                                                          */ \
                                        /*                  0 <= beta  <= 1                                                          */ \
                                        /*                  0 <= gamma <= 1                                                          */ \
                                        /*                                                                                           */ \
                    EGAL(determinant                                                                                                    \
                        ,DET3(x1,x2,x3                                                                                                  \
                             ,y1,y2,y3                                                                                                  \
                             ,FU,FU,FU                                                                                                  \
                              )                                                                                                         \
                         );                                                                                                             \
                                        /* Calcul du determinant :                                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  | x1 x2 x3 |                                                             */ \
                                        /*                  |          |                                                             */ \
                                        /*                  | y1 y2 y3 |                                                             */ \
                                        /*                  |          |                                                             */ \
                                        /*                  | 1  1  1  |                                                             */ \
                                        /*                                                                                           */ \
                                                                                                                                        \
                    Test(IZNE(determinant))                                                                                             \
                         Bblock                                                                                                         \
                                        /* Cas ou le determinant est non nul ; le systeme peut donc etre resolu :                    */ \
                         EGAL(determinant_alpha                                                                                         \
                             ,DET3(x,x2,x3                                                                                              \
                                  ,y,y2,y3                                                                                              \
                                  ,FU,FU,FU                                                                                             \
                                   )                                                                                                    \
                              );                                                                                                        \
                                        /* Calcul du determinant :                                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  | x  x2 x3 |                                                             */ \
                                        /*                  |          |                                                             */ \
                                        /*                  | y  y2 y3 |                                                             */ \
                                        /*                  |          |                                                             */ \
                                        /*                  | 1  1  1  |                                                             */ \
                                        /*                                                                                           */ \
                         EGAL(determinant_beta                                                                                          \
                             ,DET3(x1,x,x3                                                                                              \
                                  ,y1,y,y3                                                                                              \
                                  ,FU,FU,FU                                                                                             \
                                   )                                                                                                    \
                              );                                                                                                        \
                                        /* Calcul du determinant :                                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  | x1 x  x3 |                                                             */ \
                                        /*                  |          |                                                             */ \
                                        /*                  | y1 y  y3 |                                                             */ \
                                        /*                  |          |                                                             */ \
                                        /*                  | 1  1  1  |                                                             */ \
                                        /*                                                                                           */ \
                         EGAL(determinant_gamma                                                                                         \
                             ,DET3(x1,x2,x                                                                                              \
                                  ,y1,y2,y                                                                                              \
                                  ,FU,FU,FU                                                                                             \
                                   )                                                                                                    \
                              );                                                                                                        \
                                        /* Calcul du determinant :                                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  | x1 x2 x  |                                                             */ \
                                        /*                  |          |                                                             */ \
                                        /*                  | y1 y2 y  |                                                             */ \
                                        /*                  |          |                                                             */ \
                                        /*                  | 1  1  1  |                                                             */ \
                                        /*                                                                                           */ \
                         EGAL(alpha,DIVI(determinant_alpha,determinant));                                                               \
                         EGAL(beta,DIVI(determinant_beta,determinant));                                                                 \
                         EGAL(gamma,DIVI(determinant_gamma,determinant));                                                               \
                                        /* Calcul des coordonnees barycentriques (alpha,beta,gamma) du point {x,y}, a l'aide des     */ \
                                        /* formules de Cramer...                                                                     */ \
                         Test(I3ET(IFINff(alpha,COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE)                    \
                                  ,IFINff(beta,COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE)                     \
                                  ,IFINff(gamma,COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE)                    \
                                   )                                                                                                    \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              EGAL(le_point_est_interieur,VRAI);                                                                        \
                                        /* Le point {x,y} est a l'interieur du triangle [(x1,y1),(x2,y2),(x3,y3)]...                 */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              EGAL(le_point_est_interieur,FAUX);                                                                        \
                                        /* Le point {x,y} est a l'exterieur du triangle [(x1,y1),(x2,y2),(x3,y3)]...                 */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* Cas ou le determinant est nul ; le systeme ne peut etre resolu (les points sont peut-etre */ \
                                        /* alignes, ou confondus).                                                                   */ \
                         EGAL(le_point_est_interieur,FAUX);                                                                             \
                                        /* Le point {x,y} est considere comme etant a l'exterieur (d'un triangle degenere...).       */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Cette procedure teste si le point {x,y} est a l'interieur du triangle plan defini par     */ \
                                        /* les points [(x1,y1),(x2,y2),(x3,y3)].                                                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O D U I T   V E C T O R I E L   D E   D E U X   D E P L A C E M E N T S   3 D  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PvectX(x1,y1,z1,x2,y2,z2)                                                                                                     \
                    NEUT(DET2(y1,z1                                                                                                     \
                             ,y2,z2                                                                                                     \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Calcul de la composante sur 'OX' du produit vectoriel (x1,y1,z1) /\ (x2,y2,z2).           */
#define   PvectY(x1,y1,z1,x2,y2,z2)                                                                                                     \
                    NEGA(DET2(x1,z1                                                                                                     \
                             ,x2,z2                                                                                                     \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Calcul de la composante sur 'OY' du produit vectoriel (x1,y1,z1) /\ (x2,y2,z2).           */
#define   PvectZ(x1,y1,z1,x2,y2,z2)                                                                                                     \
                    NEUT(DET2(x1,y1                                                                                                     \
                             ,x2,y2                                                                                                     \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Calcul de la composante sur 'OZ' du produit vectoriel (x1,y1,z1) /\ (x2,y2,z2).           */

                                        /* Calcul du produit vectoriel :                                                             */
                                        /*                                                                                           */
                                        /*                                             | OX OY OZ |                                  */
                                        /*                                             |          |                                  */
                                        /*                  (x1,y1,z1) /\ (x2,y2,z2) = | x1 y1 z1 |                                  */
                                        /*                                             |          |                                  */
                                        /*                                             | x2 y2 z2 |                                  */
                                        /*                                                                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        " A N T I - P R O D U I T   V E C T O R I E L "   D E   D E U X   D E P L A C E M E N T S   3 D  :                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit le produit vectoriel :                                                                                    */
/*                                                                                                                                   */
/*                                      --->   --->    --->                                                                          */
/*                                       V   =  V   /\  V                                                                            */
/*                                        3      1       2                                                                           */
/*                                                                                                                                   */
/*                  l'anti-produit vectoriel est alors                                                                               */
/*                  ainsi defini :                                                                                                   */
/*                                                                                                                                   */
/*                                      --->   --->  -1 --->                                                                         */
/*                                       V   =  V   /\   V                                                                           */
/*                                        1      3        2                                                                          */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota important :                                                                                                           */
/*                                                                                                                                   */
/*                    Malheureusement, des experiences faites                                                                        */
/*                  dans le programme 'v $xrk/rdn_walk.41$K'                                                                         */
/*                  montre que cette notion est de peu d'utilite                                                                     */
/*                  car contrairement a l'intuition, l'anti-produit                                                                  */
/*                  n'est pas defini de facon unique. Cela peut se                                                                   */
/*                  voir sur l'exemple suivant le 19971204091928 :                                                                   */
/*                                                                                                                                   */
/*                                      --->                                                                                         */
/*                                       V   = (a,b,0)                                                                               */
/*                                        1                                                                                          */
/*                                                                                                                                   */
/*                                      --->                                                                                         */
/*                                       V   = (0,0,c)                                                                               */
/*                                        2                                                                                          */
/*                                                                                                                                   */
/*                  d'ou :                                                                                                           */
/*                                                                                                                                   */
/*                                      --->                                                                                         */
/*                                       V   = (+bc,-ac,0)                                                                           */
/*                                        3                                                                                          */
/*                                                                                                                                   */
/*                  Le calcul de l'anti-produit vectoriel                                                                            */
/*                  pour retrouver le vecteur 'V1' (suppose                                                                          */
/*                  alors inconnu) :                                                                                                 */
/*                                                                                                                                   */
/*                                      --->                                                                                         */
/*                                       V   = {x,y,z}                                                                               */
/*                                        1                                                                                          */
/*                                                                                                                                   */
/*                  conduit a resoudre le systeme lineaire :                                                                         */
/*                                                                                                                                   */
/*                                      +0  + cy - 0 = +bc                                                                           */
/*                                      -cx + 0  + 0 = -ac                                                                           */
/*                                      +0  - 0  + 0 = 0                                                                             */
/*                                                                                                                                   */
/*                  qui donne :                                                                                                      */
/*                                                                                                                                   */
/*                                      --->                                                                                         */
/*                                       V   = (a,b,?)                                                                               */
/*                                        1                                                                                          */
/*                                                                                                                                   */
/*                  et il y a donc indetermination sur la                                                                            */
/*                  troisieme composante 'z'. En notant 'theta'                                                                      */
/*                  l'angle (inconnu donc) entre 'V1' et 'V2',                                                                       */
/*                  on a :                                                                                                           */
/*                                                                                                                                   */
/*                                       --->     --->  --->                                                                         */
/*                                      | V  | = | V  || V  |sin(theta)                                                              */
/*                                         3        1     2                                                                          */
/*                                                                                                                                   */
/*                  d'ou :                                                                                                           */
/*                                                                                                                                   */
/*                                        2 2    2 2      2    2    2  2   2                                                         */
/*                                      (b c  + a c ) = (a  + b  + z )c sin (theta)                                                  */
/*                                                                                                                                   */
/*                                        2    2      2    2    2    2                                                               */
/*                                      (b  + a ) = (a  + b  + z )sin (theta)                                                        */
/*                                                                                                                                   */
/*                  il y a donc une infinite de solutions                                                                            */
/*                  otenue a partir de couples {z,theta}                                                                             */
/*                  satisfaisant a la relation ci-dessus.                                                                            */
/*                                                                                                                                   */
/*                    Les definitions ci-dessous sont malgre                                                                         */
/*                  tout conservees meme si elle sont donc                                                                           */
/*                  de peu d'utilite...                                                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   APvectX(x3,y3,z3,x2,y2,z2)                                                                                                    \
                    DIVI(DET3(NEUT(x3) ,NEUT(z2) ,NEGA(y2)                                                                              \
                             ,NEUT(y3) ,FZERO    ,NEUT(x2)                                                                              \
                             ,NEUT(z3) ,NEGA(x2) ,FZERO                                                                                 \
                              )                                                                                                         \
                        ,DET3(FZERO    ,NEUT(z2) ,NEGA(y2)                                                                              \
                             ,NEGA(z2) ,FZERO    ,NEUT(x2)                                                                              \
                             ,NEUT(y2) ,NEGA(x2) ,FZERO                                                                                 \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /*                                                                           -1              */ \
                                        /* calcul de la composante sur 'OX' de l'anti-produit vectoriel (x3,y3,z3) /\  (x2,y2,z2)    */ \
                                        /* ou l'on notera que l'on suppose que le diviseur 'DET3(...)' est non nul...                */
#define   APvectY(x3,y3,z3,x2,y2,z2)                                                                                                    \
                    DIVI(DET3(FZERO    ,NEUT(x3) ,NEGA(y2)                                                                              \
                             ,NEGA(z2) ,NEUT(y3) ,NEUT(x2)                                                                              \
                             ,NEUT(y2) ,NEUT(z3) ,FZERO                                                                                 \
                              )                                                                                                         \
                        ,DET3(FZERO    ,NEUT(z2) ,NEGA(y2)                                                                              \
                             ,NEGA(z2) ,FZERO    ,NEUT(x2)                                                                              \
                             ,NEUT(y2) ,NEGA(x2) ,FZERO                                                                                 \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /*                                                                           -1              */ \
                                        /* calcul de la composante sur 'OY' de l'anti-produit vectoriel (x3,y3,z3) /\  (x2,y2,z2)    */ \
                                        /* ou l'on notera que l'on suppose que le diviseur 'DET3(...)' est non nul...                */
#define   APvectZ(x3,y3,z3,x2,y2,z2)                                                                                                    \
                    DIVI(DET3(FZERO    ,NEUT(z2) ,NEUT(x3)                                                                              \
                             ,NEGA(z2) ,FZERO    ,NEUT(y3)                                                                              \
                             ,NEUT(y2) ,NEGA(x2) ,NEUT(z3)                                                                              \
                              )                                                                                                         \
                        ,DET3(FZERO    ,NEUT(z2) ,NEGA(y2)                                                                              \
                             ,NEGA(z2) ,FZERO    ,NEUT(x2)                                                                              \
                             ,NEUT(y2) ,NEGA(x2) ,FZERO                                                                                 \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /*                                                                           -1              */ \
                                        /* calcul de la composante sur 'OZ' de l'anti-produit vectoriel (x3,y3,z3) /\  (x2,y2,z2)    */ \
                                        /* ou l'on notera que l'on suppose que le diviseur 'DET3(...)' est non nul...                */

                                        /* Calcul de l'anti-produit vectoriel : on se donne donc le produit vectoriel :              */
                                        /*                                                                                           */
                                        /*                  (x1,y1,z1) /\ (x2,y2,z2) = (x3,y3,z3)                                    */
                                        /*                                                                                           */
                                        /* et l'on cherche a connaitre le premier vecteur (x1,y1,z1), ce que l'on note :             */
                                        /*                                                                                           */
                                        /*                                                          -1                               */
                                        /*                  (x1,y1,z1)               = (x3,y3,z3) /\  (x2,y2,z2)                     */
                                        /*                                                                                           */
                                        /* a partir des deux autres (x2,y2,z2) et (x3,y3,z3).                                        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O D U I T   M I X T E   D E   T R O I S   D E P L A C E M E N T S   3 D  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   Pmixte(x1,y1,z1,x2,y2,z2,x3,y3,z3)                                                                                            \
                    DET3(x1,y1,z1                                                                                                       \
                        ,x2,y2,z2                                                                                                       \
                        ,x3,y3,z3                                                                                                       \
                         )                                                                                                              \
                                        /* Produit mixte de trois deplacements (introduit le 20080708112901)...                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A I R E   D ' U N   T R I A N G L E   D A N S   L ' E S P A C E   :                                                        */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   AIRE_TRIANGLE_3D(x1,y1,z1,x2,y2,z2,x3,y3,z3)                                                                                  \
                    MOIT(RdisF3D(x1                                                                                                     \
                                ,y1                                                                                                     \
                                ,z1                                                                                                     \
                                ,ADD2(x1                                                                                                \
                                     ,PvectX(SOUS(x2,x1),SOUS(y2,y1),SOUS(z2,z1)                                                        \
                                            ,SOUS(x3,x1),SOUS(y3,y1),SOUS(z3,z1)                                                        \
                                             )                                                                                          \
                                      )                                                                                                 \
                                ,ADD2(y1                                                                                                \
                                     ,PvectY(SOUS(x2,x1),SOUS(y2,y1),SOUS(z2,z1)                                                        \
                                            ,SOUS(x3,x1),SOUS(y3,y1),SOUS(z3,z1)                                                        \
                                             )                                                                                          \
                                      )                                                                                                 \
                                ,ADD2(z1                                                                                                \
                                     ,PvectZ(SOUS(x2,x1),SOUS(y2,y1),SOUS(z2,z1)                                                        \
                                            ,SOUS(x3,x1),SOUS(y3,y1),SOUS(z3,z1)                                                        \
                                             )                                                                                          \
                                      )                                                                                                 \
                                 )                                                                                                      \
                         )                                                                                                              \
                                        /* Calcul de l'aire d'un triangle de sommets [(x1,y1,z1),(x2,y2,z2),(x3,y3,z3)]. Celle-ci    */ \
                                        /* est egale a la moitie du module du produit vectoriel de deux quelconques de ses cotes.    */ \
                                        /* On notera la translation par (x1,y1,z1) destinee a ramener le produit vectoriel au sommet */ \
                                        /* (x1,y1,z1) choisi arbitrairement dans le triangle. Cette operation est en fait inutile    */ \
                                        /* (voir la definition de 'RdisF3D(...)', mais cela est fait uniquement pour des raisons     */ \
                                        /* liees au style...). Soient les trois points P1(x1,y1,z1), P2(x2,y2,z2) et P3(x3,y3,z3)    */ \
                                        /* donnes en argument et definissant le triangle [P ,P ,P ] ; on a alors :                   */ \
                                        /*                                                 1  2  3                                   */ \
                                        /*                                                                                           */ \
                                        /*                                    1   |----->   ----->|                                  */ \
                                        /*                  Aire(P1,P2,P3) = ---.(| P P   /\ P P  |)                                 */ \
                                        /*                                    2   |  1 2      1 3 |                                  */ \
                                        /*                                                                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D E   V A L E U R S   A L E A T O I R E S  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   GENERATION_D_UNE_VALEUR_ALEATOIRE__DONNEES_GLOBALES                                                                           \
                                        /* Procedure introduite le 20210520085903...                                                 */ \
                    DEFV(pointI_3D,point_courant_de_l_espace_de_parametrage);                                                           \
                                        /* Point courant d'un espace abstrait servant a parametrer le generateur d'evenements.       */ \
                    SPIRALE_DEFINITION_GENERALE(SPIRALE_DELTA_HORIZONTAL_GLOBAL,SPIRALE_DELTA_VERTICAL_GLOBAL)                          \
                                        /* Donnees de generation d'une spirale de parcours d'un espace abstrait bidimensionnel       */ \
                                        /* de parametrage de la generation des evenements.                                           */

#define   GENERATION_D_UNE_VALEUR_ALEATOIRE__INITIALISATIONS                                                                            \
                                        /* Procedure introduite le 20210520085903...                                                 */ \
                    Bblock                                                                                                              \
                    SPIRALE_VALIDATION;                                                                                                 \
                                        /* Validation des pas de parcours (pasX,pasY) de l'espace abstrait de parametrage du         */ \
                                        /* generateur d'evenements.                                                                  */ \
                    INITIALISATION_POINT_3D(point_courant_de_l_espace_de_parametrage,Xmin,Ymin,Zmin);                                   \
                                        /* Initialisation de l'espace de parametrage independante du format de l'image, puisque le   */ \
                                        /* point 'min' n'en depend pas...                                                            */ \
                    Eblock

#define   GENERATION_D_UNE_VALEUR_ALEATOIRE__CALCUL(valeur_aleatoire                                                                    \
                                                   ,graine                                                                              \
                                                   ,borne_inferieure                                                                    \
                                                   ,borne_superieure                                                                    \
                                                    )                                                                                   \
                    Bblock                                                                                                              \
                    EGAL(valeur_aleatoire                                                                                               \
                        ,rdnI3D(ADRESSE(point_courant_de_l_espace_de_parametrage)                                                       \
                               ,graine                                                                                                  \
                               ,RDN_INIT_AND_GENERE                                                                                     \
                               ,borne_inferieure,borne_superieure                                                                       \
                                )                                                                                                       \
                         );                                                                                                             \
                                        /* Generation d'une valeur aleatoire dans [borne_inferieure,borne_superieure] et parametree  */ \
                                        /* par le point courant de l'espace de parametrage.                                          */ \
                                                                                                                                        \
                    SPIRALE_INITIALISATION;                                                                                             \
                                        /* Initialisation dynamique de 'spirale_nombre_de_points_a_traiter'.                         */ \
                    SPIRALE_DEPLACEMENT(ASD1(point_courant_de_l_espace_de_parametrage,x)                                                \
                                       ,ASD1(point_courant_de_l_espace_de_parametrage,y)                                                \
                                        );                                                                                              \
                                        /* Deplacement du point courant de la spirale de l'espace de parametrage.                    */ \
                    SPIRALE_PARCOURS;                                                                                                   \
                                        /* Parcours de la spirale avec rotation eventuelle de PI/2 du bras courant...                */ \
                    Eblock                                                                                                              \
                                        /* Procedure introduite le 20210520085903...                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E S O L U T I O N   D ' E Q U A T I O N S   L I N E A I R E S   I N D E T E R M I N E E S   E N   { X , Y , Z }  :       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Application :                                                                                                              */
/*                                                                                                                                   */
/*                    Une application de ce programme de                                                                             */
/*                  resolution "aleatoire" d'equations a trois                                                                       */
/*                  inconnues du type :                                                                                              */
/*                                                                                                                                   */
/*                                      A*X + B*Y + C*Z = D                                                                          */
/*                                                                                                                                   */
/*                  est la definition de palettes de couleurs                                                                        */
/*                  a luminance strictement croissante. On                                                                           */
/*                  resoudra donc :                                                                                                  */
/*                                                                                                                                   */
/*                                      0.30*R + 0.59*V + 0.11*B = LUMINANCE                                                         */
/*                                                                                                                                   */
/*                  ou {0.30,0.59,0.11} sont respectivement                                                                          */
/*                  'v $xiii/quad_image$DEF LUMINANCE_DU_'.                                                                          */
/*                  Ainsi, pour chaque LUMINANCE dans [$NOIR,$BLANC]                                                                 */
/*                  on calculera un triplet {R,V,B} ayant cette                                                                      */
/*                  luminance ('v $xciP/aleatoire.01$vv$Z' qui                                                                       */
/*                  realise cela...).                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D__DONNEES_UTILES_GLOBALES                                                         \
                    GENERATION_D_UNE_VALEUR_ALEATOIRE__DONNEES_GLOBALES;

#define   RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D__DONNEES_UTILES_LOCALES                                                          \
                                        /* Procedure introduite le 20210520100515...                                                 */ \
                    DEFV(Float,INIT(solution_X,FLOT__UNDEF));                                                                           \
                    DEFV(Float,INIT(solution_Y,FLOT__UNDEF));                                                                           \
                    DEFV(Float,INIT(solution_Z,FLOT__UNDEF));                                                                           \
                                        /* Valeur courante des solutions {X,Y,Z} initialisees arbitrairement...                      */

#define   RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D__INITIALISATION                                                                  \
                    Bblock                                                                                                              \
                    GENERATION_D_UNE_VALEUR_ALEATOIRE__INITIALISATIONS;                                                                 \
                    Eblock

#define   RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D__GENERATION_D_UNE_VALEUR_ALEATOIRE(valeur_aleatoire                              \
                                                                                         ,graine                                        \
                                                                                         ,borne_inferieure                              \
                                                                                         ,borne_superieure                              \
                                                                                          )                                             \
                    Bblock                                                                                                              \
                    GENERATION_D_UNE_VALEUR_ALEATOIRE__CALCUL(valeur_aleatoire                                                          \
                                                             ,graine                                                                    \
                                                             ,borne_inferieure                                                          \
                                                             ,borne_superieure                                                          \
                                                              );                                                                        \
                    Eblock                                                                                                              \
                                        /* Procedure introduite le 20210520085903...                                                 */

#define   RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D(parametre_A                                                                      \
                                                      ,parametre_B                                                                      \
                                                      ,parametre_C                                                                      \
                                                      ,parametre_D                                                                      \
                                                      ,utiliser_le_parametre_D_comme_borne_superieure                                   \
                                                      ,borne_inferieure_courante_X                                                      \
                                                      ,borne_superieure_courante_X                                                      \
                                                      ,borne_inferieure_courante_Y                                                      \
                                                      ,borne_superieure_courante_Y                                                      \
                                                      ,borne_inferieure_courante_Z                                                      \
                                                      ,borne_superieure_courante_Z                                                      \
                                                       )                                                                                \
                                        /* Procedure introduite le 20210520085903...                                                 */ \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(borne_inferieure_effective_X,borne_inferieure_courante_X));                                         \
                    DEFV(Float,INIT(borne_superieure_effective_X                                                                        \
                                   ,COND(IL_FAUT(utiliser_le_parametre_D_comme_borne_superieure)                                        \
                                        ,parametre_D                                                                                    \
                                        ,borne_superieure_courante_X                                                                    \
                                         )                                                                                              \
                                    )                                                                                                   \
                         );                                                                                                             \
                                                                                                                                        \
                    DEFV(Float,INIT(borne_inferieure_effective_Y,borne_inferieure_courante_Y));                                         \
                    DEFV(Float,INIT(borne_superieure_effective_Y                                                                        \
                                   ,COND(IL_FAUT(utiliser_le_parametre_D_comme_borne_superieure)                                        \
                                        ,parametre_D                                                                                    \
                                        ,borne_superieure_courante_Y                                                                    \
                                         )                                                                                              \
                                    )                                                                                                   \
                         );                                                                                                             \
                                                                                                                                        \
                    DEFV(Float,INIT(borne_inferieure_effective_Z,borne_inferieure_courante_Z));                                         \
                    DEFV(Float,INIT(borne_superieure_effective_Z                                                                        \
                                   ,COND(IL_FAUT(utiliser_le_parametre_D_comme_borne_superieure)                                        \
                                        ,parametre_D                                                                                    \
                                        ,borne_superieure_courante_Z                                                                    \
                                         )                                                                                              \
                                    )                                                                                                   \
                         );                                                                                                             \
                                                                                                                                        \
                    DEFV(Float,INIT(borne_inferieure_aleatoire_X,FLOT__UNDEF));                                                         \
                    DEFV(Float,INIT(borne_inferieure_aleatoire_Y,FLOT__UNDEF));                                                         \
                    DEFV(Float,INIT(borne_inferieure_aleatoire_Z,FLOT__UNDEF));                                                         \
                                                                                                                                        \
                    DEFV(Float,INIT(borne_superieure_aleatoire_X,FLOT__UNDEF));                                                         \
                    DEFV(Float,INIT(borne_superieure_aleatoire_Y,FLOT__UNDEF));                                                         \
                    DEFV(Float,INIT(borne_superieure_aleatoire_Z,FLOT__UNDEF));                                                         \
                                        /* Bornes courantes de generation aleatoire.                                                 */ \
                                                                                                                                        \
                    DEFV(Logical,INIT(iterer,VRAI));                                                                                    \
                    DEFV(Positive,INIT(nombre_d_iterations,ZERO));                                                                      \
                                        /* Controle de l'iterations...                                                               */ \
                                                                                                                                        \
                    EGAL(solution_X,MOYE(borne_inferieure_effective_X,borne_superieure_effective_X));                                   \
                    EGAL(solution_Y,MOYE(borne_inferieure_effective_Y,borne_superieure_effective_Y));                                   \
                    EGAL(solution_Z,MOYE(borne_inferieure_effective_Z,borne_superieure_effective_Z));                                   \
                                        /* Initialisation a priori des solutions {X,Y,Z} avant le processus iteratif...              */ \
                                                                                                                                        \
                    EGAL(borne_inferieure_aleatoire_X                                                                                   \
                        ,NEGA(MUL2(facteur_X,SOUA(borne_inferieure_effective_X,borne_superieure_effective_X)))                          \
                         );                                                                                                             \
                    EGAL(borne_inferieure_aleatoire_Y                                                                                   \
                        ,NEGA(MUL2(facteur_Y,SOUA(borne_inferieure_effective_Y,borne_superieure_effective_Y)))                          \
                         );                                                                                                             \
                    EGAL(borne_inferieure_aleatoire_Z                                                                                   \
                        ,NEGA(MUL2(facteur_Z,SOUA(borne_inferieure_effective_Z,borne_superieure_effective_Z)))                          \
                         );                                                                                                             \
                                                                                                                                        \
                    EGAL(borne_superieure_aleatoire_X                                                                                   \
                        ,NEUT(MUL2(facteur_X,SOUA(borne_inferieure_effective_X,borne_superieure_effective_X)))                          \
                         );                                                                                                             \
                    EGAL(borne_superieure_aleatoire_Y                                                                                   \
                        ,NEUT(MUL2(facteur_Y,SOUA(borne_inferieure_effective_Y,borne_superieure_effective_Y)))                          \
                         );                                                                                                             \
                    EGAL(borne_superieure_aleatoire_Z                                                                                   \
                        ,NEUT(MUL2(facteur_Z,SOUA(borne_inferieure_effective_Z,borne_superieure_effective_Z)))                          \
                         );                                                                                                             \
                                        /* Les bornes courantes de generation aleatoire sont fonctions des bornes des variables      */ \
                                        /* {X,Y,Z}...                                                                                */ \
                                                                                                                                        \
                    EGAL(iterer,VRAI);                                                                                                  \
                                                                                                                                        \
                    Tant(IL_FAUT(iterer))                                                                                               \
                         Bblock                                                                                                         \
                         DEFV(Float,INIT(solution_X_avant_perturbation,solution_X));                                                    \
                         DEFV(Float,INIT(solution_Y_avant_perturbation,solution_Y));                                                    \
                         DEFV(Float,INIT(solution_Z_avant_perturbation,solution_Z));                                                    \
                         DEFV(Float,INIT(parametre_D_avant_perturbation,FLOT__UNDEF));                                                  \
                                        /* Etat avant perturbation...                                                                */ \
                         DEFV(Float,INIT(solution_X_apres_perturbation,FLOT__UNDEF));                                                   \
                         DEFV(Float,INIT(solution_Y_apres_perturbation,FLOT__UNDEF));                                                   \
                         DEFV(Float,INIT(solution_Z_apres_perturbation,FLOT__UNDEF));                                                   \
                         DEFV(Float,INIT(parametre_D_apres_perturbation,FLOT__UNDEF));                                                  \
                                        /* Etat apres perturbation...                                                                */ \
                                                                                                                                        \
                         DEFV(Float,INIT(perturbation_aleatoire_X,FLOT__UNDEF));                                                        \
                         DEFV(Float,INIT(perturbation_aleatoire_Y,FLOT__UNDEF));                                                        \
                         DEFV(Float,INIT(perturbation_aleatoire_Z,FLOT__UNDEF));                                                        \
                                                                                                                                        \
                         EGAL(parametre_D_avant_perturbation                                                                            \
                             ,LIZ3(parametre_A,solution_X_avant_perturbation                                                            \
                                  ,parametre_B,solution_Y_avant_perturbation                                                            \
                                  ,parametre_C,solution_Z_avant_perturbation                                                            \
                                   )                                                                                                    \
                              );                                                                                                        \
                                                                                                                                        \
                         RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D__GENERATION_D_UNE_VALEUR_ALEATOIRE(perturbation_aleatoire_X       \
                                                                                                        ,graine_X                       \
                                                                                                        ,borne_inferieure_aleatoire_X   \
                                                                                                        ,borne_superieure_aleatoire_X   \
                                                                                                         );                             \
                         RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D__GENERATION_D_UNE_VALEUR_ALEATOIRE(perturbation_aleatoire_Y       \
                                                                                                        ,graine_Y                       \
                                                                                                        ,borne_inferieure_aleatoire_Y   \
                                                                                                        ,borne_superieure_aleatoire_Y   \
                                                                                                         );                             \
                         RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D__GENERATION_D_UNE_VALEUR_ALEATOIRE(perturbation_aleatoire_Z       \
                                                                                                        ,graine_Z                       \
                                                                                                        ,borne_inferieure_aleatoire_Z   \
                                                                                                        ,borne_superieure_aleatoire_Z   \
                                                                                                         );                             \
                                                                                                                                        \
                         EGAL(solution_X_apres_perturbation                                                                             \
                             ,ADD2(solution_X_avant_perturbation,perturbation_aleatoire_X)                                              \
                              );                                                                                                        \
                         EGAL(solution_Y_apres_perturbation                                                                             \
                             ,ADD2(solution_Y_avant_perturbation,perturbation_aleatoire_Y)                                              \
                              );                                                                                                        \
                         EGAL(solution_Z_apres_perturbation                                                                             \
                             ,ADD2(solution_Z_avant_perturbation,perturbation_aleatoire_Z)                                              \
                              );                                                                                                        \
                                        /* Perturbation de la solution {X,Y,Z} courante...                                           */ \
                                                                                                                                        \
                         Test(I3ET(INCLff(solution_X_apres_perturbation                                                                 \
                                         ,borne_inferieure_effective_X                                                                  \
                                         ,borne_superieure_effective_X                                                                  \
                                          )                                                                                             \
                                  ,INCLff(solution_Y_apres_perturbation                                                                 \
                                         ,borne_inferieure_effective_Y                                                                  \
                                         ,borne_superieure_effective_Y                                                                  \
                                          )                                                                                             \
                                  ,INCLff(solution_Z_apres_perturbation                                                                 \
                                         ,borne_inferieure_effective_Z                                                                  \
                                         ,borne_superieure_effective_Z                                                                  \
                                          )                                                                                             \
                                   )                                                                                                    \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                                        /* Cas ou les trois coordonnees {X,Y,Z} apres perturbation sont compatibles avec les         */ \
                                        /* contraintes :                                                                             */ \
                              EGAL(parametre_D_apres_perturbation                                                                       \
                                  ,LIZ3(parametre_A,solution_X_apres_perturbation                                                       \
                                       ,parametre_B,solution_Y_apres_perturbation                                                       \
                                       ,parametre_C,solution_Z_apres_perturbation                                                       \
                                        )                                                                                               \
                                   );                                                                                                   \
                                                                                                                                        \
                              Test(IFLT(SOUA(parametre_D_apres_perturbation,parametre_D)                                                \
                                       ,SOUA(parametre_D_avant_perturbation,parametre_D)                                                \
                                        )                                                                                               \
                                   )                                                                                                    \
                                   Bblock                                                                                               \
                                        /* Cas ou l'on se rapproche du parametre 'D' :                                               */ \
                                   EGAL(solution_X,solution_X_apres_perturbation);                                                      \
                                   EGAL(solution_Y,solution_Y_apres_perturbation);                                                      \
                                   EGAL(solution_Z,solution_Z_apres_perturbation);                                                      \
                                        /* On garde donc la solution {X,Y,Z} perturbee...                                            */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         INCR(nombre_d_iterations,UN);                                                                                  \
                         Test(IFGT(nombre_d_iterations,nombre_maximal_d_iterations))                                                    \
                                        /* C'est le seul test de convergence...                                                      */ \
                              Bblock                                                                                                    \
                              EGAL(iterer,FAUX);                                                                                        \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ETan                                                                                                                \
                    Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O J E C T I O N   Q U E L C O N Q U E  :                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Nous allons definir la projection                                                                              */
/*                  d'un point P(Xp,Yp,Zp) quelconque sur                                                                            */
/*                  un plan defini par les quatre coefficients                                                                       */
/*                  (A,B,C,D) et qui peut etre par exemple                                                                           */
/*                  l'ecran, et ce pour un certain observateur                                                                       */
/*                  O(Xo,Yo,Zo).                                                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                         Y^                                                                                        */
/*                                          |                           P(Xp,Yp,Zp)                                                  */
/*                                          |                                *                                                       */
/*                                          |                               +                                                        */
/*                                          |                              +                                                         */
/*                                          o--------->                   +                                                          */
/*                                         /          X           .      +                                                           */
/*                                        /                       |\    +                                                            */
/*                                      Z/                        | \  +                                                             */
/*                                                                |  \+                                                              */
/*                                                                |  .\                                                              */
/*                                                                | .  \                                                             */
/*                                                                .*I   \                                                            */
/*                                                                +\     .                                                           */
/*                                                               +  \    |                                                           */
/*                                                              +    \   | plan A.X+B.Y+C.Z+D=0                                      */
/*                                                             +      \  |                                                           */
/*                                                            +        \ |                                                           */
/*                                                           +          \|                                                           */
/*                                                          *            .                                                           */
/*                                                     O(Xo,Yo,Zo)                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  L'equation de la droite OP est :                                                                                 */
/*                                                                                                                                   */
/*                                        X-Xo      Y-Yo      Z-Zo                                                                   */
/*                                      ------- = ------- = -------                                                                  */
/*                                       Xp-Xo     Yp-Yo     Zp-Zo                                                                   */
/*                                                                                                                                   */
/*                  L'equation du plan de projection est :                                                                           */
/*                                                                                                                                   */
/*                                      A.X + B.Y + C.Z + D = 0                                                                      */
/*                                                                                                                                   */
/*                  Posons :                                                                                                         */
/*                                                                                                                                   */
/*                                                A.Xo + B.Yo + C.Zo + D                                                             */
/*                                      R = -----------------------------------                                                      */
/*                                           A.(Xp-Xo) + B.(Yp-Yo) + C.(Zp-Zo)                                                       */
/*                                                                                                                                   */
/*                  Le point d'intersection I a donc pour coordonnees :                                                              */
/*                                                                                                                                   */
/*                                      Xi = Xo - R.(Xp-Xo)                                                                          */
/*                                      Yi = Yo - R.(Yp-Yo)                                                                          */
/*                                      Zi = Zo - R.(Zp-Zo)                                                                          */
/*                                                                                                                                   */
/*                  ou encore :                                                                                                      */
/*                                                                                                                                   */
/*                                      Xi = Xo + (-R).(Xp-Xo)                                                                       */
/*                                      Yi = Yo + (-R).(Yp-Yo)                                                                       */
/*                                      Zi = Zo + (-R).(Zp-Zo)                                                                       */
/*                                                                                                                                   */
/*                  On notera que si le point 'P' est invisible depuis 'O',                                                          */
/*                  (le point 'P' est derriere l'observateur 'O' par rapport                                                         */
/*                  au plan de projection), le point d'intersection 'I' est                                                          */
/*                  alors en dehors du segment 'OP'. On a donc :                                                                     */
/*                                                                                                                                   */
/*                                      (-R) > 0 : I E  ]O,P] ==> 'P' est visible,                                                   */
/*                                      (-R) = 0 : I == O     ==> 'P' est indetermine ('O' est dans le plan de projection),          */
/*                                      (-R) < 0 : I /E [O,P] ==> 'P' est invisible.                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   POINT_A_L_INFINI_INVISIBLE                                                                                                    \
                    F_PETIT_INFINI                                                                                                      \
                                        /* Afin de caracteriser les coordonnees d'un point pour lequel (-R) < 0 (invisible).         */ \
                                        /* On notera l'utilisation de 'F_PETIT_INFINI' et non pas de 'F_INFINI' afin de permettre    */ \
                                        /* des operations ulterieures du type 'F__?DENORMALISE_O?(...)' sans debordement...          */
#define   POINT_A_L_INFINI_INDETERMINE                                                                                                  \
                    NEGA(POINT_A_L_INFINI_INVISIBLE)                                                                                    \
                                        /* Afin de caracteriser les coordonnees d'un point pour lequel (-R) = 0 (indetermine).       */
#define   PROJECTION_PLANE_QUELCONQUE(point_d_intersection,point_a_projeter,plan_de_projection,observateur)                             \
                    Bblock                                                                                                              \
                    DEFV(Float                                                                                                          \
                        ,INIT(parametre                                                                                                 \
                             ,NEGA(fDIVZ(LIN3(ASD1(plan_de_projection,pA),ASD1(observateur,x)                                           \
                                             ,ASD1(plan_de_projection,pB),ASD1(observateur,y)                                           \
                                             ,ASD1(plan_de_projection,pC),ASD1(observateur,z)                                           \
                                             ,ASD1(plan_de_projection,pD)                                                               \
                                              )                                                                                         \
                                        ,LIN3(ASD1(plan_de_projection,pA),SOUS(ASD1(point_a_projeter,x),ASD1(observateur,x))            \
                                             ,ASD1(plan_de_projection,pB),SOUS(ASD1(point_a_projeter,y),ASD1(observateur,y))            \
                                             ,ASD1(plan_de_projection,pC),SOUS(ASD1(point_a_projeter,z),ASD1(observateur,z))            \
                                             ,FZERO                                                                                     \
                                              )                                                                                         \
                                         )                                                                                              \
                                   )                                                                                                    \
                              )                                                                                                         \
                         );                                                                                                             \
                                        /* Calcul de l'oppose ('-R') du parametre 'R' ; on notera le 'DIVZ' qui evite les divisions  */ \
                                        /* par zero, mais qui en contre-partie donne a 'parametre' une valeur infinie (relativement  */ \
                                        /* au type 'Int'), ce qui peut entrainer ensuite des debordements lors de conversions du     */ \
                                        /* type flottant --> entier, par exemple dans les fonctions '_?DENORMALISE_O?(...)'.         */ \
                                        /*                                                                                           */ \
                                        /* Le 20071201110152 'DIVZ(...)' fut remplace tardivement par 'fDIVZ(...)'...                */ \
                    Test(IZGT(parametre))                                                                                               \
                         Bblock                                                                                                         \
                         INITIALISATION_POINT_3D(point_d_intersection                                                                   \
                                                ,LIN1(SOUS(ASD1(point_a_projeter,x),ASD1(observateur,x))                                \
                                                     ,parametre                                                                         \
                                                     ,ASD1(observateur,x)                                                               \
                                                      )                                                                                 \
                                                ,LIN1(SOUS(ASD1(point_a_projeter,y),ASD1(observateur,y))                                \
                                                     ,parametre                                                                         \
                                                     ,ASD1(observateur,y)                                                               \
                                                      )                                                                                 \
                                                ,LIN1(SOUS(ASD1(point_a_projeter,z),ASD1(observateur,z))                                \
                                                     ,parametre                                                                         \
                                                     ,ASD1(observateur,z)                                                               \
                                                      )                                                                                 \
                                                 );                                                                                     \
                                        /* Calcul des coordonnees du point d'intersection dans le cas ou 'P' est visible (-R > 0).   */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Test(IZLT(parametre))                                                                                          \
                              Bblock                                                                                                    \
                              INITIALISATION_POINT_3D(point_d_intersection                                                              \
                                                     ,POINT_A_L_INFINI_INVISIBLE                                                        \
                                                     ,POINT_A_L_INFINI_INVISIBLE                                                        \
                                                     ,POINT_A_L_INFINI_INVISIBLE                                                        \
                                                      );                                                                                \
                                        /* Calcul des coordonnees du point d'intersection dans le cas ou 'P' est invisible (-R < 0). */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              INITIALISATION_POINT_3D(point_d_intersection                                                              \
                                                     ,POINT_A_L_INFINI_INDETERMINE                                                      \
                                                     ,POINT_A_L_INFINI_INDETERMINE                                                      \
                                                     ,POINT_A_L_INFINI_INDETERMINE                                                      \
                                                      );                                                                                \
                                        /* Calcul des coordonnees du point d'intersection dans le cas ou 'P' est indetermine, ce     */ \
                                        /* qui veut dire que l'observateur 'O' est dans le plan de projection (-R = 0).              */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Fonction de projection plane quelconque...                                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O J E C T I O N   P A R A L L E L E   D ' U N   4 - E S P A C E   V E R S   L E   3 - E S P A C E  :                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    On definit la projection parallele d'un                                                                        */
/*                  point {x1,x2,x3,x4} appartenant a un espace                                                                      */
/*                  a 4 dimensions sur un point {X,Y,Z} appartenant                                                                  */
/*                  a un espace a 3 dimensions par :                                                                                 */
/*                                                                                                                                   */
/*                                      X = (A  .x ) + (A  .x ) + (A  .x ) + (A  .x )                                                */
/*                                            X1  1      X2  2      X3  3      X4  4                                                 */
/*                                                                                                                                   */
/*                                      Y = (A  .x ) + (A  .x ) + (A  .x ) + (A  .x )                                                */
/*                                            Y1  1      Y2  2      Y3  3      Y4  4                                                 */
/*                                                                                                                                   */
/*                                      Z = (A  .x ) + (A  .x ) + (A  .x ) + (A  .x )                                                */
/*                                            Z1  1      Z2  2      Z3  3      Z4  4                                                 */
/*                                                                                                                                   */
/*                  la matrice 'A' etant initialisee implicitement                                                                   */
/*                  avec les valeurs :                                                                                               */
/*                                                                                                                                   */
/*                                      | 1 0 0 1 |                                                                                  */
/*                                      | 0 1 0 1 |                                                                                  */
/*                                      | 0 0 1 1 |                                                                                  */
/*                                                                                                                                   */
/*                  qui donnent de bons resultats...                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROJECTION_PARALLELE_01_4D_3D_X(x1,x2,x3,x4)                                                                                  \
                    LIZ4(coefficient_de_projection_parallele_01_4D_3D_x1_X,x1                                                           \
                        ,coefficient_de_projection_parallele_01_4D_3D_x2_X,x2                                                           \
                        ,coefficient_de_projection_parallele_01_4D_3D_x3_X,x3                                                           \
                        ,coefficient_de_projection_parallele_01_4D_3D_x4_X,x4                                                           \
                         )                                                                                                              \
                                        /* Definition de la coordonnee 'X' apres projection 4D --> 3D (introduit le 20040331085528). */

#define   PROJECTION_PARALLELE_01_4D_3D_Y(x1,x2,x3,x4)                                                                                  \
                    LIZ4(coefficient_de_projection_parallele_01_4D_3D_x1_Y,x1                                                           \
                        ,coefficient_de_projection_parallele_01_4D_3D_x2_Y,x2                                                           \
                        ,coefficient_de_projection_parallele_01_4D_3D_x3_Y,x3                                                           \
                        ,coefficient_de_projection_parallele_01_4D_3D_x4_Y,x4                                                           \
                         )                                                                                                              \
                                        /* Definition de la coordonnee 'Y' apres projection 4D --> 3D (introduit le 20040331085528). */

#define   PROJECTION_PARALLELE_01_4D_3D_Z(x1,x2,x3,x4)                                                                                  \
                    LIZ4(coefficient_de_projection_parallele_01_4D_3D_x1_Z,x1                                                           \
                        ,coefficient_de_projection_parallele_01_4D_3D_x2_Z,x2                                                           \
                        ,coefficient_de_projection_parallele_01_4D_3D_x3_Z,x3                                                           \
                        ,coefficient_de_projection_parallele_01_4D_3D_x4_Z,x4                                                           \
                         )                                                                                                              \
                                        /* Definition de la coordonnee 'Z' apres projection 4D --> 3D (introduit le 20040331085528). */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O J E C T I O N   P E R S P E C T I V E   D ' U N   4 - E S P A C E   V E R S   L E   3 - E S P A C E  :               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    On definit la projection perspective d'un                                                                      */
/*                  point {x1,x2,x3,x4} appartenant a un espace                                                                      */
/*                  a 4 dimensions sur un point {X,Y,Z} appartenant                                                                  */
/*                  a un espace a 3 dimensions par. La transformation                                                                */
/*                  prespective est calculee au prealable. On definit                                                                */
/*                  donc le coefficient 'R' :                                                                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                     A.O1 + B.O2 + C.O3 + D.O4 + E                                                 */
/*                                      R = ---------------------------------------------------                                      */
/*                                           A.(x1-O1) + B.(x2-O2) + C.(x3-O3) + D.(x4-O4) + E                                       */
/*                                                                                                                                   */
/*                  et la transformation prespective :                                                                               */
/*                                                                                                                                   */
/*                                      x1' = O1 + (-R).(x1-O1)                                                                      */
/*                                      x2' = O2 + (-R).(x2-O2)                                                                      */
/*                                      x3' = O3 + (-R).(x3-O3)                                                                      */
/*                                      x4' = O4 + (-R).(x4-O4)                                                                      */
/*                                                                                                                                   */
/*                                      {A,B,C,D,E} etant un hyper-plan et                                                           */
/*                                      {O1,O2,O3,O4} un hyper-observateur.                                                          */
/*                                                                                                                                   */
/*                    Ceci est inspire de 'v $xrs/HyperCube.11$K' avec                                                               */
/*                  'CoordonneeCourante' etant ici successivement                                                                    */
/*                  {x1',x2',x3',x4'}...                                                                                             */
/*                                                                                                                                   */
/*                    Et enfin, le point {x1',x2',x3',x4'} fait                                                                      */
/*                  ensuite l'objet de la projection paralelle definie                                                               */
/*                  precedemment ('PROJECTION_PARALLELE_01_4D_3D') :                                                                 */
/*                                                                                                                                   */
/*                                      {x1',x2',x3',x4'} --> {X,Y,Z}                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_4D_3D_R(x1,x2,x3,x4)                                                                 \
                    DIVI(LIN4(plan_de_projection_perspective_01_4D_A,observateur_de_projection_perspective_01_4D_X1                     \
                             ,plan_de_projection_perspective_01_4D_B,observateur_de_projection_perspective_01_4D_X2                     \
                             ,plan_de_projection_perspective_01_4D_C,observateur_de_projection_perspective_01_4D_X3                     \
                             ,plan_de_projection_perspective_01_4D_D,observateur_de_projection_perspective_01_4D_X4                     \
                             ,plan_de_projection_perspective_01_4D_E                                                                    \
                              )                                                                                                         \
                        ,LIN4(plan_de_projection_perspective_01_4D_A,SOUS(x1,observateur_de_projection_perspective_01_4D_X1)            \
                             ,plan_de_projection_perspective_01_4D_B,SOUS(x2,observateur_de_projection_perspective_01_4D_X2)            \
                             ,plan_de_projection_perspective_01_4D_C,SOUS(x3,observateur_de_projection_perspective_01_4D_X3)            \
                             ,plan_de_projection_perspective_01_4D_D,SOUS(x4,observateur_de_projection_perspective_01_4D_X4)            \
                             ,plan_de_projection_perspective_01_4D_E                                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Voir 'v $ximd/operator.1$FON PROJECTION_PLANE_QUELCONQUE' pour la definition du           */ \
                                        /* coefficient 'R'...                                                                        */

#define   PROJECTION_PERSPECTIVE_01_4D_3D_X(x1,x2,x3,x4)                                                                                \
                    PROJECTION_PARALLELE_01_4D_3D_X(AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_4D_3D_R(x1,x2,x3,x4))            \
                                                        ,SOUS(x1,observateur_de_projection_perspective_01_4D_X1)                        \
                                                        ,observateur_de_projection_perspective_01_4D_X1                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_4D_3D_R(x1,x2,x3,x4))            \
                                                        ,SOUS(x2,observateur_de_projection_perspective_01_4D_X2)                        \
                                                        ,observateur_de_projection_perspective_01_4D_X2                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_4D_3D_R(x1,x2,x3,x4))            \
                                                        ,SOUS(x3,observateur_de_projection_perspective_01_4D_X3)                        \
                                                        ,observateur_de_projection_perspective_01_4D_X3                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_4D_3D_R(x1,x2,x3,x4))            \
                                                        ,SOUS(x4,observateur_de_projection_perspective_01_4D_X4)                        \
                                                        ,observateur_de_projection_perspective_01_4D_X4                                 \
                                                         )                                                                              \
                                                    )                                                                                   \
                                        /* Definition de la coordonnee 'X' apres projection 4D --> 3D (introduit le 20230310103323). */
#define   PROJECTION_PERSPECTIVE_01_4D_3D_Y(x1,x2,x3,x4)                                                                                \
                    PROJECTION_PARALLELE_01_4D_3D_Y(AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_4D_3D_R(x1,x2,x3,x4))            \
                                                        ,SOUS(x1,observateur_de_projection_perspective_01_4D_X1)                        \
                                                        ,observateur_de_projection_perspective_01_4D_X1                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_4D_3D_R(x1,x2,x3,x4))            \
                                                        ,SOUS(x2,observateur_de_projection_perspective_01_4D_X2)                        \
                                                        ,observateur_de_projection_perspective_01_4D_X2                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_4D_3D_R(x1,x2,x3,x4))            \
                                                        ,SOUS(x3,observateur_de_projection_perspective_01_4D_X3)                        \
                                                        ,observateur_de_projection_perspective_01_4D_X3                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_4D_3D_R(x1,x2,x3,x4))            \
                                                        ,SOUS(x4,observateur_de_projection_perspective_01_4D_X4)                        \
                                                        ,observateur_de_projection_perspective_01_4D_X4                                 \
                                                         )                                                                              \
                                                    )                                                                                   \
                                        /* Definition de la coordonnee 'Y' apres projection 4D --> 3D (introduit le 20230310103323). */
#define   PROJECTION_PERSPECTIVE_01_4D_3D_Z(x1,x2,x3,x4)                                                                                \
                    PROJECTION_PARALLELE_01_4D_3D_Z(AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_4D_3D_R(x1,x2,x3,x4))            \
                                                        ,SOUS(x1,observateur_de_projection_perspective_01_4D_X1)                        \
                                                        ,observateur_de_projection_perspective_01_4D_X1                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_4D_3D_R(x1,x2,x3,x4))            \
                                                        ,SOUS(x2,observateur_de_projection_perspective_01_4D_X2)                        \
                                                        ,observateur_de_projection_perspective_01_4D_X2                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_4D_3D_R(x1,x2,x3,x4))            \
                                                        ,SOUS(x3,observateur_de_projection_perspective_01_4D_X3)                        \
                                                        ,observateur_de_projection_perspective_01_4D_X3                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_4D_3D_R(x1,x2,x3,x4))            \
                                                        ,SOUS(x4,observateur_de_projection_perspective_01_4D_X4)                        \
                                                        ,observateur_de_projection_perspective_01_4D_X4                                 \
                                                         )                                                                              \
                                                    )                                                                                   \
                                        /* Definition de la coordonnee 'Z' apres projection 4D --> 3D (introduit le 20230310103323). */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O J E C T I O N   P A R A L L E L E   D ' U N   6 - E S P A C E   V E R S   L E   3 - E S P A C E  :                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    On definit la projection parallele d'un                                                                        */
/*                  point {x1,x2,x3,x4,x5,x6} appartenant a un espace                                                                */
/*                  a 6 dimensions sur un point {X,Y,Z} appartenant                                                                  */
/*                  a un espace a 3 dimensions par :                                                                                 */
/*                                                                                                                                   */
/*                                      X = (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x )                          */
/*                                            X1  1      X2  2      X3  3      X4  4      X5  5      X6  6                           */
/*                                                                                                                                   */
/*                                      Y = (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x )                          */
/*                                            Y1  1      Y2  2      Y3  3      Y4  4      Y5  5      Y6  6                           */
/*                                                                                                                                   */
/*                                      Z = (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x )                          */
/*                                            Z1  1      Z2  2      Z3  3      Z4  4      Z5  5      Z6  6                           */
/*                                                                                                                                   */
/*                  la matrice 'A' etant initialisee implicitement                                                                   */
/*                  avec les valeurs :                                                                                               */
/*                                                                                                                                   */
/*                                      | 1 0 0 1 0 0 |                                                                              */
/*                                      | 0 1 0 0 1 0 |                                                                              */
/*                                      | 0 0 1 0 0 1 |                                                                              */
/*                                                                                                                                   */
/*                  qui donnent de bons resultats...                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROJECTION_PARALLELE_01_6D_3D_X(x1,x2,x3,x4,x5,x6)                                                                            \
                    LIZ6(coefficient_de_projection_parallele_01_6D_3D_x1_X,x1                                                           \
                        ,coefficient_de_projection_parallele_01_6D_3D_x2_X,x2                                                           \
                        ,coefficient_de_projection_parallele_01_6D_3D_x3_X,x3                                                           \
                        ,coefficient_de_projection_parallele_01_6D_3D_x4_X,x4                                                           \
                        ,coefficient_de_projection_parallele_01_6D_3D_x5_X,x5                                                           \
                        ,coefficient_de_projection_parallele_01_6D_3D_x6_X,x6                                                           \
                         )                                                                                                              \
                                        /* Definition de la coordonnee 'X' apres projection 6D --> 3D (introduit le 20040331085528). */

#define   PROJECTION_PARALLELE_01_6D_3D_Y(x1,x2,x3,x4,x5,x6)                                                                            \
                    LIZ6(coefficient_de_projection_parallele_01_6D_3D_x1_Y,x1                                                           \
                        ,coefficient_de_projection_parallele_01_6D_3D_x2_Y,x2                                                           \
                        ,coefficient_de_projection_parallele_01_6D_3D_x3_Y,x3                                                           \
                        ,coefficient_de_projection_parallele_01_6D_3D_x4_Y,x4                                                           \
                        ,coefficient_de_projection_parallele_01_6D_3D_x5_Y,x5                                                           \
                        ,coefficient_de_projection_parallele_01_6D_3D_x6_Y,x6                                                           \
                         )                                                                                                              \
                                        /* Definition de la coordonnee 'Y' apres projection 6D --> 3D (introduit le 20040331085528). */

#define   PROJECTION_PARALLELE_01_6D_3D_Z(x1,x2,x3,x4,x5,x6)                                                                            \
                    LIZ6(coefficient_de_projection_parallele_01_6D_3D_x1_Z,x1                                                           \
                        ,coefficient_de_projection_parallele_01_6D_3D_x2_Z,x2                                                           \
                        ,coefficient_de_projection_parallele_01_6D_3D_x3_Z,x3                                                           \
                        ,coefficient_de_projection_parallele_01_6D_3D_x4_Z,x4                                                           \
                        ,coefficient_de_projection_parallele_01_6D_3D_x5_Z,x5                                                           \
                        ,coefficient_de_projection_parallele_01_6D_3D_x6_Z,x6                                                           \
                         )                                                                                                              \
                                        /* Definition de la coordonnee 'Z' apres projection 6D --> 3D (introduit le 20040331085528). */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O J E C T I O N   P A R A L L E L E   D ' U N   8 - E S P A C E   V E R S   L E   3 - E S P A C E  :                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    On definit la projection parallele d'un                                                                        */
/*                  point {x1,x2,x3,x4,x5,x6,x7,x8} appartenant a un espace                                                          */
/*                  a 8 dimensions sur un point {X,Y,Z} appartenant                                                                  */
/*                  a un espace a 3 dimensions par :                                                                                 */
/*                                                                                                                                   */
/*                                      X = (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x )    */
/*                                            X1  1      X2  2      X3  3      X4  4      X5  5      X6  6      X7  7      X8  8     */
/*                                                                                                                                   */
/*                                      Y = (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x )    */
/*                                            Y1  1      Y2  2      Y3  3      Y4  4      Y5  5      Y6  6      Y7  7      Y8  8     */
/*                                                                                                                                   */
/*                                      Z = (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x ) + (A  .x )    */
/*                                            Z1  1      Z2  2      Z3  3      Z4  4      Z5  5      Z6  6      Z7  7      Z8  8     */
/*                                                                                                                                   */
/*                  la matrice 'A' etant initialisee implicitement                                                                   */
/*                  avec les valeurs :                                                                                               */
/*                                                                                                                                   */
/*                                      | 1 0 0 1 1 0 0 1 |                                                                          */
/*                                      | 0 1 0 1 0 1 0 1 |                                                                          */
/*                                      | 0 0 1 1 0 0 1 1 |                                                                          */
/*                                                                                                                                   */
/*                  qui donnent de bons resultats...                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROJECTION_PARALLELE_01_8D_3D_X(x1,x2,x3,x4,x5,x6,x7,x8)                                                                      \
                    LIZ8(coefficient_de_projection_parallele_01_8D_3D_x1_X,x1                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x2_X,x2                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x3_X,x3                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x4_X,x4                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x5_X,x5                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x6_X,x6                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x7_X,x7                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x8_X,x8                                                           \
                         )                                                                                                              \
                                        /* Definition de la coordonnee 'X' apres projection 8D --> 3D (introduit le 20230202141425). */

#define   PROJECTION_PARALLELE_01_8D_3D_Y(x1,x2,x3,x4,x5,x6,x7,x8)                                                                      \
                    LIZ8(coefficient_de_projection_parallele_01_8D_3D_x1_Y,x1                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x2_Y,x2                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x3_Y,x3                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x4_Y,x4                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x5_Y,x5                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x6_Y,x6                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x7_Y,x7                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x8_Y,x8                                                           \
                         )                                                                                                              \
                                        /* Definition de la coordonnee 'Y' apres projection 8D --> 3D (introduit le 20230202141425). */

#define   PROJECTION_PARALLELE_01_8D_3D_Z(x1,x2,x3,x4,x5,x6,x7,x8)                                                                      \
                    LIZ8(coefficient_de_projection_parallele_01_8D_3D_x1_Z,x1                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x2_Z,x2                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x3_Z,x3                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x4_Z,x4                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x5_Z,x5                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x6_Z,x6                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x7_Z,x7                                                           \
                        ,coefficient_de_projection_parallele_01_8D_3D_x8_Z,x8                                                           \
                         )                                                                                                              \
                                        /* Definition de la coordonnee 'Z' apres projection 8D --> 3D (introduit le 20230202141425). */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O J E C T I O N   P E R S P E C T I V E   D ' U N   8 - E S P A C E   V E R S   L E   3 - E S P A C E  :               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    On definit la projection perspective d'un                                                                      */
/*                  point {x1,x2,x3,x4,x5,x6,x7,x8} appartenant a un espace                                                          */
/*                  a 8 dimensions sur un point {X,Y,Z} appartenant                                                                  */
/*                  a un espace a 3 dimensions par. La transformation                                                                */
/*                  perspective est calculee au prealable :                                                                          */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                               A.O1 + B.O2 + C.O3 + D.O4 + E.O5 + F.O6 +G.O7 + H.O8 + I                            */
/*                       R = ---------------------------------------------------------------------------------------------------     */
/*                            A.(x1-O1) + B.(x2-O2) + C.(x3-O3) + D.(x4-O4) + D.(x5-O5) + D.(x6-O6) + D.(x7-O7) + D.(x8-O8) + I      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      x1' = O1 + (-R).(x1-O1)                                                                      */
/*                                      x2' = O2 + (-R).(x2-O2)                                                                      */
/*                                      x3' = O3 + (-R).(x3-O3)                                                                      */
/*                                      x4' = O4 + (-R).(x4-O4)                                                                      */
/*                                      x5' = O5 + (-R).(x5-O5)                                                                      */
/*                                      x6' = O6 + (-R).(x6-O6)                                                                      */
/*                                      x7' = O7 + (-R).(x7-O7)                                                                      */
/*                                      x8' = O8 + (-R).(x8-O8)                                                                      */
/*                                                                                                                                   */
/*                                      {A,B,C,D,E,F,G,H,I} etant un hyper-plan et                                                   */
/*                                      {O1,O2,O3,O4,O5,O6,O7,O8} un hyper-observateur.                                              */
/*                                                                                                                                   */
/*                    Et enfin, le point {x1',x2',x3',x4',x5',x6',x7',x8'} fait                                                      */
/*                  l'objet de la projection paralelle definie                                                                       */
/*                  precedemment :                                                                                                   */
/*                                                                                                                                   */
/*                                      {x1',x2',x3',x4',x5',x6',x7',x8'} --> {X,Y,Z}                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4,x5,x6,x7,x8)                                                     \
                    DIVI(LIN8(plan_de_projection_perspective_01_8D_A,observateur_de_projection_perspective_01_8D_X1                     \
                             ,plan_de_projection_perspective_01_8D_B,observateur_de_projection_perspective_01_8D_X2                     \
                             ,plan_de_projection_perspective_01_8D_C,observateur_de_projection_perspective_01_8D_X3                     \
                             ,plan_de_projection_perspective_01_8D_D,observateur_de_projection_perspective_01_8D_X4                     \
                             ,plan_de_projection_perspective_01_8D_E,observateur_de_projection_perspective_01_8D_X5                     \
                             ,plan_de_projection_perspective_01_8D_F,observateur_de_projection_perspective_01_8D_X6                     \
                             ,plan_de_projection_perspective_01_8D_G,observateur_de_projection_perspective_01_8D_X7                     \
                             ,plan_de_projection_perspective_01_8D_H,observateur_de_projection_perspective_01_8D_X8                     \
                             ,plan_de_projection_perspective_01_8D_I                                                                    \
                              )                                                                                                         \
                        ,LIN8(plan_de_projection_perspective_01_8D_A,SOUS(x1,observateur_de_projection_perspective_01_8D_X1)            \
                             ,plan_de_projection_perspective_01_8D_B,SOUS(x2,observateur_de_projection_perspective_01_8D_X2)            \
                             ,plan_de_projection_perspective_01_8D_C,SOUS(x3,observateur_de_projection_perspective_01_8D_X3)            \
                             ,plan_de_projection_perspective_01_8D_D,SOUS(x4,observateur_de_projection_perspective_01_8D_X4)            \
                             ,plan_de_projection_perspective_01_8D_E,SOUS(x5,observateur_de_projection_perspective_01_8D_X5)            \
                             ,plan_de_projection_perspective_01_8D_F,SOUS(x6,observateur_de_projection_perspective_01_8D_X6)            \
                             ,plan_de_projection_perspective_01_8D_G,SOUS(x7,observateur_de_projection_perspective_01_8D_X7)            \
                             ,plan_de_projection_perspective_01_8D_H,SOUS(x8,observateur_de_projection_perspective_01_8D_X8)            \
                             ,plan_de_projection_perspective_01_8D_I                                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Voir 'v $ximd/operator.1$FON PROJECTION_PLANE_QUELCONQUE' pour la definition du           */ \
                                        /* coefficient 'R'...                                                                        */

#define   PROJECTION_PERSPECTIVE_01_8D_3D_X(x1,x2,x3,x4,x5,x6,x7,x8)                                                                    \
                    PROJECTION_PARALLELE_01_8D_3D_X(AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x1,observateur_de_projection_perspective_01_8D_X1)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X1                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x2,observateur_de_projection_perspective_01_8D_X2)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X2                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x3,observateur_de_projection_perspective_01_8D_X3)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X3                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x4,observateur_de_projection_perspective_01_8D_X4)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X4                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x5,observateur_de_projection_perspective_01_8D_X5)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X5                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x6,observateur_de_projection_perspective_01_8D_X6)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X6                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x7,observateur_de_projection_perspective_01_8D_X7)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X7                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x8,observateur_de_projection_perspective_01_8D_X8)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X8                                 \
                                                         )                                                                              \
                                                    )                                                                                   \
                                        /* Definition de la coordonnee 'X' apres projection 8D --> 3D (introduit le 20230316145048). */
#define   PROJECTION_PERSPECTIVE_01_8D_3D_Y(x1,x2,x3,x4,x5,x6,x7,x8)                                                                    \
                    PROJECTION_PARALLELE_01_8D_3D_Y(AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x1,observateur_de_projection_perspective_01_8D_X1)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X1                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x2,observateur_de_projection_perspective_01_8D_X2)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X2                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x3,observateur_de_projection_perspective_01_8D_X3)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X3                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x4,observateur_de_projection_perspective_01_8D_X4)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X4                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x5,observateur_de_projection_perspective_01_8D_X5)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X5                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x6,observateur_de_projection_perspective_01_8D_X6)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X6                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x7,observateur_de_projection_perspective_01_8D_X7)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X7                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x8,observateur_de_projection_perspective_01_8D_X8)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X8                                 \
                                                         )                                                                              \
                                                    )                                                                                   \
                                        /* Definition de la coordonnee 'Y' apres projection 8D --> 3D (introduit le 20230316145048). */
#define   PROJECTION_PERSPECTIVE_01_8D_3D_Z(x1,x2,x3,x4,x5,x6,x7,x8)                                                                    \
                    PROJECTION_PARALLELE_01_8D_3D_Z(AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x1,observateur_de_projection_perspective_01_8D_X1)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X1                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x2,observateur_de_projection_perspective_01_8D_X2)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X2                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x3,observateur_de_projection_perspective_01_8D_X3)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X3                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x4,observateur_de_projection_perspective_01_8D_X4)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X4                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x5,observateur_de_projection_perspective_01_8D_X5)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X5                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x6,observateur_de_projection_perspective_01_8D_X6)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X6                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x7,observateur_de_projection_perspective_01_8D_X7)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X7                                 \
                                                         )                                                                              \
                                                   ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_8D_3D_R(x1,x2,x3,x4              \
                                                                                                              ,x5,x6,x7,x8              \
                                                                                                               )                        \
                                                              )                                                                         \
                                                        ,SOUS(x8,observateur_de_projection_perspective_01_8D_X8)                        \
                                                        ,observateur_de_projection_perspective_01_8D_X8                                 \
                                                         )                                                                              \
                                                    )                                                                                   \
                                        /* Definition de la coordonnee 'Z' apres projection 8D --> 3D (introduit le 20230316145048). */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O J E C T I O N   P A R A L L E L E   D ' U N   1 6 - E S P A C E   V E R S   L E   3 - E S P A C E  :                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    On definit la projection parallele d'un                                                                        */
/*                  point {x01,x02,x03,x04,x05,x06,x07,x08,x09,x10,x11,x12,x13,x14,x15,x16} appartenant a un espace                  */
/*                  a 16 dimensions sur un point {X,Y,Z} appartenant                                                                 */
/*                  a un espace a 3 dimensions par :                                                                                 */
/*                                                                                                                                   */
/*                                      X = (A   .x  ) + (A   .x  ) + (...) + (A   .x  ) + (A   .x  )                                */
/*                                            X01  01      X02  02              X15  15      X16  16                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      Y = (A   .x  ) + (A   .x  ) + (...) + (A   .x  ) + (A   .x  )                                */
/*                                            Y01  01      Y02  02              Y15  15      Y16  16                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      Z = (A   .x  ) + (A   .x  ) + (...) + (A   .x  ) + (A   .x  )                                */
/*                                            Z01  01      Z02  02              Z15  15      Z16  16                                 */
/*                                                                                                                                   */
/*                  la matrice 'A' etant initialisee implicitement                                                                   */
/*                  avec les valeurs :                                                                                               */
/*                                                                                                                                   */
/*                                      | 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 |                                                          */
/*                                      | 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 |                                                          */
/*                                      | 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 |                                                          */
/*                                                                                                                                   */
/*                  qui donnent de bons resultats...                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROJECTION_PARALLELE_01_16D_3D_X(x01,x02,x03,x04,x05,x06,x07,x08,x09,x10,x11,x12,x13,x14,x15,x16)                             \
                    LIZ16(coefficient_de_projection_parallele_01_16D_3D_x01_X,x01                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x02_X,x02                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x03_X,x03                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x04_X,x04                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x05_X,x05                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x06_X,x06                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x07_X,x07                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x08_X,x08                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x09_X,x09                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x10_X,x10                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x11_X,x11                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x12_X,x12                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x13_X,x13                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x14_X,x14                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x15_X,x15                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x16_X,x16                                                       \
                          )                                                                                                             \
                                        /* Definition de la coordonnee 'X' apres projection 16D --> 3D, introduit le 20230226095722. */

#define   PROJECTION_PARALLELE_01_16D_3D_Y(x01,x02,x03,x04,x05,x06,x07,x08,x09,x10,x11,x12,x13,x14,x15,x16)                             \
                    LIZ16(coefficient_de_projection_parallele_01_16D_3D_x01_Y,x01                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x02_Y,x02                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x03_Y,x03                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x04_Y,x04                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x05_Y,x05                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x06_Y,x06                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x07_Y,x07                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x08_Y,x08                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x09_Y,x09                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x10_Y,x10                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x11_Y,x11                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x12_Y,x12                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x13_Y,x13                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x14_Y,x14                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x15_Y,x15                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x16_Y,x16                                                       \
                          )                                                                                                             \
                                        /* Definition de la coordonnee 'Y' apres projection 16D --> 3D, introduit le 20230226095722. */

#define   PROJECTION_PARALLELE_01_16D_3D_Z(x01,x02,x03,x04,x05,x06,x07,x08,x09,x10,x11,x12,x13,x14,x15,x16)                             \
                    LIZ16(coefficient_de_projection_parallele_01_16D_3D_x01_Z,x01                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x02_Z,x02                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x03_Z,x03                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x04_Z,x04                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x05_Z,x05                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x06_Z,x06                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x07_Z,x07                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x08_Z,x08                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x09_Z,x09                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x10_Z,x10                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x11_Z,x11                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x12_Z,x12                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x13_Z,x13                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x14_Z,x14                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x15_Z,x15                                                       \
                         ,coefficient_de_projection_parallele_01_16D_3D_x16_Z,x16                                                       \
                          )                                                                                                             \
                                        /* Definition de la coordonnee 'Z' apres projection 16D --> 3D, introduit le 20230226095722. */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O J E C T I O N   P E R S P E C T I V E   D ' U N   1 6 - E S P A C E   V E R S   L E   3 - E S P A C E  :             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    On definit la projection perspective d'un                                                                      */
/*                  point {x01,x02,x03,x04,x05,x06,x07,x08,x09,x10,x11,x12,x13,x14,x15,x16} appartenant a un espace                  */
/*                  a 16 dimensions sur un point {X,Y,Z} appartenant                                                                 */
/*                  a un espace a 3 dimensions par. Cette projection est                                                             */
/*                  tout a fait identique a celle definie pour un                                                                    */
/*                  espace a 16 dimensions...                                                                                        */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04,x05,x06,x07,x08,x09,x10,x11,x12,x13,x15,x14,x16)            \
                    DIVI(LIN16(plan_de_projection_perspective_01_16D_A,observateur_de_projection_perspective_01_16D_X01                 \
                              ,plan_de_projection_perspective_01_16D_B,observateur_de_projection_perspective_01_16D_X02                 \
                              ,plan_de_projection_perspective_01_16D_C,observateur_de_projection_perspective_01_16D_X03                 \
                              ,plan_de_projection_perspective_01_16D_D,observateur_de_projection_perspective_01_16D_X04                 \
                              ,plan_de_projection_perspective_01_16D_E,observateur_de_projection_perspective_01_16D_X05                 \
                              ,plan_de_projection_perspective_01_16D_F,observateur_de_projection_perspective_01_16D_X06                 \
                              ,plan_de_projection_perspective_01_16D_G,observateur_de_projection_perspective_01_16D_X07                 \
                              ,plan_de_projection_perspective_01_16D_H,observateur_de_projection_perspective_01_16D_X08                 \
                              ,plan_de_projection_perspective_01_16D_I,observateur_de_projection_perspective_01_16D_X09                 \
                              ,plan_de_projection_perspective_01_16D_J,observateur_de_projection_perspective_01_16D_X10                 \
                              ,plan_de_projection_perspective_01_16D_K,observateur_de_projection_perspective_01_16D_X11                 \
                              ,plan_de_projection_perspective_01_16D_L,observateur_de_projection_perspective_01_16D_X12                 \
                              ,plan_de_projection_perspective_01_16D_M,observateur_de_projection_perspective_01_16D_X13                 \
                              ,plan_de_projection_perspective_01_16D_N,observateur_de_projection_perspective_01_16D_X14                 \
                              ,plan_de_projection_perspective_01_16D_O,observateur_de_projection_perspective_01_16D_X15                 \
                              ,plan_de_projection_perspective_01_16D_P,observateur_de_projection_perspective_01_16D_X16                 \
                              ,plan_de_projection_perspective_01_16D_Q                                                                  \
                               )                                                                                                        \
                        ,LIN16(plan_de_projection_perspective_01_16D_A,SOUS(x01,observateur_de_projection_perspective_01_16D_X01)       \
                              ,plan_de_projection_perspective_01_16D_B,SOUS(x02,observateur_de_projection_perspective_01_16D_X02)       \
                              ,plan_de_projection_perspective_01_16D_C,SOUS(x03,observateur_de_projection_perspective_01_16D_X03)       \
                              ,plan_de_projection_perspective_01_16D_D,SOUS(x04,observateur_de_projection_perspective_01_16D_X04)       \
                              ,plan_de_projection_perspective_01_16D_E,SOUS(x05,observateur_de_projection_perspective_01_16D_X05)       \
                              ,plan_de_projection_perspective_01_16D_F,SOUS(x06,observateur_de_projection_perspective_01_16D_X06)       \
                              ,plan_de_projection_perspective_01_16D_G,SOUS(x07,observateur_de_projection_perspective_01_16D_X07)       \
                              ,plan_de_projection_perspective_01_16D_H,SOUS(x08,observateur_de_projection_perspective_01_16D_X08)       \
                              ,plan_de_projection_perspective_01_16D_I,SOUS(x09,observateur_de_projection_perspective_01_16D_X09)       \
                              ,plan_de_projection_perspective_01_16D_J,SOUS(x10,observateur_de_projection_perspective_01_16D_X10)       \
                              ,plan_de_projection_perspective_01_16D_K,SOUS(x11,observateur_de_projection_perspective_01_16D_X11)       \
                              ,plan_de_projection_perspective_01_16D_L,SOUS(x12,observateur_de_projection_perspective_01_16D_X12)       \
                              ,plan_de_projection_perspective_01_16D_M,SOUS(x13,observateur_de_projection_perspective_01_16D_X13)       \
                              ,plan_de_projection_perspective_01_16D_N,SOUS(x14,observateur_de_projection_perspective_01_16D_X14)       \
                              ,plan_de_projection_perspective_01_16D_O,SOUS(x15,observateur_de_projection_perspective_01_16D_X15)       \
                              ,plan_de_projection_perspective_01_16D_P,SOUS(x16,observateur_de_projection_perspective_01_16D_X16)       \
                              ,plan_de_projection_perspective_01_16D_Q                                                                  \
                               )                                                                                                        \
                         )                                                                                                              \
                                        /* Voir 'v $ximd/operator.1$FON PROJECTION_PLANE_QUELCONQUE' pour la definition du           */ \
                                        /* coefficient 'R'...                                                                        */

#define   PROJECTION_PERSPECTIVE_01_16D_3D_X(x01,x02,x03,x04,x05,x06,x07,x08,x09,x10,x11,x12,x13,x15,x14,x16)                           \
                    PROJECTION_PARALLELE_01_16D_3D_X(AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x01,observateur_de_projection_perspective_01_16D_X01)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X01                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x02,observateur_de_projection_perspective_01_16D_X02)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X02                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x03,observateur_de_projection_perspective_01_16D_X03)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X03                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x04,observateur_de_projection_perspective_01_16D_X04)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X04                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x05,observateur_de_projection_perspective_01_16D_X05)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X05                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x06,observateur_de_projection_perspective_01_16D_X06)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X06                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x07,observateur_de_projection_perspective_01_16D_X07)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X07                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x08,observateur_de_projection_perspective_01_16D_X08)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X08                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x09,observateur_de_projection_perspective_01_16D_X09)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X09                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x10,observateur_de_projection_perspective_01_16D_X10)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X10                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x11,observateur_de_projection_perspective_01_16D_X11)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X11                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x12,observateur_de_projection_perspective_01_16D_X12)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X12                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x13,observateur_de_projection_perspective_01_16D_X13)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X13                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x14,observateur_de_projection_perspective_01_16D_X14)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X14                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x15,observateur_de_projection_perspective_01_16D_X15)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X15                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x16,observateur_de_projection_perspective_01_16D_X16)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X16                              \
                                                          )                                                                             \
                                                     )                                                                                  \
                                        /* Definition de la coordonnee 'X' apres projection 16D --> 3D (introduit le                 */
                                        /* 20230316145048).                                                                          */
#define   PROJECTION_PERSPECTIVE_01_16D_3D_Y(x01,x02,x03,x04,x05,x06,x07,x08,x09,x10,x11,x12,x13,x15,x14,x16)                           \
                    PROJECTION_PARALLELE_01_16D_3D_Y(AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x01,observateur_de_projection_perspective_01_16D_X01)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X01                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x02,observateur_de_projection_perspective_01_16D_X02)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X02                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x03,observateur_de_projection_perspective_01_16D_X03)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X03                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x04,observateur_de_projection_perspective_01_16D_X04)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X04                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x05,observateur_de_projection_perspective_01_16D_X05)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X05                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x06,observateur_de_projection_perspective_01_16D_X06)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X06                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x07,observateur_de_projection_perspective_01_16D_X07)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X07                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x08,observateur_de_projection_perspective_01_16D_X08)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X08                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x09,observateur_de_projection_perspective_01_16D_X09)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X09                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x10,observateur_de_projection_perspective_01_16D_X10)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X10                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x11,observateur_de_projection_perspective_01_16D_X11)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X11                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x12,observateur_de_projection_perspective_01_16D_X12)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X12                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x13,observateur_de_projection_perspective_01_16D_X13)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X13                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x14,observateur_de_projection_perspective_01_16D_X14)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X14                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x15,observateur_de_projection_perspective_01_16D_X15)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X15                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x16,observateur_de_projection_perspective_01_16D_X16)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X16                              \
                                                          )                                                                             \
                                                     )                                                                                  \
                                        /* Definition de la coordonnee 'Y' apres projection 16D --> 3D (introduit le                 */
                                        /* 20230316145048).                                                                          */
#define   PROJECTION_PERSPECTIVE_01_16D_3D_Z(x01,x02,x03,x04,x05,x06,x07,x08,x09,x10,x11,x12,x13,x14,x15,x16)                           \
                    PROJECTION_PARALLELE_01_16D_3D_Z(AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x01,observateur_de_projection_perspective_01_16D_X01)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X01                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x02,observateur_de_projection_perspective_01_16D_X02)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X02                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x03,observateur_de_projection_perspective_01_16D_X03)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X03                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x04,observateur_de_projection_perspective_01_16D_X04)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X04                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x05,observateur_de_projection_perspective_01_16D_X05)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X05                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x06,observateur_de_projection_perspective_01_16D_X06)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X06                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x07,observateur_de_projection_perspective_01_16D_X07)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X07                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x08,observateur_de_projection_perspective_01_16D_X08)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X08                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x09,observateur_de_projection_perspective_01_16D_X09)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X09                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x10,observateur_de_projection_perspective_01_16D_X10)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X10                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x11,observateur_de_projection_perspective_01_16D_X11)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X11                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x12,observateur_de_projection_perspective_01_16D_X12)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X12                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x13,observateur_de_projection_perspective_01_16D_X13)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X13                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x14,observateur_de_projection_perspective_01_16D_X14)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X14                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x15,observateur_de_projection_perspective_01_16D_X15)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X15                              \
                                                          )                                                                             \
                                                    ,AXPB(NEGA(COEFFICIENT_DE_PROJECTION_PERSPECTIVE_01_16D_3D_R(x01,x02,x03,x04        \
                                                                                                                ,x05,x06,x07,x08        \
                                                                                                                ,x09,x10,x11,x12        \
                                                                                                                ,x13,x14,x15,x16        \
                                                                                                                 )                      \
                                                               )                                                                        \
                                                         ,SOUS(x16,observateur_de_projection_perspective_01_16D_X16)                    \
                                                         ,observateur_de_projection_perspective_01_16D_X16                              \
                                                          )                                                                             \
                                                     )                                                                                  \
                                        /* Definition de la coordonnee 'Z' apres projection 16D --> 3D (introduit le                 */
                                        /* 20230316145048).                                                                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   P O L Y N O M E S   A   U N E   V A R I A B L E                                                        */
/*        P A R   L A   M E T H O D E   D E   H O R N E R  :                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definitions :                                                                                                              */
/*                                                                                                                                   */
/*                    Les differentes procedures s'appeleront                                                                        */
/*                  'HORNER_v_0n(...)' ou 'v' designe le nombre                                                                      */
/*                  de variables (v=1,2,3,4,...) et 'n' le degre                                                                     */
/*                  maximal relatif a chaque variable (n=1,2,3,...)                                                                  */
/*                  -et non pas le degre maximal des differents                                                                      */
/*                  produits des variables-.                                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
_____define(GenOperator_PASSE_D_____HORNER_1_nn,++D++-define   $1(x,$3,a0)                                                                                                             \
-_-_-_-             AXPB($2(x,$3),x,a0)++F++
            )
                                        /* Procedure de generation automatique des 'HORNER_??(...)' introduite le 20070907132158...  */
                                        /*                                                                                           */
                                        /* Jusqu'au 20070913145427, on trouvait ci-dessus :                                          */
                                        /*                                                                                           */
                                        /*                   #define   NomOperateur_____HORNER                                    \  */
                                        /*                                       HORNER                                              */
                                        /*                   #define   GenereOperateur_____HORNER_NN(NN,NN_1,Liste_NN)            \  */
                                        /*                   &define   NomOperateur_____HORNER`NN(x,Liste_NN,a0)                  \  */
                                        /*                                       AXPB(NomOperateur_____HORNER`NN_1(x,Liste_NN),x,a0) */
                                        /*                                                                                           */
                                        /* mais il est preferable que le nom complet des operateurs (par exemple 'HORNER_01')        */
                                        /* apparaissent explicitement (a cause de 'v $xi/DICO_define$Z' en particulier...). Les      */
                                        /* definitions subsistent en '$PASSE_4' malgre tout puisque cela marche ainsi...             */
                                        /*                                                                                           */
                                        /* Le 20070913153802 le nom 'GenereOperateur_____HORNER_NN(...)' fut change en               */
                                        /* 'GenOperator_P_4_____HORNER_nn(...)' afin de contenir la passe '$PASSE_4' de generation,  */
                                        /* ce qui est utile dans 'v $xi/DICO$D/GenOperator$vv$sub GenOperator_P_._____'.             */
                                        /*                                                                                           */
                                        /* Le 20071002090755 le nom 'GenOperator_P_4_____HORNER_nn(...)' fut change en               */
                                        /* 'GenOperator_P_4_____HORNER_1_nn(...)'...                                                 */
                                        /*                                                                                           */
                                        /* Le 20071003154549 le nom 'GenOperator_P_4_____HORNER_1_nn(...)' a ete change en           */
                                        /* 'GenOperator_PASSE_4_____HORNER_1_nn(...)' pour une meilleure lisibilite...               */
                                        /*                                                                                           */
                                        /* Le 20071004150158 'Liste_nn' a ete rebaptise 'Liste_nn_sans_a0' plus logique...           */
                                        /*                                                                                           */
                                        /* Jusqu'au 20071030114605, on trouvait ci-dessus :                                          */
                                        /*                                                                                           */
                                        /*                   #define   GenOperator_PASSE_4_____HORNER_1_nn(HORNER_1_nn,           \  */
                                        /*                                                                ,HORNER_1_nn_1          \  */
                                        /*                                                                ,Liste_nn_sans_a0       \  */
                                        /*                                                                 )                      \  */
                                        /*                   &define   HORNER_1_nn(x,Liste_nn_sans_a0,a0)                         \  */
                                        /*                                       AXPB(HORNER_1_nn_1(x,Liste_nn_sans_a0),x,a0)        */
                                        /*                                                                                           */
                                        /* mais l'utilisation de '$PASSE_4' etait incompatible avec le 'GooF', d'ou cette            */
                                        /* nouvelle definition avec la signification suivante des arguments de l'operateur           */
                                        /* 'GenOperator.PASSE.D.....HORNER_1_nn(...)' :                                              */
                                        /*                                                                                           */
                                        /*                  $1      : nom de l'operateur 'HORNER_1_??' a definir (de rang 'n'),      */
                                        /*                  $2      : nom de l'operateur 'HORNER_1_??' a utiliser (de rang 'n-1'),   */
                                        /*                  $3      : liste d'arguments sans le 'a0' (nombre variables d'elements),  */
                                        /*                                                                                           */
                                        /* ATTENTION : l'absence de "," apres 'GenOperator.PASSE.D.....HORNER_1_nn' donne a priori   */
                                        /* a 'GenOperator.PASSE.D.....HORNER_1_nn' une valeur vide. Or cela fait partie de mon       */
                                        /* modele de programmation. La modification 'v $xcc/cpp$Z 20070912133816' est destinee       */
                                        /* justement a deplacer la "," de debut de ligne pour la mettre a la fin de la ligne         */
                                        /* precedente et ainsi donner a 'GenOperator.PASSE.D.....HORNER_1_nn' la bonne definition... */
                                        /*                                                                                           */
                                        /* Le 20071030120852, il y a eu passage de '$PASSE_1' a '$PASSE_D' qui ouvre plus de         */
                                        /* portes...                                                                                 */
                                        /*                                                                                           */
                                        /* On notera la presence des "."s au lieu des "_"s dans les commentaires relatifs a cet      */
                                        /* operateur : cela est destine a bloquer l'action de '$m4' dans ces commentaires...         */

-define   HORNER_1_00(x,a0)                                                                                                             \
-_-_-_-             NEUT(a0)

GenOperator_PASSE_D_____HORNER_1_nn(HORNER_1_01,HORNER_1_00,++D++a1++F++)
GenOperator_PASSE_D_____HORNER_1_nn(HORNER_1_02,HORNER_1_01,++D++a2,a1++F++)
GenOperator_PASSE_D_____HORNER_1_nn(HORNER_1_03,HORNER_1_02,++D++a3,a2,a1++F++)
GenOperator_PASSE_D_____HORNER_1_nn(HORNER_1_04,HORNER_1_03,++D++a4,a3,a2,a1++F++)
GenOperator_PASSE_D_____HORNER_1_nn(HORNER_1_05,HORNER_1_04,++D++a5,a4,a3,a2,a1++F++)
GenOperator_PASSE_D_____HORNER_1_nn(HORNER_1_06,HORNER_1_05,++D++a6,a5,a4,a3,a2,a1++F++)
GenOperator_PASSE_D_____HORNER_1_nn(HORNER_1_07,HORNER_1_06,++D++a7,a6,a5,a4,a3,a2,a1++F++)
GenOperator_PASSE_D_____HORNER_1_nn(HORNER_1_08,HORNER_1_07,++D++a8,a7,a6,a5,a4,a3,a2,a1++F++)
GenOperator_PASSE_D_____HORNER_1_nn(HORNER_1_09,HORNER_1_08,++D++a9,a8,a7,a6,a5,a4,a3,a2,a1++F++)
                                        /* Definition recursive des polynomes de degre 0 a 9. Les procedures sont du type :          */
                                        /*                                                                                           */
                                        /*                  HORNER_1_00(x,a0)                                                        */
                                        /*                  HORNER_1_01(x,a1,a0)                                                     */
                                        /*                  HORNER_1_02(x,a2,a1,a0)                                                  */
                                        /*                  HORNER_1_03(x,a3,a2,a1,a0)                                               */
                                        /*                  HORNER_1_04(x,a4,a3,a2,a1,a0)                                            */
                                        /*                  HORNER_1_05(x,a5,a4,a3,a2,a1,a0)                                         */
                                        /*                  HORNER_1_06(x,a6,a5,a4,a3,a2,a1,a0)                                      */
                                        /*                  HORNER_1_07(x,a7,a6,a5,a4,a3,a2,a1,a0)                                   */
                                        /*                  HORNER_1_08(x,a8,a7,a6,a5,a4,a3,a2,a1,a0)                                */
                                        /*                  HORNER_1_09(x,a9,a8,a7,a6,a5,a4,a3,a2,a1,a0)                             */
                                        /*                                                                                           */
                                        /* en notant bien que la liste des coefficients est dans l'ordre des puissances              */
                                        /* decroissantes (de 9 a 0 dans le cas de 'HORNER_1_09(...)').                               */
                                        /*                                                                                           */
                                        /* Le 20070905104756, afin de prevoir des extensions dans un futur plus ou moins proche,     */
                                        /* les procedures 'HORNER?(...)' ont ete rebaptisees 'HORNER0?(...)', ce qui permettra       */
                                        /* donc de definir le degre 10 et au dela...                                                 */
                                        /*                                                                                           */
                                        /* Le 20070907130046, afin de prevoir une generation automatique des 'HORNER0?(...)'s,       */
                                        /* ces procedures ont ete rebaptisees (encore...) en 'HORNER_0?(...)'. Cette generation      */
                                        /* automatique fut introduite le 20070907132158...                                           */
                                        /*                                                                                           */
                                        /* Le 20071001143616, afin de prevoir des extensions dans un futur plus ou moins proche, les */
                                        /* procedures 'HORNER_0?(...)' ont ete rebaptisees (de nouveau...) en 'HORNER_1_0?(...)'.    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   P O L Y N O M E S   A   D E U X   V A R I A B L E S                                                    */
/*        P A R   L A   M E T H O D E   D E   H O R N E R  :                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definitions :                                                                                                              */
/*                                                                                                                                   */
/*                    Les differentes procedures s'appeleront                                                                        */
/*                  'HORNER_v_0n(...)' ou 'v' designe le nombre                                                                      */
/*                  de variables (v=1,2,3,4,...) et 'n' le degre                                                                     */
/*                  maximal relatif a chaque variable (n=1,2,3,...)                                                                  */
/*                  -et non pas le degre maximal des differents                                                                      */
/*                  produits des variables-.                                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Notations :                                                                                                                */
/*                                                                                                                                   */
/*                    Les polynomes sont definis                                                                                     */
/*                  matriciellement de la facon                                                                                      */
/*                  suivante :                                                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                               |    m    |    m-1  |    m-2  |         |    2    |    1    |    0                  */
/*                                               |   x     |   x     |   x     |  (...)  |   x     |   x     |   x                   */
/*                                      ---------+---------+---------+---------+---------+---------+---------+----------             */
/*                                          n    |         |         |         |         |         |         |                       */
/*                                         y     | a       | a       | a       |  (...)  | a       | a       | a                     */
/*                                               |  n,m    |  n,m-1  |  n,m-2  |         |  n,2    |  n,1    |  n,0                  */
/*                                      ---------+---------+---------+---------+---------+---------+---------+----------             */
/*                                          n-1  |         |         |         |         |         |         |                       */
/*                                         y     | a       | a       | a       |  (...)  | a       | a       | a                     */
/*                                               |  n-1,m  |  n-1,m-1|  n-1,m-2|         |  n-1,2  |  n-1,1  |  n-1,0                */
/*                                      ---------+---------+---------+---------+---------+---------+---------+----------             */
/*                                               |         |         |         |         |         |         |                       */
/*                                        (...)  |  (...)  |  (...)  |  (...)  |  (...)  |  (...)  |  (...)  |  (...)                */
/*                                               |         |         |         |         |         |         |                       */
/*                                      ---------+---------+---------+---------+---------+---------+---------+----------             */
/*                                          1    |         |         |         |         |         |         |                       */
/*                                         y     | a       | a       | a       |  (...)  | a       | a       | a                     */
/*                                               |  1,m    |  1,m-1  |  1,m-2  |         |  1,2    |  1,1    |  1,0                  */
/*                                      ---------+---------+---------+---------+---------+---------+---------+----------             */
/*                                          0    |         |         |         |         |         |         |                       */
/*                                         y     | a       | a       | a       |  (...)  | a       | a       | a                     */
/*                                               |  0,m    |  0,m-1  |  0,m-2  |         |  0,2    |  0,1    |  0,0                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  soit les polynomes :                                                                                             */
/*                                                                                                                                   */
/*                                                      m           m-1               0   n          n-1                  0          */
/*                                      P(x,y) = (a   .x  + a     .x    + ... + a   .x ).y  + (...).y    + (...) + (...).y           */
/*                                                 n,m       n,m-1               n,0                                                 */
/*                                                                                                                                   */
/*                                                 | |  ^                                 ^                                          */
/*                                                 | |__|                                 |                                          */
/*                                                 |______________________________________|                                          */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   HORNER_2_01(x,y,a11,a10,a01,a00)                                                                                              \
                    HORNER_1_01(y                                                                                                       \
                               ,HORNER_1_01(x,a11,a10)                                                                                  \
                               ,HORNER_1_01(x,a01,a00)                                                                                  \
                                )
#define   HORNER_2_02(x,y,a22,a21,a20,a12,a11,a10,a02,a01,a00)                                                                          \
                    HORNER_1_02(y                                                                                                       \
                               ,HORNER_1_02(x,a22,a21,a20)                                                                              \
                               ,HORNER_1_02(x,a12,a11,a10)                                                                              \
                               ,HORNER_1_02(x,a02,a01,a00)                                                                              \
                                )
#define   HORNER_2_03(x,y,a33,a32,a31,a30,a23,a22,a21,a20,a13,a12,a11,a10,a03,a02,a01,a00)                                              \
                    HORNER_1_03(y                                                                                                       \
                               ,HORNER_1_03(x,a33,a32,a31,a30)                                                                          \
                               ,HORNER_1_03(x,a23,a22,a21,a20)                                                                          \
                               ,HORNER_1_03(x,a13,a12,a11,a10)                                                                          \
                               ,HORNER_1_03(x,a03,a02,a01,a00)                                                                          \
                                )
                                        /* Les procedures 'HORNER_2_01(...)', 'HORNER_2_02(...)' et 'HORNER_2_03(...)' furent        */
                                        /* introduites le 20071001144554...                                                          */
#define   HORNER_2_04(x,y,a44,a43,a42,a41,a40,a34,a33,a32,a31,a30,a24,a23,a22,a21,a20,a14,a13,a12,a11,a10,a04,a03,a02,a01,a00)          \
                    HORNER_1_04(y                                                                                                       \
                               ,HORNER_1_04(x,a44,a43,a42,a41,a40)                                                                      \
                               ,HORNER_1_04(x,a34,a33,a32,a31,a30)                                                                      \
                               ,HORNER_1_04(x,a24,a23,a22,a21,a20)                                                                      \
                               ,HORNER_1_04(x,a14,a13,a12,a11,a10)                                                                      \
                               ,HORNER_1_04(x,a04,a03,a02,a01,a00)                                                                      \
                                )                                                                                                       \
                                        /* La procedure 'HORNER_2_04(...)' a ete introduite le 20071002095954...                     */
                                        /*                                                                                           */
                                        /* Voir le 20181119121510 la validation 'v $xiii/tri_image$FON 20181119120731' de cette      */
                                        /* procedure 'HORNER_2_04(...)'.                                                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   P O L Y N O M E S   A   T R O I S   V A R I A B L E S                                                  */
/*        P A R   L A   M E T H O D E   D E   H O R N E R  :                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definitions :                                                                                                              */
/*                                                                                                                                   */
/*                    Les differentes procedures s'appeleront                                                                        */
/*                  'HORNER_v_0n(...)' ou 'v' designe le nombre                                                                      */
/*                  de variables (v=1,2,3,4,...) et 'n' le degre                                                                     */
/*                  maximal relatif a chaque variable (n=1,2,3,...)                                                                  */
/*                  -et non pas le degre maximal des differents                                                                      */
/*                  produits des variables-.                                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Notations :                                                                                                                */
/*                                                                                                                                   */
/*                    Les polynomes sont definis de                                                                                  */
/*                  la facon suivante :                                                                                              */
/*                                                                                                                                   */
/*                                                 m             m-1                 0   n          n-1           p                  */
/*                            P(x,y,z) = [(a     .x  + a       .x    + ... + a     .x ).y  + (...).y    + (...)].z  + (...)          */
/*                                          p,n,m       p,n,m-1               p,n,0                                                  */
/*                                                                                                                                   */
/*                                          | | |  ^                                     ^                        ^                  */
/*                                          | | |__|                                     |                        |                  */
/*                                          | |__________________________________________|                        |                  */
/*                                          |_____________________________________________________________________|                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    Ainsi, par exemple, on notera le 20171020182529                                                                */
/*                  que 'HORNER_3_01(x,y,z,...)' est bien :                                                                          */
/*                                                                                                                                   */
/*                                      (((((a111*x)+a110)*y)+((a101*x)+a100))*z)+((((a011*x)+a010)*y)+((a001*x)+a000))              */
/*                                                                                                                                   */
/*                  ou bien encore :                                                                                                 */
/*                                                                                                                                   */
/*                                      ([({(a111*x)+a110}*y)+{(a101*x)+a100}]*z)+[({(a011*x)+a010}*y)+{(a001*x)+a000}]              */
/*                                                                                                                                   */
/*                                      |||||      |     |  | ||      |     ||  | ||||      |     |  | ||      |     ||              */
/*                                      |||| ------      |  | | ------      ||  | ||| ------      |  | | ------      ||              */
/*                                      ||||             |  | |             ||  | |||             |  | |             ||              */
/*                                      ||| -------------   |  ------------- |  | || -------------   |  ------------- |              */
/*                                      |||                 |                |  | ||                 |                |              */
/*                                      || -----------------                 |  | | -----------------                 |              */
/*                                      ||                                   |  | |                                   |              */
/*                                      | -----------------------------------   | |                                   |              */
/*                                      |                                       | |                                   |              */
/*                                       ---------------------------------------   -----------------------------------               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  et pour faire, par exemple, la somme 'x+y+z', on                                                                 */
/*                  choisira :                                                                                                       */
/*                                                                                                                                   */
/*                                      a111=0                                                                                       */
/*                                      a110=0                                                                                       */
/*                                      a101=0                                                                                       */
/*                                      a100=1    -->       z                                                                        */
/*                                                                                                                                   */
/*                                      a011=0                                                                                       */
/*                                      a010=1    -->       y                                                                        */
/*                                                                                                                                   */
/*                                      a001=1    -->       x                                                                        */
/*                                                                                                                                   */
/*                                      a000=0                                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   HORNER_3_01(x,y,z                                                                                                             \
                     ,a111,a110,a101,a100                                                                                               \
                     ,a011,a010,a001,a000                                                                                               \
                      )                                                                                                                 \
                    HORNER_1_01(z                                                                                                       \
                               ,HORNER_2_01(x,y,a111,a110,a101,a100)                                                                    \
                               ,HORNER_2_01(x,y,a011,a010,a001,a000)                                                                    \
                                )
#define   HORNER_3_02(x,y,z                                                                                                             \
                     ,a222,a221,a220,a212,a211,a210,a202,a201,a200                                                                      \
                     ,a122,a121,a120,a112,a111,a110,a102,a101,a100                                                                      \
                     ,a022,a021,a020,a012,a011,a010,a002,a001,a000                                                                      \
                      )                                                                                                                 \
                    HORNER_1_02(z                                                                                                       \
                               ,HORNER_2_02(x,y,a222,a221,a220,a212,a211,a210,a202,a201,a200)                                           \
                               ,HORNER_2_02(x,y,a122,a121,a120,a112,a111,a110,a102,a101,a100)                                           \
                               ,HORNER_2_02(x,y,a022,a021,a020,a012,a011,a010,a002,a001,a000)                                           \
                                )
#define   HORNER_3_03(x,y,z                                                                                                             \
                     ,a333,a332,a331,a330,a323,a322,a321,a320,a313,a312,a311,a310,a303,a302,a301,a300                                   \
                     ,a233,a232,a231,a230,a223,a222,a221,a220,a213,a212,a211,a210,a203,a202,a201,a200                                   \
                     ,a133,a132,a131,a130,a123,a122,a121,a120,a113,a112,a111,a110,a103,a102,a101,a100                                   \
                     ,a033,a032,a031,a030,a023,a022,a021,a020,a013,a012,a011,a010,a003,a002,a001,a000                                   \
                      )                                                                                                                 \
                    HORNER_1_03(z                                                                                                       \
                               ,HORNER_2_03(x,y,a333,a332,a331,a330,a323,a322,a321,a320,a313,a312,a311,a310,a303,a302,a301,a300)        \
                               ,HORNER_2_03(x,y,a233,a232,a231,a230,a223,a222,a221,a220,a213,a212,a211,a210,a203,a202,a201,a200)        \
                               ,HORNER_2_03(x,y,a133,a132,a131,a130,a123,a122,a121,a120,a113,a112,a111,a110,a103,a102,a101,a100)        \
                               ,HORNER_2_03(x,y,a033,a032,a031,a030,a023,a022,a021,a020,a013,a012,a011,a010,a003,a002,a001,a000)        \
                                )
                                        /* Les procedures 'HORNER_3_01(...)', 'HORNER_3_02(...)' et 'HORNER_3_03(...)' furent        */
                                        /* introduites le 20071026112951...                                                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   P O L Y N O M E S   A   Q U A T R E   V A R I A B L E S                                                */
/*        P A R   L A   M E T H O D E   D E   H O R N E R  :                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definitions :                                                                                                              */
/*                                                                                                                                   */
/*                    Les differentes procedures s'appeleront                                                                        */
/*                  'HORNER_v_0n(...)' ou 'v' designe le nombre                                                                      */
/*                  de variables (v=1,2,3,4,...) et 'n' le degre                                                                     */
/*                  maximal relatif a chaque variable (n=1,2,3,...)                                                                  */
/*                  -et non pas le degre maximal des differents                                                                      */
/*                  produits des variables-.                                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Notations :                                                                                                                */
/*                                                                                                                                   */
/*                    Les polynomes sont definis de                                                                                  */
/*                  la facon suivante :                                                                                              */
/*                                                                                                                                   */
/*                                       m               m-1                   0   n          n-1           p           q            */
/*             P(x,y,z,t) = {[(a       .x  + a         .x    + ... + a       .x ).y  + (...).y    + (...)].z  + (...)}.t  + (...)    */
/*                              q,p,n,m       q,p,n,m-1               q,p,n,0                                                        */
/*                                                                                                                                   */
/*                              | | | |  ^                                         ^                        ^           ^            */
/*                              | | | |__|                                         |                        |           |            */
/*                              | | |______________________________________________|                        |           |            */
/*                              | |_________________________________________________________________________|           |            */
/*                              |_______________________________________________________________________________________|            */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    On notera le 20181210122013                                                                                    */
/*                  que 'HORNER_4_01(x,y,z,t,...)' est bien :                                                                        */
/*                                                                                                                                   */
/*                            {([aF*x+aE]*y+aD*x+aC)*z+({aB*x+aA}*y+a9*x+a8)}*t+([a7*x+a6]*y+a5*x+a4)*z+([a3*x+a2]*y+a1*x+a0)        */
/*                            |||       |          |   ||       |          ||   ||       |          |   ||       |          |        */
/*                            || -------           |   | -------           ||   | -------           |   | -------           |        */
/*                            | -------------------     ------------------- |    -------------------     -------------------         */
/*                             ---------------------------------------------                                                         */
/*                                                                                                                                   */
/*                  et ce en utilisant un codage hexa-decimal des                                                                    */
/*                  differents coefficients (pour des raisons liees                                                                  */
/*                  a la longueur des lignes...) :                                                                                   */
/*                                                                                                                                   */
/*                                      a1111 --> aF                                                                                 */
/*                                      a1110 --> aE                                                                                 */
/*                                      a1101 --> aD                                                                                 */
/*                                      a1100 --> aC                                                                                 */
/*                                      a1011 --> aB                                                                                 */
/*                                      a1010 --> aA                                                                                 */
/*                                      a1001 --> a9                                                                                 */
/*                                      a1000 --> a8                                                                                 */
/*                                      a0111 --> a7                                                                                 */
/*                                      a0110 --> a6                                                                                 */
/*                                      a0101 --> a5                                                                                 */
/*                                      a0100 --> a4                                                                                 */
/*                                      a0011 --> a3                                                                                 */
/*                                      a0010 --> a2                                                                                 */
/*                                      a0001 --> a1                                                                                 */
/*                                      a0000 --> a0                                                                                 */
/*                                                                                                                                   */
/*                  et pour faire, par exemple, la somme 'x+y+z+t', on                                                               */
/*                  choisira tous les coefficients 'a' nuls, sauf :                                                                  */
/*                                                                                                                                   */
/*                                      a1 = a0001 = 1  --> x                                                                        */
/*                                      a2 = a0010 = 1  --> y                                                                        */
/*                                      a4 = a0100 = 1  --> z                                                                        */
/*                                      a8 = a1000 = 1  --> t                                                                        */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   HORNER_4_01(x,y,z,t                                                                                                           \
                     ,a1111,a1110,a1101,a1100,a1011,a1010,a1001,a1000                                                                   \
                     ,a0111,a0110,a0101,a0100,a0011,a0010,a0001,a0000                                                                   \
                      )                                                                                                                 \
                    HORNER_1_01(t                                                                                                       \
                               ,HORNER_3_01(x,y,z,a1111,a1110,a1101,a1100,a1011,a1010,a1001,a1000)                                      \
                               ,HORNER_3_01(x,y,z,a0111,a0110,a0101,a0100,a0011,a0010,a0001,a0000)                                      \
                                )                                                                                                       \
                                        /* La procedure 'HORNER_4_01(...)' a ete introduite le 20071026114253...                     */
#define   HORNER_4_02(x,y,z,t                                                                                                           \
                     ,a2222,a2221,a2220,a2212,a2211,a2210,a2202,a2201,a2200                                                             \
                     ,a2122,a2121,a2120,a2112,a2111,a2110,a2102,a2101,a2100                                                             \
                     ,a2022,a2021,a2020,a2012,a2011,a2010,a2002,a2001,a2000                                                             \
                     ,a1222,a1221,a1220,a1212,a1211,a1210,a1202,a1201,a1200                                                             \
                     ,a1122,a1121,a1120,a1112,a1111,a1110,a1102,a1101,a1100                                                             \
                     ,a1022,a1021,a1020,a1012,a1011,a1010,a1002,a1001,a1000                                                             \
                     ,a0222,a0221,a0220,a0212,a0211,a0210,a0202,a0201,a0200                                                             \
                     ,a0122,a0121,a0120,a0112,a0111,a0110,a0102,a0101,a0100                                                             \
                     ,a0022,a0021,a0020,a0012,a0011,a0010,a0002,a0001,a0000                                                             \
                      )                                                                                                                 \
                    HORNER_1_02(t                                                                                                       \
                               ,HORNER_3_02(x,y,z                                                                                       \
                                           ,a2222,a2221,a2220,a2212,a2211,a2210,a2202,a2201,a2200                                       \
                                           ,a2122,a2121,a2120,a2112,a2111,a2110,a2102,a2101,a2100                                       \
                                           ,a2022,a2021,a2020,a2012,a2011,a2010,a2002,a2001,a2000                                       \
                                            )                                                                                           \
                               ,HORNER_3_02(x,y,z                                                                                       \
                                           ,a1222,a1221,a1220,a1212,a1211,a1210,a1202,a1201,a1200                                       \
                                           ,a1122,a1121,a1120,a1112,a1111,a1110,a1102,a1101,a1100                                       \
                                           ,a1022,a1021,a1020,a1012,a1011,a1010,a1002,a1001,a1000                                       \
                                            )                                                                                           \
                               ,HORNER_3_02(x,y,z                                                                                       \
                                           ,a0222,a0221,a0220,a0212,a0211,a0210,a0202,a0201,a0200                                       \
                                           ,a0122,a0121,a0120,a0112,a0111,a0110,a0102,a0101,a0100                                       \
                                           ,a0022,a0021,a0020,a0012,a0011,a0010,a0002,a0001,a0000                                       \
                                            )                                                                                           \
                                )                                                                                                       \
                                        /* La procedure 'HORNER_4_02(...)' a ete introduite le 20181210102632...                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   P O L Y N O M E S   A   C I N Q   V A R I A B L E S   ( E T   P L U S )                                */
/*        P A R   L A   M E T H O D E   D E   H O R N E R  :                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definitions :                                                                                                              */
/*                                                                                                                                   */
/*                    Les differentes procedures s'appeleront                                                                        */
/*                  'HORNER_v_0n(...)' ou 'v' designe le nombre                                                                      */
/*                  de variables (v=1,2,3,4,...) et 'n' le degre                                                                     */
/*                  maximal relatif a chaque variable (n=1,2,3,...)                                                                  */
/*                  -et non pas le degre maximal des differents                                                                      */
/*                  produits des variables-.                                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   HORNER_5_01(x,y,z,t,u                                                                                                         \
                     ,a11111,a11110,a11101,a11100,a11011,a11010,a11001,a11000                                                           \
                     ,a10111,a10110,a10101,a10100,a10011,a10010,a10001,a10000                                                           \
                     ,a01111,a01110,a01101,a01100,a01011,a01010,a01001,a01000                                                           \
                     ,a00111,a00110,a00101,a00100,a00011,a00010,a00001,a00000                                                           \
                      )                                                                                                                 \
                    HORNER_1_01(u                                                                                                       \
                               ,HORNER_4_01(x,y,z,t                                                                                     \
                                           ,a11111,a11110,a11101,a11100,a11011,a11010,a11001,a11000                                     \
                                           ,a10111,a10110,a10101,a10100,a10011,a10010,a10001,a10000                                     \
                                            )                                                                                           \
                               ,HORNER_4_01(x,y,z,t                                                                                     \
                                           ,a01111,a01110,a01101,a01100,a01011,a01010,a01001,a01000                                     \
                                           ,a00111,a00110,a00101,a00100,a00011,a00010,a00001,a00000                                     \
                                            )                                                                                           \
                                )                                                                                                       \
                                        /* La procedure 'HORNER_5_01(...)' a ete introduite le 20071028115705...                     */

#define   HORNER_6_01(x,y,z,t,u,v                                                                                                       \
                     ,a111111,a111110,a111101,a111100,a111011,a111010,a111001,a111000                                                   \
                     ,a110111,a110110,a110101,a110100,a110011,a110010,a110001,a110000                                                   \
                     ,a101111,a101110,a101101,a101100,a101011,a101010,a101001,a101000                                                   \
                     ,a100111,a100110,a100101,a100100,a100011,a100010,a100001,a100000                                                   \
                     ,a011111,a011110,a011101,a011100,a011011,a011010,a011001,a011000                                                   \
                     ,a010111,a010110,a010101,a010100,a010011,a010010,a010001,a010000                                                   \
                     ,a001111,a001110,a001101,a001100,a001011,a001010,a001001,a001000                                                   \
                     ,a000111,a000110,a000101,a000100,a000011,a000010,a000001,a000000                                                   \
                      )                                                                                                                 \
                    HORNER_1_01(v                                                                                                       \
                               ,HORNER_5_01(x,y,z,t,u                                                                                   \
                                           ,a111111,a111110,a111101,a111100,a111011,a111010,a111001,a111000                             \
                                           ,a110111,a110110,a110101,a110100,a110011,a110010,a110001,a110000                             \
                                           ,a101111,a101110,a101101,a101100,a101011,a101010,a101001,a101000                             \
                                           ,a100111,a100110,a100101,a100100,a100011,a100010,a100001,a100000                             \
                                            )                                                                                           \
                               ,HORNER_5_01(x,y,z,t,u                                                                                   \
                                           ,a011111,a011110,a011101,a011100,a011011,a011010,a011001,a011000                             \
                                           ,a010111,a010110,a010101,a010100,a010011,a010010,a010001,a010000                             \
                                           ,a001111,a001110,a001101,a001100,a001011,a001010,a001001,a001000                             \
                                           ,a000111,a000110,a000101,a000100,a000011,a000010,a000001,a000000                             \
                                            )                                                                                           \
                                )                                                                                                       \
                                        /* La procedure 'HORNER_6_01(...)' a ete introduite le 20071028115705...                     */

#define   HORNER_7_01(x,y,z,t,u,v,w                                                                                                     \
                     ,a1111111,a1111110,a1111101,a1111100,a1111011,a1111010,a1111001,a1111000                                           \
                     ,a1110111,a1110110,a1110101,a1110100,a1110011,a1110010,a1110001,a1110000                                           \
                     ,a1101111,a1101110,a1101101,a1101100,a1101011,a1101010,a1101001,a1101000                                           \
                     ,a1100111,a1100110,a1100101,a1100100,a1100011,a1100010,a1100001,a1100000                                           \
                     ,a1011111,a1011110,a1011101,a1011100,a1011011,a1011010,a1011001,a1011000                                           \
                     ,a1010111,a1010110,a1010101,a1010100,a1010011,a1010010,a1010001,a1010000                                           \
                     ,a1001111,a1001110,a1001101,a1001100,a1001011,a1001010,a1001001,a1001000                                           \
                     ,a1000111,a1000110,a1000101,a1000100,a1000011,a1000010,a1000001,a1000000                                           \
                     ,a0111111,a0111110,a0111101,a0111100,a0111011,a0111010,a0111001,a0111000                                           \
                     ,a0110111,a0110110,a0110101,a0110100,a0110011,a0110010,a0110001,a0110000                                           \
                     ,a0101111,a0101110,a0101101,a0101100,a0101011,a0101010,a0101001,a0101000                                           \
                     ,a0100111,a0100110,a0100101,a0100100,a0100011,a0100010,a0100001,a0100000                                           \
                     ,a0011111,a0011110,a0011101,a0011100,a0011011,a0011010,a0011001,a0011000                                           \
                     ,a0010111,a0010110,a0010101,a0010100,a0010011,a0010010,a0010001,a0010000                                           \
                     ,a0001111,a0001110,a0001101,a0001100,a0001011,a0001010,a0001001,a0001000                                           \
                     ,a0000111,a0000110,a0000101,a0000100,a0000011,a0000010,a0000001,a0000000                                           \
                      )                                                                                                                 \
                    HORNER_1_01(w                                                                                                       \
                               ,HORNER_6_01(x,y,z,t,u,v                                                                                 \
                                           ,a1111111,a1111110,a1111101,a1111100,a1111011,a1111010,a1111001,a1111000                     \
                                           ,a1110111,a1110110,a1110101,a1110100,a1110011,a1110010,a1110001,a1110000                     \
                                           ,a1101111,a1101110,a1101101,a1101100,a1101011,a1101010,a1101001,a1101000                     \
                                           ,a1100111,a1100110,a1100101,a1100100,a1100011,a1100010,a1100001,a1100000                     \
                                           ,a1011111,a1011110,a1011101,a1011100,a1011011,a1011010,a1011001,a1011000                     \
                                           ,a1010111,a1010110,a1010101,a1010100,a1010011,a1010010,a1010001,a1010000                     \
                                           ,a1001111,a1001110,a1001101,a1001100,a1001011,a1001010,a1001001,a1001000                     \
                                           ,a1000111,a1000110,a1000101,a1000100,a1000011,a1000010,a1000001,a1000000                     \
                                            )                                                                                           \
                               ,HORNER_6_01(x,y,z,t,u,v                                                                                 \
                                           ,a0111111,a0111110,a0111101,a0111100,a0111011,a0111010,a0111001,a0111000                     \
                                           ,a0110111,a0110110,a0110101,a0110100,a0110011,a0110010,a0110001,a0110000                     \
                                           ,a0101111,a0101110,a0101101,a0101100,a0101011,a0101010,a0101001,a0101000                     \
                                           ,a0100111,a0100110,a0100101,a0100100,a0100011,a0100010,a0100001,a0100000                     \
                                           ,a0011111,a0011110,a0011101,a0011100,a0011011,a0011010,a0011001,a0011000                     \
                                           ,a0010111,a0010110,a0010101,a0010100,a0010011,a0010010,a0010001,a0010000                     \
                                           ,a0001111,a0001110,a0001101,a0001100,a0001011,a0001010,a0001001,a0001000                     \
                                           ,a0000111,a0000110,a0000101,a0000100,a0000011,a0000010,a0000001,a0000000                     \
                                            )                                                                                           \
                                )                                                                                                       \
                                        /* La procedure 'HORNER_7_01(...)' a ete introduite le 20071028115705...                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O C E D U R E   D E   T R I   D ' U N E   L I S T E   Q U E L C O N Q U E                                              */
/*        F O N C T I O N N A N T   E N   ' N '   A U   C A R R E  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* Ce code de tri a ete deplace depuis '$xrv/champs_5.11$I' le 20010215162028 dans le but    */
                                        /* (peut-etre...) d'etendre les modeles d'Ising bi- et tridimensionnels a des noyaux de      */
                                        /* taille quelconque ('v $xiii/di_image$FON Imodele_d_Ising_2D_a_temperature_locale' et      */
                                        /* 'v $xiii/di_album$FON Amodele_d_Ising_3D_a_temperature_locale') en s'inspirant du         */
                                        /* parcours d'un cube tel qu'il est programme dans 'v $xtc/ParcoCube.12$c' et qui demande    */
                                        /* un tri afin de classer les points par distance croissante depuis le "centre"...           */

#nodefine NOMBRE_RAISONNABLE_MAXIMAL_D_ELEMENTS_DANS_TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE                                      \
                    DIX_MILLE
#nodefine NOMBRE_RAISONNABLE_MAXIMAL_D_ELEMENTS_DANS_TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE                                      \
                    GRO5(DIX_MILLE)
#nodefine NOMBRE_RAISONNABLE_MAXIMAL_D_ELEMENTS_DANS_TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE                                      \
                    GRO10(DIX_MILLE)
                                        /* Seuil un peu arbitraire (car il devrait en fait dependre des performances locales...)     */
                                        /* permettant d'avertir que cela risque d'etre long si plus d'elements sont a trier...       */
                                        /*                                                                                           */
                                        /* Le 20041111083342, devant l'amelioration constante des performances des MACHINEs, je      */
                                        /* suis passe de 10000 a 50000.                                                              */
                                        /*                                                                                           */
                                        /* Le 20120508144654, devant l'amelioration constante des performances des MACHINEs, je      */
                                        /* suis passe de 50000 a 100000.                                                             */
                                        /*                                                                                           */
                                        /* Le 20220405110034 a ete introduit ci-dessous une dependance vis a vis de '$sHOTE'...      */

#if       (         (defined(LACT1A))                                                                                                   \
           )
                                        /* Introduit le 20240322132346...                                                            */
#    define    NOMBRE_RAISONNABLE_MAXIMAL_D_ELEMENTS_DANS_TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE                                 \
                         GRO3(GRO14(DIX_MILLE))
#Aif      (         (defined(LACT1A))                                                                                                   \
           )
#Eif      (         (defined(LACT1A))                                                                                                   \
           )

#if       (         (defined(LACT1B))                                                                                                   \
           )
                                        /* Introduit le 20220405110034...                                                            */
#    nodefine  NOMBRE_RAISONNABLE_MAXIMAL_D_ELEMENTS_DANS_TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE                                 \
                         GRO12(DIX_MILLE)
#    nodefine  NOMBRE_RAISONNABLE_MAXIMAL_D_ELEMENTS_DANS_TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE                                 \
                         GRO16(DIX_MILLE)
#    nodefine  NOMBRE_RAISONNABLE_MAXIMAL_D_ELEMENTS_DANS_TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE                                 \
                         GRO2(GRO13(DIX_MILLE))
#    define    NOMBRE_RAISONNABLE_MAXIMAL_D_ELEMENTS_DANS_TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE                                 \
                         GRO3(GRO14(DIX_MILLE))
                                        /* Le 20220405135807, passage de 'GRO12(...)' a 'GRO16(...)'...                              */
                                        /*                                                                                           */
                                        /* Le 20220419142706, passage de 'GRO16(...)' a 'GRO2(GRO13(...))' lors du calcul de         */
                                        /* l'image 'v $xiirv/PEAN.36'...                                                             */
                                        /*                                                                                           */
                                        /* Le 20220429121700, passage de 'GRO2(GRO13(...)' a 'GRO3(GRO14(...))' lors du calcul de    */
                                        /* l'image 'v $xiirv/PEAN.75'...                                                             */
#Aif      (         (defined(LACT1B))                                                                                                   \
           )
#Eif      (         (defined(LACT1B))                                                                                                   \
           )

#ifndef   NOMBRE_RAISONNABLE_MAXIMAL_D_ELEMENTS_DANS_TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE
#    define    NOMBRE_RAISONNABLE_MAXIMAL_D_ELEMENTS_DANS_TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE                                 \
                         GRO10(DIX_MILLE)
#Aifndef  NOMBRE_RAISONNABLE_MAXIMAL_D_ELEMENTS_DANS_TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE
#Eifndef  NOMBRE_RAISONNABLE_MAXIMAL_D_ELEMENTS_DANS_TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE

#define   TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE(liste_a_trier,liste_index,premier_element,NEUT_dernier_element,AccesListe)      \
                                        /* Le 20020828170851 j'ai fait en sorte que l'argument '????_dernier_element' pointe bien    */ \
                                        /* sur le dernier element de la liste et non pas sur son successeur, d'ou le remplacement    */ \
                                        /* d'operateurs 'PRED(...)' et 'SUCC(...)' par des 'NEUT(...)'.                              */ \
                                        /*                                                                                           */ \
                                        /* Je rappelle le 20220804102408 que la procedure argument 'AccesListe(...)' demande         */ \
                                        /* deux arguments, ce qui fait que 'IdTb1(...)' (qui en demande trois) ne peut etre          */ \
                                        /* utilisee ici. C'est ce qui a implique l'introduction de la procedure 'IdTb1sd(..)'        */ \
                                        /* ('v $xil/defi_c1$vv$DEF IdTb1sd', "sd"="Sans Dimension") qui n'en demande que deux...     */ \
                    Bblock                                                                                                              \
                    DEFV(Int,INIT(dernier_element,NEUT(NEUT_dernier_element)));                                                         \
                                        /* Definition locale du dernier element.                                                     */ \
                                                                                                                                        \
                    Test(IFGT(NBRE(premier_element,NEUT_dernier_element)                                                                \
                             ,NOMBRE_RAISONNABLE_MAXIMAL_D_ELEMENTS_DANS_TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE                  \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Ce test a ete introduit le 20020630000808 pour eviter d'attendre dans l'inquietude        */ \
                                        /* des programmes essayant de trier ainsi trop de nombres. Cela s'est vu le 20020628160000   */ \
                                        /* avec pas de loin de 400000 particules dans 'v $xrv/particule.10$K'...                     */ \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE_____editer_le_message_de_duree_excessive))          \
                                        /* Ce test a ete introduit le 20120509093458...                                              */ \
                              Bblock                                                                                                    \
                              PRINT_ATTENTION("un tri en mode 'N_AU_CARRE' a ete demande et risque de durer longtemps");                \
                              CAL1(Prer2("(il y a en effet %d elements a trier alors qu'il vaut mieux ne pas exceder %d)\n"             \
                                        ,NBRE(premier_element,NEUT_dernier_element)                                                     \
                                        ,NOMBRE_RAISONNABLE_MAXIMAL_D_ELEMENTS_DANS_TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE       \
                                         )                                                                                              \
                                   );                                                                                                   \
                              PRINT_ATTENTION("il est donc suggere d'utiliser le tri 'N_LOG_N'");                                       \
                              CAL1(Prer2("(via l'option 'N_au_carre=%s' ou de facon equivalente 'N_log_N=%s')\n"                        \
                                        ,C_FAUX____                                                                                     \
                                        ,C_VRAI____                                                                                     \
                                         )                                                                                              \
                                   );                                                                                                   \
                                        /* Le message "...via l'option 'N_au_carre=FAUX'" a ete modifie le 20041110100707 car, en    */ \
                                        /* effet, cette option "N_au_carre=" ne fait pas partie des options qui sont definies dans   */ \
                                        /* 'v $xig/fonct$vv$DEF GET_ARGUMENTSi' ; elle est en fait definie "a un niveau superieur",  */ \
                                        /* dans 'v $xrv/champs_5.1A$I N_au_carre'...                                                 */ \
                              PRINT_ATTENTION("mais le tri 'N_AU_CARRE' a l'avantage de conserver l'ordre d'une liste deja triee");     \
                                        /* Malgre tout, le tri en mode 'N_AU_CARRE' presente l'avantage de conserver l'ordre des     */ \
                                        /* listes deja triees, ce qui permet une meilleure qualite visuelle des images que l'on      */ \
                                        /* genere par ce moyen...                                                                    */ \
                                        /*                                                                                           */ \
                                        /* Aux environs du 20181226080911 lors de la generation de l'image 'v $xiirv/CARR.35', des   */ \
                                        /* tests sur '$LACT1A' avec :                                                                */ \
                                        /*                                                                                           */ \
                                        /*                  set       _____DistanceMini=0.001                                        */ \
                                        /*                  set       _____NAuCarre=VRAI                                             */ \
                                        /*                                                                                           */ \
                                        /* ('v $xiirv/$Fnota Debut_listG_CARR_35') faisaient des tris de listes contenant            */ \
                                        /* 568800 elements. La duree de ces tris etait de l'ordre de 00:06:21 ce qui est tout        */ \
                                        /* a fait raisonnable...                                                                     */ \
                              PRINT_ATTENTION("voir a ce propos le programme 'v $xtKg/tri.02$K' qui fait des tests de performance");    \
                                        /* Introduit le 20181227091707...                                                            */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IFGT(dernier_element,premier_element))                                                                         \
                                        /* Ce test verifiant qu'il y a plus d'un element dans la liste a ete introduit le            */ \
                                        /* 20011017144259 car il manquait...                                                         */ \
                         Bblock                                                                                                         \
                         DEFV(Int,INIT(index_de_debut_de_permutation,UNDEF));                                                           \
                         DEFV(Int,INIT(index_de_fin_de_permutation,UNDEF));                                                             \
                                        /* Index de permutation destines a trier la liste des points tel que le point le plus        */ \
                                        /* eloigne ('Z' tendant vers moins l'infini) se retrouve le premier de la liste...           */ \
                                        /*                                                                                           */ \
                                        /* Ces indices varient de la facon suivante, ou :                                            */ \
                                        /*                                                                                           */ \
                                        /* debut  : designe 'index_de_debut_de_permutation',                                         */ \
                                        /* fin    : designe 'index_de_fin_de_permutation',                                           */ \
                                        /*                                                                                           */ \
                                        /*                                                                                           */ \
                                        /*                   ---- premier_element                                                    */ \
                                        /*                  |                                       dernier_element ----             */ \
                                        /*                  |                                                           |            */ \
                                        /*                 \|/                                                          |            */ \
                                        /*                  .                                                           |            */ \
                                        /*                  + <------------------------- fin <--------------- +         |            */ \
                                        /*                  |                             |                   |        \|/           */ \
                                        /*                  |                             |                   |         .            */ \
                                        /*                  |                             |                   |                      */ \
                                        /*                  0         1         2       (...)      N-3       N-2       N-1           */ \
                                        /*                  .         .         .         |         .         .                      */ \
                                        /*                  .         .         .         |         .         *                      */ \
                                        /*                  .         .         .         |         .                                */ \
                                        /*                  .         .         .        \|/        *                                */ \
                                        /*                  .         .         .         .                                          */ \
                                        /*                  .         .         .         *                                          */ \
                                        /*                  .         .         .         |                                          */ \
                                        /*                  .         .         *         |                                          */ \
                                        /*                  .         .                   |                                          */ \
                                        /*                  .         *                   |                                          */ \
                                        /*                  .                             |                                          */ \
                                        /*                  *                             |                                          */ \
                                        /*                  |                             |                                          */ \
                                        /*                  |                             |                                          */ \
                                        /*                  |                             |                                          */ \
                                        /*                  + -------> balayage --------> +                                          */ \
                                        /*                debut                          fin                                         */ \
                                        /*                                                                                           */ \
                                        /* Ainsi, on explore un triangle "inferieur" de plus en plus petit : le premier (le plus     */ \
                                        /* grand) est [0,N-2] ce qui correspond au tri des points [0,...N-1], et le dernier (le      */ \
                                        /* plus petit) est [0,0] ce qui correspond au tri des points [0,1]...                        */ \
                                                                                                                                        \
                         DoDe(index_de_fin_de_permutation,premier_element,PRED(dernier_element),I)                                      \
                                        /* Un deuxieme 'PRED(...)' a ete introduit le 20011017144259 car il manquait ; en effet,     */ \
                                        /* il y a ci-apres un 'SUCC(index_de_debut_de_permutation)' qui implique que l'on s'arrete   */ \
                                        /* sur l'avant-dernier element (soit 'PRED(dernier_element)').                               */ \
                              Bblock                                                                                                    \
                              DoIn(index_de_debut_de_permutation,premier_element,index_de_fin_de_permutation,I)                         \
                                   Bblock                                                                                               \
                                   DEFV(Int,INIT(index_1_de_permutation                                                                 \
                                                ,INTE(AccesListe(liste_index,NEUT(index_de_debut_de_permutation)))                      \
                                                 )                                                                                      \
                                        );                                                                                              \
                                   DEFV(Int,INIT(index_2_de_permutation                                                                 \
                                                ,INTE(AccesListe(liste_index,SUCC(index_de_debut_de_permutation)))                      \
                                                 )                                                                                      \
                                        );                                                                                              \
                                        /* Index de permutation destines a permuter les deux elements courants de la liste.          */ \
                                                                                                                                        \
                                   Test(IFGc(AccesListe(liste_a_trier,index_1_de_permutation)                                           \
                                            ,AccesListe(liste_a_trier,index_2_de_permutation)                                           \
                                            ,TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE_____faire_un_IFGT                            \
                                             )                                                                                          \
                                        )                                                                                               \
                                        /* Le 'IFGT(...)' a ete remplace par un 'IFGc(...)' le 20020828144254 afin de permettre      */ \
                                        /* d'inverser l'ordre d'une liste contenant des elements tous identiques. Cela a ete rendu   */ \
                                        /* necessaire pour generer la sequence :                                                     */ \
                                        /*                                                                                           */ \
                                        /*                  xivPdf 12 1 / 012801_013312                                              */ \
                                        /*                                                                                           */ \
                                        /* pour laquelle toutes les coordonnees 'Z' sont identiques ; cela implique par defaut       */ \
                                        /* une absence de tri. Or cette liste contenait 'N' positions successives d'une meme         */ \
                                        /* particule soit {P(t-(N-1)),P(t-(N-2)),...,P(t)}. Ainsi, c'est donc le point 'P(t-(N-1))', */ \
                                        /* qui est le plus ancien qui est trace en premier et qui se retrouve donc ensuite devant    */ \
                                        /* les points les plus recents. En permettant cette inversion de la liste, c'est le point    */ \
                                        /* 'P(t)' qui sera trace en premier et qui sera donc devant les points plus anciens...       */ \
                                        /*                                                                                           */ \
                                        /* Donnons un exemple ; soit le fichier :                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  {10,10,10,10,10,10,10,10,10,10}                                          */ \
                                        /*                                                                                           */ \
                                        /* et trions le via '$xrv/tri.11$X index=VRAI N2=VRAI'. Avec "IFGT_N2=VRAI" (c'est-a-dire    */ \
                                        /* en utilisant 'IFGT(...)', la liste des index alors obtenue est :                          */ \
                                        /*                                                                                           */ \
                                        /*                  {0,1,2,3,4,5,6,7,8,9}                                                    */ \
                                        /*                                                                                           */ \
                                        /* et l'ordre directe est conserve, alors qu'avec "IFGT_N2=FAUX" (c'est-a-dire en utilisant  */ \
                                        /* 'IFGE(...)', la liste des index alors obtenue est :                                       */ \
                                        /*                                                                                           */ \
                                        /*                  {9,8,7,6,5,4,3,2,1,0}                                                    */ \
                                        /*                                                                                           */ \
                                        /* et l'ordre est completement inverse. On notera que via '$xrv/tri.11$X index=VRAI N2=FAUX' */ \
                                        /* la procedure 'TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_LOG_N(...)' donne la liste des index   */ \
                                        /* suivante :                                                                                */ \
                                        /*                                                                                           */ \
                                        /*                  {1,2,3,4,5,6,7,8,9,0}                                                    */ \
                                        /*                                                                                           */ \
                                        /* ce que je n'explique pas a la date du 20020829120207. En fait, des tests effectues a      */ \
                                        /* l'aide du programme 'v $xtc/tri_NLogN.02$c' semblent montrer que ce phenomene est tout    */ \
                                        /* a fait inevitable et lie a l'operation 'v $xtc/tri_NLogN.02$c echang.debut,index.' qui    */ \
                                        /* est toujours effectuee au moins une fois (si la liste a plus d'un element evidemment...)  */ \
                                        /* et ce a cause du ' v $xtc/tri_NLogN.02$c while......index.debut.' qui la precede. Ainsi,  */ \
                                        /* il a toujours au moins une permutation d'elements ce qui fait que l'ordre, s'il est deja  */ \
                                        /* correct, ne peut etre maintenu...                                                         */ \
                                        Bblock                                                                                          \
                                        fSWAP(AccesListe(liste_index,NEUT(index_de_debut_de_permutation))                               \
                                             ,AccesListe(liste_index,SUCC(index_de_debut_de_permutation))                               \
                                              );                                                                                        \
                                        /* Lorsqu'un element est plus grand que son successeur, on les permute, ainsi,               */ \
                                        /* progressivement le plus petit element se retrouvera en tete, et le plus grand en queue... */ \
                                        /* Ainsi, on trie la liste de facon a ce que le premier point soit le plus eloigne de nous,  */ \
                                        /* et que le dernier soit le plus proche. Enfin, cette facon de proceder conserve l'ordre    */ \
                                        /* des elements possedant la meme clef de tri (soit 'AccesListe(liste_a_trier,...)').        */ \
                                        /*                                                                                           */ \
                                        /* On notera le 20081005094936 qu'en utilisant 'fSWAP(...)' on permet de traiter ainsi des   */ \
                                        /* listes de type quelconque puisque 'fSWAP(...)' possede le type "maximal", c'est-a-dire    */ \
                                        /* 'Float'...                                                                                */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              EDoI                                                                                                      \
                              Eblock                                                                                                    \
                         EDoD                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Tri d'une liste quelconque avec une methode en 'N' au carre...                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O C E D U R E   D E   T R I   D ' U N E   L I S T E   Q U E L C O N Q U E                                              */
/*        F O N C T I O N N A N T   E N   ' N x L O G ( N ) '  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* Ce code de tri a ete deplace depuis '$xrv/champs_5.11$I' le 20010215162028 dans le but    */
                                        /* (peut-etre...) d'etendre les modeles d'Ising bi- et tridimensionnels a des noyaux de      */
                                        /* taille quelconque ('v $xiii/di_image$FON Imodele_d_Ising_2D_a_temperature_locale' et      */
                                        /* 'v $xiii/di_album$FON Amodele_d_Ising_3D_a_temperature_locale') en s'inspirant du         */
                                        /* parcours d'un cube tel qu'il est programme dans 'v $xtc/ParcoCube.12$c' et qui demande    */
                                        /* un tri afin de classer les points par distance croissante depuis le "centre"...           */

                                        /* Nota : cet algorithme a ete preleve dans "METHODES DE PROGRAMMATION" de Bertrand Meyer    */
                                        /* et Claude Baudoin publie aux Editions Eyrolles (pages 481 et 482).                        */

#define   PERMUTATION_DE_DEUX_ELEMENTS(liste_index,index_1,index_2,AccesListe)                                                          \
                    Bblock                                                                                                              \
                    fSWAP(AccesListe(liste_index,index_1)                                                                               \
                         ,AccesListe(liste_index,index_2)                                                                               \
                          );                                                                                                            \
                    Eblock                                                                                                              \
                                        /* Permutation de deux elements d'index donne.                                               */ \
                                        /*                                                                                           */ \
                                        /* On notera le 20081005094936 qu'en utilisant 'fSWAP(...)' on permet de traiter ainsi des   */ \
                                        /* listes de type quelconque puisque 'fSWAP(...)' possede le type "maximal", c'est-a-dire    */ \
                                        /* 'Float'...                                                                                */
#define   COMPARAISON_DE_DEUX_ELEMENTS(test,liste_a_trier,liste_index,index_1,index_2,AccesListe)                                       \
                    test(AccesListe(liste_a_trier,INTE(AccesListe(liste_index,index_1)))                                                \
                        ,AccesListe(liste_a_trier,INTE(AccesListe(liste_index,index_2)))                                                \
                         )                                                                                                              \
                                        /* Comparaison de deux elements d'index donne.                                               */

#define   REORGANISATION_ENTRE_DEUX_INDICES_POUR_LE_TRI(liste_a_trier,liste_index,index_de_debut,index_de_fin,AccesListe)               \
                    Bblock                                                                                                              \
                    DEFV(Int,INIT(index_courant_de_reorganisation,index_de_debut));                                                     \
                    DEFV(Logical,INIT(iterer_la_reorganisation,VRAI));                                                                  \
                                                                                                                                        \
                    Tant(IL_FAUT(iterer_la_reorganisation))                                                                             \
                         Bblock                                                                                                         \
                         DEFV(Int,INIT(index_de_gauche,DOUB(index_courant_de_reorganisation)));                                         \
                                                                                                                                        \
                         Test(IFGT(index_de_gauche,index_de_fin))                                                                       \
                              Bblock                                                                                                    \
                              EGAL(iterer_la_reorganisation,FAUX);                                                                      \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              DEFV(Int,INIT(index_extreme,index_de_gauche));                                                            \
                              DEFV(Int,INIT(index_de_droite,SUCC(index_de_gauche)));                                                    \
                                                                                                                                        \
                              Test(IFGT(index_de_droite,index_de_fin))                                                                  \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Test(COMPARAISON_DE_DEUX_ELEMENTS(IFLT                                                               \
                                                                    ,liste_a_trier                                                      \
                                                                    ,liste_index                                                        \
                                                                    ,index_de_gauche                                                    \
                                                                    ,index_de_droite                                                    \
                                                                    ,AccesListe                                                         \
                                                                     )                                                                  \
                                        )                                                                                               \
                                        Bblock                                                                                          \
                                        EGAL(index_extreme,index_de_droite);                                                            \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                                                                                                                                        \
                              Test(COMPARAISON_DE_DEUX_ELEMENTS(IFLE                                                                    \
                                                               ,liste_a_trier                                                           \
                                                               ,liste_index                                                             \
                                                               ,index_extreme                                                           \
                                                               ,index_courant_de_reorganisation                                         \
                                                               ,AccesListe                                                              \
                                                                )                                                                       \
                                   )                                                                                                    \
                                   Bblock                                                                                               \
                                   EGAL(iterer_la_reorganisation,FAUX);                                                                 \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   PERMUTATION_DE_DEUX_ELEMENTS(liste_index,index_courant_de_reorganisation,index_extreme,AccesListe);  \
                                        /* Malheureusement, cette facon de proceder ne conserve pas l'ordre des elements possedant   */ \
                                        /* la meme clef de tri (soit 'AccesListe(liste_a_trier,...)') puisque les listes sont        */ \
                                        /* completement bouleversees ; c'est pourquoi, je maintiens les deux tris avec le tri        */ \
                                        /* en 'N au carre' implicite...                                                              */ \
                                   EGAL(index_courant_de_reorganisation,index_extreme);                                                 \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ETan                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Reorganisation des elements d'une liste entre deux index.                                 */

#define   TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_LOG_N(liste_a_trier,liste_index,premier_element,NEUT_dernier_element,AccesListe)         \
                                        /* Le 20020828170851 j'ai fait en sorte que l'argument '????_dernier_element' pointe bien    */ \
                                        /* sur le dernier element de la liste et non pas sur son successeur, d'ou le remplacement    */ \
                                        /* d'operateurs 'PRED(...)' et 'SUCC(...)' par des 'NEUT(...)'.                              */ \
                                        /*                                                                                           */ \
                                        /* Je rappelle le 20220804102408 que la procedure argument 'AccesListe(...)' demande         */ \
                                        /* deux arguments, ce qui fait que 'IdTb1(...)' (qui en demande trois) ne peut etre          */ \
                                        /* utilisee ici. C'est ce qui a implique l'introduction de la procedure 'IdTb1sd(..)'        */ \
                                        /* ('v $xil/defi_c1$vv$DEF IdTb1sd', "sd"="Sans Dimension") qui n'en demande que deux...     */ \
                    Bblock                                                                                                              \
                    DEFV(Int,INIT(dernier_element,NEUT(NEUT_dernier_element)));                                                         \
                                        /* Definition locale du dernier element.                                                     */ \
                                                                                                                                        \
                    Test(IFGT(dernier_element,premier_element))                                                                         \
                                        /* Ce test verifiant qu'il y a plus d'un element dans la liste a ete introduit le            */ \
                                        /* 20011017144259 car il manquait...                                                         */ \
                         Bblock                                                                                                         \
                         DEFV(Int,INIT(index_courant_de_tri,MOIT(dernier_element)));                                                    \
                                                                                                                                        \
                         Tant(IFGE(index_courant_de_tri,premier_element))                                                               \
                              Bblock                                                                                                    \
                              REORGANISATION_ENTRE_DEUX_INDICES_POUR_LE_TRI(liste_a_trier                                               \
                                                                           ,liste_index                                                 \
                                                                           ,index_courant_de_tri                                        \
                                                                           ,dernier_element                                             \
                                                                           ,AccesListe                                                  \
                                                                            );                                                          \
                              DECR(index_courant_de_tri,I);                                                                             \
                              Eblock                                                                                                    \
                         ETan                                                                                                           \
                                                                                                                                        \
                         EGAL(index_courant_de_tri,dernier_element);                                                                    \
                                                                                                                                        \
                         Tant(IFGT(index_courant_de_tri,premier_element))                                                               \
                              Bblock                                                                                                    \
                              PERMUTATION_DE_DEUX_ELEMENTS(liste_index,premier_element,index_courant_de_tri,AccesListe);                \
                              DECR(index_courant_de_tri,I);                                                                             \
                              REORGANISATION_ENTRE_DEUX_INDICES_POUR_LE_TRI(liste_a_trier                                               \
                                                                           ,liste_index                                                 \
                                                                           ,premier_element                                             \
                                                                           ,index_courant_de_tri                                        \
                                                                           ,AccesListe                                                  \
                                                                            );                                                          \
                              Eblock                                                                                                    \
                         ETan                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Tri d'une liste quelconque avec une methode en 'Nxlog(N)'...                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O C E D U R E   D E   T R I   D ' U N E   L I S T E   Q U E L C O N Q U E  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* Ce code de tri a ete deplace depuis '$xrv/champs_5.11$I' le 20010215162028 dans le but    */
                                        /* (peut-etre...) d'etendre les modeles d'Ising bi- et tridimensionnels a des noyaux de      */
                                        /* taille quelconque ('v $xiii/di_image$FON Imodele_d_Ising_2D_a_temperature_locale' et      */
                                        /* 'v $xiii/di_album$FON Amodele_d_Ising_3D_a_temperature_locale') en s'inspirant du         */
                                        /* parcours d'un cube tel qu'il est programme dans 'v $xtc/ParcoCube.12$c' et qui demande    */
                                        /* un tri afin de classer les points par distance croissante depuis le "centre"...           */

#define   EST_CE_LE_TRI_AUTOMATIQUE_D_UNE_LISTE_QUELCONQUE                                                                              \
                    FAUX                                                                                                                \
                                        /* Afin de bloquer (provisoirement ?) le "tri automatique" dans les '$K's qui utilisent      */ \
                                        /* la procedure 'TRI_D_UNE_LISTE_QUELCONQUE(...)' (introduit le 20170608103840)...           */
#define   EST_CE_LE_TRI_N_AU_CARRE_D_UNE_LISTE_QUELCONQUE                                                                               \
                    FAUX                                                                                                                \
                                        /* Afin de forcer le tri en 'N*log(N)' dans certains '$K's (introduit le 20170608103840)...  */

#define   TRI_D_UNE_LISTE_QUELCONQUE(liste_a_trier,liste_index,premier_element,NEUT_dernier_element,tri_auto,V_N_AU_CARRE,AccesListe)   \
                                        /* Le 20020828170851 j'ai fait en sorte que l'argument '????_dernier_element' pointe bien    */ \
                                        /* sur le dernier element de la liste et non pas sur son successeur, d'ou le remplacement    */ \
                                        /* d'operateurs 'PRED(...)' et 'SUCC(...)' par des 'NEUT(...)'.                              */ \
                                        /*                                                                                           */ \
                                        /* La procedure argument 'AccesListe(...)' est du type :                                     */ \
                                        /*                                                                                           */ \
                                        /*                  AccesListe(liste,index)                                                  */ \
                                        /*                                                                                           */ \
                                        /* sachant de plus que les deux listes {liste_a_trier,liste_index} doivent etre evidemment   */ \
                                        /* initialisees, et en particulier 'liste_index' ('v $xtKg/tri.01$K' pour un exemple         */ \
                                        /* d'utilisation...).                                                                        */ \
                                        /*                                                                                           */ \
                                        /* Je rappelle le 20220804102408 que la procedure argument 'AccesListe(...)' demande         */ \
                                        /* deux arguments, ce qui fait que 'IdTb1(...)' (qui en demande trois) ne peut etre          */ \
                                        /* utilisee ici. C'est ce qui a implique l'introduction de la procedure 'IdTb1sd(..)'        */ \
                                        /* ('v $xil/defi_c1$vv$DEF IdTb1sd', "sd"="Sans Dimension") qui n'en demande que deux...     */ \
                                        /*                                                                                           */ \
                                        /* Le 20170608102359, l'argument 'tri_auto' a ete introduit au cas ou, mais aussi par        */ \
                                        /* "symetrie" avec 'v $xrv/champs_5.11$I 20170608082613'...                                  */ \
                    Bblock                                                                                                              \
                    DEFV(Logical,INIT(effectivement__V_N_AU_CARRE,V_N_AU_CARRE));                                                       \
                                        /* Introduit le 20170609081822...                                                            */ \
                                                                                                                                        \
                    Test(IL_FAUT(tri_auto))                                                                                             \
                                        /* Possibilite introduite le 20170608082613...                                               */ \
                         Bblock                                                                                                         \
                         Test(IFLE(NBRE(premier_element,NEUT_dernier_element)                                                           \
                                  ,NOMBRE_RAISONNABLE_MAXIMAL_D_ELEMENTS_DANS_TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE             \
                                   )                                                                                                    \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              EGAL(effectivement__V_N_AU_CARRE,VRAI);                                                                   \
                                        /* On peut utiliser le tri suivant la methode 'N*N'                                          */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              EGAL(effectivement__V_N_AU_CARRE,FAUX);                                                                   \
                                        /* Il faut utiliser le tri suivant la methode 'N*log(N)'                                     */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(effectivement__V_N_AU_CARRE))                                                                          \
                         Bblock                                                                                                         \
                         TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE(liste_a_trier                                                    \
                                                                      ,liste_index                                                      \
                                                                      ,premier_element                                                  \
                                                                      ,NEUT_dernier_element                                             \
                                                                      ,AccesListe                                                       \
                                                                       );                                                               \
                                        /* Tri suivant la methode 'NxN' qui possede l'avantage de conserver l'ordre des index        */ \
                                        /* d'une liste deja triee. Par contre elle est plus lente que la methode 'Nxlog(N)',         */ \
                                        /* surtout pour des grandes valeurs de 'N' (elle peut meme devenir impraticable...).         */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_LOG_N(liste_a_trier                                                       \
                                                                   ,liste_index                                                         \
                                                                   ,premier_element                                                     \
                                                                   ,NEUT_dernier_element                                                \
                                                                   ,AccesListe                                                          \
                                                                    );                                                                  \
                                        /* Tri suivant la methode 'Nxlog(N)' qui possede l'inconvenient de changer eventuellement    */ \
                                        /* l'ordre des index d'une liste deja triee, en ce qui concerne les "paquets" de valeurs     */ \
                                        /* identiques. Par contre elle est plus rapide que la methode 'NxN', surtout pour des        */ \
                                        /* grandes valeurs de 'N'...                                                                 */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Tri d'une liste quelconque.                                                               */




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