/*************************************************************************************************************************************/ /* */ /* 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 U N A L B U M : */ /* */ /* */ /* Definition : */ /* */ /* Cette commande donne comme resultat une */ /* liste de combinaisons lineaires des abscisses, */ /* des ordonnees {X,Y} et de la profondeur 'Z' */ /* des points d'un album. */ /* */ /* */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * * * ** * * * * * ** * */ /* * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * */ /* * * * * ** * * * * * ** */ /* * * * * * * * * * * * * * * * * * * * * * * */ /* */ /* */ /* ATTENTION : */ /* */ /* Je note le 20180618163700 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_albu$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 19990701175021). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 20150609075311... */ #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 20150525090526)... */ #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 20171109125251)... */ #define MAILLE_X \ UN #define MAILLE_Y \ UN #define MAILLE_Z \ UN /* Definition du maillage (introduite le 20150525093331)... */ #define LE_MAILLAGE_EST_TRIANGULAIRE \ FAUX \ /* Le maillage (si 'IL_FAUT(generer_un_maillage)') doit-il est triangulaire ('VRAI') */ \ /* ou rectangulaire ('FAUX') ? Ceci a ete introduit le 20150525092218, mais non implemente */ \ /* a cette date et enfin mis en place le 20150608163910... */ #define LE_MAILLAGE_TRIANGULAIRE_EST_ALEATOIRE \ FAUX #define SEUIL_DU_MAILLAGE_TRIANGULAIRE_ALEATOIRE \ FDU #define UTILISER_UN_ESPACE_DE_PARAMETRAGE_TRIDIMENSIONNEL \ VRAI #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 20150609075311... */ #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 20150609075311. */ /* 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... */ /* */ /* La notation vient de 'v $xci/valeurs_imag$K LE_MAILLAGE_TRIANGULAIRE_EST_MONTANT___' en */ /* notant qu'ici, il n'est pas approprie... */ #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_001_101 \ VRAI #define TRACER_LE_SEGMENT_101_111 \ VRAI #define TRACER_LE_SEGMENT_111_011 \ VRAI #define TRACER_LE_SEGMENT_011_001 \ VRAI #define TRACER_LE_SEGMENT_000_001 \ VRAI #define TRACER_LE_SEGMENT_100_101 \ VRAI #define TRACER_LE_SEGMENT_110_111 \ VRAI #define TRACER_LE_SEGMENT_010_011 \ VRAI #define TRACER_LE_SEGMENT_000_110 \ VRAI #define TRACER_LE_SEGMENT_000_011 \ VRAI #define TRACER_LE_SEGMENT_000_101 \ VRAI #define TRACER_LE_SEGMENT_110_011 \ VRAI #define TRACER_LE_SEGMENT_011_101 \ VRAI #define TRACER_LE_SEGMENT_101_110 \ VRAI #define TRACER_LE_SEGMENT_001_100 \ VRAI #define TRACER_LE_SEGMENT_001_010 \ VRAI #define TRACER_LE_SEGMENT_001_111 \ VRAI #define TRACER_LE_SEGMENT_100_010 \ VRAI #define TRACER_LE_SEGMENT_010_111 \ VRAI #define TRACER_LE_SEGMENT_111_100 \ VRAI /* Definition des segments a tracer (introduit le 20150610091851). */ #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 20150526140355. 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 20121110103938)... */ #define PONDERATION_DE_X \ FU #define PONDERATION_DE_Y \ FZERO #define PONDERATION_DE_Z \ FZERO /* Ponderations respectives de 'X', 'Y' et 'Z'. */ #define FACTEUR_DE_X \ FU #define FACTEUR_DE_Y \ FU #define FACTEUR_DE_Z \ FU /* Homotheties respectives de 'X', 'Y' et 'Z'. */ #define LARGEUR_DE_LA_BORDURE_A_EXCLURE \ FZERO \ /* Largeur de la bordure a exclure autour de l'album. */ #include xci/valeurs.01.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #include xci/substitue.02.I" /* Introduit le 20150609075311... */ #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) #define _____Z \ GRO0(maille_Z) #define MOVE_Z \ GRO1(maille_Z) /* Definitions des deplacement elementaires (introduites le 20150525205101). */ #define EDITION_D_UN_POINT(coordonnee_X,coordonnee_Y,coordonnee_Z,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(LIZ3(ponderation_de_X,coordonnee_X \ ,ponderation_de_Y,coordonnee_Y \ ,ponderation_de_Z,coordonnee_Z \ ) \ ) \ ) \ ,tabulation \ ) \ ); \ Eblock \ /* Edition d'un point introduite le 20150525092218... */ #define EDITION_D_UN_SEGMENT(coordonnee_X,coordonnee_Y,coordonnee_Z,trans_OX,trans_OY,trans_OZ,trans_EX,trans_EY,trans_EZ,tracer) \ /* Le point de reference est {coordonnee_X,coordonnee_Y,coordonnee_Z} et les translations */ \ /* permettent de definir l'Origine et l'Extremite du segment... */ \ Bblock \ DEFV(Logical,INIT(tracer_effectivement_le_segment,tracer)); \ \ 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 20150608130019... */ \ 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 \ ) \ ) \ ,ADD2(coordonnee_Z \ ,COND(IL_FAUT(editer_des_coordonnees_normalisees) \ ,_____lNORMALISE_OZ(trans_OZ) \ ,trans_OZ \ ) \ ) \ ,COND(IL_FAUT(mettre_origine_et_extremite_sur_une_meme_ligne),C_BLANC,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 \ ) \ ) \ ,ADD2(coordonnee_Z \ ,COND(IL_FAUT(editer_des_coordonnees_normalisees) \ ,_____lNORMALISE_OZ(trans_EZ) \ ,trans_EZ \ ) \ ) \ ,C_LF \ ); \ /* Edition de l'Extremite du segment. */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Edition d'un segment introduite le 20150525094329... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 U N A L B U M : */ /* */ /*************************************************************************************************************************************/ 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 20150525090526)... */ 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 20171109125251)... */ DEFV(Int,INIT(maille_X,MAILLE_X)); DEFV(Int,INIT(maille_Y,MAILLE_Y)); DEFV(Int,INIT(maille_Z,MAILLE_Z)); /* Definition du maillage (introduite le 20150525092218)... */ DEFV(Logical,INIT(le_maillage_est_triangulaire,LE_MAILLAGE_EST_TRIANGULAIRE)); /* Le maillage (si 'IL_FAUT(generer_un_maillage)') doit-il est triangulaire ('VRAI') */ /* ou rectangulaire ('FAUX') ? Ceci a ete introduit le 20150525092218, mais non implemente */ /* a cette date et enfin mis en place le 20150608163910... */ 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 20150609075311... */ 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 20150609075311. */ /* 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... */ /* */ /* La notation vient de 'v $xci/valeurs_imag$K LE_MAILLAGE_TRIANGULAIRE_EST_MONTANT___' en */ /* notant qu'ici, il n'est pas approprie... */ 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_001_101,TRACER_LE_SEGMENT_001_101)); DEFV(Logical,INIT(tracer_le_segment_101_111,TRACER_LE_SEGMENT_101_111)); DEFV(Logical,INIT(tracer_le_segment_111_011,TRACER_LE_SEGMENT_111_011)); DEFV(Logical,INIT(tracer_le_segment_011_001,TRACER_LE_SEGMENT_011_001)); DEFV(Logical,INIT(tracer_le_segment_000_001,TRACER_LE_SEGMENT_000_001)); DEFV(Logical,INIT(tracer_le_segment_100_101,TRACER_LE_SEGMENT_100_101)); DEFV(Logical,INIT(tracer_le_segment_110_111,TRACER_LE_SEGMENT_110_111)); DEFV(Logical,INIT(tracer_le_segment_010_011,TRACER_LE_SEGMENT_010_011)); DEFV(Logical,INIT(tracer_le_segment_000_110,TRACER_LE_SEGMENT_000_110)); DEFV(Logical,INIT(tracer_le_segment_000_011,TRACER_LE_SEGMENT_000_011)); DEFV(Logical,INIT(tracer_le_segment_000_101,TRACER_LE_SEGMENT_000_101)); DEFV(Logical,INIT(tracer_le_segment_110_011,TRACER_LE_SEGMENT_110_011)); DEFV(Logical,INIT(tracer_le_segment_011_101,TRACER_LE_SEGMENT_011_101)); DEFV(Logical,INIT(tracer_le_segment_101_110,TRACER_LE_SEGMENT_101_110)); DEFV(Logical,INIT(tracer_le_segment_001_100,TRACER_LE_SEGMENT_001_100)); DEFV(Logical,INIT(tracer_le_segment_001_010,TRACER_LE_SEGMENT_001_010)); DEFV(Logical,INIT(tracer_le_segment_001_111,TRACER_LE_SEGMENT_001_111)); DEFV(Logical,INIT(tracer_le_segment_100_010,TRACER_LE_SEGMENT_100_010)); DEFV(Logical,INIT(tracer_le_segment_010_111,TRACER_LE_SEGMENT_010_111)); DEFV(Logical,INIT(tracer_le_segment_111_100,TRACER_LE_SEGMENT_111_100)); /* Definition des segments a tracer (introduit le 20150610091851). */ 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 20150526140355. 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 20121110103938)... */ 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)); DEFV(Float,INIT(ponderation_de_Z,PONDERATION_DE_Z)); /* Ponderations respectives de 'X', 'Y' et 'Z'. */ DEFV(Float,INIT(facteur_de_X,FACTEUR_DE_X)); DEFV(Float,INIT(facteur_de_Y,FACTEUR_DE_Y)); DEFV(Float,INIT(facteur_de_Z,FACTEUR_DE_Z)); /* Homotheties respectives de 'X', 'Y' et 'Z'. */ DEFV(Float,INIT(largeur_de_la_bordure_a_exclure,LARGEUR_DE_LA_BORDURE_A_EXCLURE)); /* Largeur de la bordure a exclure autour de l'album. */ #include xci/substitue.03.I" /* Introduit le 20150609075311... */ #include xci/valeurs.03.I" /*..............................................................................................................................*/ #include xci/coordonne.04.I" /* Ceci a ete introduit le 20051218183003... */ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(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_I("maille_Z=""mZ=""mz=",maille_Z); GET_ARGUMENT_L("maillage_triangulaire=""mt=",le_maillage_est_triangulaire); GET_ARGUMENT_N("maillage_rectangulaire=""mr=",le_maillage_est_triangulaire); /* Aguments introduits le 20150525090526... */ 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 20150609075311... */ 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 20150609075311... */ GET_ARGUMENT_L("segment_000_100=""000_100=""AB=",tracer_le_segment_000_100); GET_ARGUMENT_L("segment_100_110=""100_110=""BC=",tracer_le_segment_100_110); GET_ARGUMENT_L("segment_110_010=""110_010=""CD=",tracer_le_segment_110_010); GET_ARGUMENT_L("segment_010_000=""010_000=""DA=",tracer_le_segment_010_000); GET_ARGUMENT_L("segment_001_101=""001_101=""EF=",tracer_le_segment_001_101); GET_ARGUMENT_L("segment_101_111=""101_111=""FG=",tracer_le_segment_101_111); GET_ARGUMENT_L("segment_111_011=""111_011=""GH=",tracer_le_segment_111_011); GET_ARGUMENT_L("segment_011_001=""011_001=""HE=",tracer_le_segment_011_001); GET_ARGUMENT_L("segment_000_001=""000_001=""AE=",tracer_le_segment_000_001); GET_ARGUMENT_L("segment_100_101=""100_101=""BF=",tracer_le_segment_100_101); GET_ARGUMENT_L("segment_110_111=""110_111=""CG=",tracer_le_segment_110_111); GET_ARGUMENT_L("segment_010_011=""010_011=""DH=",tracer_le_segment_010_011); GET_ARGUMENT_L("segment_000_110=""000_110=""AC=",tracer_le_segment_000_110); GET_ARGUMENT_L("segment_000_011=""000_011=""AH=",tracer_le_segment_000_011); GET_ARGUMENT_L("segment_000_101=""000_101=""AF=",tracer_le_segment_000_101); GET_ARGUMENT_L("segment_110_011=""110_011=""CH=",tracer_le_segment_110_011); GET_ARGUMENT_L("segment_011_101=""011_101=""HF=",tracer_le_segment_011_101); GET_ARGUMENT_L("segment_101_110=""101_110=""FC=",tracer_le_segment_101_110); GET_ARGUMENT_L("segment_001_100=""001_100=""EB=",tracer_le_segment_001_100); GET_ARGUMENT_L("segment_001_010=""001_010=""ED=",tracer_le_segment_001_010); GET_ARGUMENT_L("segment_001_111=""001_111=""EG=",tracer_le_segment_001_111); GET_ARGUMENT_L("segment_100_010=""100_010=""BD=",tracer_le_segment_100_010); GET_ARGUMENT_L("segment_010_111=""010_111=""DG=",tracer_le_segment_010_111); GET_ARGUMENT_L("segment_111_100=""111_100=""GB=",tracer_le_segment_111_100); /* Aguments introduits le 20150610091851... */ GET_ARGUMENT_L("origine_extremite_meme_ligne=""meme_ligne=""ml=" ,mettre_origine_et_extremite_sur_une_meme_ligne ); /* Aguments introduits le 20150526140355... */ 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("Pz=""PZ=",ponderation_de_Z); GET_ARGUMENT_F("ax=""aX=""Ax=""AX=",facteur_de_X); GET_ARGUMENT_F("ay=""aY=""Ay=""AY=",facteur_de_Y); GET_ARGUMENT_F("az=""aZ=""Az=""AZ=",facteur_de_Z); 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); GET_ARGUMENT_F("bz=""bZ=""Bz=""BZ=",translation_des_Z_normalisees); PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1; /* Cette procedure fut introduite le 20061226185532... */ GET_ARGUMENT_F("exclure=""bordure=",largeur_de_la_bordure_a_exclure); ) ); 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" Test(IFOU(EST_VRAI(le_maillage_triangulaire_est_aleatoire) ,EST_FAUX(le_maillage_est_complet) ) ) /* Test introduit le 20150609075311 et complete le 20171109135545... */ 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_album 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) ) ) ); DEFV(Float,INIT(Zf ,COND(IL_FAUT(editer_des_coordonnees_normalisees) ,AXPB(facteur_de_Z ,_____cNORMALISE_OZ(Z) ,NORMALISER_LES_TRANSLATIONS(translation_des_Z_normalisees ,_____lNORMALISE_OZ ) ) ,FLOT(Z) ) ) ); Test(IFOU(IL_NE_FAUT_PAS(editer_des_coordonnees_normalisees) ,IFET(IL_FAUT(editer_des_coordonnees_normalisees) ,I3ET(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) ) ,IFINff(Zf ,ADD2(_____cNORMALISE_OZ(Zmin),largeur_de_la_bordure_a_exclure) ,SOUS(_____cNORMALISE_OZ(Zmax),largeur_de_la_bordure_a_exclure) ) ) ) ) ) Bblock Test(IL_FAUT(generer_un_maillage)) /* Test introduit le 20150525094329... */ Bblock EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,_____X,_____Y,_____Z ,MOVE_X,_____Y,_____Z ,IL_FAUT(tracer_le_segment_000_100) ); EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,MOVE_X,_____Y,_____Z ,MOVE_X,MOVE_Y,_____Z ,IL_FAUT(tracer_le_segment_100_110) ); EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,_____X,MOVE_Y,_____Z ,MOVE_X,MOVE_Y,_____Z ,IL_FAUT(tracer_le_segment_110_010) ); EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,_____X,_____Y,_____Z ,_____X,MOVE_Y,_____Z ,IL_FAUT(tracer_le_segment_010_000) ); /* Face {000,100,110,010}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,_____X,_____Y,MOVE_Z ,MOVE_X,_____Y,MOVE_Z ,IL_FAUT(tracer_le_segment_001_101) ); EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,MOVE_X,_____Y,MOVE_Z ,MOVE_X,MOVE_Y,MOVE_Z ,IL_FAUT(tracer_le_segment_101_111) ); EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,_____X,MOVE_Y,MOVE_Z ,MOVE_X,MOVE_Y,MOVE_Z ,IL_FAUT(tracer_le_segment_111_011) ); EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,_____X,_____Y,MOVE_Z ,_____X,MOVE_Y,MOVE_Z ,IL_FAUT(tracer_le_segment_011_001) ); /* Face {001,101,111,011}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,_____X,_____Y,_____Z ,_____X,_____Y,MOVE_Z ,IL_FAUT(tracer_le_segment_000_001) ); /* Cote {000,001}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,MOVE_X,_____Y,_____Z ,MOVE_X,_____Y,MOVE_Z ,IL_FAUT(tracer_le_segment_100_101) ); /* Cote {100,101}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,MOVE_X,MOVE_Y,_____Z ,MOVE_X,MOVE_Y,MOVE_Z ,IL_FAUT(tracer_le_segment_110_111) ); /* Cote {110,111}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,_____X,MOVE_Y,_____Z ,_____X,MOVE_Y,MOVE_Z ,IL_FAUT(tracer_le_segment_010_011) ); /* Cote {010,011}. */ /* */ /* La generation de la maille carree a ete introduite le 20150525100223... */ /* */ /* 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... */ /* */ /* Le 20150526150815, 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...). */ Test(EST_VRAI(le_maillage_est_triangulaire)) Bblock /* Un petit probleme est que les diagonales tracees ci-apres, lorsqu'elles appartiennent */ /* a deux faces paralleles opposees, sont orthogonales et alors, lors de la juxtaposition */ /* de deux cubes, leur face commune semble alors contenir une croix (deux diagonales */ /* orthogonales...). */ Test(EST_VRAI(le_maillage_triangulaire_est_aleatoire)) /* Possibilite introduite le 20150609075311... */ 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,Zf ,_____X,_____Y,_____Z ,MOVE_X,MOVE_Y,_____Z ,IFET(EST_VRAI(le_maillage_triangulaire_est_montant___) ,IL_FAUT(tracer_le_segment_000_110) ) ); /* Diagonale {000,110}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,_____X,_____Y,_____Z ,_____X,MOVE_Y,MOVE_Z ,IFET(EST_VRAI(le_maillage_triangulaire_est_montant___) ,IL_FAUT(tracer_le_segment_000_011) ) ); /* Diagonale {000,011}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,_____X,_____Y,_____Z ,MOVE_X,_____Y,MOVE_Z ,IFET(EST_VRAI(le_maillage_triangulaire_est_montant___) ,IL_FAUT(tracer_le_segment_000_101) ) ); /* Diagonale {000,101}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,MOVE_X,MOVE_Y,_____Z ,_____X,MOVE_Y,MOVE_Z ,IFET(EST_VRAI(le_maillage_triangulaire_est_montant___) ,IL_FAUT(tracer_le_segment_110_011) ) ); /* Diagonale {110,011}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,_____X,MOVE_Y,MOVE_Z ,MOVE_X,_____Y,MOVE_Z ,IFET(EST_VRAI(le_maillage_triangulaire_est_montant___) ,IL_FAUT(tracer_le_segment_011_101) ) ); /* Diagonale {011,101}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,MOVE_X,_____Y,MOVE_Z ,MOVE_X,MOVE_Y,_____Z ,IFET(EST_VRAI(le_maillage_triangulaire_est_montant___) ,IL_FAUT(tracer_le_segment_101_110) ) ); /* Diagonale {101,110}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,_____X,_____Y,MOVE_Z ,MOVE_X,_____Y,_____Z ,IFET(EST_VRAI(le_maillage_triangulaire_est_descendant) ,IL_FAUT(tracer_le_segment_001_100) ) ); /* Diagonale {001,100}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,_____X,_____Y,MOVE_Z ,_____X,MOVE_Y,_____Z ,IFET(EST_VRAI(le_maillage_triangulaire_est_descendant) ,IL_FAUT(tracer_le_segment_001_010) ) ); /* Diagonale {001,010}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,_____X,_____Y,MOVE_Z ,MOVE_X,MOVE_Y,MOVE_Z ,IFET(EST_VRAI(le_maillage_triangulaire_est_descendant) ,IL_FAUT(tracer_le_segment_001_111) ) ); /* Diagonale {001,111}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,MOVE_X,_____Y,_____Z ,_____X,MOVE_Y,_____Z ,IFET(EST_VRAI(le_maillage_triangulaire_est_descendant) ,IL_FAUT(tracer_le_segment_100_010) ) ); /* Diagonale {100,010}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,_____X,MOVE_Y,_____Z ,MOVE_X,MOVE_Y,MOVE_Z ,IFET(EST_VRAI(le_maillage_triangulaire_est_descendant) ,IL_FAUT(tracer_le_segment_010_111) ) ); /* Diagonale {010,111}. */ EDITION_D_UN_SEGMENT(Xf,Yf,Zf ,MOVE_X,MOVE_Y,MOVE_Z ,MOVE_X,_____Y,_____Z ,IFET(EST_VRAI(le_maillage_triangulaire_est_descendant) ,IL_FAUT(tracer_le_segment_111_100) ) ); /* Diagonale {111,100}. */ Eblock ATes Bblock Eblock ETes Eblock ATes Bblock EDITION_D_UN_POINT(Xf,Yf,Zf,C_LF); /* Et enfin, edition d'une combinaison lineaire des coordonnees du point courant. */ Eblock ETes Eblock ATes Bblock Eblock ETes Eblock end_album RETU_Commande; Eblock ECommande