/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D E   V A L E U R S   C O R R E S P O N D A N T   A U X                                              */
/*        C O O R D O N N E E S   " M A T R I C I E L L E S "   D A N S   L ' I M A G E  :                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande donne comme resultat une                                                                        */
/*                  liste de combinaisons lineaires des abscisses                                                                    */
/*                  et des ordonnees {X,Y} des points d'une image.                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*             *     * * * * * *   * * * * * *   * * * * * *   *         *   * * * * * *   *   * * * * * *   *         *             */
/*                        *             *        *             **        *        *        *   *         *   **        *             */
/*            * *         *             *        *             * *       *        *        *   *         *   * *       *             */
/*                        *             *        *             *  *      *        *        *   *         *   *  *      *             */
/*           *   *        *             *        *             *   *     *        *        *   *         *   *   *     *             */
/*                        *             *        * * *         *    *    *        *        *   *         *   *    *    *             */
/*          * * * *       *             *        *             *     *   *        *        *   *         *   *     *   *             */
/*                        *             *        *             *      *  *        *        *   *         *   *      *  *             */
/*         *       *      *             *        *             *       * *        *        *   *         *   *       * *             */
/*                        *             *        *             *        **        *        *   *         *   *        **             */
/*        *         *     *             *        * * * * * *   *         *        *        *   * * * * * *   *         *             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        ATTENTION :                                                                                                                */
/*                                                                                                                                   */
/*                    Je note le 20180618163444 que les coordonnees                                                                  */
/*                  normalisees (lorsqu'elles sont demandees...) sont                                                                */
/*                  dans [0,1[ et non pas dans [0,1]... On verra a ce                                                                */
/*                  propos 'v $xiirv/.PUZZ.11.1.$U 20180618161323' si                                                                */
/*                  necessaire...                                                                                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/valeurs_imag$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19990209103707).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/substitue.01.I"
                                        /* Introduit le 20150608110409...                                                            */
#include  xci/sequence.01.I"
#include  xci/coordonne.01.I"

#define   GENERER_UN_MAILLAGE                                                                                                           \
                    FAUX                                                                                                                \
                                        /* Faut-il generer des points isoles ('FAUX') ou bien un maillage ('VRAI') ? La valeur       */ \
                                        /* par defaut garantit la compatibilite anterieure (introduit le 20150525090531)...          */
#define   LE_MAILLAGE_EST_COMPLET                                                                                                       \
                    VRAI
#define   SEUIL_DU_MAILLAGE_COMPLET                                                                                                     \
                    FDU
                                        /* Faut-il generer un maillage complet ('VRAI') ou incomplet ('FAUX'), c'est-a-dire qu'il    */
                                        /* est alors leatoire ? La valeur par defaut garantit la compatibilite anterieure            */
                                        /* (introduit le 20171109125245)...                                                          */
#define   MAILLE_X                                                                                                                      \
                    UN
#define   MAILLE_Y                                                                                                                      \
                    UN
                                        /* Definition du maillage (introduite le 20150525093639)...                                  */

#define   LE_MAILLAGE_EST_TRIANGULAIRE                                                                                                  \
                    FAUX                                                                                                                \
                                        /* Le maillage (si 'IL_FAUT(generer_un_maillage)') doit-il etre triangulaire ('VRAI')        */ \
                                        /* ou rectangulaire ('FAUX') ? Ceci a ete introduit le 20150525090531...                     */
#define   LE_MAILLAGE_TRIANGULAIRE_EST_ALEATOIRE                                                                                        \
                    FAUX
#define   SEUIL_DU_MAILLAGE_TRIANGULAIRE_ALEATOIRE                                                                                      \
                    FDU
#define   UTILISER_UN_ESPACE_DE_PARAMETRAGE_TRIDIMENSIONNEL                                                                             \
                    FAUX
#define   GRAINE                                                                                                                        \
                    PARE(1789)
                                        /* Le maillage (si 'IL_FAUT(generer_un_maillage)') doit-il etre aleatoire ('VRAI')           */
                                        /* ou pas ('FAUX') ? Ceci a ete introduit le 20150608110409...                               */
#define   LE_MAILLAGE_TRIANGULAIRE_EST_MONTANT___                                                                                       \
                    VRAI
