/*************************************************************************************************************************************/ /* */ /* G E N E R A T I O N D E V A L E U R S C O R R E S P O N D A N T A U X */ /* C O O R D O N N E E S S U R U N E S P I R A L E C A R R E E : */ /* */ /* */ /* Definition : */ /* */ /* Cette commande donne comme resultat une */ /* liste de combinaisons lineaires des abscisses */ /* et des ordonnees {X,Y} de points sur une */ /* spirale carree. */ /* */ /* */ /* Author of '$xci/valeurs_spir$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 19990202145239). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ #include xci/sequence.01.I" #include xci/coordonne.01.I" #define EDITER_DES_COORDONNEES_NORMALISEES \ VRAI \ /* Faut-il editer des coordonnees normalisees ('VRAI') ou denormalisees ('FAUX') ? */ \ /* Ceci fut introduit le 20140204175555... */ #define PONDERATION_DE_X \ FU #define PONDERATION_DE_Y \ FZERO /* Ponderations respectives de 'X' et de 'Y'. */ #define FACTEUR_DE_X \ FU #define FACTEUR_DE_Y \ FU /* Homotheties respectives de 'X' et de 'Y'. */ #include xci/valeurs.01.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #include xci/valeurs.02.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E N E R A T I O N D E V A L E U R S C O R R E S P O N D A N T A U X */ /* C O O R D O N N E E S S U R U N E S P I R A L E C A R R E E : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock #include xci/coordonne.02.I" DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE)); /* Numero de la premiere image, */ DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE)); /* Numero de la derniere image. */ DEFV(Int,INIT(numero_d_image,UNDEF)); /* Numero de l'image courante. */ DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES)); /* Pas de passage d'un numero d'image a une autre. */ DEFV(Logical,INIT(editer_des_coordonnees_normalisees,EDITER_DES_COORDONNEES_NORMALISEES)); /* Faut-il editer des coordonnees normalisees ('VRAI') ou denormalisees ('FAUX') ? */ /* Ceci fut introduit le 20140204175555... */ DEFV(Float,INIT(ponderation_de_X,PONDERATION_DE_X)); DEFV(Float,INIT(ponderation_de_Y,PONDERATION_DE_Y)); /* Ponderations respectives de 'X' et de 'Y'. */ DEFV(Float,INIT(facteur_de_X,FACTEUR_DE_X)); DEFV(Float,INIT(facteur_de_Y,FACTEUR_DE_Y)); /* Homotheties respectives de 'X' et de 'Y'. */ #include xci/valeurs.03.I" /*..............................................................................................................................*/ #include xci/coordonne.04.I" /* Ceci a ete introduit le 20051218183402... */ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_I("premiere=""p=""D=",premiere_image); GET_ARGUMENT_I("derniere=""d=""A=",derniere_image); GET_ARGUMENT_I("pas=",pas_des_images); GET_ARGUMENT_L("coordonnees_normalisees=""cn=",editer_des_coordonnees_normalisees); GET_ARGUMENT_N("coordonnees_denormalisees=""cdn=",editer_des_coordonnees_normalisees); /* Arguments introduits le 20140204175555... */ GET_ARGUMENT_L("centrer=",centrer_les_coordonnees_normalisees); GET_ARGUMENT_F("Px=""PX=",ponderation_de_X); GET_ARGUMENT_F("Py=""PY=",ponderation_de_Y); GET_ARGUMENT_F("ax=""aX=""Ax=""AX=",facteur_de_X); GET_ARGUMENT_F("ay=""aY=""Ay=""AY=",facteur_de_Y); GET_ARGUMENT_F("bx=""bX=""Bx=""BX=",translation_des_X_normalisees); GET_ARGUMENT_F("by=""bY=""By=""BY=",translation_des_Y_normalisees); PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1; /* Cette procedure fut introduite le 20061226185943... */ ) ); Test(IFLE(premiere_image,derniere_image)) Bblock DEFV(pointI_2D,point_courant); /* Point (entier) courant. */ SPIRALE_DEFINITION /* Donnees de generation d'une spirale de parcours d'une image. */ SPIRALE_VALIDATION; /* Validation des pas de parcours (pasX,pasY) des images. */ INITIALISATION_POINT_2D(point_courant,Xcentre,Ycentre); /* Et on se place au centre de l'image. */ #include xci/coordonne.03.I" DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images) Bblock Test(IL_FAUT(editer_des_coordonnees_normalisees)) /* Test introduit le 20140204175555... */ Bblock CAL2(Prin2(Cara(chain_Aconcaten5(INTRODUCTION_FORMAT,valeurs_signees,".*",format_d_edition,"\n")) ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) ,MULTIPLE_DE(ENTIER_FLOTTANT(LIZ2(ponderation_de_X ,AXPB(facteur_de_X ,SUPER_cNORMALISE_OX(ASD1(point_courant,x)) ,translation_des_X_normalisees ) ,ponderation_de_Y ,AXPB(facteur_de_Y ,SUPER_cNORMALISE_OY(ASD1(point_courant,y)) ,translation_des_Y_normalisees ) ) ) ) ) ); /* Et enfin, edition d'une combinaison lineaire des coordonnees du point courant. */ Eblock ATes Bblock CAL2(Prin1(Cara(chain_Aconcaten4(INTRODUCTION_FORMAT,valeurs_signees,"d","\n")) ,INTE(LIZ2(ponderation_de_X ,FLOT(ASD1(point_courant,x)) ,ponderation_de_Y ,FLOT(ASD1(point_courant,y)) ) ) ) ); Eblock ETes SPIRALE_INITIALISATION; /* Initialisation dynamique de 'spirale_nombre_de_points_a_traiter'. */ SPIRALE_DEPLACEMENT(ASD1(point_courant,x),ASD1(point_courant,y)); /* Deplacement du point courant de la spirale... */ /* ATTENTION : on n'utilise pas 'SPIRALE_DEPLACEMENT_ET_PARCOURS(...)' afin de garantir le */ /* traitement de tous les points de l'image... */ SPIRALE_PARCOURS; /* Parcours de la spirale avec rotation eventuelle de PI/2 du bras courant... */ Eblock EDoI Eblock ATes Bblock PRINT_ERREUR("la relation d'ordre stricte ('premier < dernier') n'est pas respectee"); Eblock ETes RETU_Commande; Eblock ECommande