/*************************************************************************************************************************************/ /* */ /* C O N V E R S I O N D E C O O R D O N N E E S E N I N D E X D E S P I R A L E */ /* E T I N V E R S E M E N T : */ /* */ /* */ /* Author of '$xci/spirale.11$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1997??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I C H I E R S D ' I N C L U D E S : */ /* */ /*************************************************************************************************************************************/ #include INCLUDES_BASE /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define COORDONNEE_X \ Xmin #define COORDONNEE_Y \ Ymin /* Coordonnees cartesiennes. */ #define INDEX_DE_LA_SPIRALE \ PREMIER_POINT #define PAS_MOINS_1_DE_LA_SPIRALE \ NOMBRE_DE_POINTS_SAUTES_SUR_LA_SPIRALE /* Index sur la spirale. */ #define CONVERTIR_DE_CARTESIENNES_EN_INDEX_DE_SPIRALE \ VRAI \ /* Indique si l'on convertit de cartesiennes en index de spirale ('VRAI') ou bien d'index */ \ /* de spirale en cartesiennes ('FAUX'). */ #define EDITER_COORDONNEE_X \ VRAI #define EDITER_COORDONNEE_Y \ VRAI #define EDITER_L_INDEX_DE_LA_SPIRALE \ VRAI /* Controle de l'edition. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #define EDITER(valeur,editer,message) \ Bblock \ Test(IL_FAUT(editer)) \ Bblock \ CAL2(Prin2("%s=%d\n",message,valeur)); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Procedure d'edition conditionnelle. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O N V E R S I O N D E C O O R D O N N E E S E N I N D E X D E S P I R A L E */ /* E T I N V E R S E M E N T : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Int,INIT(coordonnee_X,COORDONNEE_X)); DEFV(Int,INIT(coordonnee_Y,COORDONNEE_Y)); /* Coordonnees cartesiennes. */ DEFV(Int,INIT(pas_moins_1_de_la_spirale,PAS_MOINS_1_DE_LA_SPIRALE)); DEFV(Int,INIT(index_de_la_spirale,INDEX_DE_LA_SPIRALE)); /* Index sur la spirale. */ DEFV(Logical,INIT(convertir_de_cartesiennes_en_index_de_spirale,CONVERTIR_DE_CARTESIENNES_EN_INDEX_DE_SPIRALE)); /* Indique si l'on convertit de cartesiennes en index de spirale ('VRAI') ou bien d'index */ /* de spirale en cartesiennes ('FAUX'). */ DEFV(Logical,INIT(editer_coordonnee_X,EDITER_COORDONNEE_X)); DEFV(Logical,INIT(editer_coordonnee_Y,EDITER_COORDONNEE_Y)); DEFV(Logical,INIT(editer_l_index_de_la_spirale,EDITER_L_INDEX_DE_LA_SPIRALE)); /* Controle de l'edition. */ /*..............................................................................................................................*/ GET_ARGUMENTS_(nombre_d_arguments ,BLOC(GET_ARGUMENT_I("x=""X=",coordonnee_X); GET_ARGUMENT_I("y=""Y=",coordonnee_Y); GET_ARGUMENT_I("index=",index_de_la_spirale); GET_ARGUMENT_I("pas=",pas_moins_1_de_la_spirale); GET_ARGUMENT_L("spirale=",convertir_de_cartesiennes_en_index_de_spirale); GET_ARGUMENT_L("ex=""eX=",editer_coordonnee_X); GET_ARGUMENT_L("ey=""eY=",editer_coordonnee_Y); GET_ARGUMENT_L("espirale=""eS=""eI=",editer_l_index_de_la_spirale); ) ); Test(IL_FAUT(convertir_de_cartesiennes_en_index_de_spirale)) Bblock SPIRALE_DEFINITION /* Donnees de generation d'une spirale de parcours d'une image. */ DEFV(pointI_2D,point_courant); /* Point courant sur la spirale. */ DEFV(Int,INIT(nombre_de_points,ZERO)); /* Donne le nombre courant de points de la spirale. */ DEFV(Logical,INIT(parcourir_la_spirale,VRAI)); /* Afin d'eviter des bouclages trop longs sur la spirale. */ INITIALISATION_POINT_2D(point_courant,Xmin,Ymin); /* Initialisation du point courant sur la spirale. */ SPIRALE_VALIDATION; /* Validation des pas de parcours (pasX,pasY) des images. */ Tant(IL_FAUT(parcourir_la_spirale)) Bblock INCR(nombre_de_points,I); /* Et on calcule le nombre de points que l'on a traite. */ Test(IFET(IFEQ(coordonnee_X,ASD1(point_courant,x)),IFEQ(coordonnee_Y,ASD1(point_courant,y)))) Bblock EGAL(parcourir_la_spirale,FAUX); /* On a trouve : on peut donc s'arreter et editer... */ EDITER(coordonnee_X,editer_coordonnee_X,"x"); EDITER(coordonnee_Y,editer_coordonnee_Y,"y"); EDITER(index_de_la_spirale,editer_l_index_de_la_spirale,"index"); Eblock ATes Bblock INCR(index_de_la_spirale,I); /* Et on met a jour l'index sur la spirale... */ Test(IFGE(nombre_de_points,GRO4(dimXY))) /* On notera que ce test est relativement arbitraire et n'est pas lie a au test */ /* 'TEST_DANS_L_IMAGE(...)' de 'point_courant' puisque l'initialisation de celui-ci */ /* est faite avec {Xmin,Ymin} et qu'ainsi les trois-quarts de la spirale sont en dehors */ /* du format d'image courant, d'ou le 'GRO4(...)'. */ Bblock EGAL(parcourir_la_spirale,FAUX); /* Lorsqu'on a traite trop de points on force l'arret. */ PRINT_ERREUR("le point n'a pas ete trouve sur la spirale courante, changer '$formatI'"); Eblock ATes Bblock Eblock ETes Eblock ETes SPIRALE_DEPLACEMENT_ET_PARCOURS(ASD1(point_courant,x),ASD1(point_courant,y),pas_moins_1_de_la_spirale); /* Deplacement du point courant de la spirale... */ Eblock ETan Eblock ATes Bblock EDITER(iSPIRALE_X(index_de_la_spirale,pas_moins_1_de_la_spirale),editer_coordonnee_X,"x"); EDITER(iSPIRALE_Y(index_de_la_spirale,pas_moins_1_de_la_spirale),editer_coordonnee_Y,"y"); EDITER(index_de_la_spirale,editer_l_index_de_la_spirale,"index"); Eblock ETes RETU_Commande; Eblock ECommande