#define   LE_MAILLAGE_TRIANGULAIRE_EST_DESCENDANT                                                                                       \
                    FAUX
                                        /* Si 'EST_VRAI(le_maillage_est_triangulaire)' est-il "montant" (bas-gauche --> haut-droite) */
                                        /* et/ou "descendant" (haut-gauche --> bas-droite) ? Ceci a ete introduit le 20150530100449. */
                                        /* On notera que lorsque le maillage est a la fois  "montant"et "descendant", il n'est plus  */
                                        /* plan car, en effet, les aretes montantes et descendantes se croisent alors...             */

#define   TRACER_LE_SEGMENT_000_100                                                                                                     \
                    VRAI
#define   TRACER_LE_SEGMENT_100_110                                                                                                     \
                    VRAI
#define   TRACER_LE_SEGMENT_110_010                                                                                                     \
                    VRAI
#define   TRACER_LE_SEGMENT_010_000                                                                                                     \
                    VRAI
#define   TRACER_LE_SEGMENT_000_110                                                                                                     \
                    VRAI
#define   TRACER_LE_SEGMENT_100_010                                                                                                     \
                    VRAI
                                        /* Definition des segments a tracer (introduite le 20150608121622 et completee le            */
                                        /* 20150610092834).                                                                          */

#define   METTRE_ORIGINE_ET_EXTREMITE_SUR_UNE_MEME_LIGNE                                                                                \
                    VRAI                                                                                                                \
                                        /* Faut-il mettre l'origine 'A' et l'extremite 'B' d'un segment sur une meme ligne ('VRAI')  */ \
                                        /* ou sur deux lignes separees ('FAUX') ? Ceci fut introduit le 20150526140407. On notera    */ \
                                        /* que les mettre sur une meme ligne facilite les optimisations supprimant les segments      */ \
                                        /* redondants, cela se faisant via '$SOR -u' en manipulant ensuite des lignes regenerees     */ \
                                        /* du type {XA,XB,YA,YB} qui doivent donc etre uniques...                                    */

#define   EDITER_DES_COORDONNEES_NORMALISEES                                                                                            \
                    VRAI                                                                                                                \
                                        /* Faut-il normaliser les coordonnees ('VRAI') ou pas ('FAUX') ? La valeur par defaut        */ \
                                        /* garantit la compatibilite anterieure (introduit le 20121110103934)...                     */

#define   UTILISER_LE_NUMERO_D_IMAGE                                                                                                    \
                    VRAI                                                                                                                \
                                        /* Faut-il ne sortir les coordonnees {X,Y} que pour les premieres valeurs du numero d'image  */ \
                                        /* d'image ('VRAI') ou bien faut-il les sortir toutes ('FAUX') ? On notera en fait que cela  */ \
                                        /* signifie "ne sortir que les premieres (comptees en numero d'image) coordonnees {X,Y}"...  */

#define   PONDERATION_DE_X                                                                                                              \
                    FU
#define   PONDERATION_DE_Y                                                                                                              \
                    FZERO
                                        /* Ponderations respectives de 'X' et de 'Y'.                                                */

#define   FACTEUR_DE_X                                                                                                                  \
                    FU
#define   FACTEUR_DE_Y                                                                                                                  \
                    FU
                                        /* Homotheties respectives de 'X' et de 'Y'.                                                 */

#define   LARGEUR_DE_LA_BORDURE_A_EXCLURE                                                                                               \
                    FZERO                                                                                                               \
                                        /* Largeur de la bordure a exclure autour de l'image.                                        */

#include  xci/valeurs.01.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/substitue.02.I"
                                        /* Introduit le 20150608110409...                                                            */
#include  xci/valeurs.02.I"

#include  xci/valeurs_imag.01.I"
                                        /* Introduit le 20150609081602...                                                            */

#define   _____X                                                                                                                        \
                    GRO0(maille_X)
#define   MOVE_X                                                                                                                        \
                    GRO1(maille_X)
#define   _____Y                                                                                                                        \
                    GRO0(maille_Y)
#define   MOVE_Y                                                                                                                        \
                    GRO1(maille_Y)
                                        /* Definitions des deplacement elementaires (introduites le 20150525205108).                 */

#define   EDITION_D_UN_POINT(coordonnee_X,coordonnee_Y,tabulation)                                                                      \
                    Bblock                                                                                                              \
                    CAL2(Prin3(Cara(chain_Aconcaten5(INTRODUCTION_FORMAT,valeurs_signees,".*",format_d_edition,"%s"))                   \
                              ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales)                                                        \
                              ,MULTIPLE_DE(ENTIER_FLOTTANT(LIZ2(ponderation_de_X,coordonnee_X                                           \
                                                               ,ponderation_de_Y,coordonnee_Y                                           \
                                                                )                                                                       \
                                                           )                                                                            \
                                           )                                                                                            \
                              ,tabulation                                                                                               \
                               )                                                                                                        \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Edition d'un point introduite le 20150525092200...                                        */
