/*************************************************************************************************************************************/ /* */ /* P R O D U I T C O M P L E X E D E Q U A T R E I M A G E S F L O T T A N T E S : */ /* */ /* */ /* Author of '$xci/multC_02.01$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20060619141252). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 /* Introduit le 20061018093953... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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_PENT_IMAGE_EXT #include image_image_GOOF_IMAGE_EXT /* Introduit le 20061018093953... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define LES_IMAGESA_SONT_STANDARDS \ FAUX #define LES_IMAGESR_SONT_STANDARDS \ FAUX /* Pour permettre de traiter aussi bien des images standards que non. Ceci fut introduit le */ /* 20060625115015... */ #define MINIMUM_FORCE \ COORDONNEE_BARYCENTRIQUE_MINIMALE #define MAXIMUM_FORCE \ COORDONNEE_BARYCENTRIQUE_MAXIMALE /* Definition de la normalisation des images standards (introduit le 20060625115015...). */ #define UTILISER_L_ARITHMETIQUE_ETENDUE \ FAUX \ /* Faut-il utiliser l'arithmetique etendue ('VRAI') ou pas ('FAUX') ? Ceci fut introduit */ \ /* le 20061018093953, la valeur par defaut assurant la compatibilite anterieure... */ #define PONDERATION_R_IMPLICITE \ FZERO #define PONDERATION_I_IMPLICITE \ FZERO #define PONDERATION_M_IMPLICITE \ FZERO #define PONDERATION_A_IMPLICITE \ FZERO /* Ponderation de selection des composantes des resultats apres le produit. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P R O D U I T C O M P L E X E D E Q U A T R E I M A G E S F L O T T A N T E S : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_R_1),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_I_1),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_R_2),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_I_2),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageP),NOM_PIPE)); DEFV(genere_Float,INIT(minimum_force,MINIMUM_FORCE)); DEFV(genere_Float,INIT(maximum_force,MAXIMUM_FORCE)); /* Definition de la normalisation des images standards (introduit le 20060625115015...). */ DEFV(Logical,INIT(utiliser_l_arithmetique_etendue,UTILISER_L_ARITHMETIQUE_ETENDUE)); /* Faut-il utiliser l'arithmetique etendue ('VRAI') ou pas ('FAUX') ? Ceci fut introduit */ /* le 20061018093953, la valeur par defaut assurant la compatibilite anterieure... */ DEFV(Float,INIT(ponderation_R,PONDERATION_R_IMPLICITE)); DEFV(Float,INIT(ponderation_I,PONDERATION_I_IMPLICITE)); DEFV(Float,INIT(ponderation_M,PONDERATION_M_IMPLICITE)); DEFV(Float,INIT(ponderation_A,PONDERATION_A_IMPLICITE)); /* Ponderation de selection des composantes des resultats apres le produit. */ /*..............................................................................................................................*/ 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. Ce forcage a ete introduit */ /* le 20061018111605 parce que c'est evidemment le mode le plus interessant ici. */ EGAL(C_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base,VRAI); /* A priori, l'utilisation de l'arithmetique etendue dans les complexes est forcee */ /* parce que c'est evidemment le mode le plus interessant ici (introduit le 20070130094701). */ EGAL(les_imagesA_sont_standards,LES_IMAGESA_SONT_STANDARDS); EGAL(les_imagesR_sont_standards,LES_IMAGESR_SONT_STANDARDS); /* Pour permettre de traiter aussi bien des images standards que non. Ceci fut introduit le */ /* 20060625115015... */ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_C("imageA_R_1=""AR1=",nom_imageA_R_1); GET_ARGUMENT_C("imageA_I_1=""AI1=",nom_imageA_I_1); GET_ARGUMENT_C("imageA_R_2=""AR2=",nom_imageA_R_2); GET_ARGUMENT_C("imageA_I_2=""AI2=",nom_imageA_I_2); GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_L("standardA=",les_imagesA_sont_standards); GET_ARGUMENT_L("standardR=",les_imagesR_sont_standards); /* Introduit le 20060625115015... */ GET_ARGUMENT_F("minimum=""min=",minimum_force); GET_ARGUMENT_F("maximum=""max=",maximum_force); /* Introduit le 20060625115015... */ GET_ARGUMENT_L("arithmetique_etendue_produit=""ariep=",utiliser_l_arithmetique_etendue); /* Introduit le 20061018093953... */ /* */ /* On notera que ces parametres conditionnent la fonction 'IFproduit_...(...)' qui sera */ /* appelee ci-apres, alors que les parametres 'v $xig/fonct$vv$DEF arithmetique_etendue=', */ /* eux conditionnent le choix entre l'arithmetique de base et l'arithmetique etendue a son */ /* niveau le plus basique (et dans le cas present a l'interieur meme de la fonction */ /* 'IFproduit_complexe_etendu(...)' si c'est elle qui a ete choisie...). */ GET_ARGUMENT_L("multiplicatif=",IFproduit_complexe_____multiplicatif); GET_ARGUMENT_N("additif=",IFproduit_complexe_____multiplicatif); GET_ARGUMENT_L("direct=",IFproduit_complexe_____direct); GET_ARGUMENT_N("inverse=",IFproduit_complexe_____direct); GET_ARGUMENT_F("pr=""pR=""Pond1=",ponderation_R); GET_ARGUMENT_F("pi=""pI=""Pond2=",ponderation_I); GET_ARGUMENT_F("pm=""pM=""Pond3=",ponderation_M); GET_ARGUMENT_F("pa=""pA=""Pond4=",ponderation_A); CONTROLE_DE_L_ARITHMETIQUE_ETENDUE_DES_NOMBRES_COMPLEXES; /* Cette extension a ete introduite le 20070130105257... */ ) ); CALi(gInettoyage(les_imagesR_sont_standards,ImageR,IFmageR)); /* Initialisation de l'image Resultat. */ Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_imagesA_sont_standards,ImageA1,IFmageA1,nom_imageA_R_1)))) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_imagesA_sont_standards,ImageA2,IFmageA2,nom_imageA_I_1)))) Bblock /* Chargement des images {R,I} Argument 1. */ Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_imagesA_sont_standards,ImageA3,IFmageA3,nom_imageA_R_2)))) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_imagesA_sont_standards,ImageA4,IFmageA4,nom_imageA_I_2)))) Bblock /* Chargement des images {R,I} Argument 2. */ Test(EST_VRAI(les_imagesA_sont_standards)) Bblock CALS(Istd_float(IFmageA1,minimum_force,maximum_force,ImageA1)); CALS(Istd_float(IFmageA2,minimum_force,maximum_force,ImageA2)); CALS(Istd_float(IFmageA3,minimum_force,maximum_force,ImageA3)); CALS(Istd_float(IFmageA4,minimum_force,maximum_force,ImageA4)); /* Normalisation des images standards (introduit le 20060625115015...). */ Eblock ATes Bblock Eblock ETes Test(IL_NE_FAUT_PAS(utiliser_l_arithmetique_etendue)) /* Test introduit le 20061018093953... */ Bblock CALS(IFproduit_complexe(IFmageR ,ponderation_R,ponderation_I ,ponderation_M,ponderation_A ,IFmageA1,IFmageA2 ,IFmageA3,IFmageA4 ) ); /* Et produit "complexe" des quatre images Argument. */ Eblock ATes Bblock CALS(IFproduit_complexe_etendu(IFmageR ,ponderation_R,ponderation_I ,ponderation_M,ponderation_A ,IFmageA1,IFmageA2 ,IFmageA3,IFmageA4 ) ); /* Et produit "complexe" generalise des quatre images Argument (introduit le */ /* 20061018093953). */ Eblock ETes Test(EST_VRAI(les_imagesR_sont_standards)) Bblock CALS(Ifloat_std_avec_renormalisation(ImageR,IFmageR)); /* Denormalisation de l'image Resultat (introduit le 20060625115015...). */ Eblock ATes Bblock Eblock ETes CALi(gIupdate_image(les_imagesR_sont_standards,nom_imageR,ImageR,IFmageR)); 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