/*************************************************************************************************************************************/ /* */ /* T E S T D E L A G E N E R A T I O N D E S C H A M P S " T R E F L E " */ /* E T " T R O I S - G A U S S I E N S " T R A N S L A T A B L E S : */ /* */ /* */ /* o */ /* * .. */ /* o .. . ** ** */ /* : oo **::: ** *. .. * *..... ** */ /* --::+ .## ::**..**..#*.**..**... ** */ /* o --*--*++.....*...**..*.* .. */ /* oo -- .+..oo**..*.....#....*... **** . */ /* ++ : +oo:..#oo:oo-+ ..**..** ***..****... ..*.. .. */ /* -- : -#: +o*:-#+::--++oo .. ..**.****.#** */ /* oo#*oo-+..+::*+::o++ .* ...***.. *# */ /* ::#oo ooo:::+:*-.. ***..*****....* */ /* oo : oo::ooo:: .**...*o*.oo++*oo */ /* ::ooo : #:oo::::: o :..oo::.#::: -.. : */ /* oo:o :oo:ooo:o::: oo o ::*+++**.. : */ /* oo :o::ooo:::o: --.****--.. */ /* ::ooo::o:::o :: +o*+..++ */ /* o::::oo:ooo --::**:* --** */ /* :: ::oooo::: oo ++--. -- .. */ /* oo ooo::::ooo# * ---:..#ooo-*.o* :: */ /* oo ::ooo:ooo::o .. +--+:oo*o..-.. */ /* : ::: :ooooooooo::*:++ -++ -----oo+:::o- ::: o */ /* .. oo :::oo:::::ooo#... **o* ++--+- ++--++--*+: */ /* * :: o * o++:::.*+-*:::.. -+++ + ++-++++---++++ :: */ /* .. - --+*+*++. : ----+-+----+----++- +--- */ /* - - + -- -o..-------+----+++#++++-- #++ oo ++ */ /* + +o -+-+--+-++---++++++-#++ ++ */ /* ::* ++-+--++++----++++ --- */ /* - . ** -----+++++ -- ++ + -* */ /* - -+-+++# --# + */ /* o +++++++ -- - */ /* # -----++ ++-- */ /* :: * --++ */ /* */ /* */ /* Author of '$xrq/trefle.90$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1989??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 PRAGMA_CPP_____MODULE_NON_DERIVABLE /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define ECHELLE_EN_X_DES_CHAMPS \ FU #define ECHELLE_EN_Y_DES_CHAMPS \ FU /* Echelle en {X,Y} des differents champs. */ #define TRANSLATION_LE_LONG_DE_X_DES_CHAMPS \ FZERO #define TRANSLATION_LE_LONG_DE_Y_DES_CHAMPS \ FZERO /* Translation le long des axes des differents champs. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A C C E S G E N E R A L A U X C H A M P S : */ /* */ /*************************************************************************************************************************************/ #define SCALING_OXY(xy) \ MUL2(echelle_en_XY_des_champs,xy) \ /* Mise a l'echelle et translation d'une longueur. */ #define SCALING_OX(x,translation) \ _cDENORMALISE_OX(AXPB(INVE(echelle_en_XY_des_champs) \ ,_____lNORMALISE_OX(SOUS(x,Xcentre)) \ ,NEGA(translation) \ ) \ ) \ /* Mise a l'echelle et translation d'une abscisse en entier. */ #define SCALING_OY(y,translation) \ _cDENORMALISE_OY(AXPB(INVE(echelle_en_XY_des_champs) \ ,_____lNORMALISE_OY(SOUS(y,Ycentre)) \ ,NEGA(translation) \ ) \ ) \ /* Mise a l'echelle et translation d'une ordonnee en entier. */ #define ACCES_AUX_CHAMPS(amplificateur_de_la_fonction,Fonction,translateur_de_la_fonction,x,y,translation_du_champ) \ ACCES_A_UN_CHAMP(amplificateur_de_la_fonction \ ,RIEN,Fonction \ ,translateur_de_la_fonction \ ,SCALING_OX(x,translation_le_long_de_X_des_champs) \ ,SCALING_OY(y,translation_le_long_de_Y_des_champs) \ ,ASD1,translation_du_champ,echelle_du_proton \ ) \ /* Macro d'acces a un point donne {x,y} d'un champ suivant une translation definie par */ \ /* 'translation_du_champ'. La fonction definissant le champ est definie par 'Fonction'. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " T R E F L E " D E L O C A L I S A T I O N D E L A M E R D E Q U A R K S : */ /* */ /* */ /* ......................::::::::------++++++++++++++--------:::::: */ /* ....................::::::::-----+++++++++++++++++++-------::::: */ /* .................:::::::::----+++++ooooooooooooo++++++------:::: */ /* ............::::::::::::----++++oooooo******oooooo+++++-----:::: */ /* ...:::::::::::::::::::-----+++ooo**************ooooo++++-----::: */ /* ::::::::::::::::::-------+++ooo****##########****oooo+++-----::: */ /* ::::::::::------------++++ooo***###############***ooo++++----::: */ /* ::::------------++++++++ooo***##################***ooo+++----::: */ /* ---------+++++++++ooooooo***####################***ooo+++---:::: */ /* -----++++++ooooooo*******#########*****##########**oo+++----:::: */ /* --++++++ooooo*****#############**oooooo**########**oo+++---::::: */ /* -+++++oooo****###############**o+----++oo*######**ooo++----::::: */ /* ++++oooo****############****oo+-:::::--+o*######**oo+++---:::::: */ /* +++oooo***##########***o+++---:.. ..:-+o*#####**oo+++---::::::. */ /* ++oooo***##########**o++-::... .:-o*######**oo++----::::::. */ /* ++oooo***##########*oo+--:.. .:-+o*######**oo++----::::::. */ /* ++oooo***##########**o++-::... .:-o*######**oo++----::::::. */ /* +++oooo***##########***o+++---:.. ..:-+o*#####**oo+++---::::::. */ /* ++++oooo****############****oo+-:::::--+o*######**oo+++---:::::: */ /* -+++++oooo****###############**o+----++oo*######**ooo++----::::: */ /* --++++++ooooo*****#############**oooooo**########**oo+++---::::: */ /* -----++++++ooooooo*******#########*****##########**oo+++----:::: */ /* ---------+++++++++ooooooo***####################***ooo+++---:::: */ /* ::::------------++++++++ooo***##################***ooo+++----::: */ /* ::::::::::------------++++ooo***###############***ooo++++----::: */ /* ::::::::::::::::::-------+++ooo****##########****oooo+++-----::: */ /* ...:::::::::::::::::::-----+++ooo**************ooooo++++-----::: */ /* ............::::::::::::----++++oooooo******oooooo+++++-----:::: */ /* .................:::::::::----+++++ooooooooooooo++++++------:::: */ /* ....................::::::::-----+++++++++++++++++++-------::::: */ /* ......................::::::::------++++++++++++++--------:::::: */ /* ........................::::::::-------------------------::::::: */ /* */ /*************************************************************************************************************************************/ #define X_TRANSLATION_DU_TREFLE \ FZERO #define X_ECHELLE_DU_TREFLE \ FU /* Translation et echelle horizontale du champ, */ #define Y_TRANSLATION_DU_TREFLE \ FZERO #define Y_ECHELLE_DU_TREFLE \ FU /* Translation et echelle verticale du champ. */ #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 # define COEFFICIENT \ FDU \ /* Coefficient de ponderation 'Cs' de la fonction 'sinus'. */ # define COEFFICIENT_LINEAIRE \ COMP(COEFFICIENT) \ /* Coefficient lineaire 'Ts' de l'expression en 'sinus(rho)' ; le 'COMP()' est la afin */ \ /* de garantir que la fonction 'F(X,Y)' est dans [0,1]... */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 # define COEFFICIENT \ FU \ /* Coefficient de ponderation 'Cs' de la fonction "polynomiale". */ # define COEFFICIENT_LINEAIRE \ EXP2(MOIT(COEFFICIENT)) \ /* Coefficient lineaire 'Ts' de la fonction "polynomiale" ; le 'EXP2(MOIT())' est la afin */ \ /* de garantir que la fonction 'F(X,Y)' est dans [0,1]... */ # define COEFFICIENT_CONTINU \ FRA5(FRA10(FU)) \ /* Composante continue 'Co' de la fonction "polynomiale" ; elle permet de mettre en place */ \ /* une mer de quarks plus ou moins dense, suivant sa valeur... */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 # define COEFFICIENT_RHO \ GRO8(PI) \ /* Coefficient de ponderation 'Cr' du module 'rho'. */ # define COEFFICIENT_PHASE_RHO \ NEGA(PI_SUR_2) \ /* Coefficient de phase 'Pr' du module 'rho' (desole pour l'abus de langage, mais 'rho' */ /* est utilise comme un angle...). */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 # define MOITIE_DE_L_EXPOSANT \ QUATRE \ /* Moitie 'r' de l'exposant de 'R(X,Y)' ; plus cette valeur est elevee, plus les cotes */ \ /* du triangle sont etroits. */ # define COEFFICIENT_RHO \ GRO2(FRA1(PI)) \ /* Coefficient de ponderation 'Cr' du module 'rho'. */ # define COEFFICIENT_PHASE_RHO \ FZERO \ /* Coefficient de phase 'Pr' du module 'rho' (desole pour l'abus de langage, mais 'rho' */ /* est utilise comme un angle...). */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 #define COEFFICIENT_COSINUS \ FRA4(FU) \ /* Coefficient de ponderation 'Cc' de la fonction 'cosinus'. */ #define COEFFICIENT_LINEAIRE_COSINUS \ FDEUX \ /* Coefficient lineaire 'Tc' de l'expression en 'cosinus(theta)'. */ #define COEFFICIENT_THETA \ GRO3(FU) \ /* Coefficient de ponderation 'Ct' de l'angle 'theta'. */ #define COEFFICIENT_PHASE_THETA \ FZERO \ /* Coefficient de phase 'Pt' de l'angle 'theta'. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " T R O I S - G A U S S I E N " D E C H O I X D E S C O U L E U R S : */ /* */ /* ....::::----------::::.... */ /* ...:::---++++++++++---:::... */ /* ...:::--++oooooooooo++--:::... */ /* ...:::--+ooo********ooo+--:::... */ /* ...::--++o** #**o++--::... */ /* ...::--+oo** ROUGE #**oo+--::... */ /* ...::--++o** #**o++--::... */ /* ...:::--+oo****##****oo++-:::... */ /* ....... ...:::--++oooo**oooo++--:::... */ /* ................. ...:::---++++++++++---:::... */ /* .....:::::::::...... ....::::----------::::.... */ /* ..:::::-----:::::..... .....::::::::::::..... */ /* :::------------::::.... ................ */ /* ::---+++++++++---:::.... ...... */ /* :---++ ++---::.... */ /* :--+++ VERTE ++---:::... */ /* :---++ ++---::.... */ /* ::---+++++++++---:::... */ /* :::------------::::.... */ /* ..:::::-----:::::..... */ /* .....:::::::::...... .......... */ /* ................. ................ */ /* ....... .................. */ /* ......::::::::...... */ /* .....:: :::..... */ /* .....:: BLEUE :::..... */ /* .....:: :::..... */ /* ......::::::::...... */ /* .................. */ /* ................ */ /* .......... */ /* */ /* */ /* */ /*************************************************************************************************************************************/ #define DEPHASAGE_DU_QUARK_ROUGE \ NEGA(DIVI(COEFFICIENT_PHASE_THETA,COEFFICIENT_THETA)) \ /* Dephasage du premier quark (le 'ROUGE'), ce qui correspond a la solution la plus simple */ \ /* de l'equation : */ \ /* */ \ /* "rho maximum", ce qui signifie que l'on cherche a se placer dans une direction ou */ \ /* le champ "trefle" s'loigne le plus de l'origine ; soit par definition du "trefle" : */ \ /* */ \ /* rho */ \ /* R(X,Y) = Cr.---------------------------- + Pr */ \ /* Cc.cos(Ct.theta + Pt) + Tc */ \ /* */ \ /* R(X,Y) - Pr */ \ /* rho = ------------- . [Cc.cos(Ct.theta + Pt) + Tc] */ \ /* Cr */ \ /* */ \ /* d'ou, pour que 'rho' soit maximal : */ \ /* */ \ /* cos(Ct.theta + Pt) = 1 */ \ /* */ \ /* dont la solution la plus simple est : */ \ /* */ \ /* Pt */ \ /* theta = - ---- */ \ /* Ct */ \ /* */ #define VOISINAGE_DU_QUARK_ROUGE \ DIVI(PI,CENT) \ /* Afin de faire des recherches dans la direction du quark 'ROUGE'. */ #define TIERS_DE_CERCLE \ FRA3(CERCLE_TRIGONOMETRIQUE) \ /* Un tiers du cercle trigonometrique. */ #define SEUIL_DU_CHAMP_r \ GRO2(FRA4(FU)) \ /* Seuil au-dessus duquel, on decrete le 'ROUGE', et en-dessous, une couleur arbitraire. */ #define AMPLIFICATEUR_DE_LA_FONCTION_r \ FU \ /* Amplificateur de la fonction pour le champ 'ROUGE', */ #define TRANSLATEUR_DE_LA_FONCTION_r \ FZERO \ /* Translateur de la fonction pour le champ 'ROUGE'. */ %define X_TRANSLATION_r \ ADD2(X_TRANSLATION_DU_TREFLE \ ,MUL2(echelle_de_translation \ ,COSX(ADD2(DEPHASAGE_DU_QUARK_ROUGE \ ,GRO0(TIERS_DE_CERCLE) \ ) \ ) \ ) \ ) \ /* Translation horizontale du champ 'ROUGE', */ %define Y_TRANSLATION_r \ ADD2(Y_TRANSLATION_DU_TREFLE \ ,MUL2(echelle_de_translation \ ,SINX(ADD2(DEPHASAGE_DU_QUARK_ROUGE \ ,GRO0(TIERS_DE_CERCLE) \ ) \ ) \ ) \ ) \ /* Translation verticale du champ 'ROUGE'. */ #define GAUSS_r \ GRO1(GRO16(FU)) \ /* Efficacite du gaussien du champ 'ROUGE', */ #define GAUSS_X2_r \ FU \ /* Ponderation de XxX du champ 'ROUGE', */ #define GAUSS_Y2_r \ FU \ /* Ponderation de YxY du champ 'ROUGE', */ #define GAUSS_XY_r \ FZERO \ /* Ponderation de XxY du champ 'ROUGE'. */ #define SEUIL_DU_CHAMP_v \ GRO2(FRA4(FU)) \ /* Seuil au-dessus duquel, on decrete le 'VERTE', et en-dessous, une couleur arbitraire. */ #define AMPLIFICATEUR_DE_LA_FONCTION_v \ FU \ /* Amplificateur de la fonction pour le champ 'VERTE', */ #define TRANSLATEUR_DE_LA_FONCTION_v \ FZERO \ /* Translateur de la fonction pour le champ 'VERTE'. */ %define X_TRANSLATION_v \ ADD2(X_TRANSLATION_DU_TREFLE \ ,MUL2(echelle_de_translation \ ,COSX(ADD2(DEPHASAGE_DU_QUARK_ROUGE \ ,GRO1(TIERS_DE_CERCLE) \ ) \ ) \ ) \ ) \ /* Translation horizontale du champ 'VERTE', */ %define Y_TRANSLATION_v \ ADD2(Y_TRANSLATION_DU_TREFLE \ ,MUL2(echelle_de_translation \ ,SINX(ADD2(DEPHASAGE_DU_QUARK_ROUGE \ ,GRO1(TIERS_DE_CERCLE) \ ) \ ) \ ) \ ) \ /* Translation verticale du champ 'VERTE'. */ #define GAUSS_v \ GRO1(GRO16(FU)) \ /* Efficacite du gaussien du champ 'VERTE', */ #define GAUSS_X2_v \ FU \ /* Ponderation de XxX du champ 'VERTE', */ #define GAUSS_Y2_v \ FU \ /* Ponderation de YxY du champ 'VERTE', */ #define GAUSS_XY_v \ FZERO \ /* Ponderation de XxY du champ 'VERTE'. */ #define SEUIL_DU_CHAMP_b \ GRO2(FRA4(FU)) \ /* Seuil au-dessus duquel, on decrete le 'BLEUE', et en-dessous, une couleur arbitraire. */ #define AMPLIFICATEUR_DE_LA_FONCTION_b \ FU \ /* Amplificateur de la fonction pour le champ 'BLEUE', */ #define TRANSLATEUR_DE_LA_FONCTION_b \ FZERO \ /* Translateur de la fonction pour le champ 'BLEUE'. */ %define X_TRANSLATION_b \ ADD2(X_TRANSLATION_DU_TREFLE \ ,MUL2(echelle_de_translation \ ,COSX(ADD2(DEPHASAGE_DU_QUARK_ROUGE \ ,GRO2(TIERS_DE_CERCLE) \ ) \ ) \ ) \ ) \ /* Translation horizontale du champ 'BLEUE', */ %define Y_TRANSLATION_b \ ADD2(Y_TRANSLATION_DU_TREFLE \ ,MUL2(echelle_de_translation \ ,SINX(ADD2(DEPHASAGE_DU_QUARK_ROUGE \ ,GRO2(TIERS_DE_CERCLE) \ ) \ ) \ ) \ ) \ /* Translation verticale du champ 'BLEUE'. */ #define GAUSS_b \ GRO1(GRO16(FU)) \ /* Efficacite du gaussien du champ 'BLEUE', */ #define GAUSS_X2_b \ FU \ /* Ponderation de XxX du champ 'BLEUE', */ #define GAUSS_Y2_b \ FU \ /* Ponderation de YxY du champ 'BLEUE', */ #define GAUSS_XY_b \ FZERO \ /* Ponderation de XxY du champ 'BLEUE'. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S D I S Q U E S ( C O U L E U R S E T P O S I T I O N S ) : */ /* */ /*************************************************************************************************************************************/ #define NIVEAU_DES_COULEURS \ BLANC \ /* Niveau de marquage maximum des disques flous 'COULEUR', */ #define RAYON_DES_DISQUES \ HUIT \ /* Rayon des disques representatifs des points. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #define POSITIONNEMENT_D_UN_QUARK_DU_PROTON(contexte,COULEUR) \ /* Positionnement de l'un des trois quarks COULEUR={R,V,B} du proton. */ \ Bblock \ SET_CURSOR(_____cNORMALISE_OX(X_du_maximum_du_champ`COULEUR) \ ,_____cNORMALISE_OY(Y_du_maximum_du_champ`COULEUR) \ ,_____cNORMALISE_OZ(Zmax) \ ); \ /* Mise en place du curseur graphique sur le quark courant 'COULEUR'. */ \ WCG(contexte); \ /* Et sauvegarde du contexte graphique... */ \ Eblock #define GENERATION_D_UN_CHAMP_RVB(champ,COULEUR,x,y) \ /* Generation d'un des trois champs COULEUR={R,V,B} au point {x,y}. */ \ Bblock \ EGAL(Fgaussien_____coefficient,Fgaussien_____coefficient`COULEUR); \ EGAL(Fgaussien_____coefficient_X2,Fgaussien_____coefficient_X2`COULEUR); \ EGAL(Fgaussien_____coefficient_Y2,Fgaussien_____coefficient_Y2`COULEUR); \ EGAL(Fgaussien_____coefficient_XY,Fgaussien_____coefficient_XY`COULEUR); \ /* Definition du champ gaussien 'COULEUR' gaussien. */ \ EGAL(champ \ ,ACCES_AUX_CHAMPS(amplificateur_de_la_fonction`COULEUR \ ,Fgaussien \ ,translateur_de_la_fonction`COULEUR \ ,x,y \ ,translation`COULEUR \ ) \ ); \ /* Et generation du champ gaussien 'COULEUR' qui indique ou sont localises, de preference, */ \ /* les quarks 'COULEUR'. */ \ Eblock #include xrq/trefle.90.I" /* Introduit le 20061212110542 pour eviter le message : */ /* */ /* TRACE_D_UN_POINT_D_UN_DOUBLET: unterminated macro call */ /* */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T E S T D E L A G E N E R A T I O N D E S C H A M P S " T R E F L E " */ /* E T " T R O I S - G A U S S I E N S " T R A N S L A T A B L E S : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE)); DEFV(Logical,INIT(niveau_maximum,VRAI)); /* On peut soit generer le niveau maximum ('VRAI') ou bien faire un 'ou exclusif' ('FAUX') */ /* entre les deux champs ("trefle" et "gaussien-RVB")... */ DEFV(Float,INIT(echelle_en_XY_des_champs,ECHELLE_EN_X_DES_CHAMPS)); /* Echelle en {X,Y} des differents champs. */ DEFV(Float,INIT(translation_le_long_de_X_des_champs,TRANSLATION_LE_LONG_DE_X_DES_CHAMPS)); DEFV(Float,INIT(translation_le_long_de_Y_des_champs,TRANSLATION_LE_LONG_DE_Y_DES_CHAMPS)); /* Translation le long des axes des differents champs. */ DEFV(deltaF_2D,translation_du_proton); DEFV(coeffF_2D,echelle_du_proton); /* Translation et echelle du champ a utiliser pour contraindre la generation aleatoire. */ DEFV(Float,INIT(maximum_du_champ_trefle,F_MOINS_L_INFINI)); /* Maximum du champ "trefle" rencontre dans la direction du premier quark. */ DEFV(Float,INIT(echelle_de_translation,FLOT__UNDEF)); /* Echelle de translation destinee a faire coincider les champs "trefle" et */ /* "trois-gaussiens" ; pou ce faire, on recherche dans la direction du premier */ /* quark (le 'ROUGE') le maximum du champ "trefle"... */ DEFV(Float,INIT(amplificateur_de_la_fonction_r,AMPLIFICATEUR_DE_LA_FONCTION_r)); DEFV(Float,INIT(translateur_de_la_fonction_r,TRANSLATEUR_DE_LA_FONCTION_r)); DEFV(Float,INIT(Fgaussien_____coefficient_r,GAUSS_r)); DEFV(Float,INIT(Fgaussien_____coefficient_X2_r,GAUSS_X2_r)); DEFV(Float,INIT(Fgaussien_____coefficient_Y2_r,GAUSS_Y2_r)); DEFV(Float,INIT(Fgaussien_____coefficient_XY_r,GAUSS_XY_r)); DEFV(deltaF_2D,translation_r); DEFV(Float,INIT(seuil_du_champ_r,SEUIL_DU_CHAMP_r)); DEFV(Float,INIT(composante_r_00,FLOT__UNDEF)); DEFV(Float,INIT(composante_r_90,FLOT__UNDEF)); DEFV(Float,INIT(composante_r_10,FLOT__UNDEF)); DEFV(Float,INIT(composante_r_09,FLOT__UNDEF)); DEFV(Float,INIT(composante_r_01,FLOT__UNDEF)); DEFV(Float,INIT(maximum_du_champ_r,F_MOINS_L_INFINI)); DEFV(Int,INIT(X_du_maximum_du_champ_r,UNDEF)); DEFV(Int,INIT(Y_du_maximum_du_champ_r,UNDEF)); /* Definition du champ 'ROUGE' gaussien aux points : */ /* */ /* 00=(X,Y), 90=(X-1,Y), 10=(X+1,Y), 09=(X,Y-1), 01=(X,Y+1). */ /* */ DEFV(Float,INIT(amplificateur_de_la_fonction_v,AMPLIFICATEUR_DE_LA_FONCTION_v)); DEFV(Float,INIT(translateur_de_la_fonction_v,TRANSLATEUR_DE_LA_FONCTION_v)); DEFV(Float,INIT(Fgaussien_____coefficient_v,GAUSS_v)); DEFV(Float,INIT(Fgaussien_____coefficient_X2_v,GAUSS_X2_v)); DEFV(Float,INIT(Fgaussien_____coefficient_Y2_v,GAUSS_Y2_v)); DEFV(Float,INIT(Fgaussien_____coefficient_XY_v,GAUSS_XY_v)); DEFV(deltaF_2D,translation_v); DEFV(Float,INIT(seuil_du_champ_v,SEUIL_DU_CHAMP_v)); DEFV(Float,INIT(composante_v_00,FLOT__UNDEF)); DEFV(Float,INIT(composante_v_90,FLOT__UNDEF)); DEFV(Float,INIT(composante_v_10,FLOT__UNDEF)); DEFV(Float,INIT(composante_v_09,FLOT__UNDEF)); DEFV(Float,INIT(composante_v_01,FLOT__UNDEF)); DEFV(Float,INIT(maximum_du_champ_v,F_MOINS_L_INFINI)); DEFV(Int,INIT(X_du_maximum_du_champ_v,UNDEF)); DEFV(Int,INIT(Y_du_maximum_du_champ_v,UNDEF)); /* Definition du champ 'VERTE' gaussien aux points : */ /* */ /* 00=(X,Y), 90=(X-1,Y), 10=(X+1,Y), 09=(X,Y-1), 01=(X,Y+1). */ /* */ DEFV(Float,INIT(amplificateur_de_la_fonction_b,AMPLIFICATEUR_DE_LA_FONCTION_b)); DEFV(Float,INIT(translateur_de_la_fonction_b,TRANSLATEUR_DE_LA_FONCTION_b)); DEFV(Float,INIT(Fgaussien_____coefficient_b,GAUSS_b)); DEFV(Float,INIT(Fgaussien_____coefficient_X2_b,GAUSS_X2_b)); DEFV(Float,INIT(Fgaussien_____coefficient_Y2_b,GAUSS_Y2_b)); DEFV(Float,INIT(Fgaussien_____coefficient_XY_b,GAUSS_XY_b)); DEFV(deltaF_2D,translation_b); DEFV(Float,INIT(seuil_du_champ_b,SEUIL_DU_CHAMP_b)); DEFV(Float,INIT(composante_b_00,FLOT__UNDEF)); DEFV(Float,INIT(composante_b_90,FLOT__UNDEF)); DEFV(Float,INIT(composante_b_10,FLOT__UNDEF)); DEFV(Float,INIT(composante_b_09,FLOT__UNDEF)); DEFV(Float,INIT(composante_b_01,FLOT__UNDEF)); DEFV(Float,INIT(maximum_du_champ_b,F_MOINS_L_INFINI)); DEFV(Int,INIT(X_du_maximum_du_champ_b,UNDEF)); DEFV(Int,INIT(Y_du_maximum_du_champ_b,UNDEF)); /* Definition du champ 'BLEUE gaussien aux points : */ /* */ /* 00=(X,Y), 90=(X-1,Y), 10=(X+1,Y), 09=(X,Y-1), 01=(X,Y+1). */ /* */ DEFV(Int,INIT(rayon_des_disques,RAYON_DES_DISQUES)); /* Rayon des disques flous (attention : ne peut etre un 'Positive' a cause des expressions */ /* arithmetiques qui l'utilisent...). */ /*..............................................................................................................................*/ EGAL(Ftrefle_____coefficient,COEFFICIENT); #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 EGAL(Ftrefle_____moitie_de_l_exposant_de_rho_module,MOITIE_DE_L_EXPOSANT); #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 EGAL(Ftrefle_____coefficient_rho,COEFFICIENT_RHO); EGAL(Ftrefle_____coefficient_phase_rho,COEFFICIENT_PHASE_RHO); EGAL(Ftrefle_____coefficient_lineaire,COEFFICIENT_LINEAIRE); #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 EGAL(Ftrefle_____coefficient_continu,COEFFICIENT_CONTINU); #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 EGAL(Ftrefle_____coefficient_cosinus,COEFFICIENT_COSINUS); EGAL(Ftrefle_____coefficient_theta,COEFFICIENT_THETA); EGAL(Ftrefle_____coefficient_phase_theta,COEFFICIENT_PHASE_THETA); EGAL(Ftrefle_____coefficient_lineaire_cosinus,COEFFICIENT_LINEAIRE_COSINUS); INITIALISATION_ACCROISSEMENT_2D(translation_du_proton,X_TRANSLATION_DU_TREFLE,Y_TRANSLATION_DU_TREFLE); INITIALISATION_COEFFICIENT_2D(echelle_du_proton,X_ECHELLE_DU_TREFLE,Y_ECHELLE_DU_TREFLE); /* Definition du champ "trefle"... */ #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 GET_ARGUMENTSv(nombre_d_arguments ,BLOC(GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_L("maximum=",niveau_maximum); GET_ARGUMENT_F("Exy=",echelle_en_XY_des_champs); GET_ARGUMENT_F("Tx=",translation_le_long_de_X_des_champs); GET_ARGUMENT_F("Ty=",translation_le_long_de_Y_des_champs); GET_ARGUMENT_F("cs=""Cs=",Ftrefle_____coefficient); GET_ARGUMENT_F("cr=""Cr=",Ftrefle_____coefficient_rho); GET_ARGUMENT_F("pr=""Pr=",Ftrefle_____coefficient_phase_rho); GET_ARGUMENT_F("ts=""Ts=",Ftrefle_____coefficient_lineaire); GET_ARGUMENT_F("cc=""Cc=",Ftrefle_____coefficient_cosinus); GET_ARGUMENT_F("ct=""Ct=",Ftrefle_____coefficient_theta); GET_ARGUMENT_F("pt=""Pt=",Ftrefle_____coefficient_phase_theta); GET_ARGUMENT_F("tc=""Tc=",Ftrefle_____coefficient_lineaire_cosinus); GET_ARGUMENT_F("amplificateurR=""aR=",amplificateur_de_la_fonction_r); GET_ARGUMENT_F("translateurR=""tR=""TR=",translateur_de_la_fonction_r); GET_ARGUMENT_F("amplificateurV=""aV=",amplificateur_de_la_fonction_v); GET_ARGUMENT_F("translateurV=""tV=""TV=",translateur_de_la_fonction_v); GET_ARGUMENT_F("amplificateurB=""aB=",amplificateur_de_la_fonction_b); GET_ARGUMENT_F("translateurB=""tB=""TB=",translateur_de_la_fonction_b); GET_ARGUMENT_F("cR=",Fgaussien_____coefficient_r); GET_ARGUMENT_F("cx2R=",Fgaussien_____coefficient_X2_r); GET_ARGUMENT_F("cy2R=",Fgaussien_____coefficient_Y2_r); GET_ARGUMENT_F("cxyR=",Fgaussien_____coefficient_XY_r); GET_ARGUMENT_F("cV=",Fgaussien_____coefficient_v); GET_ARGUMENT_F("cx2V=",Fgaussien_____coefficient_X2_v); GET_ARGUMENT_F("cy2V=",Fgaussien_____coefficient_Y2_v); GET_ARGUMENT_F("cxyV=",Fgaussien_____coefficient_XY_v); GET_ARGUMENT_F("cB=",Fgaussien_____coefficient_b); GET_ARGUMENT_F("cx2B=",Fgaussien_____coefficient_X2_b); GET_ARGUMENT_F("cy2B=",Fgaussien_____coefficient_Y2_b); GET_ARGUMENT_F("cxyB=",Fgaussien_____coefficient_XY_b); GET_ARGUMENT_I("rayon=",rayon_des_disques); ) ); #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 GET_ARGUMENTSv(nombre_d_arguments ,BLOC(GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_L("maximum=",niveau_maximum); GET_ARGUMENT_F("Exy=",echelle_en_XY_des_champs); GET_ARGUMENT_F("Tx=",translation_le_long_de_X_des_champs); GET_ARGUMENT_F("Ty=",translation_le_long_de_Y_des_champs); GET_ARGUMENT_F("cs=""Cs=",Ftrefle_____coefficient); GET_ARGUMENT_I("r=",Ftrefle_____moitie_de_l_exposant_de_rho_module); GET_ARGUMENT_F("cr=""Cr=",Ftrefle_____coefficient_rho); GET_ARGUMENT_F("pr=""Pr=",Ftrefle_____coefficient_phase_rho); GET_ARGUMENT_F("ts=""Ts=",Ftrefle_____coefficient_lineaire); GET_ARGUMENT_F("co=""Co=",Ftrefle_____coefficient_continu); GET_ARGUMENT_F("cc=""Cc=",Ftrefle_____coefficient_cosinus); GET_ARGUMENT_F("ct=""Ct=",Ftrefle_____coefficient_theta); GET_ARGUMENT_F("pt=""Pt=",Ftrefle_____coefficient_phase_theta); GET_ARGUMENT_F("tc=""Tc=",Ftrefle_____coefficient_lineaire_cosinus); GET_ARGUMENT_F("amplificateurR=""aR=",amplificateur_de_la_fonction_r); GET_ARGUMENT_F("translateurR=""tR=""TR=",translateur_de_la_fonction_r); GET_ARGUMENT_F("amplificateurV=""aV=",amplificateur_de_la_fonction_v); GET_ARGUMENT_F("translateurV=""tV=""TV=",translateur_de_la_fonction_v); GET_ARGUMENT_F("amplificateurB=""aB=",amplificateur_de_la_fonction_b); GET_ARGUMENT_F("translateurB=""tB=""TB=",translateur_de_la_fonction_b); GET_ARGUMENT_F("cR=",Fgaussien_____coefficient_r); GET_ARGUMENT_F("cx2R=",Fgaussien_____coefficient_X2_r); GET_ARGUMENT_F("cy2R=",Fgaussien_____coefficient_Y2_r); GET_ARGUMENT_F("cxyR=",Fgaussien_____coefficient_XY_r); GET_ARGUMENT_F("cV=",Fgaussien_____coefficient_v); GET_ARGUMENT_F("cx2V=",Fgaussien_____coefficient_X2_v); GET_ARGUMENT_F("cy2V=",Fgaussien_____coefficient_Y2_v); GET_ARGUMENT_F("cxyV=",Fgaussien_____coefficient_XY_v); GET_ARGUMENT_F("cB=",Fgaussien_____coefficient_b); GET_ARGUMENT_F("cx2B=",Fgaussien_____coefficient_X2_b); GET_ARGUMENT_F("cy2B=",Fgaussien_____coefficient_Y2_b); GET_ARGUMENT_F("cxyB=",Fgaussien_____coefficient_XY_b); GET_ARGUMENT_I("rayon=",rayon_des_disques); ) ); #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 CALi(FgERASE()); /* Initialisation de l'image Resultat. */ begin_image Bblock Test(IFLE(SOUA(ACCES_AUX_CHAMPS(FU ,Fargument ,FZERO ,X,Y ,translation_du_proton ) ,DEPHASAGE_DU_QUARK_ROUGE ) ,VOISINAGE_DU_QUARK_ROUGE ) ) Bblock DEFV(Float,INIT(champ_courant,ACCES_AUX_CHAMPS(FU ,Ftrefle ,FZERO ,X,Y ,translation_du_proton ) ) ); /* Lorsque l'on se trouve dans la direction du premier quark, on regarde l'intensite du */ /* champ "trefle". */ Test(IFGT(champ_courant,maximum_du_champ_trefle)) Bblock EGAL(maximum_du_champ_trefle,champ_courant); /* Lorsqu'on est en presence d'un maximum local, on le memorise, ainsi que le 'rho' */ /* correspondant : */ EGAL(echelle_de_translation ,ACCES_AUX_CHAMPS(FU ,Fmodule ,FZERO ,X,Y ,translation_du_proton ) ); /* Recherche du module 'rho' du point du champ "trefle" qui soit dans la direction */ /* du quark 'ROUGE' est qui corresponde a un maximum du champ "trefle". */ Eblock ATes Bblock Eblock ETes Eblock ATes Bblock Eblock ETes Eblock end_image INITIALISATION_ACCROISSEMENT_2D(translation_r,X_TRANSLATION_r,Y_TRANSLATION_r); /* Initialisation de la translation du champ 'ROUGE' gaussien. */ INITIALISATION_ACCROISSEMENT_2D(translation_v,X_TRANSLATION_v,Y_TRANSLATION_v); /* Initialisation de la translation du champ 'VERTE' gaussien. */ INITIALISATION_ACCROISSEMENT_2D(translation_b,X_TRANSLATION_b,Y_TRANSLATION_b); /* Initialisation de la translation du champ 'BLEUE' gaussien. */ CALi(IFinitialisation(IFmage_PR,FZERO)); /* Pour stocker le champ "trois-gaussiens". */ CALi(IFinitialisation(IFmage_PI,FZERO)); /* Pour stocker le champ "trefle". */ begin_image Bblock storeF_point(ACCES_AUX_CHAMPS(FU ,Ftrefle ,FZERO ,X,Y ,translation_du_proton ) ,IFmage_PI ,X,Y ); GENERATION_D_UN_CHAMP_RVB(composante_r_00,r,NEUT(X),NEUT(Y)); Test(IFGT(composante_r_00,maximum_du_champ_r)) Bblock EGAL(maximum_du_champ_r,composante_r_00); EGAL(X_du_maximum_du_champ_r,X); EGAL(Y_du_maximum_du_champ_r,Y); Eblock ATes Bblock Eblock ETes /* Et generation du champ gaussien 'ROUGE' qui indique ou sont localises, de preference, */ /* les quarks 'ROUGE' (le maximum correspondra au quark reel). */ GENERATION_D_UN_CHAMP_RVB(composante_v_00,v,NEUT(X),NEUT(Y)); Test(IFGT(composante_v_00,maximum_du_champ_v)) Bblock EGAL(maximum_du_champ_v,composante_v_00); EGAL(X_du_maximum_du_champ_v,X); EGAL(Y_du_maximum_du_champ_v,Y); Eblock ATes Bblock Eblock ETes /* Et generation du champ gaussien 'VERTE' qui indique ou sont localises, de preference, */ /* les quarks 'VERTE' (le maximum correspondra au quark reel). */ GENERATION_D_UN_CHAMP_RVB(composante_b_00,b,NEUT(X),NEUT(Y)); Test(IFGT(composante_b_00,maximum_du_champ_b)) Bblock EGAL(maximum_du_champ_b,composante_b_00); EGAL(X_du_maximum_du_champ_b,X); EGAL(Y_du_maximum_du_champ_b,Y); Eblock ATes Bblock Eblock ETes /* Et generation du champ gaussien 'BLEUE' qui indique ou sont localises, de preference, */ /* les quarks 'BLEUE' (le maximum correspondra au quark reel). */ storeF_point(ADD3(composante_r_00,composante_v_00,composante_b_00),IFmage_PR,X,Y); Eblock end_image CALS(Ifloat_std_avec_renormalisation(ImageA1,IFmage_PR)); /* Pour stocker le champ "trois-gaussiens". */ CALS(Ifloat_std_avec_renormalisation(ImageA2,IFmage_PI)); /* Pour stocker le champ "trefle". */ Test(IL_FAUT(niveau_maximum)) Bblock CALS(Imaximum(ImageR,ImageA1,ImageA2)); /* Superposition des deux champs... */ Eblock ATes Bblock CALS(Ieor(ImageR,ImageA1,ImageA2)); /* Superposition des deux champs... */ Eblock ETes POSITIONNEMENT_D_UN_QUARK_DU_PROTON(vecteurs_____Gcon_11,r); TRACE_D_UN_POINT_D_UN_DOUBLET(vecteurs_____Gcon_11,NIVEAU_DES_COULEURS,GRO4); /* Trace du quark 'ROUGE' du proton, */ POSITIONNEMENT_D_UN_QUARK_DU_PROTON(vecteurs_____Gcon_12,v); TRACE_D_UN_POINT_D_UN_DOUBLET(vecteurs_____Gcon_12,NIVEAU_DES_COULEURS,GRO4); /* Trace du quark 'VERTE' du proton, */ POSITIONNEMENT_D_UN_QUARK_DU_PROTON(vecteurs_____Gcon_13,b); TRACE_D_UN_POINT_D_UN_DOUBLET(vecteurs_____Gcon_13,NIVEAU_DES_COULEURS,GRO4); /* Trace du quark 'BLEUE' du proton, */ CALi(Iupdate_image(nom_imageR,ImageR)); RETU_Commande; Eblock ECommande