#define   EDITION_D_UN_SEGMENT(coordonnee_X,coordonnee_Y,trans_OX,trans_OY,trans_EX,trans_EY,tracer_le_segment)                         \
                                        /* Le point de reference est {coordonnee_X,coordonnee_Y} et les translations                 */ \
                                        /* permettent de definir l'Origine et l'Extremite du segment...                              */ \
                    Bblock                                                                                                              \
                    DEFV(Logical,INIT(tracer_effectivement_le_segment,tracer_le_segment));                                              \
                                                                                                                                        \
                    Test(EST_VRAI(le_maillage_est_complet))                                                                             \
                                        /* Test introduit le 20171109125245...                                                       */ \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         DEFV(Float,INIT(valeur_aleatoire_de_maillage_incomplet,FLOT__UNDEF));                                          \
                                                                                                                                        \
                         GENERATION_DE_LA_VALEUR_ALEATOIRE_COURANTE(valeur_aleatoire_de_maillage_incomplet);                            \
                                                                                                                                        \
                         Test(IFLE(valeur_aleatoire_de_maillage_incomplet,seuil_du_maillage_complet))                                   \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              EGAL(tracer_effectivement_le_segment,FAUX);                                                               \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(tracer_effectivement_le_segment))                                                                      \
                                        /* Test introduit le 20150608121622...                                                       */ \
                         Bblock                                                                                                         \
                         EDITION_D_UN_POINT(ADD2(coordonnee_X                                                                           \
                                                ,COND(IL_FAUT(editer_des_coordonnees_normalisees)                                       \
                                                     ,SUPER_lNORMALISE_OX(trans_OX)                                                     \
                                                     ,trans_OX                                                                          \
                                                      )                                                                                 \
                                                 )                                                                                      \
                                           ,ADD2(coordonnee_Y                                                                           \
                                                ,COND(IL_FAUT(editer_des_coordonnees_normalisees)                                       \
                                                     ,SUPER_lNORMALISE_OY(trans_OY)                                                     \
                                                     ,trans_OY                                                                          \
                                                      )                                                                                 \
                                                 )                                                                                      \
                                           ,COND(IL_FAUT(mettre_origine_et_extremite_sur_une_meme_ligne)," ",C_LF)                      \
                                            );                                                                                          \
                                        /* Edition de l'Origine du segment.                                                          */ \
                         EDITION_D_UN_POINT(ADD2(coordonnee_X                                                                           \
                                                ,COND(IL_FAUT(editer_des_coordonnees_normalisees)                                       \
                                                     ,SUPER_lNORMALISE_OX(trans_EX)                                                     \
                                                     ,trans_EX                                                                          \
                                                      )                                                                                 \
                                                 )                                                                                      \
                                           ,ADD2(coordonnee_Y                                                                           \
                                                ,COND(IL_FAUT(editer_des_coordonnees_normalisees)                                       \
                                                     ,SUPER_lNORMALISE_OY(trans_EY)                                                     \
                                                     ,trans_EY                                                                          \
                                                      )                                                                                 \
                                                 )                                                                                      \
                                           ,C_LF                                                                                        \
                                            );                                                                                          \
                                        /* Edition de l'Extremite du segment.                                                        */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Edition d'un segment introduite le 20150525100048...                                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D E   V A L E U R S   C O R R E S P O N D A N T   A U X                                              */
