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