/*************************************************************************************************************************************/ /* */ /* 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 " M A T R I C I E L L E S " D A N S L ' I M A G E : */ /* */ /* */ /* Definition : */ /* */ /* Cette commande donne comme resultat une */ /* liste de combinaisons lineaires des abscisses */ /* et des ordonnees {X,Y} des points d'une image. */ /* */ /* */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * * * ** * * * * * ** * */ /* * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * */ /* * * * * ** * * * * * ** */ /* * * * * * * * * * * * * * * * * * * * * * * */ /* */ /* */ /* ATTENTION : */ /* */ /* Je note le 20180618163444 que les coordonnees */ /* normalisees (lorsqu'elles sont demandees...) sont */ /* dans [0,1[ et non pas dans [0,1]... On verra a ce */ /* propos 'v $xiirv/.PUZZ.11.1.$U 20180618161323' si */ /* necessaire... */ /* */ /* */ /* Author of '$xci/valeurs_imag$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 19990209103707). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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/substitue.01.I" /* Introduit le 20150608110409... */ #include xci/sequence.01.I" #include xci/coordonne.01.I" #define GENERER_UN_MAILLAGE \ FAUX \ /* Faut-il generer des points isoles ('FAUX') ou bien un maillage ('VRAI') ? La valeur */ \ /* par defaut garantit la compatibilite anterieure (introduit le 20150525090531)... */ #define LE_MAILLAGE_EST_COMPLET \ VRAI #define SEUIL_DU_MAILLAGE_COMPLET \ FDU /* Faut-il generer un maillage complet ('VRAI') ou incomplet ('FAUX'), c'est-a-dire qu'il */ /* est alors leatoire ? La valeur par defaut garantit la compatibilite anterieure */ /* (introduit le 20171109125245)... */ #define MAILLE_X \ UN #define MAILLE_Y \ UN /* Definition du maillage (introduite le 20150525093639)... */ #define LE_MAILLAGE_EST_TRIANGULAIRE \ FAUX \ /* Le maillage (si 'IL_FAUT(generer_un_maillage)') doit-il etre triangulaire ('VRAI') */ \ /* ou rectangulaire ('FAUX') ? Ceci a ete introduit le 20150525090531... */ #define LE_MAILLAGE_TRIANGULAIRE_EST_ALEATOIRE \ FAUX #define SEUIL_DU_MAILLAGE_TRIANGULAIRE_ALEATOIRE \ FDU #define UTILISER_UN_ESPACE_DE_PARAMETRAGE_TRIDIMENSIONNEL \ FAUX #define GRAINE \ PARE(1789) /* Le maillage (si 'IL_FAUT(generer_un_maillage)') doit-il etre aleatoire ('VRAI') */ /* ou pas ('FAUX') ? Ceci a ete introduit le 20150608110409... */ #define LE_MAILLAGE_TRIANGULAIRE_EST_MONTANT___ \ VRAI #define LE_MAILLAGE_TRIANGULAIRE_EST_DESCENDANT \ FAUX /* Si 'EST_VRAI(le_maillage_est_triangulaire)' est-il "montant" (bas-gauche --> haut-droite) */ /* et/ou "descendant" (haut-gauche --> bas-droite) ? Ceci a ete introduit le 20150530100449. */ /* On notera que lorsque le maillage est a la fois "montant"et "descendant", il n'est plus */ /* plan car, en effet, les aretes montantes et descendantes se croisent alors... */ #define TRACER_LE_SEGMENT_000_100 \ VRAI #define TRACER_LE_SEGMENT_100_110 \ VRAI #define TRACER_LE_SEGMENT_110_010 \ VRAI #define TRACER_LE_SEGMENT_010_000 \ VRAI #define TRACER_LE_SEGMENT_000_110 \ VRAI #define TRACER_LE_SEGMENT_100_010 \ VRAI /* Definition des segments a tracer (introduite le 20150608121622 et completee le */ /* 20150610092834). */ #define METTRE_ORIGINE_ET_EXTREMITE_SUR_UNE_MEME_LIGNE \ VRAI \ /* Faut-il mettre l'origine 'A' et l'extremite 'B' d'un segment sur une meme ligne ('VRAI') */ \ /* ou sur deux lignes separees ('FAUX') ? Ceci fut introduit le 20150526140407. On notera */ \ /* que les mettre sur une meme ligne facilite les optimisations supprimant les segments */ \ /* redondants, cela se faisant via '$SOR -u' en manipulant ensuite des lignes regenerees */ \ /* du type {XA,XB,YA,YB} qui doivent donc etre uniques... */ #define EDITER_DES_COORDONNEES_NORMALISEES \ VRAI \ /* Faut-il normaliser les coordonnees ('VRAI') ou pas ('FAUX') ? La valeur par defaut */ \ /* garantit la compatibilite anterieure (introduit le 20121110103934)... */ #define UTILISER_LE_NUMERO_D_IMAGE \ VRAI \ /* Faut-il ne sortir les coordonnees {X,Y} que pour les premieres valeurs du numero d'image */ \ /* d'image ('VRAI') ou bien faut-il les sortir toutes ('FAUX') ? On notera en fait que cela */ \ /* signifie "ne sortir que les premieres (comptees en numero d'image) coordonnees {X,Y}"... */ #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'. */ #define LARGEUR_DE_LA_BORDURE_A_EXCLURE \ FZERO \ /* Largeur de la bordure a exclure autour de l'image. */ #include xci/valeurs.01.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #include xci/substitue.02.I" /* Introduit le 20150608110409... */ #include xci/valeurs.02.I" #include xci/valeurs_imag.01.I" /* Introduit le 20150609081602... */ #define _____X \ GRO0(maille_X) #define MOVE_X \ GRO1(maille_X) #define _____Y \ GRO0(maille_Y) #define MOVE_Y \ GRO1(maille_Y) /* Definitions des deplacement elementaires (introduites le 20150525205108). */ #define EDITION_D_UN_POINT(coordonnee_X,coordonnee_Y,tabulation) \ Bblock \ CAL2(Prin3(Cara(chain_Aconcaten5(INTRODUCTION_FORMAT,valeurs_signees,".*",format_d_edition,"%s")) \ ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) \ ,MULTIPLE_DE(ENTIER_FLOTTANT(LIZ2(ponderation_de_X,coordonnee_X \ ,ponderation_de_Y,coordonnee_Y \ ) \ ) \ ) \ ,tabulation \ ) \ ); \ Eblock \ /* Edition d'un point introduite le 20150525092200... */ #define EDITION_D_UN_SEGMENT(coordonnee_X,coordonnee_Y,trans_OX,trans_OY,trans_EX,trans_EY,tracer_le_segment) \ /* Le point de reference est {coordonnee_X,coordonnee_Y} et les translations */ \ /* permettent de definir l'Origine et l'Extremite du segment... */ \ Bblock \ DEFV(Logical,INIT(tracer_effectivement_le_segment,tracer_le_segment)); \ \ Test(EST_VRAI(le_maillage_est_complet)) \ /* Test introduit le 20171109125245... */ \ Bblock \ Eblock \ ATes \ Bblock \ DEFV(Float,INIT(valeur_aleatoire_de_maillage_incomplet,FLOT__UNDEF)); \ \ GENERATION_DE_LA_VALEUR_ALEATOIRE_COURANTE(valeur_aleatoire_de_maillage_incomplet); \ \ Test(IFLE(valeur_aleatoire_de_maillage_incomplet,seuil_du_maillage_complet)) \ Bblock \ Eblock \ ATes \ Bblock \ EGAL(tracer_effectivement_le_segment,FAUX); \ Eblock \ ETes \ Eblock \ ETes \ \ Test(IL_FAUT(tracer_effectivement_le_segment)) \ /* Test introduit le 20150608121622... */ \ Bblock \ EDITION_D_UN_POINT(ADD2(coordonnee_X \ ,COND(IL_FAUT(editer_des_coordonnees_normalisees) \ ,SUPER_lNORMALISE_OX(trans_OX) \ ,trans_OX \ ) \ ) \ ,ADD2(coordonnee_Y \ ,COND(IL_FAUT(editer_des_coordonnees_normalisees) \ ,SUPER_lNORMALISE_OY(trans_OY) \ ,trans_OY \ ) \ ) \ ,COND(IL_FAUT(mettre_origine_et_extremite_sur_une_meme_ligne)," ",C_LF) \ ); \ /* Edition de l'Origine du segment. */ \ EDITION_D_UN_POINT(ADD2(coordonnee_X \ ,COND(IL_FAUT(editer_des_coordonnees_normalisees) \ ,SUPER_lNORMALISE_OX(trans_EX) \ ,trans_EX \ ) \ ) \ ,ADD2(coordonnee_Y \ ,COND(IL_FAUT(editer_des_coordonnees_normalisees) \ ,SUPER_lNORMALISE_OY(trans_EY) \ ,trans_EY \ ) \ ) \ ,C_LF \ ); \ /* Edition de l'Extremite du segment. */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Edition d'un segment introduite le 20150525100048... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 " M A T R I C I E L L E S " D A N S L ' I M A G E : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock #include xci/coordonne.02.I" DEFV(Logical,INIT(generer_un_maillage,GENERER_UN_MAILLAGE)); /* Faut-il generer des points isoles ('FAUX') ou bien un maillage ('VRAI') ? La valeur */ /* par defaut garantit la compatibilite anterieure (introduit le 20150525090531)... */ DEFV(Logical,INIT(le_maillage_est_complet,LE_MAILLAGE_EST_COMPLET)); DEFV(Float,INIT(seuil_du_maillage_complet,SEUIL_DU_MAILLAGE_COMPLET)); /* Faut-il generer un maillage complet ('VRAI') ou incomplet ('FAUX'), c'est-a-dire qu'il */ /* est alors leatoire ? La valeur par defaut garantit la compatibilite anterieure */ /* (introduit le 20171109125245)... */ DEFV(Int,INIT(maille_X,MAILLE_X)); DEFV(Int,INIT(maille_Y,MAILLE_Y)); /* Definition du maillage (introduite le 20150525093639)... */ DEFV(Logical,INIT(le_maillage_est_triangulaire,LE_MAILLAGE_EST_TRIANGULAIRE)); /* Le maillage (si 'IL_FAUT(generer_un_maillage)') doit-il etre triangulaire ('VRAI') */ /* ou rectangulaire ('FAUX') ? Ceci a ete introduit le 20150525090531... */ DEFV(Logical,INIT(le_maillage_triangulaire_est_aleatoire,LE_MAILLAGE_TRIANGULAIRE_EST_ALEATOIRE)); DEFV(Float,INIT(seuil_du_maillage_triangulaire_aleatoire,SEUIL_DU_MAILLAGE_TRIANGULAIRE_ALEATOIRE)); DEFV(Logical,INIT(utiliser_un_espace_de_parametrage_tridimensionnel,UTILISER_UN_ESPACE_DE_PARAMETRAGE_TRIDIMENSIONNEL)); DEFV(Int,INIT(graine,GRAINE)); DEFV(Float,INIT(valeur_aleatoire,FLOT__UNDEF)); /* Le maillage (si 'IL_FAUT(generer_un_maillage)') doit-il etre aleatoire ('VRAI') */ /* ou pas ('FAUX') ? Ceci a ete introduit le 20150608110409... */ DEFV(Logical,INIT(le_maillage_triangulaire_est_montant___,LE_MAILLAGE_TRIANGULAIRE_EST_MONTANT___)); DEFV(Logical,INIT(le_maillage_triangulaire_est_descendant,LE_MAILLAGE_TRIANGULAIRE_EST_DESCENDANT)); /* Si 'EST_VRAI(le_maillage_est_triangulaire)' est-il "montant" (bas-gauche --> haut-droite) */ /* et/ou "descendant" (haut-gauche --> bas-droite) ? Ceci a ete introduit le 20150530100449. */ /* On notera que lorsque le maillage est a la fois "montant"et "descendant", il n'est plus */ /* plan car, en effet, les aretes montantes et descendantes se croisent alors... */ DEFV(Logical,INIT(tracer_le_segment_000_100,TRACER_LE_SEGMENT_000_100)); DEFV(Logical,INIT(tracer_le_segment_100_110,TRACER_LE_SEGMENT_100_110)); DEFV(Logical,INIT(tracer_le_segment_110_010,TRACER_LE_SEGMENT_110_010)); DEFV(Logical,INIT(tracer_le_segment_010_000,TRACER_LE_SEGMENT_010_000)); DEFV(Logical,INIT(tracer_le_segment_000_110,TRACER_LE_SEGMENT_000_110)); DEFV(Logical,INIT(tracer_le_segment_100_010,TRACER_LE_SEGMENT_100_010)); /* Definition des segments a tracer (introduite le 20150608121622 et completee le */ /* 20150610092834). */ DEFV(Logical,INIT(mettre_origine_et_extremite_sur_une_meme_ligne,METTRE_ORIGINE_ET_EXTREMITE_SUR_UNE_MEME_LIGNE)); /* Faut-il mettre l'origine 'A' et l'extremite 'B' d'un segment sur une meme ligne ('VRAI') */ /* ou sur deux lignes separees ('FAUX') ? Ceci fut introduit le 20150526140407. On notera */ /* que les mettre sur une meme ligne facilite les optimisations supprimant les segments */ /* redondants, cela se faisant via '$SOR -u' en manipulant ensuite des lignes regenerees */ /* du type {XA,XB,YA,YB} qui doivent donc etre uniques... */ DEFV(Logical,INIT(editer_des_coordonnees_normalisees,EDITER_DES_COORDONNEES_NORMALISEES)); /* Faut-il normaliser les coordonnees ('VRAI') ou pas ('FAUX') ? La valeur par defaut */ /* garantit la compatibilite anterieure (introduit le 20121110103934)... */ DEFV(Logical,INIT(utiliser_le_numero_d_image,UTILISER_LE_NUMERO_D_IMAGE)); /* Faut-il ne sortir les coordonnees {X,Y} que pour les premieres valeurs du numero d'image */ /* d'image ('VRAI') ou bien faut-il les sortir toutes ('FAUX') ? On notera en fait que cela */ /* signifie "ne sortir que les premieres (comptees en numero d'image) coordonnees {X,Y}"... */ 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(pointI_2D,point_courant_de_l_espace_de_parametrage_2D); DEFV(pointI_3D,point_courant_de_l_espace_de_parametrage_3D); /* Point courant d'un espace abstrait servant a parametrer le generateur d'evenements. */ 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'. */ DEFV(Float,INIT(largeur_de_la_bordure_a_exclure,LARGEUR_DE_LA_BORDURE_A_EXCLURE)); /* Largeur de la bordure a exclure autour de l'image. */ #include xci/substitue.03.I" /* Introduit le 20150608110409... */ #include xci/valeurs.03.I" /*..............................................................................................................................*/ #include xci/coordonne.04.I" /* Ceci a ete introduit le 20051218183137... */ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_L("numero=",utiliser_le_numero_d_image); GET_ARGUMENT_I("premiere=""D=",premiere_image); GET_ARGUMENT_I("derniere=""A=",derniere_image); GET_ARGUMENT_I("pas=",pas_des_images); GET_ARGUMENT_L("maillage=""m=",generer_un_maillage); GET_ARGUMENT_N("points=""pts=",generer_un_maillage); GET_ARGUMENT_L("maillage_complet=""complet=",le_maillage_est_complet); GET_ARGUMENT_N("maillage_aleatoire=""aleatoire=",le_maillage_est_complet); GET_ARGUMENT_F("seuil_maillage_complet=""smc=",seuil_du_maillage_complet); /* Aguments introduits le 20171109125245... */ GET_ARGUMENT_I("maille_X=""mX=""mx=",maille_X); GET_ARGUMENT_I("maille_Y=""mY=""my=",maille_Y); GET_ARGUMENT_L("maillage_triangulaire=""mt=",le_maillage_est_triangulaire); GET_ARGUMENT_N("maillage_rectangulaire=""mr=",le_maillage_est_triangulaire); /* Aguments introduits le 20150525090531... */ GET_ARGUMENT_L("maillage_triangulaire_aleatoire=""mta=",le_maillage_triangulaire_est_aleatoire); GET_ARGUMENT_F("seuil_maillage_triangulaire_aleatoire=""smta=""seuil=" ,seuil_du_maillage_triangulaire_aleatoire ); GET_ARGUMENT_I("methode=",gen_ft_____methode_standard); /* Les parametres {"inferieur=","superieur="} furent introduits le 20090221161945... */ GET_ARGUMENT_L("tridimensionnel=""3D=",utiliser_un_espace_de_parametrage_tridimensionnel); GET_ARGUMENT_N("bidimensionnel=""2D=",utiliser_un_espace_de_parametrage_tridimensionnel); GET_ARGUMENT_I("graine=""g=",graine); GET_ARGUMENT_L("affiner_rdn=",rdnIFnD_____affiner_la_generation); GET_ARGUMENT_L("iterer_rdn=",rdnIFnD_____iterer_la_generation); GET_ARGUMENT_F("PrdnI2D_NEUT=",rdnI2D_____ponderation_NEUT); GET_ARGUMENT_F("PrdnI2D_GAUS=",rdnI2D_____ponderation_GAUS); GET_ARGUMENT_F("PrdnI2D_GAUS_esperance=",rdnI2D_____ponderation_GAUS_esperance_); GET_ARGUMENT_F("PrdnI2D_GAUS_ecart_type=",rdnI2D_____ponderation_GAUS_ecart_type); GET_ARGUMENT_F("PrdnI3D_NEUT=",rdnI3D_____ponderation_NEUT); GET_ARGUMENT_F("PrdnI3D_GAUS=",rdnI3D_____ponderation_GAUS); GET_ARGUMENT_F("PrdnI3D_GAUS_esperance=",rdnI3D_____ponderation_GAUS_esperance_); GET_ARGUMENT_F("PrdnI3D_GAUS_ecart_type=",rdnI3D_____ponderation_GAUS_ecart_type); CONTROLE_DE_L_ADAPTATION_A_UNE_LOI_DE_DISTRIBUTION_QUELCONQUE; /* Aguments introduits le 20150608110409... */ GET_ARGUMENT_L("maillage_triangulaire_montant=""mtm=""triangle1=""tr1=" ,le_maillage_triangulaire_est_montant___ ); GET_ARGUMENT_L("maillage_triangulaire_descendant=""mtd=""triangle2=""tr2=" ,le_maillage_triangulaire_est_descendant ); /* Aguments introduits le 20150530100449... */ GET_ARGUMENT_L("segment_000_100=""000_100=""segment_00_10=""00_10=""AB=",tracer_le_segment_000_100); GET_ARGUMENT_L("segment_100_110=""100_110=""segment_10_11=""10_11=""BC=",tracer_le_segment_100_110); GET_ARGUMENT_L("segment_110_010=""110_010=""segment_11_01=""11_01=""CD=",tracer_le_segment_110_010); GET_ARGUMENT_L("segment_010_000=""010_000=""segment_01_00=""01_00=""DA=",tracer_le_segment_010_000); GET_ARGUMENT_L("segment_000_110=""000_110=""segment_00_11=""00_11=""AC=",tracer_le_segment_000_110); GET_ARGUMENT_L("segment_100_010=""100_010=""segment_10_01=""10_01=""BD=",tracer_le_segment_100_010); /* Aguments introduits le 20150608121622 sous la forme : */ /* */ /* GET_ARGUMENT_L("cote_1=""c1=",tracer_le_segment_000_100); */ /* GET_ARGUMENT_L("cote_2=""c2=",tracer_le_segment_100_110); */ /* GET_ARGUMENT_L("cote_3=""c3=",tracer_le_segment_110_010); */ /* GET_ARGUMENT_L("cote_4=""c4=",tracer_le_segment_010_000); */ /* */ /* et modifie le 20150610092834... */ GET_ARGUMENT_L("origine_extremite_meme_ligne=""meme_ligne=""ml=" ,mettre_origine_et_extremite_sur_une_meme_ligne ); /* Aguments introduits le 20150526140407... */ GET_ARGUMENT_L("normalisees=""norm=",editer_des_coordonnees_normalisees); GET_ARGUMENT_N("denormalisees=""denorm=",editer_des_coordonnees_normalisees); /* Aguments introduits le 20121110103938... */ 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_L("normaliser=",les_translations_sont_a_normaliser); 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 20061226185754... */ GET_ARGUMENT_F("exclure=""bordure=",largeur_de_la_bordure_a_exclure); ) ); Test(IFOU(IL_NE_FAUT_PAS(utiliser_le_numero_d_image) ,IFET(IL_FAUT(utiliser_le_numero_d_image) ,IFLE(premiere_image,derniere_image) ) ) ) Bblock SPIRALE_DEFINITION_GENERALE(SPIRALE_DELTA_HORIZONTAL_GLOBAL,SPIRALE_DELTA_VERTICAL_GLOBAL) /* Donnees de generation d'une spirale de parcours d'un espace abstrait bidimensionnel */ /* de parametrage de la generation des evenements. */ #include xci/coordonne.03.I" EGAL(numero_d_image,premiere_image); /* Simulation de la boucle : */ /* */ /* DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images) */ /* */ /* si besoin est... */ Test(IFOU(EST_VRAI(le_maillage_triangulaire_est_aleatoire) ,EST_FAUX(le_maillage_est_complet) ) ) /* Test introduit le 20150608110409 et complete le 20171109135542... */ Bblock SPIRALE_VALIDATION; /* Validation des pas de parcours (pasX,pasY) de l'espace abstrait de parametrage du */ /* generateur d'evenements. */ INITIALISATION_POINT_2D(point_courant_de_l_espace_de_parametrage_2D,Xmin,Ymin); INITIALISATION_POINT_3D(point_courant_de_l_espace_de_parametrage_3D,Xmin,Ymin,Zmin); /* Initialisation de l'espace de parametrage independante du format de l'image, puisque le */ /* point 'min' n'en depend pas... */ Eblock ATes Bblock Eblock ETes begin_image Bblock Test(IFOU(IL_NE_FAUT_PAS(utiliser_le_numero_d_image) ,IFET(IL_FAUT(utiliser_le_numero_d_image) ,IFLE(numero_d_image,derniere_image) ) ) ) /* Simulation de la boucle : */ /* */ /* DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images) */ /* */ /* si besoin est... */ Bblock DEFV(Float,INIT(Xf ,COND(IL_FAUT(editer_des_coordonnees_normalisees) ,AXPB(facteur_de_X ,SUPER_cNORMALISE_OX(X) ,NORMALISER_LES_TRANSLATIONS(translation_des_X_normalisees ,SUPER_cNORMALISE_OX ) ) ,FLOT(X) ) ) ); DEFV(Float,INIT(Yf ,COND(IL_FAUT(editer_des_coordonnees_normalisees) ,AXPB(facteur_de_Y ,SUPER_cNORMALISE_OY(Y) ,NORMALISER_LES_TRANSLATIONS(translation_des_Y_normalisees ,SUPER_cNORMALISE_OY ) ) ,FLOT(Y) ) ) ); Test(IFOU(IL_NE_FAUT_PAS(editer_des_coordonnees_normalisees) ,IFET(IL_FAUT(editer_des_coordonnees_normalisees) ,IFET(IFINff(Xf ,ADD2(SUPER_cNORMALISE_OX(Xmin),largeur_de_la_bordure_a_exclure) ,SOUS(SUPER_cNORMALISE_OX(Xmax),largeur_de_la_bordure_a_exclure) ) ,IFINff(Yf ,ADD2(SUPER_cNORMALISE_OY(Ymin),largeur_de_la_bordure_a_exclure) ,SOUS(SUPER_cNORMALISE_OY(Ymax),largeur_de_la_bordure_a_exclure) ) ) ) ) ) Bblock Test(IL_FAUT(generer_un_maillage)) /* Test introduit le 20150525094323... */ Bblock EDITION_D_UN_SEGMENT(Xf,Yf ,_____X,_____Y ,MOVE_X,_____Y ,IL_FAUT(tracer_le_segment_000_100) ); EDITION_D_UN_SEGMENT(Xf,Yf ,MOVE_X,_____Y ,MOVE_X,MOVE_Y ,IL_FAUT(tracer_le_segment_100_110) ); EDITION_D_UN_SEGMENT(Xf,Yf ,_____X,MOVE_Y ,MOVE_X,MOVE_Y ,IL_FAUT(tracer_le_segment_110_010) ); EDITION_D_UN_SEGMENT(Xf,Yf ,_____X,_____Y ,_____X,MOVE_Y ,IL_FAUT(tracer_le_segment_010_000) ); /* La generation de la maille carree a ete introduite le 20150525100048... */ /* */ /* Le 20150526150811, les translations ont ete reordonnees afin que les segments */ /* horizontaux et verticaux...) soient edites de facon a ce que les coordonnees X */ /* et Y soient croissantes (cela est rendu necessaire par les tests de redondance */ /* ('v $xiirv/.MAIL.11.1.$U redondants' par exemple...). */ /* */ /* Notations : */ /* */ /* */ /* H=010 G=110 */ /* .-------------------. */ /* /. /| */ /* / . / | */ /* / . / | */ /* / . / | */ /* -------------------/ | */ /* D=011 . C=111 | */ /* | . | | */ /* | . | | */ /* | . | | */ /* | E=000 | F=100 */ /* | ...............|....| */ /* | . | / */ /* | . | / */ /* | . | / */ /* |. |/ */ /* .-------------------. */ /* */ /* A=001 B=101 */ /* */ /* */ /* en rappelant que le referentiel 'XYZ' est direct et qu'ainsi l'axe 'OZ' est dirige */ /* vers l'observateur... */ Test(EST_VRAI(le_maillage_est_triangulaire)) /* Test introduit le 20150525100048... */ Bblock Test(EST_VRAI(le_maillage_triangulaire_est_aleatoire)) /* Possibilite introduite le 20150608110409... */ Bblock GENERATION_DE_LA_VALEUR_ALEATOIRE_COURANTE(valeur_aleatoire); Test(IFLE(valeur_aleatoire,seuil_du_maillage_triangulaire_aleatoire)) Bblock EGAL(le_maillage_triangulaire_est_montant___,VRAI); EGAL(le_maillage_triangulaire_est_descendant,FAUX); Eblock ATes Bblock EGAL(le_maillage_triangulaire_est_montant___,FAUX); EGAL(le_maillage_triangulaire_est_descendant,VRAI); Eblock ETes Eblock ATes Bblock Eblock ETes EDITION_D_UN_SEGMENT(Xf,Yf ,_____X,_____Y ,MOVE_X,MOVE_Y ,IFET(EST_VRAI(le_maillage_triangulaire_est_montant___) ,IL_FAUT(tracer_le_segment_000_110) ) ); /* Trace introduit le 20150530100449... */ EDITION_D_UN_SEGMENT(Xf,Yf ,_____X,MOVE_Y ,MOVE_X,_____Y ,IFET(EST_VRAI(le_maillage_triangulaire_est_descendant) ,IL_FAUT(tracer_le_segment_100_010) ) ); /* Trace introduit le 20150530100449... */ Eblock ATes Bblock Eblock ETes Eblock ATes Bblock EDITION_D_UN_POINT(Xf,Yf,C_LF); /* Et enfin, edition d'une combinaison lineaire des coordonnees du point courant. */ Eblock ETes Eblock ATes Bblock Eblock ETes Eblock ATes Bblock Eblock ETes INCR(numero_d_image,pas_des_images); /* Simulation de la boucle : */ /* */ /* DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images) */ /* */ /* si besoin est... */ Eblock end_image Eblock ATes Bblock PRINT_ERREUR("la relation d'ordre stricte ('premier < dernier') n'est pas respectee"); Eblock ETes RETU_Commande; Eblock ECommande