/*        C O O R D O N N E E S   " M A T R I C I E L L E S "   D A N S   L ' I M A G E  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
#include  xci/coordonne.02.I"

     DEFV(Logical,INIT(generer_un_maillage,GENERER_UN_MAILLAGE));
                                        /* Faut-il generer des points isoles ('FAUX') ou bien un maillage ('VRAI') ? La valeur       */
                                        /* par defaut garantit la compatibilite anterieure (introduit le 20150525090531)...          */
     DEFV(Logical,INIT(le_maillage_est_complet,LE_MAILLAGE_EST_COMPLET));
     DEFV(Float,INIT(seuil_du_maillage_complet,SEUIL_DU_MAILLAGE_COMPLET));
                                        /* Faut-il generer un maillage complet ('VRAI') ou incomplet ('FAUX'), c'est-a-dire qu'il    */
                                        /* est alors leatoire ? La valeur par defaut garantit la compatibilite anterieure            */
                                        /* (introduit le 20171109125245)...                                                          */
     DEFV(Int,INIT(maille_X,MAILLE_X));
     DEFV(Int,INIT(maille_Y,MAILLE_Y));
                                        /* Definition du maillage (introduite le 20150525093639)...                                  */

     DEFV(Logical,INIT(le_maillage_est_triangulaire,LE_MAILLAGE_EST_TRIANGULAIRE));
                                        /* Le maillage (si 'IL_FAUT(generer_un_maillage)') doit-il etre triangulaire ('VRAI')        */
                                        /* ou rectangulaire ('FAUX') ? Ceci a ete introduit le 20150525090531...                     */
     DEFV(Logical,INIT(le_maillage_triangulaire_est_aleatoire,LE_MAILLAGE_TRIANGULAIRE_EST_ALEATOIRE));
     DEFV(Float,INIT(seuil_du_maillage_triangulaire_aleatoire,SEUIL_DU_MAILLAGE_TRIANGULAIRE_ALEATOIRE));
     DEFV(Logical,INIT(utiliser_un_espace_de_parametrage_tridimensionnel,UTILISER_UN_ESPACE_DE_PARAMETRAGE_TRIDIMENSIONNEL));
     DEFV(Int,INIT(graine,GRAINE));
     DEFV(Float,INIT(valeur_aleatoire,FLOT__UNDEF));
                                        /* Le maillage (si 'IL_FAUT(generer_un_maillage)') doit-il etre aleatoire ('VRAI')           */
                                        /* ou pas ('FAUX') ? Ceci a ete introduit le 20150608110409...                               */
     DEFV(Logical,INIT(le_maillage_triangulaire_est_montant___,LE_MAILLAGE_TRIANGULAIRE_EST_MONTANT___));
     DEFV(Logical,INIT(le_maillage_triangulaire_est_descendant,LE_MAILLAGE_TRIANGULAIRE_EST_DESCENDANT));
                                        /* Si 'EST_VRAI(le_maillage_est_triangulaire)' est-il "montant" (bas-gauche --> haut-droite) */
                                        /* et/ou "descendant" (haut-gauche --> bas-droite) ? Ceci a ete introduit le 20150530100449. */
                                        /* On notera que lorsque le maillage est a la fois  "montant"et "descendant", il n'est plus  */
                                        /* plan car, en effet, les aretes montantes et descendantes se croisent alors...             */

     DEFV(Logical,INIT(tracer_le_segment_000_100,TRACER_LE_SEGMENT_000_100));
     DEFV(Logical,INIT(tracer_le_segment_100_110,TRACER_LE_SEGMENT_100_110));
     DEFV(Logical,INIT(tracer_le_segment_110_010,TRACER_LE_SEGMENT_110_010));
     DEFV(Logical,INIT(tracer_le_segment_010_000,TRACER_LE_SEGMENT_010_000));
     DEFV(Logical,INIT(tracer_le_segment_000_110,TRACER_LE_SEGMENT_000_110));
     DEFV(Logical,INIT(tracer_le_segment_100_010,TRACER_LE_SEGMENT_100_010));
                                        /* Definition des segments a tracer (introduite le 20150608121622 et completee le            */
                                        /* 20150610092834).                                                                          */

     DEFV(Logical,INIT(mettre_origine_et_extremite_sur_une_meme_ligne,METTRE_ORIGINE_ET_EXTREMITE_SUR_UNE_MEME_LIGNE));
                                        /* Faut-il mettre l'origine 'A' et l'extremite 'B' d'un segment sur une meme ligne ('VRAI')  */
                                        /* ou sur deux lignes separees ('FAUX') ? Ceci fut introduit le 20150526140407. On notera    */
                                        /* que les mettre sur une meme ligne facilite les optimisations supprimant les segments      */
                                        /* redondants, cela se faisant via '$SOR -u' en manipulant ensuite des lignes regenerees     */
                                        /* du type {XA,XB,YA,YB} qui doivent donc etre uniques...                                    */

     DEFV(Logical,INIT(editer_des_coordonnees_normalisees,EDITER_DES_COORDONNEES_NORMALISEES));
                                        /* Faut-il normaliser les coordonnees ('VRAI') ou pas ('FAUX') ? La valeur par defaut        */
                                        /* garantit la compatibilite anterieure (introduit le 20121110103934)...                     */

     DEFV(Logical,INIT(utiliser_le_numero_d_image,UTILISER_LE_NUMERO_D_IMAGE));
                                        /* Faut-il ne sortir les coordonnees {X,Y} que pour les premieres valeurs du numero d'image  */
                                        /* d'image ('VRAI') ou bien faut-il les sortir toutes ('FAUX') ? On notera en fait que cela  */
                                        /* signifie "ne sortir que les premieres (comptees en numero d'image) coordonnees {X,Y}"...  */
     DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
                                        /* Numero de la premiere image,                                                              */
     DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE));
                                        /* Numero de la derniere image.                                                              */
     DEFV(Int,INIT(numero_d_image,UNDEF));
                                        /* Numero de l'image courante.                                                               */
     DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
                                        /* Pas de passage d'un numero d'image a une autre.                                           */

     DEFV(pointI_2D,point_courant_de_l_espace_de_parametrage_2D);
     DEFV(pointI_3D,point_courant_de_l_espace_de_parametrage_3D);
                                        /* Point courant d'un espace abstrait servant a parametrer le generateur d'evenements.       */

     DEFV(Float,INIT(ponderation_de_X,PONDERATION_DE_X));
     DEFV(Float,INIT(ponderation_de_Y,PONDERATION_DE_Y));
                                        /* Ponderations respectives de 'X' et de 'Y'.                                                */
     DEFV(Float,INIT(facteur_de_X,FACTEUR_DE_X));
     DEFV(Float,INIT(facteur_de_Y,FACTEUR_DE_Y));
                                        /* Homotheties respectives de 'X' et de 'Y'.                                                 */

     DEFV(Float,INIT(largeur_de_la_bordure_a_exclure,LARGEUR_DE_LA_BORDURE_A_EXCLURE));
                                        /* Largeur de la bordure a exclure autour de l'image.                                        */

