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