_______________________________________________________________________________________________________________________________________ /*************************************************************************************************************************************/ /* */ /* F O N C T I O N S D E B A S E N E C E S S I T A N T L E ' GooF ' : */ /* */ /* */ /* Definition : */ /* */ /* Ce fichier contient toutes les fonctions */ /* de base de gestion et de manipulation d'une */ /* image raster, quelle que soit la definition */ /* et necessitant le 'GooF'. Ceci a ete cree le */ /* 20051128153129 a partir de 'v $xiii/di_image$FON' */ /* afin d'alleger le processus 'v $xcc/cpp$Z' dans le */ /* mode '$xcp/substitue.01$X' (au lieu de '$SE'). */ /* */ /* */ /* Author of '$xiii/GooF_image$FON' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20051128153129). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E L A D Y N A M I Q U E D E V E R H U L S T : */ /* */ /*************************************************************************************************************************************/ #define NIVEAU_MINIMUM_DE_L_ITERATION_0 \ FZERO #define NIVEAU_MAXIMUM_DE_L_ITERATION_0 \ FU /* Extrema suggeres pour l'image Argument... */ #define VERIFICATION_INITIALE_DE_LA_DYNAMIQUE_DE_VERHULST(image) \ Bblock \ DEFV(genere_Float,INIT(niveau_minimum,FLOT__NIVEAU_UNDEF)); \ DEFV(genere_Float,INIT(niveau_maximum,FLOT__NIVEAU_UNDEF)); \ /* Donne les extrema de 'image'. */ \ \ CALS(IFnivo_extrema(image \ ,ADRESSE(niveau_minimum) \ ,ADRESSE(niveau_maximum) \ ) \ ); \ /* Recherche des extrema... */ \ \ Test(IFET(IFINff(niveau_minimum,NIVEAU_MINIMUM_DE_L_ITERATION_0,NIVEAU_MAXIMUM_DE_L_ITERATION_0) \ ,IFINff(niveau_maximum,NIVEAU_MINIMUM_DE_L_ITERATION_0,NIVEAU_MAXIMUM_DE_L_ITERATION_0) \ ) \ ) \ Bblock \ Eblock \ ATes \ Bblock \ PRINT_ATTENTION("les extrema de l'image Argument risque de provoquer des debordements flottants"); \ CAL1(Prer2("extrema mesures = (%g,%g)\n",niveau_minimum,niveau_maximum)); \ CAL1(Prer2("extrema suggeres = (%g,%g)\n",NIVEAU_MINIMUM_DE_L_ITERATION_0,NIVEAU_MAXIMUM_DE_L_ITERATION_0)); \ Eblock \ ETes \ Eblock \ /* Verification du segment d'appartenance des niveaux de 'image'. */ #define DYNAMIQUE_DE_VERHULST(transformer,valeur_N,valeur_N_1,increment_du_taux_de_croissance) \ Bblock \ DEFV(Float,INIT(taux_de_croissance_courant,loadF_point(taux_de_croissance,X,Y))); \ /* Taux de croissance au point {X,Y}... */ \ \ Test(IL_FAUT(transformer)) \ Bblock \ EGAL(valeur_N_1,valeur_N); \ /* Iteration... */ \ EGAL(valeur_N \ ,SOUS(MUL2(ADD2(taux_de_croissance_courant,increment_du_taux_de_croissance) \ ,valeur_N_1 \ ) \ ,MUL2(taux_de_croissance_courant,EXP2(valeur_N_1)) \ ) \ ); \ /* Rappelons que la dynamique de Verhulst est definie par l'iteration suivante : */ \ /* */ \ /* 2 */ \ /* X = (R+1).X - R.X */ \ /* n n-1 n-1 */ \ /* */ \ /* et qu'elle est tres sensible aux erreurs d'arrondi (pour R>2.57)... */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Definition de la dynamique de Verhulst. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N I T E R A T I V E D ' U N E I M A G E */ /* P A R L A D Y N A M I Q U E D E V E R H U L S T D E L O C A L I S E E : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Float,SINT(IFdynamique_de_Verhulst_delocalisee_____increment_du_taux_de_croissance,FU))); /* Increment de 'R' qui vaut generalement '+1'... */ DEFV(Common,DEFV(FonctionF,POINTERF(IFdynamique_de_Verhulst_delocalisee(imageR ,taux_de_croissance ,nombre_d_iterations ,imageA ,transformer_les_niveaux ,transformer_les_coordonnees_X ,transformer_les_coordonnees_Y ) ) ) ) DEFV(Argument,DEFV(imageF,imageR)); /* Image Resultat de la modification de 'imageA' par la dynamique de Verhulst iteree */ /* et "delocalisee" (c'est-a-dire que a la fois {X,Y} et le niveau changent). */ DEFV(Argument,DEFV(imageF,taux_de_croissance)); /* Taux de croissance 'R' (passe de 'Float' a 'imageF' le 20040915171730). */ DEFV(Argument,DEFV(Positive,nombre_d_iterations)); /* Nombre d'iterations 'N'. */ DEFV(Argument,DEFV(imageF,imageA)); /* Image Argument a modifier. */ DEFV(Argument,DEFV(Logical,transformer_les_niveaux)); DEFV(Argument,DEFV(Logical,transformer_les_coordonnees_X)); DEFV(Argument,DEFV(Logical,transformer_les_coordonnees_Y)); /* Indiquent si les niveaux et les coordonnees sont respectivement a transformer. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ VERIFICATION_INITIALE_DE_LA_DYNAMIQUE_DE_VERHULST(imageA); begin_image Bblock DEFV(genere_Float,INIT(niveau_N_1,FLOT__NIVEAU_UNDEF)); DEFV(genere_Float,INIT(niveau_N,loadF_point(imageA,X,Y))); /* Niveau flottant avant et apres iteration. */ DEFV(Float,INIT(coordonnee_X_N_1,FLOT__UNDEF)); DEFV(Float,INIT(coordonnee_X_N,_____cNORMALISE_OX(X))); /* Coordonnee 'X' avant et apres iteration. */ DEFV(Float,INIT(coordonnee_Y_N_1,FLOT__UNDEF)); DEFV(Float,INIT(coordonnee_Y_N,_____cNORMALISE_OY(Y))); /* Coordonnee 'Y' avant et apres iteration. */ Repe(nombre_d_iterations) Bblock USs_GooF(BLOC( Bblock DYNAMIQUE_DE_VERHULST(transformer_les_niveaux ,niveau_N ,niveau_N_1 ,IFdynamique_de_Verhulst_delocalisee_____increment_du_taux_de_croissance ); DYNAMIQUE_DE_VERHULST(transformer_les_coordonnees_X ,coordonnee_X_N ,coordonnee_X_N_1 ,IFdynamique_de_Verhulst_delocalisee_____increment_du_taux_de_croissance ); DYNAMIQUE_DE_VERHULST(transformer_les_coordonnees_Y ,coordonnee_Y_N ,coordonnee_Y_N_1 ,IFdynamique_de_Verhulst_delocalisee_____increment_du_taux_de_croissance ); Eblock ) ); /* Procedure introduite le 20080105225731... */ Eblock ERep storeF_point_valide(niveau_N ,imageR ,_cDENORMALISE_OX(coordonnee_X_N),_cDENORMALISE_OY(coordonnee_Y_N) ); /* Modification element par element delocalisee, c'est-a-dire que a la fois {X,Y} et le */ /* niveau changent ; ainsi, 'N' designant le niveau, on fait : */ /* */ /* X = Verhulst(X ) */ /* n n-1 */ /* */ /* Y = Verhulst(Y ) */ /* n n-1 */ /* */ /* N = Verhulst(N ) */ /* n n-1 */ /* */ Eblock end_image RETIF(imageR); Eblock EFonctionF /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N I T E R A T I V E D ' U N E I M A G E */ /* P A R L A D Y N A M I Q U E D E V E R H U L S T L O C A L I S E E : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Float,SINT(IFdynamique_de_Verhulst_localisee_____increment_du_taux_de_croissance,FU))); /* Increment de 'R' qui vaut generalement '+1'... */ DEFV(Common,DEFV(FonctionF,POINTERF(IFdynamique_de_Verhulst_localisee(imageR ,taux_de_croissance ,nombre_d_iterations ,imageA ,ponderation_X ,ponderation_Y ,ponderation_N ,translation__ ) ) ) ) /* Fonction introduite le 20040915100234. */ DEFV(Argument,DEFV(imageF,imageR)); /* Image Resultat de la modification de 'imageA' par la dynamique de Verhulst iteree */ /* et "localisee" (c'est-a-dire que seul le niveau change, {X,Y} restant inchange). */ DEFV(Argument,DEFV(imageF,taux_de_croissance)); /* Taux de croissance 'R' (passe de 'Float' a 'imageF' le 20040915171730). */ DEFV(Argument,DEFV(Positive,nombre_d_iterations)); /* Nombre d'iterations 'N'. */ DEFV(Argument,DEFV(imageF,imageA)); /* Image Argument a modifier. */ DEFV(Argument,DEFV(imageF,ponderation_X)); DEFV(Argument,DEFV(imageF,ponderation_Y)); DEFV(Argument,DEFV(imageF,ponderation_N)); DEFV(Argument,DEFV(imageF,translation__)); /* Ponderation et translation des differents elements pris en compte... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ VERIFICATION_INITIALE_DE_LA_DYNAMIQUE_DE_VERHULST(imageA); /* ATTENTION : je note le 20040915113707 que ce test n'est que partiel car finalement il */ /* fait l'hypothese suivante : */ /* */ /* ponderation_X_courante = 0 */ /* ponderation_Y_courante = 0 */ /* ponderation_N_courante = +1 */ /* translation___courante = 0 */ /* */ /* et l'experience montre que par exemple : */ /* */ /* ponderation_X_courante = -1 */ /* ponderation_Y_courante = +1 */ /* ponderation_N_courante = +1 */ /* translation___courante = 0 */ /* */ /* provoque des debordements... */ begin_image Bblock DEFV(Float,INIT(ponderation_X_courante,loadF_point(ponderation_X,X,Y))); DEFV(Float,INIT(ponderation_Y_courante,loadF_point(ponderation_Y,X,Y))); DEFV(Float,INIT(ponderation_N_courante,loadF_point(ponderation_N,X,Y))); DEFV(Float,INIT(translation___courante,loadF_point(translation__,X,Y))); /* Nouveau niveau flottant avant et apres iteration. */ Test(IZNE(ADD4(ponderation_X_courante ,ponderation_Y_courante ,ponderation_N_courante ,translation___courante ) ) ) Bblock DEFV(genere_Float,INIT(nouveau_niveau_N_1,FLOT__NIVEAU_UNDEF)); DEFV(genere_Float,INIT(nouveau_niveau_N ,LIR3(ponderation_X_courante ,_____cNORMALISE_OX(X) ,ponderation_Y_courante ,_____cNORMALISE_OY(Y) ,ponderation_N_courante ,loadF_point(imageA,X,Y) ,translation___courante ) ) ); /* Nouveau niveau flottant avant et apres iteration. */ Repe(nombre_d_iterations) Bblock USs_GooF(BLOC( Bblock DYNAMIQUE_DE_VERHULST(VRAI ,nouveau_niveau_N ,nouveau_niveau_N_1 ,IFdynamique_de_Verhulst_localisee_____increment_du_taux_de_croissance ); Eblock ) ); /* Procedure introduite le 20080105225731... */ Eblock ERep storeF_point_valide(nouveau_niveau_N ,imageR ,X,Y ); /* Modification element par element localisee, c'est-a-dire que seul le niveau change, */ /* {X,Y} restant inchange (d'ou le "local"). Ce qui est en fait itere est une sorte de */ /* niveau generalise 'NG' obtenu par une combinaison de {X,Y} et du niveau 'N' : */ /* */ /* NG = PX.X + PY.Y + PN.N + translation */ /* */ /* et iteration de 'NG' : */ /* */ /* NG = Verhulst(NG ) */ /* n n-1 */ /* */ /* les quatre parametres {PX,PY,PN,translation} etant introduits sous forme d'images de */ /* type 'imageF'... */ Eblock ATes Bblock PRINT_ATTENTION("division par zero dans le 'LIR3(...)' de 'IFdynamique_de_Verhulst_localisee(...)'"); CAL1(Prer2("(au point X=%d Y=%d)\n",X,Y)); storeF_point_valide(FZERO ,imageR ,X,Y ); /* Et on met une valeur arbitraire... */ Eblock ETes Eblock end_image RETIF(imageR); Eblock EFonctionF #undef DYNAMIQUE_DE_VERHULST /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N I T E R A T I V E D ' U N E I M A G E */ /* P A R L A D Y N A M I Q U E D E V E R H U L S T L O C A L I S E E G E N E R A L I S E E : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,POINTERF(IFdynamique_de_Verhulst_localisee_generalisee(imageR ,definition_du_polynome ,nombre_d_iterations ,imageA ,ponderation_X ,ponderation_Y ,ponderation_N ,translation__ ) ) ) ) /* Fonction introduite le 20040922100812. */ DEFV(Argument,DEFV(imageF,imageR)); /* Image Resultat de la modification de 'imageA' par la dynamique de Verhulst iteree */ /* et "localisee" (c'est-a-dire que seul le niveau change, {X,Y} restant inchange). */ DEFV(Argument,DEFV(albumF,definition_du_polynome)); /* Definition du polynome variable (en {X,Y}) a l'aide d'un album. */ DEFV(Argument,DEFV(Positive,nombre_d_iterations)); /* Nombre d'iterations 'N'. */ DEFV(Argument,DEFV(imageF,imageA)); /* Image Argument a modifier. */ DEFV(Argument,DEFV(imageF,ponderation_X)); DEFV(Argument,DEFV(imageF,ponderation_Y)); DEFV(Argument,DEFV(imageF,ponderation_N)); DEFV(Argument,DEFV(imageF,translation__)); /* Ponderation et translation des differents elements pris en compte... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ VERIFICATION_INITIALE_DE_LA_DYNAMIQUE_DE_VERHULST(imageA); /* ATTENTION : ce test est partiel ('v $xiii/di_image$FON 20040915113707'). */ begin_image Bblock DEFV(Float,INIT(ponderation_X_courante,loadF_point(ponderation_X,X,Y))); DEFV(Float,INIT(ponderation_Y_courante,loadF_point(ponderation_Y,X,Y))); DEFV(Float,INIT(ponderation_N_courante,loadF_point(ponderation_N,X,Y))); DEFV(Float,INIT(translation___courante,loadF_point(translation__,X,Y))); /* Nouveau niveau flottant avant et apres iteration. */ Test(IZNE(ADD4(ponderation_X_courante ,ponderation_Y_courante ,ponderation_N_courante ,translation___courante ) ) ) Bblock DEFV(genere_Float,INIT(nouveau_niveau_N_1,FLOT__NIVEAU_UNDEF)); DEFV(genere_Float,INIT(nouveau_niveau_N ,LIR3(ponderation_X_courante ,_____cNORMALISE_OX(X) ,ponderation_Y_courante ,_____cNORMALISE_OY(Y) ,ponderation_N_courante ,loadF_point(imageA,X,Y) ,translation___courante ) ) ); /* Nouveau niveau flottant avant et apres iteration. */ Repe(nombre_d_iterations) Bblock DEFV(Float,INIT(polynome_courant,FZERO)); /* Valeur courante du polynome calculee par la methode de Horner... */ EGAL(nouveau_niveau_N_1,nouveau_niveau_N); begin_fuite_back Bblock DEFV(genere_Float,INIT(niveau_courant,AloadF_point(definition_du_polynome,X,Y,Z))); /* Variable introduite le 20080108130451 afin de simplifier au maximum le calcul */ /* 'HORNER_1_01(...))' qui suit. En effet, 'AloadF_point(...)' contient evidemment des */ /* operations arithmetiques elementaires qu'il ne faut pas etendre... */ USs_GooF(BLOC( Bblock EGAL(polynome_courant ,HORNER_1_01(nouveau_niveau_N_1 ,polynome_courant ,niveau_courant ) ); /* Calcul du polynome courant : */ /* */ /* 0 1 p */ /* polynome(n) = A .n + A .n + ... + A .n */ /* 0 1 p */ /* */ /* ou 'A(i)' designe la i-ieme page de l'album 'definition_du_polynome' et 'n' le */ /* niveau generalise 'NG' (voir ci-apres...). */ Eblock ) ); /* Procedure introduite le 20080105225731... */ Eblock end_fuite_back EGAL(nouveau_niveau_N,polynome_courant); /* Iteration... */ Eblock ERep storeF_point_valide(nouveau_niveau_N ,imageR ,X,Y ); /* Modification element par element localisee, c'est-a-dire que seul le niveau change, */ /* {X,Y} restant inchange (d'ou le "local"). Ce qui est en fait itere est une sorte de */ /* niveau generalise 'NG' obtenu par une combinaison de {X,Y} et du niveau 'N' : */ /* */ /* NG = PX.X + PY.Y + PN.N + translation */ /* */ /* et iteration de 'NG' : */ /* */ /* NG = Verhulst(NG ) */ /* n n-1 */ /* */ /* les quatre parametres {PX,PY,PN,translation} etant introduits sous forme d'images de */ /* type 'imageF'... */ Eblock ATes Bblock PRINT_ATTENTION("division par zero dans le 'LIR3(...)' de 'IFdynamique_de_Verhulst_localisee_generalisee(...)'"); CAL1(Prer2("(au point X=%d Y=%d)\n",X,Y)); storeF_point_valide(FZERO ,imageR ,X,Y ); /* Et on met une valeur arbitraire... */ Eblock ETes Eblock end_image RETIF(imageR); Eblock EFonctionF #undef VERIFICATION_INITIALE_DE_LA_DYNAMIQUE_DE_VERHULST #undef NIVEAU_MAXIMUM_DE_L_ITERATION_0 #undef NIVEAU_MINIMUM_DE_L_ITERATION_0 _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 */ /* U T I L I S A N T L ' A R I T H M E T I Q U E E T E N D U E : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,POINTERF(IFproduit_complexe_etendu(imageR ,ponderation_R,ponderation_I ,ponderation_M,ponderation_A ,imageA_R_1,imageA_I_1 ,imageA_R_2,imageA_I_2 ) ) ) ) /* Fonction introduite le 20061018093427. Elle est une version simplifiee de la fonction */ /* de 'v $xiii/pent_image$FON IFproduit_complexe'. Avant le 20061019080811, son nom */ /* nom etait 'IFproduit_complexe_generalise(...)'. */ DEFV(Argument,DEFV(imageF,imageR)); /* Image Resultat. */ DEFV(Argument,DEFV(Float,ponderation_R)); DEFV(Argument,DEFV(Float,ponderation_I)); DEFV(Argument,DEFV(Float,ponderation_M)); DEFV(Argument,DEFV(Float,ponderation_A)); /* Ponderations de generation de l'image Resultat. */ DEFV(Argument,DEFV(imageF,imageA_R_1)); DEFV(Argument,DEFV(imageF,imageA_I_1)); /* Definition du doublet d'images {R,I} Argument 1. */ DEFV(Argument,DEFV(imageF,imageA_R_2)); DEFV(Argument,DEFV(imageF,imageA_I_2)); /* Definition du doublet d'images {R,I} Argument 2. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ begin_image Bblock DEFV(complexe,complexe_A1); DEFV(complexe,complexe_A2); DEFV(complexe,complexe_R); /* Definition des nombres complexes Arguments et Resultat. */ Cinitialisation(complexe_A1 ,loadF_point(imageA_R_1,X,Y) ,loadF_point(imageA_I_1,X,Y) ); Cinitialisation(complexe_A2 ,loadF_point(imageA_R_2,X,Y) ,loadF_point(imageA_I_2,X,Y) ); /* Recuperation des nombres complexes Argument... */ USs_GooF(BLOC( Bblock Cproduit(complexe_R,complexe_A1,complexe_A2); /* Calcul du produit generalise des deux nombres complexes Argument... */ Eblock ) ); /* Procedure introduite le 20080105225731... */ storeF_point(LIZ4(ponderation_R,Reelle(complexe_R) ,ponderation_I,Imaginaire(complexe_R) ,ponderation_M,Cmodule(complexe_R) ,ponderation_A,Cargument_PI(complexe_R) ) ,imageR ,X,Y ); /* Et enfin, renvoi d'une "partie" du Resultat... */ Eblock end_image RETIF(imageR); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P R O D U I T H Y P E R - C O M P L E X E D E H U I T I M A G E S */ /* U T I L I S A N T L ' A R I T H M E T I Q U E E T E N D U E : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,POINTERF(IFproduit_hyper_complexe_etendu(imageR ,ponderation_R,ponderation_I,ponderation_J,ponderation_K ,ponderation_M,ponderation_T,ponderation_P,ponderation_A ,imageA_R_1,imageA_I_1,imageA_J_1,imageA_K_1 ,imageA_R_2,imageA_I_2,imageA_J_2,imageA_K_2 ) ) ) ) /* Fonction introduite le 20061018093427. Elle est une version simplifiee de la fonction */ /* de 'v $xiii/pent_image$FON IFproduit_hyper_complexe'. Avant le 20061019080811, son nom */ /* nom etait 'IFproduit_hyper_complexe_generalise(...)'. */ DEFV(Argument,DEFV(imageF,imageR)); /* Image Resultat. */ DEFV(Argument,DEFV(Float,ponderation_R)); DEFV(Argument,DEFV(Float,ponderation_I)); DEFV(Argument,DEFV(Float,ponderation_J)); DEFV(Argument,DEFV(Float,ponderation_K)); DEFV(Argument,DEFV(Float,ponderation_M)); DEFV(Argument,DEFV(Float,ponderation_T)); DEFV(Argument,DEFV(Float,ponderation_P)); DEFV(Argument,DEFV(Float,ponderation_A)); /* Ponderations de generation de l'image Resultat. */ DEFV(Argument,DEFV(imageF,imageA_R_1)); DEFV(Argument,DEFV(imageF,imageA_I_1)); DEFV(Argument,DEFV(imageF,imageA_J_1)); DEFV(Argument,DEFV(imageF,imageA_K_1)); /* Definition du quadruplet d'images {R,I,J,K} Argument 1. */ DEFV(Argument,DEFV(imageF,imageA_R_2)); DEFV(Argument,DEFV(imageF,imageA_I_2)); DEFV(Argument,DEFV(imageF,imageA_J_2)); DEFV(Argument,DEFV(imageF,imageA_K_2)); /* Definition du quadruplet d'images {R,I,J,K} Argument 2. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ begin_image Bblock DEFV(hyper_complexe,quaternion_A1); DEFV(hyper_complexe,quaternion_A2); DEFV(hyper_complexe,quaternion_R); /* Definition des nombres hyper-complexes Arguments et Resultat. */ HCinitialisation(quaternion_A1 ,loadF_point(imageA_R_1,X,Y) ,loadF_point(imageA_I_1,X,Y) ,loadF_point(imageA_J_1,X,Y) ,loadF_point(imageA_K_1,X,Y) ); HCinitialisation(quaternion_A2 ,loadF_point(imageA_R_2,X,Y) ,loadF_point(imageA_I_2,X,Y) ,loadF_point(imageA_J_2,X,Y) ,loadF_point(imageA_K_2,X,Y) ); /* Recuperation des nombres hyper-complexes Argument... */ USs_GooF(BLOC( Bblock HCproduit(quaternion_R,quaternion_A1,quaternion_A2); /* Calcul du produit generalise des deux nombres hyper-complexes Argument... */ Eblock ) ); /* Procedure introduite le 20080105225731... */ storeF_point(LIZ8(ponderation_R,HReelle(quaternion_R) ,ponderation_I,HImaginaire(quaternion_R) ,ponderation_J,HJmaginaire(quaternion_R) ,ponderation_K,HKmaginaire(quaternion_R) ,ponderation_M,HCmodule(quaternion_R) ,ponderation_T,HCargumentT_PI(quaternion_R) ,ponderation_P,HCargumentP_PI(quaternion_R) ,ponderation_A,HCargumentA_PI(quaternion_R) ) ,imageR ,X,Y ); /* Et enfin, renvoi d'une "partie" du Resultat... */ Eblock end_image RETIF(imageR); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 */ /* U T I L I S A N T L ' A R I T H M E T I Q U E E T E N D U E : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,POINTERF(IFproduit_hyper_hyper_complexe_etendu(imageR ,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 ,imageA_R_1,imageA_I_1,imageA_J_1,imageA_K_1 ,imageA_S_1,imageA_T_1,imageA_U_1,imageA_V_1 ,imageA_R_2,imageA_I_2,imageA_J_2,imageA_K_2 ,imageA_S_2,imageA_T_2,imageA_U_2,imageA_V_2 ) ) ) ) /* Fonction introduite le 20110826104124. */ DEFV(Argument,DEFV(imageF,imageR)); /* Image Resultat. */ DEFV(Argument,DEFV(Float,ponderation_R)); DEFV(Argument,DEFV(Float,ponderation_I)); DEFV(Argument,DEFV(Float,ponderation_J)); DEFV(Argument,DEFV(Float,ponderation_K)); DEFV(Argument,DEFV(Float,ponderation_S)); DEFV(Argument,DEFV(Float,ponderation_T)); DEFV(Argument,DEFV(Float,ponderation_U)); DEFV(Argument,DEFV(Float,ponderation_V)); DEFV(Argument,DEFV(Float,ponderation_M_)); DEFV(Argument,DEFV(Float,ponderation_A1)); DEFV(Argument,DEFV(Float,ponderation_A2)); DEFV(Argument,DEFV(Float,ponderation_A3)); DEFV(Argument,DEFV(Float,ponderation_A4)); DEFV(Argument,DEFV(Float,ponderation_A5)); DEFV(Argument,DEFV(Float,ponderation_A6)); DEFV(Argument,DEFV(Float,ponderation_A7)); /* Ponderations de generation de l'image Resultat. */ DEFV(Argument,DEFV(imageF,imageA_R_1)); DEFV(Argument,DEFV(imageF,imageA_I_1)); DEFV(Argument,DEFV(imageF,imageA_J_1)); DEFV(Argument,DEFV(imageF,imageA_K_1)); DEFV(Argument,DEFV(imageF,imageA_S_1)); DEFV(Argument,DEFV(imageF,imageA_T_1)); DEFV(Argument,DEFV(imageF,imageA_U_1)); DEFV(Argument,DEFV(imageF,imageA_V_1)); /* Definition de l'octuplet d'images {R,I,J,K,S,T,U,V} Argument 1. */ DEFV(Argument,DEFV(imageF,imageA_R_2)); DEFV(Argument,DEFV(imageF,imageA_I_2)); DEFV(Argument,DEFV(imageF,imageA_J_2)); DEFV(Argument,DEFV(imageF,imageA_K_2)); DEFV(Argument,DEFV(imageF,imageA_S_2)); DEFV(Argument,DEFV(imageF,imageA_T_2)); DEFV(Argument,DEFV(imageF,imageA_U_2)); DEFV(Argument,DEFV(imageF,imageA_V_2)); /* Definition de l'octuplet d'images {R,I,J,K,S,T,U,V} Argument 2. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ begin_image Bblock DEFV(hyper_hyper_complexe,octonion_A1); DEFV(hyper_hyper_complexe,octonion_A2); DEFV(hyper_hyper_complexe,octonion_R); /* Definition des nombres hyper-hyper-complexes Arguments et Resultat. */ HHCinitialisation(octonion_A1 ,loadF_point(imageA_R_1,X,Y) ,loadF_point(imageA_I_1,X,Y) ,loadF_point(imageA_J_1,X,Y) ,loadF_point(imageA_K_1,X,Y) ,loadF_point(imageA_S_1,X,Y) ,loadF_point(imageA_T_1,X,Y) ,loadF_point(imageA_U_1,X,Y) ,loadF_point(imageA_V_1,X,Y) ); HHCinitialisation(octonion_A2 ,loadF_point(imageA_R_2,X,Y) ,loadF_point(imageA_I_2,X,Y) ,loadF_point(imageA_J_2,X,Y) ,loadF_point(imageA_K_2,X,Y) ,loadF_point(imageA_S_2,X,Y) ,loadF_point(imageA_T_2,X,Y) ,loadF_point(imageA_U_2,X,Y) ,loadF_point(imageA_V_2,X,Y) ); /* Recuperation des nombres hyper-hyper-complexes Argument... */ USs_GooF(BLOC( Bblock HHCproduit(octonion_R,octonion_A1,octonion_A2); /* Calcul du produit generalise des deux nombres hyper-hyper-complexes Argument... */ Eblock ) ); storeF_point(LIZ16(ponderation_R,HHReelle(octonion_R) ,ponderation_I,HHImaginaire(octonion_R) ,ponderation_J,HHJmaginaire(octonion_R) ,ponderation_K,HHKmaginaire(octonion_R) ,ponderation_S,HHSmaginaire(octonion_R) ,ponderation_T,HHTmaginaire(octonion_R) ,ponderation_U,HHUmaginaire(octonion_R) ,ponderation_V,HHVmaginaire(octonion_R) ,ponderation_M_,HHCmodule(octonion_R) ,ponderation_A1,HHCargumentA1_PI(octonion_R) ,ponderation_A2,HHCargumentA2_PI(octonion_R) ,ponderation_A3,HHCargumentA3_PI(octonion_R) ,ponderation_A4,HHCargumentA4_PI(octonion_R) ,ponderation_A5,HHCargumentA5_PI(octonion_R) ,ponderation_A6,HHCargumentA6_PI(octonion_R) ,ponderation_A7,HHCargumentA7_PI(octonion_R) ) ,imageR ,X,Y ); /* Et enfin, renvoi d'une "partie" du Resultat... */ Eblock end_image RETIF(imageR); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* S O M M E E T E N D U E D E D E U X I M A G E S */ /* A V E C L ' A R I T H M E T I Q U E E T E N D U E V A R I A B L E L O C A L E M E N T : */ /* */ /*************************************************************************************************************************************/ BFonctionF #define __imageA_ADD2__ \ imageA_ADD2__ #define __imageA_SOUS__ \ imageA_SOUS__ #define __imageA_MUL2__ \ imageA_MUL2__ #define __imageA_DIVZ__ \ imageA_DIVZ__ #define __imageA_MIN2__ \ imageA_MIN2__ #define __imageA_MAX2__ \ imageA_MAX2__ /* Introduit le 20080408131626 pour ameliorer les tabulations lors de la mise en place */ /* de la ponderation locale... */ #define MISE_EN_PLACE_DE_LA_PONDERATION(ponderation,image_de_ponderation) \ Bblock \ EGAL(ponderation,loadF_point(image_de_ponderation,X,Y)); \ Eblock \ /* Mise en place de la ponderation locale... */ DEFV(Common,DEFV(FonctionF,POINTERF(IFaddition_etendue_a_variations_locales(imageR ,imageA1 ,imageA2 ,imageA_ADD2__,imageA_SOUS__ ,imageA_MUL2__,imageA_DIVZ__ ,imageA_MIN2__,imageA_MAX2__ ,imageA_MINMAX,imageA_MAXMIN ) ) ) ) /* Fonction introduite le 20080107093638. */ DEFV(Argument,DEFV(imageF,imageR)); /* Image Resultat. */ DEFV(Argument,DEFV(imageF,imageA1)); /* Premiere image Argument, */ DEFV(Argument,DEFV(imageF,imageA2)); /* Seconde image Argument. */ DEFV(Argument,DEFV(imageF,imageA_ADD2__)); DEFV(Argument,DEFV(imageF,imageA_SOUS__)); DEFV(Argument,DEFV(imageF,imageA_MUL2__)); DEFV(Argument,DEFV(imageF,imageA_DIVZ__)); DEFV(Argument,DEFV(imageF,imageA_MIN2__)); DEFV(Argument,DEFV(imageF,imageA_MAX2__)); DEFV(Argument,DEFV(imageF,imageA_MINMAX)); DEFV(Argument,DEFV(imageF,imageA_MAXMIN)); /* Definition des ponderations de l'arithmetique locale. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock BSaveVariable(Float,FfxADD2_____ponderation_de_ADD2); BSaveVariable(Float,FfxADD2_____ponderation_de_SOUS); BSaveVariable(Float,FfxADD2_____ponderation_de_MUL2); BSaveVariable(Float,FfxADD2_____ponderation_de_DIVZ); BSaveVariable(Float,FfxADD2_____ponderation_de_MIN2); BSaveVariable(Float,FfxADD2_____ponderation_de_MAX2); BSaveVariable(Float,FfxADD2_____ponderation_de_MINMAX); BSaveVariable(Float,FfxADD2_____ponderation_de_MAXMIN); /* Sauvegardes introduites le 20080408131626 (c'est quand meme plus propre ainsi...). */ /*..............................................................................................................................*/ begin_image Bblock DEFV(genere_Float,INIT(niveau_1,loadF_point(imageA1,X,Y))); DEFV(genere_Float,INIT(niveau_2,loadF_point(imageA2,X,Y))); /* Niveau courant des images Arguments. */ DEFV(genere_Float,INIT(somme_etendue_courante,FLOT__NIVEAU_UNDEF)); /* Somme etendue de 'niveau_1' et de 'niveau_2'. */ MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_ADD2,__imageA_ADD2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_SOUS,__imageA_SOUS__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_MUL2,__imageA_MUL2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_DIVZ,__imageA_DIVZ__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_MIN2,__imageA_MIN2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_MAX2,__imageA_MAX2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_MINMAX,imageA_MINMAX); MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_MAXMIN,imageA_MAXMIN); /* Mise en place de la ponderation locale... */ /* */ /* On notera le 20080107104759 que ne sont pas utilisees : */ /* */ /* FfxADD2_____ponderation_de_IMINMAX */ /* FfxADD2_____ponderation_de_IMAXMIN */ /* FfxADD2_____ponderation_de_MOYE */ /* FfxADD2_____ponderation_de_MOYZ */ /* FfxADD2_____ponderation_de_MOYZSI */ /* FfxADD2_____ponderation_de_MOYQ */ /* FfxADD2_____ponderation_de_MOYQSI */ /* FfxADD2_____ponderation_de_SPUIX */ /* */ /* car elles sont de peu d'utilite, mais les ajouter serait evidemment trivial... */ /* */ /* De meme le 20180823100402 pour : */ /* */ /* FfxADD2_____ponderation_de_MOYH */ /* FfxADD2_____ponderation_de_SE12 */ /* FfxADD2_____ponderation_de_SE22 */ /* */ /* */ /* De meme le 20181009171225 pour : */ /* */ /* FfxADD2_____ponderation_de_ATAN */ /* */ /* */ /* De meme le 20181203162540 pour : */ /* */ /* FfxADD2_____ponderation_de_MULH24 */ /* */ USs_GooF(BLOC( Bblock EGAL(somme_etendue_courante,ADD2(niveau_1,niveau_2)); Eblock ) ); storeF_point(somme_etendue_courante ,imageR ,X,Y ); /* Et enfin, renvoi de la somme etendue localement... */ Eblock end_image ESaveVariable(Float,FfxADD2_____ponderation_de_MAXMIN); ESaveVariable(Float,FfxADD2_____ponderation_de_MINMAX); ESaveVariable(Float,FfxADD2_____ponderation_de_MAX2); ESaveVariable(Float,FfxADD2_____ponderation_de_MIN2); ESaveVariable(Float,FfxADD2_____ponderation_de_DIVZ); ESaveVariable(Float,FfxADD2_____ponderation_de_MUL2); ESaveVariable(Float,FfxADD2_____ponderation_de_SOUS); ESaveVariable(Float,FfxADD2_____ponderation_de_ADD2); /* Restaurations introduites le 20080408131626 (c'est quand meme plus propre ainsi...). */ RETIF(imageR); Eblock #undef MISE_EN_PLACE_DE_LA_PONDERATION #undef __imageA_MAX2__ #undef __imageA_MIN2__ #undef __imageA_DIVZ__ #undef __imageA_MUL2__ #undef __imageA_SOUS__ #undef __imageA_ADD2__ EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N " H O R N E R I E N N E " D ' U N E I M A G E F L O T T A N T E */ /* ( " A U N E V A R I A B L E " ) D U N E U V I E M E D E G R E : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,POINTERF(IFtransformation_hornerienne_var1_degre9_cvl(imageR ,imageX ,imageA9 ,imageA8 ,imageA7 ,imageA6 ,imageA5 ,imageA4 ,imageA3 ,imageA2 ,imageA1 ,imageA0 ) ) ) ) /* Fonction introduite le 20080324083248. */ /* */ /* Le 20080430132022 son nom anterieur 'IFtransformation_hornerienne_var1_degre9' a ete */ /* "augmente" par "Coefficients Variables Localement". */ DEFV(Argument,DEFV(imageF,imageR)); /* Image Resultat de la transformation de {imageX} par le polynome {imageA(i)}. */ DEFV(Argument,DEFV(imageF,imageX)); /* Image Argument definissant {X}. */ DEFV(Argument,DEFV(imageF,imageA9)); DEFV(Argument,DEFV(imageF,imageA8)); DEFV(Argument,DEFV(imageF,imageA7)); DEFV(Argument,DEFV(imageF,imageA6)); DEFV(Argument,DEFV(imageF,imageA5)); DEFV(Argument,DEFV(imageF,imageA4)); DEFV(Argument,DEFV(imageF,imageA3)); DEFV(Argument,DEFV(imageF,imageA2)); DEFV(Argument,DEFV(imageF,imageA1)); DEFV(Argument,DEFV(imageF,imageA0)); /* Images Arguments definissant le polynome {imageA(i)}. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ begin_image Bblock DEFV(genere_Float,INIT(Xf,loadF_point(imageX,X,Y))); /* Definition du {X} courant. */ DEFV(genere_Float,INIT(transformation_hornerienne,FLOT__UNDEF)); /* Valeur resultante... */ DEFV(genere_Float,INIT(A9,loadF_point(imageA9,X,Y))); DEFV(genere_Float,INIT(A8,loadF_point(imageA8,X,Y))); DEFV(genere_Float,INIT(A7,loadF_point(imageA7,X,Y))); DEFV(genere_Float,INIT(A6,loadF_point(imageA6,X,Y))); DEFV(genere_Float,INIT(A5,loadF_point(imageA5,X,Y))); DEFV(genere_Float,INIT(A4,loadF_point(imageA4,X,Y))); DEFV(genere_Float,INIT(A3,loadF_point(imageA3,X,Y))); DEFV(genere_Float,INIT(A2,loadF_point(imageA2,X,Y))); DEFV(genere_Float,INIT(A1,loadF_point(imageA1,X,Y))); DEFV(genere_Float,INIT(A0,loadF_point(imageA0,X,Y))); /* Definition du polynome courant {A(i)}. */ USs_GooF(BLOC( Bblock EGAL(transformation_hornerienne ,HORNER_1_09(Xf ,A9,A8,A7,A6,A5,A4,A3,A2,A1,A0 ) ); /* Calcul du polynome courant : */ /* */ /* i=9 */ /* _____ */ /* \ i */ /* P(X) = \ A .X */ /* / i */ /* /_____ */ /* i=0 */ /* */ Eblock ) ); storeF_point_valide(transformation_hornerienne ,imageR ,X,Y ); /* Et rangement du resultat... */ Eblock end_image RETIF(imageR); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N " H O R N E R I E N N E " D ' U N E I M A G E F L O T T A N T E */ /* ( " A U N E V A R I A B L E " ) D U N E U V I E M E 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 : */ /* */ /*************************************************************************************************************************************/ BFonctionF #define __imageA_ADD2_ADD2__ \ imageA_ADD2_ADD2__ #define __imageA_ADD2_MUL2__ \ imageA_ADD2_MUL2__ #define __imageA_ADD2_MAX2__ \ imageA_ADD2_MAX2__ #define __imageA_ADD2_MINMAX \ imageA_ADD2_MINMAX #define __imageA_ADD2_MAXMIN \ imageA_ADD2_MAXMIN /* Afin d'ameliorer les tabulations lors de la mise en place de la ponderation locale... */ #define __imageA_MUL2_ADD2__ \ imageA_MUL2_ADD2__ #define __imageA_MUL2_MUL2__ \ imageA_MUL2_MUL2__ #define __imageA_MUL2_MAX2__ \ imageA_MUL2_MAX2__ #define __imageA_MUL2_MINMAX \ imageA_MUL2_MINMAX #define __imageA_MUL2_MAXMIN \ imageA_MUL2_MAXMIN /* Afin d'ameliorer les tabulations lors de la mise en place de la ponderation locale... */ #define MISE_EN_PLACE_DE_LA_PONDERATION(ponderation,image_de_ponderation) \ Bblock \ EGAL(ponderation,loadF_point(image_de_ponderation,X,Y)); \ Eblock \ /* Mise en place de la ponderation locale... */ DEFV(Common,DEFV(Float,SINT(IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A9,FZERO))); DEFV(Common,DEFV(Float,SINT(IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A8,FZERO))); DEFV(Common,DEFV(Float,SINT(IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A7,FZERO))); DEFV(Common,DEFV(Float,SINT(IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A6,FZERO))); DEFV(Common,DEFV(Float,SINT(IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A5,FZERO))); DEFV(Common,DEFV(Float,SINT(IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A4,FZERO))); DEFV(Common,DEFV(Float,SINT(IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A3,FZERO))); DEFV(Common,DEFV(Float,SINT(IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A2,FZERO))); DEFV(Common,DEFV(Float,SINT(IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A1,FU))); DEFV(Common,DEFV(Float,SINT(IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A0,FZERO))); /* Definition du polynome {Ai} initialise sur : */ /* */ /* X */ /* */ DEFV(Common,DEFV(FonctionF,POINTERF(IFtransformation_hornerienne_var1_degre9_avl(imageR ,imageX ,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 ) ) ) ) /* Fonction introduite le 20080501095430. */ DEFV(Argument,DEFV(imageF,imageR)); /* Image Resultat de la transformation de {imageX} par le polynome {Ai}. */ DEFV(Argument,DEFV(imageF,imageX)); /* Image Argument definissant {X}. */ DEFV(Argument,DEFV(imageF,imageA_ADD2_ADD2__)); DEFV(Argument,DEFV(imageF,imageA_ADD2_MUL2__)); DEFV(Argument,DEFV(imageF,imageA_ADD2_MAX2__)); DEFV(Argument,DEFV(imageF,imageA_ADD2_MINMAX)); DEFV(Argument,DEFV(imageF,imageA_ADD2_MAXMIN)); /* Definition des ponderations de l'arithmetique locale pour 'ADD2'. */ DEFV(Argument,DEFV(imageF,imageA_MUL2_ADD2__)); DEFV(Argument,DEFV(imageF,imageA_MUL2_MUL2__)); DEFV(Argument,DEFV(imageF,imageA_MUL2_MAX2__)); DEFV(Argument,DEFV(imageF,imageA_MUL2_MINMAX)); DEFV(Argument,DEFV(imageF,imageA_MUL2_MAXMIN)); /* Definition des ponderations de l'arithmetique locale pour 'MUL2'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock BSaveVariable(Float,FfxADD2_____ponderation_de_ADD2); BSaveVariable(Float,FfxADD2_____ponderation_de_MUL2); BSaveVariable(Float,FfxADD2_____ponderation_de_MAX2); BSaveVariable(Float,FfxADD2_____ponderation_de_MINMAX); BSaveVariable(Float,FfxADD2_____ponderation_de_MAXMIN); /* Sauvegarde de la definition de 'ADD2'... */ BSaveVariable(Float,FfxMUL2_____ponderation_de_ADD2); BSaveVariable(Float,FfxMUL2_____ponderation_de_MUL2); BSaveVariable(Float,FfxMUL2_____ponderation_de_MAX2); BSaveVariable(Float,FfxMUL2_____ponderation_de_MINMAX); BSaveVariable(Float,FfxMUL2_____ponderation_de_MAXMIN); /* Sauvegarde de la definition de 'MUL2'... */ /*..............................................................................................................................*/ begin_image Bblock DEFV(genere_Float,INIT(Xf,loadF_point(imageX,X,Y))); /* Definition du {X} courant. */ DEFV(genere_Float,INIT(transformation_hornerienne,FLOT__UNDEF)); /* Valeur resultante... */ MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_ADD2,__imageA_ADD2_ADD2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_MUL2,__imageA_ADD2_MUL2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_MAX2,__imageA_ADD2_MAX2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_MINMAX,imageA_ADD2_MINMAX); MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_MAXMIN,imageA_ADD2_MAXMIN); /* Mise en place de la ponderation locale de 'ADD2', en notant que toutes les possibilites */ /* ne sont pas exploitees et ce afin de minimiser le nombre d'images Argument... */ MISE_EN_PLACE_DE_LA_PONDERATION(FfxMUL2_____ponderation_de_ADD2,__imageA_MUL2_ADD2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxMUL2_____ponderation_de_MUL2,__imageA_MUL2_MUL2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxMUL2_____ponderation_de_MAX2,__imageA_MUL2_MAX2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxMUL2_____ponderation_de_MINMAX,imageA_MUL2_MINMAX); MISE_EN_PLACE_DE_LA_PONDERATION(FfxMUL2_____ponderation_de_MAXMIN,imageA_MUL2_MAXMIN); /* Mise en place de la ponderation locale de 'MUL2', en notant que toutes les possibilites */ /* ne sont pas exploitees et ce afin de minimiser le nombre d'images Argument... */ USs_GooF(BLOC( Bblock EGAL(transformation_hornerienne ,HORNER_1_09(Xf ,IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A9 ,IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A8 ,IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A7 ,IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A6 ,IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A5 ,IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A4 ,IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A3 ,IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A2 ,IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A1 ,IFtransformation_hornerienne_var1_degre9_avl_____coefficient_A0 ) ); /* Calcul du polynome courant : */ /* */ /* i=9 */ /* _____ */ /* \ i */ /* P(X) = \ A .X */ /* / i */ /* /_____ */ /* i=0 */ /* */ Eblock ) ); storeF_point_valide(transformation_hornerienne ,imageR ,X,Y ); /* Et rangement du resultat... */ Eblock end_image ESaveVariable(Float,FfxMUL2_____ponderation_de_MAXMIN); ESaveVariable(Float,FfxMUL2_____ponderation_de_MINMAX); ESaveVariable(Float,FfxMUL2_____ponderation_de_MAX2); ESaveVariable(Float,FfxMUL2_____ponderation_de_MUL2); ESaveVariable(Float,FfxMUL2_____ponderation_de_ADD2); /* Restaurations de la definition de 'MUL2'... */ ESaveVariable(Float,FfxADD2_____ponderation_de_MAXMIN); ESaveVariable(Float,FfxADD2_____ponderation_de_MINMAX); ESaveVariable(Float,FfxADD2_____ponderation_de_MAX2); ESaveVariable(Float,FfxADD2_____ponderation_de_MUL2); ESaveVariable(Float,FfxADD2_____ponderation_de_ADD2); /* Restaurations de la definition de 'ADD2'... */ RETIF(imageR); Eblock #undef MISE_EN_PLACE_DE_LA_PONDERATION #undef __imageA_MUL2_MAXMIN #undef __imageA_MUL2_MINMAX #undef __imageA_MUL2_MAX2__ #undef __imageA_MUL2_MUL2__ #undef __imageA_MUL2_ADD2__ #undef __imageA_ADD2_MAXMIN #undef __imageA_ADD2_MINMAX #undef __imageA_ADD2_MAX2__ #undef __imageA_ADD2_MUL2__ #undef __imageA_ADD2_ADD2__ EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 C O E F F I C I E N T S V A R I A B L E S L O C A L E M E N T : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,POINTERF(IFcombinaison_hornerienne_var2_degre2_cvl(imageR ,imageX,imageY ,imageA22,imageA21,imageA20 ,imageA12,imageA11,imageA10 ,imageA02,imageA01,imageA00 ) ) ) ) /* Fonction introduite le 20080219152521. */ /* */ /* Le 20080430130838 son nom anterieur 'IFcombinaison_hornerienne_var2_degre2' a ete */ /* "augmente" par "Coefficients Variables Localement". */ DEFV(Argument,DEFV(imageF,imageR)); /* Image Resultat de la combinaison de {imageX,imageY} par le polynome {imageA(i,j)}. */ DEFV(Argument,DEFV(imageF,imageX)); DEFV(Argument,DEFV(imageF,imageY)); /* Images Arguments definissant {X,Y}. */ DEFV(Argument,DEFV(imageF,imageA22)); DEFV(Argument,DEFV(imageF,imageA21)); DEFV(Argument,DEFV(imageF,imageA20)); DEFV(Argument,DEFV(imageF,imageA12)); DEFV(Argument,DEFV(imageF,imageA11)); DEFV(Argument,DEFV(imageF,imageA10)); DEFV(Argument,DEFV(imageF,imageA02)); DEFV(Argument,DEFV(imageF,imageA01)); DEFV(Argument,DEFV(imageF,imageA00)); /* Images Arguments definissant le polynome {imageA(i,j)}. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ begin_image Bblock DEFV(genere_Float,INIT(Xf,loadF_point(imageX,X,Y))); DEFV(genere_Float,INIT(Yf,loadF_point(imageY,X,Y))); /* Definition du {X,Y} courant. */ DEFV(genere_Float,INIT(A22,loadF_point(imageA22,X,Y))); DEFV(genere_Float,INIT(A21,loadF_point(imageA21,X,Y))); DEFV(genere_Float,INIT(A20,loadF_point(imageA20,X,Y))); DEFV(genere_Float,INIT(A12,loadF_point(imageA12,X,Y))); DEFV(genere_Float,INIT(A11,loadF_point(imageA11,X,Y))); DEFV(genere_Float,INIT(A10,loadF_point(imageA10,X,Y))); DEFV(genere_Float,INIT(A02,loadF_point(imageA02,X,Y))); DEFV(genere_Float,INIT(A01,loadF_point(imageA01,X,Y))); DEFV(genere_Float,INIT(A00,loadF_point(imageA00,X,Y))); /* Definition du polynome courant {A(i,j)}. */ DEFV(genere_Float,INIT(combinaison_hornerienne,FLOT__UNDEF)); /* Valeur resultante... */ USs_GooF(BLOC( Bblock EGAL(combinaison_hornerienne ,HORNER_2_02(Xf,Yf ,A22,A21,A20 ,A12,A11,A10 ,A02,A01,A00 ) ); /* Calcul du polynome courant : */ /* */ /* 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...). */ Eblock ) ); storeF_point_valide(combinaison_hornerienne ,imageR ,X,Y ); /* Et rangement du resultat... */ Eblock end_image RETIF(imageR); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ BFonctionF #define __imageA_ADD2_ADD2__ \ imageA_ADD2_ADD2__ #define __imageA_ADD2_MUL2__ \ imageA_ADD2_MUL2__ #define __imageA_ADD2_MAX2__ \ imageA_ADD2_MAX2__ #define __imageA_ADD2_MINMAX \ imageA_ADD2_MINMAX #define __imageA_ADD2_MAXMIN \ imageA_ADD2_MAXMIN /* Afin d'ameliorer les tabulations lors de la mise en place de la ponderation locale... */ #define __imageA_MUL2_ADD2__ \ imageA_MUL2_ADD2__ #define __imageA_MUL2_MUL2__ \ imageA_MUL2_MUL2__ #define __imageA_MUL2_MAX2__ \ imageA_MUL2_MAX2__ #define __imageA_MUL2_MINMAX \ imageA_MUL2_MINMAX #define __imageA_MUL2_MAXMIN \ imageA_MUL2_MAXMIN /* Afin d'ameliorer les tabulations lors de la mise en place de la ponderation locale... */ #define MISE_EN_PLACE_DE_LA_PONDERATION(ponderation,image_de_ponderation) \ Bblock \ EGAL(ponderation,loadF_point(image_de_ponderation,X,Y)); \ Eblock \ /* Mise en place de la ponderation locale... */ DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A22,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A21,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A20,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A12,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A11,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A10,FU))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A02,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A01,FU))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A00,FZERO))); /* Definition du polynome {Aij} initialise sur : */ /* */ /* X+Y */ /* */ DEFV(Common,DEFV(FonctionF,POINTERF(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 ) ) ) ) /* Fonction introduite le 20080430134553. */ DEFV(Argument,DEFV(imageF,imageR)); /* Image Resultat de la combinaison de {imageX,imageY} par le polynome {Aij}. */ DEFV(Argument,DEFV(imageF,imageX)); DEFV(Argument,DEFV(imageF,imageY)); /* Images Arguments definissant {X,Y}. */ DEFV(Argument,DEFV(imageF,imageA_ADD2_ADD2__)); DEFV(Argument,DEFV(imageF,imageA_ADD2_MUL2__)); DEFV(Argument,DEFV(imageF,imageA_ADD2_MAX2__)); DEFV(Argument,DEFV(imageF,imageA_ADD2_MINMAX)); DEFV(Argument,DEFV(imageF,imageA_ADD2_MAXMIN)); /* Definition des ponderations de l'arithmetique locale pour 'ADD2'. */ DEFV(Argument,DEFV(imageF,imageA_MUL2_ADD2__)); DEFV(Argument,DEFV(imageF,imageA_MUL2_MUL2__)); DEFV(Argument,DEFV(imageF,imageA_MUL2_MAX2__)); DEFV(Argument,DEFV(imageF,imageA_MUL2_MINMAX)); DEFV(Argument,DEFV(imageF,imageA_MUL2_MAXMIN)); /* Definition des ponderations de l'arithmetique locale pour 'MUL2'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock BSaveVariable(Float,FfxADD2_____ponderation_de_ADD2); BSaveVariable(Float,FfxADD2_____ponderation_de_MUL2); BSaveVariable(Float,FfxADD2_____ponderation_de_MAX2); BSaveVariable(Float,FfxADD2_____ponderation_de_MINMAX); BSaveVariable(Float,FfxADD2_____ponderation_de_MAXMIN); /* Sauvegarde de la definition de 'ADD2'... */ BSaveVariable(Float,FfxMUL2_____ponderation_de_ADD2); BSaveVariable(Float,FfxMUL2_____ponderation_de_MUL2); BSaveVariable(Float,FfxMUL2_____ponderation_de_MAX2); BSaveVariable(Float,FfxMUL2_____ponderation_de_MINMAX); BSaveVariable(Float,FfxMUL2_____ponderation_de_MAXMIN); /* Sauvegarde de la definition de 'MUL2'... */ /*..............................................................................................................................*/ begin_image Bblock DEFV(genere_Float,INIT(Xf,loadF_point(imageX,X,Y))); DEFV(genere_Float,INIT(Yf,loadF_point(imageY,X,Y))); /* Definition du {X,Y} courant. */ DEFV(genere_Float,INIT(combinaison_hornerienne,FLOT__UNDEF)); /* Valeur resultante... */ MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_ADD2,__imageA_ADD2_ADD2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_MUL2,__imageA_ADD2_MUL2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_MAX2,__imageA_ADD2_MAX2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_MINMAX,imageA_ADD2_MINMAX); MISE_EN_PLACE_DE_LA_PONDERATION(FfxADD2_____ponderation_de_MAXMIN,imageA_ADD2_MAXMIN); /* Mise en place de la ponderation locale de 'ADD2', en notant que toutes les possibilites */ /* ne sont pas exploitees et ce afin de minimiser le nombre d'images Argument... */ MISE_EN_PLACE_DE_LA_PONDERATION(FfxMUL2_____ponderation_de_ADD2,__imageA_MUL2_ADD2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxMUL2_____ponderation_de_MUL2,__imageA_MUL2_MUL2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxMUL2_____ponderation_de_MAX2,__imageA_MUL2_MAX2__); MISE_EN_PLACE_DE_LA_PONDERATION(FfxMUL2_____ponderation_de_MINMAX,imageA_MUL2_MINMAX); MISE_EN_PLACE_DE_LA_PONDERATION(FfxMUL2_____ponderation_de_MAXMIN,imageA_MUL2_MAXMIN); /* Mise en place de la ponderation locale de 'MUL2', en notant que toutes les possibilites */ /* ne sont pas exploitees et ce afin de minimiser le nombre d'images Argument... */ USs_GooF(BLOC( Bblock EGAL(combinaison_hornerienne ,HORNER_2_02(Xf,Yf ,IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A22 ,IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A21 ,IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A20 ,IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A12 ,IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A11 ,IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A10 ,IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A02 ,IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A01 ,IFcombinaison_hornerienne_var2_degre2_avl_____coefficient_A00 ) ); /* Calcul du polynome courant : */ /* */ /* 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...). */ /* */ /* On notera que l'arithmetique est redefinissable uniquement pour 'ADD2' et 'MUL2' */ /* puisqu'en effet ce sont les seuls operateurs qui sont utilises dans 'HORNER_2_02(...)'. */ Eblock ) ); storeF_point_valide(combinaison_hornerienne ,imageR ,X,Y ); /* Et rangement du resultat... */ Eblock end_image ESaveVariable(Float,FfxMUL2_____ponderation_de_MAXMIN); ESaveVariable(Float,FfxMUL2_____ponderation_de_MINMAX); ESaveVariable(Float,FfxMUL2_____ponderation_de_MAX2); ESaveVariable(Float,FfxMUL2_____ponderation_de_MUL2); ESaveVariable(Float,FfxMUL2_____ponderation_de_ADD2); /* Restaurations de la definition de 'MUL2'... */ ESaveVariable(Float,FfxADD2_____ponderation_de_MAXMIN); ESaveVariable(Float,FfxADD2_____ponderation_de_MINMAX); ESaveVariable(Float,FfxADD2_____ponderation_de_MAX2); ESaveVariable(Float,FfxADD2_____ponderation_de_MUL2); ESaveVariable(Float,FfxADD2_____ponderation_de_ADD2); /* Restaurations de la definition de 'ADD2'... */ RETIF(imageR); Eblock #undef MISE_EN_PLACE_DE_LA_PONDERATION #undef __imageA_MUL2_MAXMIN #undef __imageA_MUL2_MINMAX #undef __imageA_MUL2_MAX2__ #undef __imageA_MUL2_MUL2__ #undef __imageA_MUL2_ADD2__ #undef __imageA_ADD2_MAXMIN #undef __imageA_ADD2_MINMAX #undef __imageA_ADD2_MAX2__ #undef __imageA_ADD2_MUL2__ #undef __imageA_ADD2_ADD2__ EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N " H O R N E R I E N N E " D E T R O I S I M A G E S F L O T T A N T E S */ /* ( " A T R O I S V A R I A B L E S " ) D U P R E M I E R D E G R E */ /* A C O E F F I C I E N T S V A R I A B L E S L O C A L E M E N T : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,POINTERF(IFcombinaison_hornerienne_var3_degre1_cvl(imageR ,imageX,imageY,imageZ ,imageA111,imageA110,imageA101,imageA100 ,imageA011,imageA010,imageA001,imageA000 ) ) ) ) /* Fonction introduite le 20080324102759. */ /* */ /* Le 20080709144543, le nom 'IFcombinaison_hornerienne_var3_degre1(...)' fut change en */ /* 'IFcombinaison_hornerienne_var3_degre1_cvl(...)' pour des raisons d'homogeneite... */ DEFV(Argument,DEFV(imageF,imageR)); /* Image Resultat de la combinaison de {imageX,imageY,imageZ} par le polynome */ /* {imageA(i,j,k)}. */ DEFV(Argument,DEFV(imageF,imageX)); DEFV(Argument,DEFV(imageF,imageY)); DEFV(Argument,DEFV(imageF,imageZ)); /* Images Arguments definissant {X,Y,Z}. */ DEFV(Argument,DEFV(imageF,imageA111)); DEFV(Argument,DEFV(imageF,imageA110)); DEFV(Argument,DEFV(imageF,imageA101)); DEFV(Argument,DEFV(imageF,imageA100)); DEFV(Argument,DEFV(imageF,imageA011)); DEFV(Argument,DEFV(imageF,imageA010)); DEFV(Argument,DEFV(imageF,imageA001)); DEFV(Argument,DEFV(imageF,imageA000)); /* Images Arguments definissant le polynome {imageA(i,j,k)}. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ begin_image Bblock DEFV(genere_Float,INIT(Xf,loadF_point(imageX,X,Y))); DEFV(genere_Float,INIT(Yf,loadF_point(imageY,X,Y))); DEFV(genere_Float,INIT(Zf,loadF_point(imageZ,X,Y))); /* Definition du {X,Y,Z} courant. */ DEFV(genere_Float,INIT(A111,loadF_point(imageA111,X,Y))); DEFV(genere_Float,INIT(A110,loadF_point(imageA110,X,Y))); DEFV(genere_Float,INIT(A101,loadF_point(imageA101,X,Y))); DEFV(genere_Float,INIT(A100,loadF_point(imageA100,X,Y))); DEFV(genere_Float,INIT(A011,loadF_point(imageA011,X,Y))); DEFV(genere_Float,INIT(A010,loadF_point(imageA010,X,Y))); DEFV(genere_Float,INIT(A001,loadF_point(imageA001,X,Y))); DEFV(genere_Float,INIT(A000,loadF_point(imageA000,X,Y))); /* Definition du polynome courant {A(i,j,k)}. */ DEFV(genere_Float,INIT(combinaison_hornerienne,FLOT__UNDEF)); /* Valeur resultante... */ USs_GooF(BLOC( Bblock EGAL(combinaison_hornerienne ,HORNER_3_01(Xf,Yf,Zf ,A111,A110,A101,A100 ,A011,A010,A001,A000 ) ); /* Calcul du polynome courant : */ /* */ /* i=1 j=1 k=1 */ /* _____ _____ _____ */ /* \ \ \ k j i */ /* P(X,Y,Z) = \ \ \ A .X .Y .Z */ /* / / / ijk */ /* /_____ /_____ /_____ */ /* i=0 j=0 k=0 */ /* */ /* en notant bien que : */ /* */ /* i --0--> Z */ /* j --0--> Y */ /* k --0--> X */ /* */ /* dans 'A(i,j,k)' et non pas l'inverse (qui pourrait paraitre plus logique...). */ Eblock ) ); storeF_point_valide(combinaison_hornerienne ,imageR ,X,Y ); /* Et rangement du resultat... */ Eblock end_image RETIF(imageR); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N " H O R N E R I E N N 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 */ /* ( " A Q U A T R E V A R I A B L E S " ) D U P R E M I E R D E G R E */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_1111,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_1110,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_1101,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_1100,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_1011,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_1010,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_1001,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_1000,FU))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_0111,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_0110,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_0101,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_0100,FU))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_0011,FZERO))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_0010,FU))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_0001,FU))); DEFV(Common,DEFV(Float,SINT(IFcombinaison_hornerienne_var4_degre1_____coefficient_0000,FZERO))); /* Definition du polynome... */ DEFV(Common,DEFV(FonctionF,POINTERF(IFcombinaison_hornerienne_var4_degre1(imageR,imageA1,imageA2,imageA3,imageA4)))) /* Fonction introduite le 20071101094825... */ /* */ /* Le 20080709142600, elle fut rebaptisee 'IFcombinaison_hornerienne_var4_degre1(...)' et */ /* deplacee de 'v $xiii/pent_image$FON IFpolynome_4_01' a ici pour des raisons de logique */ /* evidentes... */ DEFV(Argument,DEFV(imageF,imageR)); /* Image Resultat, telle que : imageR=HORNER_4_01(imageA1,imageA2,imageA3,imageA4). */ DEFV(Argument,DEFV(imageF,imageA1)); /* Premiere image Argument, */ DEFV(Argument,DEFV(imageF,imageA2)); /* Seconde image Argument, */ DEFV(Argument,DEFV(imageF,imageA3)); /* Troisieme image Argument, */ DEFV(Argument,DEFV(imageF,imageA4)); /* Quatrieme image Argument. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ begin_image Bblock DEFV(genere_Float,INIT(niveau_imageA1,loadF_point(imageA1,X,Y))); DEFV(genere_Float,INIT(niveau_imageA2,loadF_point(imageA2,X,Y))); DEFV(genere_Float,INIT(niveau_imageA3,loadF_point(imageA3,X,Y))); DEFV(genere_Float,INIT(niveau_imageA4,loadF_point(imageA4,X,Y))); /* Niveaux Arguments. */ DEFV(genere_Float,INIT(combinaison_hornerienne,FLOT__UNDEF)); /* Valeur resultante... */ USs_GooF(BLOC( Bblock EGAL(combinaison_hornerienne ,HORNER_4_01(niveau_imageA1,niveau_imageA2,niveau_imageA3,niveau_imageA4 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_1111 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_1110 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_1101 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_1100 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_1011 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_1010 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_1001 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_1000 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_0111 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_0110 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_0101 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_0100 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_0011 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_0010 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_0001 ,IFcombinaison_hornerienne_var4_degre1_____coefficient_0000 ) ); Eblock ) ); storeF_point(combinaison_hornerienne ,imageR ,X,Y ); Eblock end_image RETIF(imageR); Eblock EFonctionF _______________________________________________________________________________________________________________________________________