#include  xci/substitue.03.I"
                                        /* Introduit le 20150608110409...                                                            */
#include  xci/valeurs.03.I"
     /*..............................................................................................................................*/

#include  xci/coordonne.04.I"
                                        /* Ceci a ete introduit le 20051218183137...                                                 */

     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("numero=",utiliser_le_numero_d_image);
                         GET_ARGUMENT_I("premiere=""D=",premiere_image);
                         GET_ARGUMENT_I("derniere=""A=",derniere_image);
                         GET_ARGUMENT_I("pas=",pas_des_images);

                         GET_ARGUMENT_L("maillage=""m=",generer_un_maillage);
                         GET_ARGUMENT_N("points=""pts=",generer_un_maillage);
                         GET_ARGUMENT_L("maillage_complet=""complet=",le_maillage_est_complet);
                         GET_ARGUMENT_N("maillage_aleatoire=""aleatoire=",le_maillage_est_complet);
                         GET_ARGUMENT_F("seuil_maillage_complet=""smc=",seuil_du_maillage_complet);
                                        /* Aguments introduits le 20171109125245...                                                  */
                         GET_ARGUMENT_I("maille_X=""mX=""mx=",maille_X);
                         GET_ARGUMENT_I("maille_Y=""mY=""my=",maille_Y);
                         GET_ARGUMENT_L("maillage_triangulaire=""mt=",le_maillage_est_triangulaire);
                         GET_ARGUMENT_N("maillage_rectangulaire=""mr=",le_maillage_est_triangulaire);
                                        /* Aguments introduits le 20150525090531...                                                  */
                         GET_ARGUMENT_L("maillage_triangulaire_aleatoire=""mta=",le_maillage_triangulaire_est_aleatoire);
                         GET_ARGUMENT_F("seuil_maillage_triangulaire_aleatoire=""smta=""seuil="
                                       ,seuil_du_maillage_triangulaire_aleatoire
                                        );
                         GET_ARGUMENT_I("methode=",gen_ft_____methode_standard);
                                        /* Les parametres {"inferieur=","superieur="} furent introduits le 20090221161945...         */
                         GET_ARGUMENT_L("tridimensionnel=""3D=",utiliser_un_espace_de_parametrage_tridimensionnel);
                         GET_ARGUMENT_N("bidimensionnel=""2D=",utiliser_un_espace_de_parametrage_tridimensionnel);
                         GET_ARGUMENT_I("graine=""g=",graine);
                         GET_ARGUMENT_L("affiner_rdn=",rdnIFnD_____affiner_la_generation);
                         GET_ARGUMENT_L("iterer_rdn=",rdnIFnD_____iterer_la_generation);
                         GET_ARGUMENT_F("PrdnI2D_NEUT=",rdnI2D_____ponderation_NEUT);
                         GET_ARGUMENT_F("PrdnI2D_GAUS=",rdnI2D_____ponderation_GAUS);
                         GET_ARGUMENT_F("PrdnI2D_GAUS_esperance=",rdnI2D_____ponderation_GAUS_esperance_);
                         GET_ARGUMENT_F("PrdnI2D_GAUS_ecart_type=",rdnI2D_____ponderation_GAUS_ecart_type);
                         GET_ARGUMENT_F("PrdnI3D_NEUT=",rdnI3D_____ponderation_NEUT);
                         GET_ARGUMENT_F("PrdnI3D_GAUS=",rdnI3D_____ponderation_GAUS);
                         GET_ARGUMENT_F("PrdnI3D_GAUS_esperance=",rdnI3D_____ponderation_GAUS_esperance_);
                         GET_ARGUMENT_F("PrdnI3D_GAUS_ecart_type=",rdnI3D_____ponderation_GAUS_ecart_type);
                         CONTROLE_DE_L_ADAPTATION_A_UNE_LOI_DE_DISTRIBUTION_QUELCONQUE;
                                        /* Aguments introduits le 20150608110409...                                                  */
                         GET_ARGUMENT_L("maillage_triangulaire_montant=""mtm=""triangle1=""tr1="
                                       ,le_maillage_triangulaire_est_montant___
                                        );
                         GET_ARGUMENT_L("maillage_triangulaire_descendant=""mtd=""triangle2=""tr2="
                                       ,le_maillage_triangulaire_est_descendant
                                        );
                                        /* Aguments introduits le 20150530100449...                                                  */

                         GET_ARGUMENT_L("segment_000_100=""000_100=""segment_00_10=""00_10=""AB=",tracer_le_segment_000_100);
                         GET_ARGUMENT_L("segment_100_110=""100_110=""segment_10_11=""10_11=""BC=",tracer_le_segment_100_110);
                         GET_ARGUMENT_L("segment_110_010=""110_010=""segment_11_01=""11_01=""CD=",tracer_le_segment_110_010);
                         GET_ARGUMENT_L("segment_010_000=""010_000=""segment_01_00=""01_00=""DA=",tracer_le_segment_010_000);
                         GET_ARGUMENT_L("segment_000_110=""000_110=""segment_00_11=""00_11=""AC=",tracer_le_segment_000_110);
                         GET_ARGUMENT_L("segment_100_010=""100_010=""segment_10_01=""10_01=""BD=",tracer_le_segment_100_010);
                                        /* Aguments introduits le 20150608121622 sous la forme :                                     */
                                        /*                                                                                           */
                                        /*                  GET_ARGUMENT_L("cote_1=""c1=",tracer_le_segment_000_100);                */
                                        /*                  GET_ARGUMENT_L("cote_2=""c2=",tracer_le_segment_100_110);                */
                                        /*                  GET_ARGUMENT_L("cote_3=""c3=",tracer_le_segment_110_010);                */
                                        /*                  GET_ARGUMENT_L("cote_4=""c4=",tracer_le_segment_010_000);                */
                                        /*                                                                                           */
                                        /* et modifie le 20150610092834...                                                           */

                         GET_ARGUMENT_L("origine_extremite_meme_ligne=""meme_ligne=""ml="
                                       ,mettre_origine_et_extremite_sur_une_meme_ligne
                                        );
                                        /* Aguments introduits le 20150526140407...                                                  */

                         GET_ARGUMENT_L("normalisees=""norm=",editer_des_coordonnees_normalisees);
                         GET_ARGUMENT_N("denormalisees=""denorm=",editer_des_coordonnees_normalisees);
                                        /* Aguments introduits le 20121110103938...                                                  */

                         GET_ARGUMENT_L("centrer=",centrer_les_coordonnees_normalisees);

                         GET_ARGUMENT_F("Px=""PX=",ponderation_de_X);
                         GET_ARGUMENT_F("Py=""PY=",ponderation_de_Y);

                         GET_ARGUMENT_F("ax=""aX=""Ax=""AX=",facteur_de_X);
                         GET_ARGUMENT_F("ay=""aY=""Ay=""AY=",facteur_de_Y);

                         GET_ARGUMENT_L("normaliser=",les_translations_sont_a_normaliser);

                         GET_ARGUMENT_F("bx=""bX=""Bx=""BX=",translation_des_X_normalisees);
                         GET_ARGUMENT_F("by=""bY=""By=""BY=",translation_des_Y_normalisees);

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;
                                        /* Cette procedure fut introduite le 20061226185754...                                       */

                         GET_ARGUMENT_F("exclure=""bordure=",largeur_de_la_bordure_a_exclure);
                         )
                    );

     Test(IFOU(IL_NE_FAUT_PAS(utiliser_le_numero_d_image)
              ,IFET(IL_FAUT(utiliser_le_numero_d_image)
                   ,IFLE(premiere_image,derniere_image)
                    )
               )
          )
          Bblock
          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.                                           */

