/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D ' U N   F I C H I E R   ' Z '   A   P A R T I R   D ' U N E                                        */
/*        I M A G E   N O N   S T A N D A R D   E T   D E   D E U X   F I C H I E R S   ' X '   E T   ' Z '  :                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrv/champ_Z.01$K' :                                                                                            */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20120511085809).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

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

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V A L E U R S   I M P L I C I T E S   D E S   P A R A M E T R E S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   FORCER_LES_EXTREMA_DE_X_ET_DE_Y                                                                                               \
                    FAUX
#define   MINIMUM_X_FORCE                                                                                                               \
                    COORDONNEE_BARYCENTRIQUE_MINIMALE
#define   MAXIMUM_X_FORCE                                                                                                               \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE
#define   MINIMUM_Y_FORCE                                                                                                               \
                    COORDONNEE_BARYCENTRIQUE_MINIMALE
#define   MAXIMUM_Y_FORCE                                                                                                               \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE
                                        /* Afin de pouvoir forcer les extrema de 'X' et de 'Y' (introduit le 20170602093947).        */

#define   SYMETRISER_LES_EXTREMA_DE_X_ET_Y                                                                                              \
                    VRAI                                                                                                                \
                                        /* Pour savoir s'il faut symetriser (par rapport a 0) les coordonnees ('VRAI') ou les        */ \
                                        /* conserver tels quels ('FAUX')...                                                          */

#define   PERIODISER_X_ET_Y                                                                                                             \
                    VRAI
#define   SYMETRISER_X_ET_Y                                                                                                             \
                    FAUX
#define   PROLONGER_X_ET_Y                                                                                                              \
                    FAUX
#define   NIVEAU_FLOTTANT_HORS_IMAGE                                                                                                    \
                    FZERO
                                        /* Pour savoir s'il faut periodiser ou prolonger les coordonnees {X,Y} dans [0,1].           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   T R O I S   F I C H I E R S  :                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/ARITHMET.1d.I"
#include  xrv/ARITHMET.21.I"
#include  xrv/champs_5.41.I"

#define   X_IMPLICITE                                                                                                                   \
                    FZERO
#define   Y_IMPLICITE                                                                                                                   \
                    FZERO

gGENERATION_D_UN_FICHIER(fichier_LISTE_X,liste_initiale_des_X);
gGENERATION_D_UN_FICHIER(fichier_LISTE_Y,liste_initiale_des_Y);
                                        /* Definition en memoire des fichiers de coordonnees.                                        */

#define   ELEMENT_DU_FICHIER_LISTE_X(index)                                                                                             \
                    gELEMENT_DU_FICHIER(liste_initiale_des_X,index)
#define   ELEMENT_DU_FICHIER_LISTE_Y(index)                                                                                             \
                    gELEMENT_DU_FICHIER(liste_initiale_des_Y,index)
                                        /* Acces a un element courant des fichiers de coordonnees.                                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D ' U N   F I C H I E R   ' Z '   A   P A R T I R   D ' U N E                                        */
/*        I M A G E   N O N   S T A N D A R D   E T   D E   D E U X   F I C H I E R S   ' X '   E T   ' Z '  :                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
#include  xrv/ARITHMET.22.I"
#include  xci/valeurs.03.I"

     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));

     DEFV(Logical,INIT(forcer_les_extrema_de_X_et_de_Y,FORCER_LES_EXTREMA_DE_X_ET_DE_Y));
     DEFV(Float,INIT(minimum_X_force,MINIMUM_X_FORCE));
     DEFV(Float,INIT(maximum_X_force,MAXIMUM_X_FORCE));
     DEFV(Float,INIT(minimum_Y_force,MINIMUM_Y_FORCE));
     DEFV(Float,INIT(maximum_Y_force,MAXIMUM_Y_FORCE));
                                        /* Afin de pouvoir forcer les extrema de 'X' et de 'Y' (introduit le 20170602093947).        */

     DEFV(Logical,INIT(symetriser_les_extrema_de_X_et_Y,SYMETRISER_LES_EXTREMA_DE_X_ET_Y));
                                        /* Pour savoir s'il faut symetriser (par rapport a 0) les coordonnees ('VRAI') ou les        */
                                        /* conserver tels quels ('FAUX')...                                                          */

     DEFV(Logical,INIT(periodiser_X,PERIODISER_X_ET_Y));
     DEFV(Logical,INIT(periodiser_Y,PERIODISER_X_ET_Y));
     DEFV(Logical,INIT(symetriser_X,SYMETRISER_X_ET_Y));
     DEFV(Logical,INIT(symetriser_Y,SYMETRISER_X_ET_Y));
     DEFV(Logical,INIT(prolonger_X,PROLONGER_X_ET_Y));
     DEFV(Logical,INIT(prolonger_Y,PROLONGER_X_ET_Y));
     DEFV(genere_Float,INIT(niveau_flottant_hors_image,NIVEAU_FLOTTANT_HORS_IMAGE));
                                        /* Pour savoir s'il faut periodiser ou prolonger les coordonnees {X,Y} dans [0,1].           */
     /*..............................................................................................................................*/
