/*************************************************************************************************************************************/ /* */ /* P R O D U I T H Y P E R - H Y P E R - C O M P L E X E D E S E I Z E I M A G E S F L O T T A N T E S */ /* E T D O N C D E D E U X F A M I L L E S D ' O C T O N I O N S : */ /* */ /* */ /* Author of '$xci/multHHC_02.01$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20110826114940). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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_PENT_IMAGE_EXT #include image_image_GOOF_IMAGE_EXT /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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. */ #define MINIMUM_FORCE \ COORDONNEE_BARYCENTRIQUE_MINIMALE #define MAXIMUM_FORCE \ COORDONNEE_BARYCENTRIQUE_MAXIMALE /* Definition de la normalisation des images standards. */ #define UTILISER_L_ARITHMETIQUE_ETENDUE \ FAUX \ /* Faut-il utiliser l'arithmetique etendue ('VRAI') ou pas ('FAUX') ? */ #define PONDERATION_R_IMPLICITE \ FZERO #define PONDERATION_I_IMPLICITE \ FZERO #define PONDERATION_J_IMPLICITE \ FZERO #define PONDERATION_K_IMPLICITE \ FZERO #define PONDERATION_S_IMPLICITE \ FZERO #define PONDERATION_T_IMPLICITE \ FZERO #define PONDERATION_U_IMPLICITE \ FZERO #define PONDERATION_V_IMPLICITE \ FZERO #define PONDERATION_M__IMPLICITE \ FZERO #define PONDERATION_A1_IMPLICITE \ FZERO #define PONDERATION_A2_IMPLICITE \ FZERO #define PONDERATION_A3_IMPLICITE \ FZERO #define PONDERATION_A4_IMPLICITE \ FZERO #define PONDERATION_A5_IMPLICITE \ FZERO #define PONDERATION_A6_IMPLICITE \ FZERO #define PONDERATION_A7_IMPLICITE \ FZERO /* Ponderation de selection des composantes des resultats apres le produit. */ #define COMPATIBILITE_20110929 \ FAUX \ /* Permet de proceder a des calculs compatibles a ceux qui furent effectues anterieurement */ \ /* au 20110929105510 pour lesquels les 'nom_imageA_?_2's etaient, par erreur, remplaces */ \ /* malheureusement par 'nom_imageA_?_1' (ce qui revenait alors a calculer le "carre" des */ \ /* images 'nom_imageA_?_1's point a point, en ignorant donc les images 'nom_imageA_?_2's). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #define NOM_IMAGEA_2(nom_imageA_1,nom_imageA_2) \ COND(IL_FAUT(compatibilite_20110929) \ ,nom_imageA_1 \ ,nom_imageA_2 \ ) #define NOM_IMAGEA_R_2 \ NOM_IMAGEA_2(nom_imageA_R_1,nom_imageA_R_2) #define NOM_IMAGEA_I_2 \ NOM_IMAGEA_2(nom_imageA_I_1,nom_imageA_I_2) #define NOM_IMAGEA_J_2 \ NOM_IMAGEA_2(nom_imageA_J_1,nom_imageA_J_2) #define NOM_IMAGEA_K_2 \ NOM_IMAGEA_2(nom_imageA_K_1,nom_imageA_K_2) #define NOM_IMAGEA_S_2 \ NOM_IMAGEA_2(nom_imageA_S_1,nom_imageA_S_2) #define NOM_IMAGEA_T_2 \ NOM_IMAGEA_2(nom_imageA_T_1,nom_imageA_T_2) #define NOM_IMAGEA_U_2 \ NOM_IMAGEA_2(nom_imageA_U_1,nom_imageA_U_2) #define NOM_IMAGEA_V_2 \ NOM_IMAGEA_2(nom_imageA_V_1,nom_imageA_V_2) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P R O D U I T H Y P E R - H Y P E R - C O M P L E X E D E S E I Z E I M A G E S F L O T T A N T E S */ /* E T D O N C D E D E U X F A M I L L E S D ' O C T O N I O N 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_J_1),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_K_1),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_S_1),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_T_1),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_U_1),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_V_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_imageA_J_2),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_K_2),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_S_2),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_T_2),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_U_2),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA_V_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. */ DEFV(Logical,INIT(utiliser_l_arithmetique_etendue,UTILISER_L_ARITHMETIQUE_ETENDUE)); /* Faut-il utiliser l'arithmetique etendue ('VRAI') ou pas ('FAUX') ? */ DEFV(Float,INIT(ponderation_R,PONDERATION_R_IMPLICITE)); DEFV(Float,INIT(ponderation_I,PONDERATION_I_IMPLICITE)); DEFV(Float,INIT(ponderation_J,PONDERATION_J_IMPLICITE)); DEFV(Float,INIT(ponderation_K,PONDERATION_K_IMPLICITE)); DEFV(Float,INIT(ponderation_S,PONDERATION_S_IMPLICITE)); DEFV(Float,INIT(ponderation_T,PONDERATION_T_IMPLICITE)); DEFV(Float,INIT(ponderation_U,PONDERATION_U_IMPLICITE)); DEFV(Float,INIT(ponderation_V,PONDERATION_V_IMPLICITE)); DEFV(Float,INIT(ponderation_M_,PONDERATION_M__IMPLICITE)); DEFV(Float,INIT(ponderation_A1,PONDERATION_A1_IMPLICITE)); DEFV(Float,INIT(ponderation_A2,PONDERATION_A2_IMPLICITE)); DEFV(Float,INIT(ponderation_A3,PONDERATION_A3_IMPLICITE)); DEFV(Float,INIT(ponderation_A4,PONDERATION_A4_IMPLICITE)); DEFV(Float,INIT(ponderation_A5,PONDERATION_A5_IMPLICITE)); DEFV(Float,INIT(ponderation_A6,PONDERATION_A6_IMPLICITE)); DEFV(Float,INIT(ponderation_A7,PONDERATION_A7_IMPLICITE)); /* Ponderation de selection des composantes des resultats apres le produit. */ DEFV(Logical,INIT(compatibilite_20110929,COMPATIBILITE_20110929)); /* Permet de proceder a des calculs compatibles a ceux qui furent effectues anterieurement */ /* au 20110929105510 pour lesquels les 'nom_imageA_?_2's etaient, par erreur, remplaces */ /* malheureusement par 'nom_imageA_?_1' (ce qui revenait alors a calculer le "carre" des */ /* images 'nom_imageA_?_1's point a point, en ignorant donc les images 'nom_imageA_?_2's). */ /*..............................................................................................................................*/ 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. C'est evidemment le mode */ /* le plus interessant ici... */ EGAL(HC_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base,VRAI); /* A priori, l'utilisation de l'arithmetique etendue dans les hyper-hyper-complexes est */ /* forcee parce que c'est evidemment le mode le plus interessant ici. */ 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. */ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_L("compatibilite_20110929=",compatibilite_20110929); 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_J_1=""AJ1=",nom_imageA_J_1); GET_ARGUMENT_C("imageA_K_1=""AK1=",nom_imageA_K_1); GET_ARGUMENT_C("imageA_S_1=""AS1=",nom_imageA_S_1); GET_ARGUMENT_C("imageA_T_1=""AT1=",nom_imageA_T_1); GET_ARGUMENT_C("imageA_U_1=""AU1=",nom_imageA_U_1); GET_ARGUMENT_C("imageA_V_1=""AV1=",nom_imageA_V_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("imageA_J_2=""AJ2=",nom_imageA_J_2); GET_ARGUMENT_C("imageA_K_2=""AK2=",nom_imageA_K_2); GET_ARGUMENT_C("imageA_S_2=""AS2=",nom_imageA_S_2); GET_ARGUMENT_C("imageA_T_2=""AT2=",nom_imageA_T_2); GET_ARGUMENT_C("imageA_U_2=""AU2=",nom_imageA_U_2); GET_ARGUMENT_C("imageA_V_2=""AV2=",nom_imageA_V_2); GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_L("standardA=",les_imagesA_sont_standards); GET_ARGUMENT_L("standardR=",les_imagesR_sont_standards); GET_ARGUMENT_F("minimum=""min=",minimum_force); GET_ARGUMENT_F("maximum=""max=",maximum_force); GET_ARGUMENT_L("arithmetique_etendue_produit=""ariep=",utiliser_l_arithmetique_etendue); GET_ARGUMENT_L("multiplicatif=",IFproduit_hyper_hyper_complexe_____multiplicatif); GET_ARGUMENT_N("additif=",IFproduit_hyper_hyper_complexe_____multiplicatif); GET_ARGUMENT_L("direct=",IFproduit_hyper_hyper_complexe_____direct); GET_ARGUMENT_N("inverse=",IFproduit_hyper_hyper_complexe_____direct); GET_ARGUMENT_F("pcr=""pcR=",ponderation_R); GET_ARGUMENT_F("pci=""pcI=",ponderation_I); GET_ARGUMENT_F("pcj=""pcJ=",ponderation_J); GET_ARGUMENT_F("pck=""pcK=",ponderation_K); GET_ARGUMENT_F("pcs=""pcS=",ponderation_S); GET_ARGUMENT_F("pct=""pcT=",ponderation_T); GET_ARGUMENT_F("pcu=""pcU=",ponderation_U); GET_ARGUMENT_F("pcv=""pcV=",ponderation_V); GET_ARGUMENT_F("pcm=""pcM=",ponderation_M_); GET_ARGUMENT_F("pca1=""pcA1=",ponderation_A1); GET_ARGUMENT_F("pca2=""pcA2=",ponderation_A2); GET_ARGUMENT_F("pca3=""pcA3=",ponderation_A3); GET_ARGUMENT_F("pca4=""pcA4=",ponderation_A4); GET_ARGUMENT_F("pca5=""pcA5=",ponderation_A5); GET_ARGUMENT_F("pca6=""pcA6=",ponderation_A6); GET_ARGUMENT_F("pca7=""pcA7=",ponderation_A7); CONTROLE_DE_L_ARITHMETIQUE_ETENDUE_DES_NOMBRES_HYPER_HYPER_COMPLEXES; ) ); CALi(gInettoyage(les_imagesR_sont_standards,ImageR,IFmageR)); /* Initialisation de l'image Resultat. */ #define iAstandards \ les_imagesA_sont_standards \ /* Pour raccourcir certaines lignes qui suivent... */ Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageA1 ,IFmageA1 ,nom_imageA_R_1 ) ) ) ) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageA2 ,IFmageA2 ,nom_imageA_I_1 ) ) ) ) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageA3 ,IFmageA3 ,nom_imageA_J_1 ) ) ) ) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageA4 ,IFmageA4 ,nom_imageA_K_1 ) ) ) ) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageA5 ,IFmageA5 ,nom_imageA_S_1 ) ) ) ) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageA6 ,IFmageA6 ,nom_imageA_T_1 ) ) ) ) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageA7 ,IFmageA7 ,nom_imageA_U_1 ) ) ) ) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageA8 ,IFmageA8 ,nom_imageA_V_1 ) ) ) ) Bblock /* Chargement des images {R,I,J,K,S,T,U,V} Argument 1. */ Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageA9 ,IFmageA9 ,NOM_IMAGEA_R_2 ) ) ) ) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageAA ,IFmageAA ,NOM_IMAGEA_I_2 ) ) ) ) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageAB ,IFmageAB ,NOM_IMAGEA_J_2 ) ) ) ) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageAC ,IFmageAC ,NOM_IMAGEA_K_2 ) ) ) ) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageAD ,IFmageAD ,NOM_IMAGEA_S_2 ) ) ) ) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageAE ,IFmageAE ,NOM_IMAGEA_T_2 ) ) ) ) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageAF ,IFmageAF ,NOM_IMAGEA_U_2 ) ) ) ) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(iAstandards ,ImageAG ,IFmageAG ,NOM_IMAGEA_V_2 ) ) ) ) Bblock /* Chargement des images {R,I,J,K,S,T,U,V} Argument 2. */ Test(EST_VRAI(iAstandards)) 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 ) ); CALS(Istd_float(IFmageA5 ,minimum_force ,maximum_force ,ImageA5 ) ); CALS(Istd_float(IFmageA6 ,minimum_force ,maximum_force ,ImageA6 ) ); CALS(Istd_float(IFmageA7 ,minimum_force ,maximum_force ,ImageA7 ) ); CALS(Istd_float(IFmageA8 ,minimum_force ,maximum_force ,ImageA8 ) ); /* Normalisation des images standards. */ Eblock ATes Bblock Eblock ETes #define u_arithmetique_etendue \ utiliser_l_arithmetique_etendue \ /* Pour raccourcir certaines lignes qui suivent... */ Test(IL_NE_FAUT_PAS(u_arithmetique_etendue)) Bblock CALS(IFproduit_hyper_hyper_complexe (IFmageR ,ponderation_R ,ponderation_I ,ponderation_J ,ponderation_K ,ponderation_S ,ponderation_T ,ponderation_U ,ponderation_V ,ponderation_M_ ,ponderation_A1 ,ponderation_A2 ,ponderation_A3 ,ponderation_A4 ,ponderation_A5 ,ponderation_A6 ,ponderation_A7 ,IFmageA1,IFmageA2,IFmageA3,IFmageA4 ,IFmageA5,IFmageA6,IFmageA7,IFmageA8 ,IFmageA9,IFmageAA,IFmageAB,IFmageAC ,IFmageAD,IFmageAE,IFmageAF,IFmageAG ) ); /* Et produit "hyper-hyper-complexe" des huit images Argument. */ Eblock ATes Bblock CALS(IFproduit_hyper_hyper_complexe_etendu (IFmageR ,ponderation_R ,ponderation_I ,ponderation_J ,ponderation_K ,ponderation_S ,ponderation_T ,ponderation_U ,ponderation_V ,ponderation_M_ ,ponderation_A1 ,ponderation_A2 ,ponderation_A3 ,ponderation_A4 ,ponderation_A5 ,ponderation_A6 ,ponderation_A7 ,IFmageA1,IFmageA2,IFmageA3,IFmageA4 ,IFmageA5,IFmageA6,IFmageA7,IFmageA8 ,IFmageA9,IFmageAA,IFmageAB,IFmageAC ,IFmageAD,IFmageAE,IFmageAF,IFmageAG ) ); /* Et produit "hyper-hyper-complexe" generalise des huit images Argument. */ Eblock ETes #undef u_arithmetique_etendue Test(EST_VRAI(les_imagesR_sont_standards)) Bblock CALS(Ifloat_std_avec_renormalisation(ImageR ,IFmageR ) ); /* Denormalisation de l'image Resultat. */ 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 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 #undef iAstandards RETU_Commande; Eblock ECommande