#include  xci/coordonne.03.I"

          EGAL(numero_d_image,premiere_image);
                                        /* Simulation de la boucle :                                                                 */
                                        /*                                                                                           */
                                        /*                  DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images)        */
                                        /*                                                                                           */
                                        /* si besoin est...                                                                          */

          Test(IFOU(EST_VRAI(le_maillage_triangulaire_est_aleatoire)
                   ,EST_FAUX(le_maillage_est_complet)
                    )
               )
                                        /* Test introduit le 20150608110409 et complete le 20171109135542...                         */
               Bblock
               SPIRALE_VALIDATION;
                                        /* Validation des pas de parcours (pasX,pasY) de l'espace abstrait de parametrage du         */
                                        /* generateur d'evenements.                                                                  */
               INITIALISATION_POINT_2D(point_courant_de_l_espace_de_parametrage_2D,Xmin,Ymin);
               INITIALISATION_POINT_3D(point_courant_de_l_espace_de_parametrage_3D,Xmin,Ymin,Zmin);
                                        /* Initialisation de l'espace de parametrage independante du format de l'image, puisque le   */
                                        /* point 'min' n'en depend pas...                                                            */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          begin_image
               Bblock
               Test(IFOU(IL_NE_FAUT_PAS(utiliser_le_numero_d_image)
                        ,IFET(IL_FAUT(utiliser_le_numero_d_image)
                             ,IFLE(numero_d_image,derniere_image)
                              )
                         )
                    )
                                        /* Simulation de la boucle :                                                                 */
                                        /*                                                                                           */
                                        /*                  DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images)        */
                                        /*                                                                                           */
                                        /* si besoin est...                                                                          */
                    Bblock
                    DEFV(Float,INIT(Xf
                                   ,COND(IL_FAUT(editer_des_coordonnees_normalisees)
                                        ,AXPB(facteur_de_X
                                             ,SUPER_cNORMALISE_OX(X)
                                             ,NORMALISER_LES_TRANSLATIONS(translation_des_X_normalisees
                                                                         ,SUPER_cNORMALISE_OX
                                                                          )
                                              )
                                        ,FLOT(X)
                                         )
                                    )
                         );
                    DEFV(Float,INIT(Yf
                                   ,COND(IL_FAUT(editer_des_coordonnees_normalisees)
                                        ,AXPB(facteur_de_Y
                                             ,SUPER_cNORMALISE_OY(Y)
                                             ,NORMALISER_LES_TRANSLATIONS(translation_des_Y_normalisees
                                                                         ,SUPER_cNORMALISE_OY
                                                                          )
                                              )
                                        ,FLOT(Y)
                                         )
                                    )
                         );

                    Test(IFOU(IL_NE_FAUT_PAS(editer_des_coordonnees_normalisees)
                             ,IFET(IL_FAUT(editer_des_coordonnees_normalisees)
                                  ,IFET(IFINff(Xf
                                              ,ADD2(SUPER_cNORMALISE_OX(Xmin),largeur_de_la_bordure_a_exclure)
                                              ,SOUS(SUPER_cNORMALISE_OX(Xmax),largeur_de_la_bordure_a_exclure)
                                               )
                                       ,IFINff(Yf
                                              ,ADD2(SUPER_cNORMALISE_OY(Ymin),largeur_de_la_bordure_a_exclure)
                                              ,SOUS(SUPER_cNORMALISE_OY(Ymax),largeur_de_la_bordure_a_exclure)
                                               )
                                        )
                                   )
                              )
                         )
                         Bblock
                         Test(IL_FAUT(generer_un_maillage))
                                        /* Test introduit le 20150525094323...                                                       */
                              Bblock
                              EDITION_D_UN_SEGMENT(Xf,Yf
                                                  ,_____X,_____Y
                                                  ,MOVE_X,_____Y
                                                  ,IL_FAUT(tracer_le_segment_000_100)
                                                   );
                              EDITION_D_UN_SEGMENT(Xf,Yf
                                                  ,MOVE_X,_____Y
                                                  ,MOVE_X,MOVE_Y
                                                  ,IL_FAUT(tracer_le_segment_100_110)
                                                   );
                              EDITION_D_UN_SEGMENT(Xf,Yf
                                                  ,_____X,MOVE_Y
                                                  ,MOVE_X,MOVE_Y
                                                  ,IL_FAUT(tracer_le_segment_110_010)
                                                   );
                              EDITION_D_UN_SEGMENT(Xf,Yf
                                                  ,_____X,_____Y
                                                  ,_____X,MOVE_Y
                                                  ,IL_FAUT(tracer_le_segment_010_000)
                                                   );
                                        /* La generation de la maille carree a ete introduite le 20150525100048...                   */
                                        /*                                                                                           */
                                        /* Le 20150526150811, les translations ont ete reordonnees afin que les segments             */
                                        /* horizontaux et verticaux...) soient edites de facon a ce que les coordonnees X            */
                                        /* et Y soient croissantes (cela est rendu necessaire par les tests de redondance            */
                                        /* ('v $xiirv/.MAIL.11.1.$U redondants' par exemple...).                                     */
                                        /*                                                                                           */
                                        /* Notations :                                                                               */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                     H=010               G=110                                             */
                                        /*                       .-------------------.                                               */
                                        /*                      /.                  /|                                               */
                                        /*                     / .                 / |                                               */
                                        /*                    /  .                /  |                                               */
                                        /*                   /   .               /   |                                               */
                                        /*                   -------------------/    |                                               */
                                        /*                D=011  .            C=111  |                                               */
                                        /*                  |    .              |    |                                               */
                                        /*                  |    .              |    |                                               */
                                        /*                  |    .              |    |                                               */
                                        /*                  |  E=000            |  F=100                                             */
                                        /*                  |    ...............|....|                                               */
                                        /*                  |   .               |   /                                                */
                                        /*                  |  .                |  /                                                 */
                                        /*                  | .                 | /                                                  */
                                        /*                  |.                  |/                                                   */
                                        /*                  .-------------------.                                                    */
                                        /*                                                                                           */
                                        /*                A=001               B=101                                                  */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /* en rappelant que le referentiel 'XYZ' est direct et qu'ainsi l'axe 'OZ' est dirige        */
                                        /* vers l'observateur...                                                                     */

                              Test(EST_VRAI(le_maillage_est_triangulaire))
                                        /* Test introduit le 20150525100048...                                                       */
                                   Bblock
                                   Test(EST_VRAI(le_maillage_triangulaire_est_aleatoire))
                                        /* Possibilite introduite le 20150608110409...                                               */
                                        Bblock
                                        GENERATION_DE_LA_VALEUR_ALEATOIRE_COURANTE(valeur_aleatoire);

                                        Test(IFLE(valeur_aleatoire,seuil_du_maillage_triangulaire_aleatoire))
                                             Bblock
                                             EGAL(le_maillage_triangulaire_est_montant___,VRAI);
                                             EGAL(le_maillage_triangulaire_est_descendant,FAUX);
                                             Eblock
                                        ATes
                                             Bblock
                                             EGAL(le_maillage_triangulaire_est_montant___,FAUX);
                                             EGAL(le_maillage_triangulaire_est_descendant,VRAI);
                                             Eblock
                                        ETes
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes

                                   EDITION_D_UN_SEGMENT(Xf,Yf
                                                       ,_____X,_____Y
                                                       ,MOVE_X,MOVE_Y
                                                       ,IFET(EST_VRAI(le_maillage_triangulaire_est_montant___)
                                                            ,IL_FAUT(tracer_le_segment_000_110)
                                                             )
                                                        );
                                        /* Trace introduit le 20150530100449...                                                      */

                                   EDITION_D_UN_SEGMENT(Xf,Yf
                                                       ,_____X,MOVE_Y
                                                       ,MOVE_X,_____Y
                                                       ,IFET(EST_VRAI(le_maillage_triangulaire_est_descendant)
                                                            ,IL_FAUT(tracer_le_segment_100_010)
                                                             )
                                                        );
                                        /* Trace introduit le 20150530100449...                                                      */
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                              EDITION_D_UN_POINT(Xf,Yf,C_LF);
                                        /* Et enfin, edition d'une combinaison lineaire des coordonnees du point courant.            */
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               INCR(numero_d_image,pas_des_images);
                                        /* Simulation de la boucle :                                                                 */
                                        /*                                                                                           */
                                        /*                  DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images)        */
                                        /*                                                                                           */
                                        /* si besoin est...                                                                          */
               Eblock
          end_image
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("la relation d'ordre stricte ('premier < dernier') n'est pas respectee");
          Eblock
     ETes

     RETU_Commande;
     Eblock
ECommande



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.