#include  xrv/champs_5.1A.I"

     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(PROCESS_ARGUMENT_I("nombre_elements=""ne=",nombre_d_elements
                                           ,BLOC(VIDE;)
                                           ,BLOC(Bblock
                                                 PRINT_AVERTISSEMENT("'ne=' doit etre defini avant toute entree de fichiers");
                                                 Eblock
                                                 )
                                            );

                         PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01;

                         PROKESF_ARGUMENT_FICHIER("LISTE_X="
                                                 ,fichier_LISTE_X
                                                 ,liste_initiale_des_X
                                                 ,X_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_Y="
                                                 ,fichier_LISTE_Y
                                                 ,liste_initiale_des_Y
                                                 ,Y_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         GET_ARGUMENT_C("imageA=""A=",nom_imageA);

                         GET_ARGUMENT_L("forcer_extrema=""forcer=""fe=",forcer_les_extrema_de_X_et_de_Y);
                         GET_ARGUMENT_F("minimum_force_X=""mX=",minimum_X_force);
                         GET_ARGUMENT_F("maximum_force_X=""MX=",maximum_X_force);
                         GET_ARGUMENT_F("minimum_force_Y=""mY=",minimum_Y_force);
                         GET_ARGUMENT_F("maximum_force_Y=""MY=",maximum_Y_force);
                                        /* Introduits le 20170602093947...                                                           */

                         GET_ARGUMENT_L("symetriser_extrema_XY=""sym_XY=",symetriser_les_extrema_de_X_et_Y);

                         GET_ARGUMENT_L("periodiser_X=""per_X=",periodiser_X);
                         GET_ARGUMENT_L("symetriser_X=""sym_X=",symetriser_X);
                         GET_ARGUMENT_L("prolonger_X=""pro_X=",prolonger_X);
                         GET_ARGUMENT_L("periodiser_Y=""per_Y=",periodiser_Y);
                         GET_ARGUMENT_L("symetriser_Y=""sym_Y=",symetriser_Y);
                         GET_ARGUMENT_L("prolonger_Y=""pro_Y=",prolonger_Y);
                         GET_ARGUMENT_F("niveau_hors_image=""nhi=",niveau_flottant_hors_image);

                         GET_ARGUMENT_L("interpoler=""inter="
                                       ,FFload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement
                                        );
                         GET_ARGUMENT_N("ne_pas_interpoler=""ninter="
                                       ,FFload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement
                                        );
                         GET_ARGUMENT_L("lineaire=""bilineaire="
                                       ,FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire
                                        );
                         GET_ARGUMENT_N("cubique=""bicubique="
                                       ,FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire
                                        );
                         GET_ARGUMENT_L("pasX_et_pasY=""pasXY=",FFload_point_coordonnees_01_____utiliser_pasX_et_pasY);
                         GET_ARGUMENT_I("pasX=",FFload_point_coordonnees_01_____pasX);
                         GET_ARGUMENT_I("pasY=",FFload_point_coordonnees_01_____pasY);

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_3;
                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_5;
                                        /* Cette procedure fut introduite le 20211005105435...                                       */
                         )
                    );

     Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(IFmageA,nom_imageA))))
          Bblock
          DEFV(Float,INIT(minimum_Xf,F_INFINI));
          DEFV(Float,INIT(maximum_Xf,F_MOINS_L_INFINI));
          DEFV(Float,INIT(facteur_d_homothetie_Xf,FLOT__UNDEF));
          DEFV(Float,INIT(translation_Xf,FLOT__UNDEF));
                                        /* Pour definir le facteur d'homothetie et la constante de translation de 'Xf'.              */
          DEFV(Float,INIT(minimum_Yf,F_INFINI));
          DEFV(Float,INIT(maximum_Yf,F_MOINS_L_INFINI));
          DEFV(Float,INIT(facteur_d_homothetie_Yf,FLOT__UNDEF));
          DEFV(Float,INIT(translation_Yf,FLOT__UNDEF));
                                        /* Pour definir le facteur d'homothetie et la constante de translation de 'Yf'.              */

          Test(IL_FAUT(forcer_les_extrema_de_X_et_de_Y))
               Bblock
                    EGAL(minimum_Xf,minimum_X_force);
                    EGAL(maximum_Xf,maximum_X_force);

                    EGAL(minimum_Yf,minimum_Y_force);
                    EGAL(maximum_Yf,maximum_Y_force);
                                        /* Forcage des extrema (introduit le 20170602093947).                                        */
               Eblock
          ATes
               Bblock
               DoIn(index
                   ,PREMIER_ELEMENT_D_UN_FICHIER
                   ,DERNIER_ELEMENT_D_UN_FICHIER
                   ,I
                    )
                    Bblock
                    DEFV(Float,INIT(Xf,ELEMENT_DU_FICHIER_LISTE_X(index)));
                    DEFV(Float,INIT(Yf,ELEMENT_DU_FICHIER_LISTE_Y(index)));
                                        /* Recuperation de la valeur courante dans le fichier.                                       */

                    EGAL(minimum_Xf,MIN2(Xf,minimum_Xf));
                    EGAL(maximum_Xf,MAX2(Xf,maximum_Xf));

                    EGAL(minimum_Yf,MIN2(Yf,minimum_Yf));
                    EGAL(maximum_Yf,MAX2(Yf,maximum_Yf));
                                        /* Recherche des extrema.                                                                    */
                    Eblock
               EDoI
               Eblock
          ETes

          Test(IL_FAUT(symetriser_les_extrema_de_X_et_Y))
               Bblock
               DEFV(Float,INIT(extrema_absolu_Xf,MAXA2(minimum_Xf,maximum_Xf)));
               DEFV(Float,INIT(extrema_absolu_Yf,MAXA2(minimum_Yf,maximum_Yf)));

               EGAL(minimum_Xf,NEGA(extrema_absolu_Xf));
               EGAL(maximum_Xf,NEUT(extrema_absolu_Xf));

               EGAL(minimum_Yf,NEGA(extrema_absolu_Yf));
               EGAL(maximum_Yf,NEUT(extrema_absolu_Yf));
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(IFNE(minimum_Xf,maximum_Xf))
               Bblock
               EGAL(facteur_d_homothetie_Xf
                   ,DIVI(SOUS(COORDONNEE_BARYCENTRIQUE_MAXIMALE,COORDONNEE_BARYCENTRIQUE_MINIMALE)
                        ,SOUS(maximum_Xf,minimum_Xf)
                         )
                    );
               EGAL(translation_Xf
                   ,DIVI(DET2(COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE
                             ,minimum_Xf,maximum_Xf
                              )
                        ,SOUS(maximum_Xf,minimum_Xf)
                         )
                    );
                                        /* Calcul des donnees utiles pour passer de [minimum,maximum] a [0,1].                       */
               Eblock
          ATes
               Bblock
               EGAL(facteur_d_homothetie_Xf,FU);
               EGAL(translation_Xf,FU);
                                        /* Calcul des donnees utiles pour passer de [minimum,maximum] a [0,1].                       */
               Eblock
          ETes

          Test(IFNE(minimum_Yf,maximum_Yf))
               Bblock
               EGAL(facteur_d_homothetie_Yf
                   ,DIVI(SOUS(COORDONNEE_BARYCENTRIQUE_MAXIMALE,COORDONNEE_BARYCENTRIQUE_MINIMALE)
                        ,SOUS(maximum_Yf,minimum_Yf)
                         )
                    );
               EGAL(translation_Yf
                   ,DIVI(DET2(COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE
                             ,minimum_Yf,maximum_Yf
                              )
                        ,SOUS(maximum_Yf,minimum_Yf)
                         )
                    );
                                        /* Calcul des donnees utiles pour passer de [minimum,maximum] a [0,1].                       */
               Eblock
          ATes
               Bblock
               EGAL(facteur_d_homothetie_Yf,FU);
               EGAL(translation_Yf,FU);
                                        /* Calcul des donnees utiles pour passer de [minimum,maximum] a [0,1].                       */
               Eblock
          ETes

          gOPERATION_SUR_LES_FICHIERS(BLOC(
                                           DEFV(Float,INIT(Xf,ELEMENT_DU_FICHIER_LISTE_X(index)));
                                           DEFV(Float,INIT(Yf,ELEMENT_DU_FICHIER_LISTE_Y(index)));
                                        /* Recuperation des coordonnees {X,Y} courantes dans les fichiers.                           */
                                           )
                                     ,FFload_point_coordonnees_01(IFmageA
                                                                 ,AXPB(facteur_d_homothetie_Xf,Xf,translation_Xf)
                                                                 ,AXPB(facteur_d_homothetie_Yf,Yf,translation_Yf)
                                                                 ,periodiser_X
                                                                 ,periodiser_Y
                                                                 ,symetriser_X
                                                                 ,symetriser_Y
                                                                 ,prolonger_X
                                                                 ,prolonger_Y
                                                                 ,niveau_flottant_hors_image
                                                                  )
                                        /* Generation de la coordonnee 'Z'.                                                          */
                                     ,EDITER_LA_VALEUR_RESULTANTE_DANS_gOPERATION_SUR_LES_FICHIERS
                                     ,nombre_d_exemplaires_du_resultat_de_l_operation_sur_les_valeurs_courantes
                                      );
                                        /* Champ 'Z'...                                                                              */
          Eblock
     ATes
          Bblock
          Test__CODE_ERREUR__ERREUR07;
          Eblock
     ETes

     lGENERATION_D_UN_FICHIER(liste_initiale_des_Y,Y_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_X,X_IMPLICITE);

     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.