/*************************************************************************************************************************************/
/* */
/* T E S T D E L A D E F I N I T I O N D E S C O O R D O N N E E S D ' U N C H A M P : */
/* */
/* */
/* Author of '$xtKi/COORDONNEES_XYZT_D_UN_CHAMP_3D.01$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20190621101532). */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_BASE
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#include xci/genere_ch.01.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#define x_normalisee \
x_normalisee_2
#define y_normalisee \
y_normalisee_2
#define PRINT(x,y,z,t,c1,c2,c3,c4) \
Bblock \
DEFV(Float,INIT(x_normalisee_1,ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D(x,y,z,t,ASD1,translation,echelle))); \
DEFV(Float,INIT(y_normalisee_1,ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D(x,y,z,t,ASD1,translation,echelle))); \
/* Version -1- la plus generale ('v $xiii/mono_image$FON ACCES_A_LA_COORDONNEE_X_D_UN'). */ \
\
DEFV(Float,INIT(x_normalisee_2 \
,HOMO(MUL2(ASD1(echelle,cx) \
,SUPER_cNORMALISE_OX(SOUS(x,SUPER_lDENORMALISE_OX(ASD1(translation,dx)))) \
) \
,MUL2(ASD1(echelle,cx),SOUS(COORDONNEE_BARYCENTRIQUE_MINIMALE,ASD1(translation,dx))) \
,MUL2(ASD1(echelle,cx),SOUS(COORDONNEE_BARYCENTRIQUE_MAXIMALE,ASD1(translation,dx))) \
,ACCES_A_UN_CHAMP_3D_____OX \
,ACCES_A_UN_CHAMP_3D_____EX \
) \
) \
); \
DEFV(Float,INIT(y_normalisee_2 \
,HOMO(MUL2(ASD1(echelle,cy) \
,SUPER_cNORMALISE_OY(SOUS(y,SUPER_lDENORMALISE_OY(ASD1(translation,dy)))) \
) \
,MUL2(ASD1(echelle,cy),SOUS(COORDONNEE_BARYCENTRIQUE_MINIMALE,ASD1(translation,dy))) \
,MUL2(ASD1(echelle,cy),SOUS(COORDONNEE_BARYCENTRIQUE_MAXIMALE,ASD1(translation,dy))) \
,ACCES_A_UN_CHAMP_3D_____OY \
,ACCES_A_UN_CHAMP_3D_____EY \
) \
) \
); \
/* Version -2- sans options de compatibilite et donnant les bons resultats. Ceci a ete */ \
/* obtenu en simpliant les definitions de 'ACCES_A_LA_COORDONNEE_?_D_UN_CHAMP_3D(...)'... */ \
\
DEFV(Float,INIT(x_normalisee_3 \
,MUL2(ASD1(echelle,cx) \
,SUPER_cNORMALISE_OX(SOUS(x,SUPER_lDENORMALISE_OX(ASD1(translation,dx)))) \
) \
) \
); \
DEFV(Float,INIT(y_normalisee_3 \
,MUL2(ASD1(echelle,cy) \
,SUPER_cNORMALISE_OY(SOUS(y,SUPER_lDENORMALISE_OY(ASD1(translation,dy)))) \
) \
) \
); \
/* Version -3- la plus simple mais ne donnant pas les bons resultats car n'utilisant pas */ \
/* {ACCES_A_UN_CHAMP_3D_____O?,ACCES_A_UN_CHAMP_3D_____E?}... */ \
\
EGAL(AXES_COORDONNEES_FERMES_OUVERTS_____compatibilite_20090929,c1); \
\
EGAL(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____compatibilite_20061128,c2); \
EGAL(ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____compatibilite_20061128,c2); \
\
EGAL(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____compatibilite_20100210,c3); \
EGAL(ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____compatibilite_20100210,c3); \
\
EGAL(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____coordonnees_dans_un_carre,c4); \
EGAL(ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____coordonnees_dans_un_carre,c4); \
\
CAL2(Prin1("axes_fermes=%s",ETAT_LOGIQUE(c1))); \
CAL2(Prin0(" ")); \
CAL2(Prin1("20061128=%s",ETAT_LOGIQUE(c2))); \
CAL2(Prin0(" ")); \
CAL2(Prin1("20100210=%s",ETAT_LOGIQUE(c3))); \
CAL2(Prin0(" ")); \
CAL2(Prin1("c_dans_un_carre=%s",ETAT_LOGIQUE(c4))); \
\
CAL2(Prin0(" : ")); \
\
CAL2(Prin4("{%04d,%04d,%04d,%04d}",x,y,z,t)); \
/* Les "%04d"s sont destines a garantir une bonne tabulation... */ \
CAL2(Prin0(" ")); \
CAL2(Prin2("echelle={%+.^^^,%+.^^^}",ASD1(echelle,cx),ASD1(echelle,cy))); \
CAL2(Prin0(" ")); \
CAL2(Prin2("translation={%+.^^^,%+.^^^}",ASD1(translation,dx),ASD1(translation,dy))); \
CAL2(Prin0(" --> ")); \
CAL2(Prin2("{%+.^^^,%+.^^^}",x_normalisee,y_normalisee)); \
\
CAL2(Prin0("\n")); \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* T E S T D E L A D E F I N I T I O N D E S C O O R D O N N E E S D ' U N C H A M P : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(Int,INIT(X,Xmin));
DEFV(Int,INIT(Y,Ymin));
#include xci/genere_ch.02.I"
/*..............................................................................................................................*/
#include xci/genere_ch.03.I"
#include xci/genere_ch.11.I"
EGAL(PREMIER_CARACTERE_ITb0(mode_fg_de_FORMAT_FLOT_EDITION),K_f);
EGAL(nombre_de_chiffres_des_editions_flottantes,SIX);
/* Afin de garantir une bonne tabulation... */
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(GET_ARGUMENT_I("X=",X);
GET_ARGUMENT_I("Y=",Y);
PROCESS_ARGUMENTS_DE_PARAMETRAGE_3D_DE_____ACCES_A_UN_CHAMP_3D;
)
);
CAL2(Prin1("minX=%+^^^^\n",MUL2(ASD1(echelle,cx),SOUS(COORDONNEE_BARYCENTRIQUE_MINIMALE,ASD1(translation,dx)))));
CAL2(Prin1("maxX=%+^^^^\n",MUL2(ASD1(echelle,cx),SOUS(COORDONNEE_BARYCENTRIQUE_MAXIMALE,ASD1(translation,dx)))));
CAL2(Prin1("OX..=%+^^^^\n",ACCES_A_UN_CHAMP_3D_____OX));
CAL2(Prin1("EX..=%+^^^^\n",ACCES_A_UN_CHAMP_3D_____EX));
CAL2(Prin1("minY=%+^^^^\n",MUL2(ASD1(echelle,cy),SOUS(COORDONNEE_BARYCENTRIQUE_MINIMALE,ASD1(translation,dy)))));
CAL2(Prin1("maxY=%+^^^^\n",MUL2(ASD1(echelle,cy),SOUS(COORDONNEE_BARYCENTRIQUE_MAXIMALE,ASD1(translation,dy)))));
CAL2(Prin1("OY..=%+^^^^\n",ACCES_A_UN_CHAMP_3D_____OY));
CAL2(Prin1("EY..=%+^^^^\n",ACCES_A_UN_CHAMP_3D_____EY));
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin
,Z,T
,AXES_COORDONNEES_FERMES_OUVERTS_____compatibilite_20090929
,CHOI(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____compatibilite_20061128
,ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____compatibilite_20061128
)
,CHOI(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____compatibilite_20100210
,ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____compatibilite_20100210
)
,CHOI(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____coordonnees_dans_un_carre
,ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____coordonnees_dans_un_carre
)
);
PRINT(Xmax,Ymax
,Z,T
,AXES_COORDONNEES_FERMES_OUVERTS_____compatibilite_20090929
,CHOI(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____compatibilite_20061128
,ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____compatibilite_20061128
)
,CHOI(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____compatibilite_20100210
,ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____compatibilite_20100210
)
,CHOI(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____coordonnees_dans_un_carre
,ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____coordonnees_dans_un_carre
)
);
PRINT(X,Y
,Z,T
,AXES_COORDONNEES_FERMES_OUVERTS_____compatibilite_20090929
,CHOI(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____compatibilite_20061128
,ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____compatibilite_20061128
)
,CHOI(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____compatibilite_20100210
,ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____compatibilite_20100210
)
,CHOI(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____coordonnees_dans_un_carre
,ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____coordonnees_dans_un_carre
)
);
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,VRAI,VRAI,VRAI,VRAI);
PRINT(Xmax,Ymax,Z,T,VRAI,VRAI,VRAI,VRAI);
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,VRAI,VRAI,VRAI,FAUX);
PRINT(Xmax,Ymax,Z,T,VRAI,VRAI,VRAI,FAUX);
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,VRAI,VRAI,FAUX,VRAI);
PRINT(Xmax,Ymax,Z,T,VRAI,VRAI,FAUX,VRAI);
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,VRAI,VRAI,FAUX,FAUX);
PRINT(Xmax,Ymax,Z,T,VRAI,VRAI,FAUX,FAUX);
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,VRAI,FAUX,VRAI,VRAI);
PRINT(Xmax,Ymax,Z,T,VRAI,FAUX,VRAI,VRAI);
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,VRAI,FAUX,VRAI,FAUX);
PRINT(Xmax,Ymax,Z,T,VRAI,FAUX,VRAI,FAUX);
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,VRAI,FAUX,FAUX,VRAI);
PRINT(Xmax,Ymax,Z,T,VRAI,FAUX,FAUX,VRAI);
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,VRAI,FAUX,FAUX,FAUX);
PRINT(Xmax,Ymax,Z,T,VRAI,FAUX,FAUX,FAUX);
/* Je note le 20190621123557 que c'est cette configuration qui donne la bonne reponse (soit */
/* [-0.5,+0.5]) avec "fTX=0 fTY=0". La bonne valeur des indicateurs est donc : */
/* */
/* AXES_COORDONNEES_FERMES_OUVERTS_____compatibilite_20090929 = VRAI */
/* ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____compatibilite_20061128 = FAUX */
/* ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____compatibilite_20100210 = FAUX */
/* ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____coordonnees_dans_un_carre = FAUX */
/* */
/* La question est de comprendre maintenant pourquoi il faut des translations nulles */
/* ("fTX=0 fTY=0") et non pas egales a 0.5 ? */
/* */
/* En fait, tout vient de {ACCES_A_UN_CHAMP_3D_____O?,ACCES_A_UN_CHAMP_3D_____E?} qui */
/* font passer de [0,1] a [-0.5,+0.5] ('v genere_ch.03$I EGAL.ACCES_A_UN_CHAMP_3D_____'). */
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,FAUX,VRAI,VRAI,VRAI);
PRINT(Xmax,Ymax,Z,T,FAUX,VRAI,VRAI,VRAI);
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,FAUX,VRAI,VRAI,FAUX);
PRINT(Xmax,Ymax,Z,T,FAUX,VRAI,VRAI,FAUX);
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,FAUX,VRAI,FAUX,VRAI);
PRINT(Xmax,Ymax,Z,T,FAUX,VRAI,FAUX,VRAI);
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,FAUX,VRAI,FAUX,FAUX);
PRINT(Xmax,Ymax,Z,T,FAUX,VRAI,FAUX,FAUX);
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,FAUX,FAUX,VRAI,VRAI);
PRINT(Xmax,Ymax,Z,T,FAUX,FAUX,VRAI,VRAI);
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,FAUX,FAUX,VRAI,FAUX);
PRINT(Xmax,Ymax,Z,T,FAUX,FAUX,VRAI,FAUX);
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,FAUX,FAUX,FAUX,VRAI);
PRINT(Xmax,Ymax,Z,T,FAUX,FAUX,FAUX,VRAI);
CAL2(Prin0("\n"));
PRINT(Xmin,Ymin,Z,T,FAUX,FAUX,FAUX,FAUX);
PRINT(Xmax,Ymax,Z,T,FAUX,FAUX,FAUX,FAUX);
RETU_Commande;
Eblock
ECommande