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