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