/*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N " H O R N E R I E N N E " D E D E U X I M A G E S F L O T T A N T E S */ /* ( " A D E U X V A R I A B L E S " ) D U S E C O N D D E G R E */ /* A A R I T H M E T I Q U E V A R I A B L E L O C A L E M E N T : */ /* */ /* */ /* Author of '$xci/comH_v2d2avl$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20080430150855). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 GENERER_LES_GET_ARGUMENTS_DE_CONTROLE_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 #include image_image_GOOF_IMAGE_EXT /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #define imageX \ IFmageA1 #define imageY \ IFmageA2 #define imageA_ADD2_ADD2 \ IFmageA3 #define imageA_ADD2_MUL2 \ IFmageA4 #define imageA_ADD2_MAX2 \ IFmageA5 #define imageA_ADD2_MINMAX \ IFmageA6 #define imageA_ADD2_MAXMIN \ IFmageA7 #define imageA_MUL2_ADD2 \ IFmageA8 #define imageA_MUL2_MUL2 \ IFmageA9 #define imageA_MUL2_MAX2 \ IFmageAA #define imageA_MUL2_MINMAX \ IFmageAB #define imageA_MUL2_MAXMIN \ IFmageAC #define imageR \ IFmageR /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N " H O R N E R I E N N E " D E D E U X I M A G E S F L O T T A N T E S */ /* ( " A D E U X V A R I A B L E S " ) D U S E C O N D D E G R E */ /* A A R I T H M E T I Q U E V A R I A B L E L O C A L E M E N T : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageX),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageY),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_ADD2_ADD2),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_ADD2_MUL2),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_ADD2_MAX2),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_ADD2_MINMAX),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_ADD2_MAXMIN),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_MUL2_ADD2),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_MUL2_MUL2),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_MUL2_MAX2),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_MUL2_MINMAX),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_MUL2_MAXMIN),NOM_PIPE)); /*..............................................................................................................................*/ EGAL(si_le_GooF_est_activable_utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,VRAI); /* A priori, l'utilisation de l'arithmetique etendue est forcee puisque l'option */ /* 'utiliser_l_arithmetique_etendue' peut etre activee et que cette derniere n'a */ /* evidemment d'interet qu'avec l'arithmetique etendue. */ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_C("imageX=""X=",nom_imageX); GET_ARGUMENT_C("imageY=""Y=",nom_imageY); GET_ARGUMENT_C("imageADD2_ADD2=""ADD2_ADD2=",nom_imageA_ADD2_ADD2); GET_ARGUMENT_C("imageADD2_MUL2=""ADD2_MUL2=",nom_imageA_ADD2_MUL2); GET_ARGUMENT_C("imageADD2_MAX2=""ADD2_MAX2=",nom_imageA_ADD2_MAX2); GET_ARGUMENT_C("imageADD2_MINMAX=""ADD2_MINMAX=",nom_imageA_ADD2_MINMAX); GET_ARGUMENT_C("imageADD2_MAXMIN=""ADD2_MAXMIN=",nom_imageA_ADD2_MAXMIN); GET_ARGUMENT_C("imageMUL2_ADD2=""MUL2_ADD2=",nom_imageA_MUL2_ADD2); GET_ARGUMENT_C("imageMUL2_MUL2=""MUL2_MUL2=",nom_imageA_MUL2_MUL2); GET_ARGUMENT_C("imageMUL2_MAX2=""MUL2_MAX2=",nom_imageA_MUL2_MAX2); GET_ARGUMENT_C("imageMUL2_MINMAX=""MUL2_MINMAX=",nom_imageA_MUL2_MINMAX); GET_ARGUMENT_C("imageMUL2_MAXMIN=""MUL2_MAXMIN=",nom_imageA_MUL2_MAXMIN); GET_ARGUMENT_F("A22=""a22=",IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A22); GET_ARGUMENT_F("A21=""a21=",IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A21); GET_ARGUMENT_F("A20=""a20=",IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A20); GET_ARGUMENT_F("A12=""a12=",IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A12); GET_ARGUMENT_F("A11=""a11=",IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A11); GET_ARGUMENT_F("A10=""a10=",IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A10); GET_ARGUMENT_F("A02=""a02=",IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A02); GET_ARGUMENT_F("A01=""a01=",IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A01); GET_ARGUMENT_F("A00=""a00=",IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A00); GET_ARGUMENT_C("imageR=""R=",nom_imageR); ) ); CALi(IFinitialisation(imageR,FZERO)); /* Initialisation de l'image Resultat. */ Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageX,nom_imageX)))) Bblock Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageY,nom_imageY)))) Bblock /* Entree des deux images Arguments {imageX,imageY} a combiner de facon "hornerienne". */ Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageA_ADD2_ADD2,nom_imageA_ADD2_ADD2)))) Bblock Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageA_ADD2_MUL2,nom_imageA_ADD2_MUL2)))) Bblock Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageA_ADD2_MAX2,nom_imageA_ADD2_MAX2)))) Bblock Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageA_ADD2_MINMAX,nom_imageA_ADD2_MINMAX)))) Bblock Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageA_ADD2_MAXMIN,nom_imageA_ADD2_MAXMIN)))) Bblock Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageA_MUL2_ADD2,nom_imageA_MUL2_ADD2)))) Bblock Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageA_MUL2_MUL2,nom_imageA_MUL2_MUL2)))) Bblock Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageA_MUL2_MAX2,nom_imageA_MUL2_MAX2)))) Bblock Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageA_MUL2_MINMAX ,nom_imageA_MUL2_MINMAX ) ) ) ) Bblock Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(imageA_MUL2_MAXMIN ,nom_imageA_MUL2_MAXMIN ) ) ) ) Bblock /* Entree des dix images Arguments definissant l'arithmetique locale... */ CALS(IFcombinaison_hornerienne_var2_degre2_avl(imageR ,imageX ,imageY ,imageA_ADD2_ADD2 ,imageA_ADD2_MUL2 ,imageA_ADD2_MAX2 ,imageA_ADD2_MINMAX ,imageA_ADD2_MAXMIN ,imageA_MUL2_ADD2 ,imageA_MUL2_MUL2 ,imageA_MUL2_MAX2 ,imageA_MUL2_MINMAX ,imageA_MUL2_MAXMIN ) ); /* Combinaison "hornerienne" des deux images {X,Y} par calcul du polynome : */ /* */ /* i=2 j=2 */ /* _____ _____ */ /* \ \ j i */ /* P(X,Y) = \ \ A .X .Y */ /* / / ij */ /* /_____ /_____ */ /* i=0 j=0 */ /* */ /* en notant bien que : */ /* */ /* i --0--> Y */ /* j --0--> X */ /* */ /* dans 'A(i,j)' et non pas l'inverse (qui pourrait paraitre plus logique...). */ CALi(IupdateF_image(nom_imageR,imageR)); Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes RETU_Commande; Eblock ECommande