/*************************************************************************************************************************************/ /* */ /* T E N T A T I V E D E */ /* S U R J E C T I O N F R A C T A L E D E [ 0 , 1 ] D A N S [ 0 , 1 ] x [ 0 , 1 ] x [ 0 , 1 ] D E P E A N O : */ /* */ /* */ /* Author of '$xci/valeurs_Peano3D$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20220402134009). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 EDITER_LA_DEFINITION_DU_CUBE \ FAUX #define EDITER_LA_DEFINITION_DES_SOUS_CUBES \ FAUX /* Faut-il editer la definition du cube ('VRAI') ou pas ('FAUX') ? L'edition de la */ /* definition des 8 sous-cubes a ete introduite le 20220519182601.. */ #define EDITER_DES_EXPLICATIONS \ FAUX \ /* Faut-il editer des explications ('VRAI') ou pas ('FAUX') ? */ #define GENERER_UNE_COURBE_TRIDIMENSIONNELLE \ VRAI #define GENERER_LA_COMPOSANTE_X \ VRAI #define GENERER_LA_COMPOSANTE_Y \ VRAI #define GENERER_LA_COMPOSANTE_Z \ VRAI /* Choix des composantes a generer (introduit le 20220405120625)... */ #include xci/valeurs_Peano2D.I" #include xci/valeurs_Peano3D.I" /* Parametres de definition de l'extraction de decimales (introduits le 20220405113140 et */ /* mis sous cette forme le 20220405135155...). */ #define SELECTION_0 \ ZERO #define SELECTION_1 \ UN #define SELECTION_2 \ DEUX #define SELECTION_3 \ TROIS #define SELECTION_4 \ QUATRE #define SELECTION_5 \ CINQ #define SELECTION_6 \ SIX #define SELECTION_7 \ SEPT #define SELECTION_8 \ HUIT #define SELECTION_9 \ NEUF /* Introduits le 20220404142306... */ #define CONVERSION_0 \ FZERO #define CONVERSION_1 \ FU #define CONVERSION_2 \ FDEUX #define CONVERSION_3 \ FTROIS #define NOMBRE_DE_DECIMALES_BASE_B_DU_PARAMETRE_T \ SIX \ /* Nombre de decimales en base 4 du parametre 'T' qui doit etre pair... */ #define CHAINER_LES_POINTS \ VRAI \ /* Faut-il chainer les points ('VRAI') ou pas ('FAUX') ? */ #define PONDERATION_DE_T \ FU #define PONDERATION_DE_X \ FZERO #define PONDERATION_DE_Y \ FZERO #define PONDERATION_DE_Z \ FZERO /* Ponderations respectives de 'T', 'X', 'Y' et 'Z'. */ #include xci/valeurs.01.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #include xci/valeurs.02.I" #define BASE_DE_DEFINITION_MOINS_1 \ PRED(base_de_definition) #define INDEX_DE_LA_PREMIERE_DECIMALE \ UN #define INDEXATION_DES_DECIMALES(decimales,index) \ ITb1(decimales,SOUS(MAX2(index,INDEX_DE_LA_PREMIERE_DECIMALE),INDEX_DE_LA_PREMIERE_DECIMALE)) /* Indexation des decimales... */ /* */ /* Le 20220403101348 a ete introduit le 'MAX2(...,INDEX_DE_LA_PREMIERE_DECIMALE)' afin */ /* d'eviter des sorties des tableaux... */ #define NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z \ DIVI(nombre_de_decimales_base_B_du_parametre_T,dimension_de_la_courbe) \ /* Nombre de decimales en base 4 des coordonnees 'X', 'Y' et 'Z'. */ #define NOMBRE_DE_POINTS \ INTE(PUIX(base_de_definition,nombre_de_decimales_base_B_du_parametre_T)) \ /* Nombre de points a calculer... */ #define GENERATION_BIDIMENSIONNELLE(generer_X,trans__SX,trans__TX,trans__X,generer_Y,trans__SY,trans__TY,trans__Y,generer_Z) \ Bblock \ EGAL(dimension_de_la_courbe,DIMENSION_DE_LA_COURBE_2D); \ \ EGAL(generer_X,VRAI); \ EGAL(trans__SX,TRANSLATION_2D__INDEX_SX); \ EGAL(trans__TX,TRANSLATION_2D__INDEX_TX); \ EGAL(trans__X,TRANSLATION_2D__INDEX_X); \ \ EGAL(generer_Y,VRAI); \ EGAL(trans__SY,TRANSLATION_2D__INDEX_SY); \ EGAL(trans__TY,TRANSLATION_2D__INDEX_TY); \ EGAL(trans__Y,TRANSLATION_2D__INDEX_Y); \ \ EGAL(generer_Z,FAUX); \ Eblock \ /* Procedure introduite le 20220406102812... */ #define SELECTION_COORDONNEE(DCoordonnee,somme) \ Bblock \ DEFV(Int,INIT(selecteur,REST(somme,BASE_DE_DEFINITION_MOINS_1))); \ /* Le 20220405154530 je note un grave probleme : par defaut le reste est calcule avec un */ \ /* diviseur egal a 4-1=3. Les restes possibles sont donc {0,1,2} et sont donc en nombre */ \ /* impair. Et donc les deux instructions : */ \ /* */ \ /* EGAL(DCoordonnee,NEUT(DecimaleCourante_T)); */ \ /* */ \ /* et : */ \ /* */ \ /* EGAL(DCoordonnee,SOUS(BASE_DE_DEFINITION_MOINS_1,DecimaleCourante_T)); */ \ /* */ \ /* ne seront pas en nombre egal (a priori deux fois plus de la premiere que de la seconde) ! */ \ \ CHoi(selecteur) \ Bblock \ CA5e(selection_0,selection_2,selection_4,selection_6,selection_8) \ Bblock \ /* Nombre de passages ici suivant le nombre de decimales : */ \ /* */ \ /* 81 [nombre_de_decimales_base_B_du_parametre_T=3] */ \ /* 3645 [nombre_de_decimales_base_B_du_parametre_T=6] */ \ /* 131220 [nombre_de_decimales_base_B_du_parametre_T=9] */ \ /* */ \ /* (mesures effectuee grace a 'v $xiirv/$Fnota Debut_listG_PEAN_1'). */ \ EGAL(DCoordonnee,NEUT(DecimaleCourante_T)); \ \ INCR(compteur_selection_1,I); \ Eblock \ ECA5 \ \ CA5e(selection_1,selection_3,selection_5,selection_7,selection_9) \ Bblock \ /* Nombre de passages ici suivant le nombre de decimales : */ \ /* */ \ /* 0 [nombre_de_decimales_base_B_du_parametre_T=3] */ \ /* 729 [nombre_de_decimales_base_B_du_parametre_T=6] */ \ /* 45927 [nombre_de_decimales_base_B_du_parametre_T=9] */ \ /* */ \ /* (mesures effectuee grace a 'v $xiirv/$Fnota Debut_listG_PEAN_1'). */ \ EGAL(DCoordonnee,SOUS(BASE_DE_DEFINITION_MOINS_1,DecimaleCourante_T)); \ \ INCR(compteur_selection_2,I); \ Eblock \ ECA5 \ \ DEfo \ Bblock \ PRINT_ERREUR("un selecteur de coordonnee incoherent est apparu avec une base trop importante"); \ CAL1(Prer2("(ce selecteur vaut %d et la base est egale a %d)\n",selecteur,base_de_definition)); \ Eblock \ EDEf \ Eblock \ ECHo \ /* Rapport des nombres de passages suivant le nombre de decimales : */ \ /* */ \ /* 81/0 = infini [nombre_de_decimales_base_B_du_parametre_T=3] */ \ /* 3645/729 = 5.00 [nombre_de_decimales_base_B_du_parametre_T=6] */ \ /* 131220/45927 = 2.86 [nombre_de_decimales_base_B_du_parametre_T=9] */ \ /* */ \ Eblock #define CONVERSION_EN_BASE_10(faire_la_conversion,variable,liste,borne) \ Bblock \ Test(IL_FAUT(faire_la_conversion)) \ Bblock \ DEFV(Int,INIT(index,UNDEF)); \ DEFV(Float,INIT(puissance,FU)); \ \ EGAL(variable,FZERO); \ \ DoIn(index,INDEX_DE_LA_PREMIERE_DECIMALE,borne,I) \ Bblock \ DEFV(Int,INIT(decimale_courante,INDEXATION_DES_DECIMALES(liste,index))); \ DEFV(Float,INIT(decimale_convertie,FLOT(decimale_courante))); \ /* Valeur par defaut... */ \ \ Test(IFEQ(base_de_definition,BASE_DE_DEFINITION_3D)) \ Bblock \ CHoi(decimale_courante) \ Bblock \ CAse(CONVERSION_0) \ Bblock \ EGAL(decimale_convertie,conversion_0); \ Eblock \ ECAs \ \ CAse(CONVERSION_1) \ Bblock \ EGAL(decimale_convertie,conversion_1); \ Eblock \ ECAs \ \ CAse(CONVERSION_2) \ Bblock \ EGAL(decimale_convertie,conversion_2); \ Eblock \ ECAs \ \ CAse(CONVERSION_3) \ Bblock \ EGAL(decimale_convertie,conversion_3); \ Eblock \ ECAs \ \ DEfo \ Bblock \ PRINT_ERREUR("une decimale base 4 differente de {0,1,2,3} est apparue"); \ CAL1(Prer1("(elle vaut '%d')\n",decimale_courante)); \ Eblock \ EDEf \ Eblock \ ECHo \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ \ EGAL(puissance,DIVI(puissance,FLOT(base_de_definition))); \ INCR(variable,MUL2(decimale_convertie,puissance)); \ Eblock \ EDoI \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Conversion de la base 4 vers la base 10. */ #define EDITION_DE_LA_DEFINITION_DU_CUBE(editer,sommetX,sommetY,sommetZ) \ Bblock \ SET_CURSOR(sommetX,sommetY,sommetZ); \ \ EDITION_DES_COORDONNEES(editer \ ,"xB=%+.^^^ yB=%+.^^^ zB=%+.^^^ DefinitionCube=" \ ,sommetX \ ,sommetY \ ,sommetZ \ ); \ Eblock \ /* Edition de la definition du cube... */ #define EDITION_DES_EXPLICATIONS(sequence) \ Bblock \ Test(IL_FAUT(editer_des_explications)) \ Bblock \ BLOC(sequence); \ /* Sequence d'edition... */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Edition d'explications concernant la surjection de [0,1] dans [0,1]x[0,1]x[0,1]. */ #define EDITION_DES_COORDONNEES(editer,format_coordonnees_X_Y_et_Z,Coordonnee_X,Coordonnee_Y,Coordonnee_Z) \ Bblock \ Test(IL_FAUT(editer)) \ Bblock \ CAL2(Prin3(format_coordonnees_X_Y_et_Z \ ,Coordonnee_X \ ,Coordonnee_Y \ ,Coordonnee_Z \ ) \ ); \ \ CAL2(Prin0("\n")); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Edition des coordonnees. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F O N C T I O N D ' I M B R I C A T I O N D E S " D E C I M A L E S " E N B A S E 4 : */ /* */ /*************************************************************************************************************************************/ DEFV(Local,DEFV(Logical,INIT(editer_des_explications,EDITER_DES_EXPLICATIONS))); /* Faut-il editer des explications ('VRAI') ou pas ('FAUX') ? */ DEFV(Local,DEFV(Int,INIT(dimension_de_la_courbe,DIMENSION_DE_LA_COURBE_3D))); /* Dimension de la courbe... */ DEFV(Local,DEFV(Int,INIT(base_de_definition,BASE_DE_DEFINITION_3D))); /* Base de definition du parametre 'T' et des coordonnees 'X', 'Y' et 'Z'. */ DEFV(Local,DEFV(Logical,INIT(generer_une_courbe_tridimensionnelle,GENERER_UNE_COURBE_TRIDIMENSIONNELLE))); DEFV(Local,DEFV(Logical,INIT(generer_la_composante_X,GENERER_LA_COMPOSANTE_X))); DEFV(Local,DEFV(Logical,INIT(generer_la_composante_Y,GENERER_LA_COMPOSANTE_Y))); DEFV(Local,DEFV(Logical,INIT(generer_la_composante_Z,GENERER_LA_COMPOSANTE_Z))); /* Choix des composantes a generer (introduit le 20220405120625)... */ DEFV(Local,DEFV(Int,INIT(translation__index_SX,TRANSLATION_3D__INDEX_SX))); DEFV(Local,DEFV(Int,INIT(translation__index_TX,TRANSLATION_3D__INDEX_TX))); DEFV(Local,DEFV(Int,INIT(translation__index_X,TRANSLATION_3D__INDEX_X))); DEFV(Local,DEFV(Int,INIT(translation__index_SY,TRANSLATION_3D__INDEX_SY))); DEFV(Local,DEFV(Int,INIT(translation__index_TY,TRANSLATION_3D__INDEX_TY))); DEFV(Local,DEFV(Int,INIT(translation__index_Y,TRANSLATION_3D__INDEX_Y))); DEFV(Local,DEFV(Int,INIT(translation__index_SZ,TRANSLATION_3D__INDEX_SZ))); DEFV(Local,DEFV(Int,INIT(translation__index_TZ,TRANSLATION_3D__INDEX_TZ))); DEFV(Local,DEFV(Int,INIT(translation__index_Z,TRANSLATION_3D__INDEX_Z))); /* Parametres de definition de l'extraction de decimales (introduits le 20220405113140). */ DEFV(Local,DEFV(Positive,INIT(compteur_selection_1,ZERO))); DEFV(Local,DEFV(Positive,INIT(compteur_selection_2,ZERO))); /* Compteurs des cas possibles de 'SELECTION_COORDONNEE(...)' introduits le 20220408095435. */ DEFV(Local,DEFV(Int,INIT(selection_0,SELECTION_0))); DEFV(Local,DEFV(Int,INIT(selection_1,SELECTION_1))); DEFV(Local,DEFV(Int,INIT(selection_2,SELECTION_2))); DEFV(Local,DEFV(Int,INIT(selection_3,SELECTION_3))); DEFV(Local,DEFV(Int,INIT(selection_4,SELECTION_4))); DEFV(Local,DEFV(Int,INIT(selection_5,SELECTION_5))); DEFV(Local,DEFV(Int,INIT(selection_6,SELECTION_6))); DEFV(Local,DEFV(Int,INIT(selection_7,SELECTION_7))); DEFV(Local,DEFV(Int,INIT(selection_8,SELECTION_8))); DEFV(Local,DEFV(Int,INIT(selection_9,SELECTION_9))); /* Introduits le 20220404142306... */ DEFV(Local,DEFV(Float,INIT(conversion_0,CONVERSION_0))); DEFV(Local,DEFV(Float,INIT(conversion_1,CONVERSION_1))); DEFV(Local,DEFV(Float,INIT(conversion_2,CONVERSION_2))); DEFV(Local,DEFV(Float,INIT(conversion_3,CONVERSION_3))); /* Pour le plaisir... */ DEFV(Local,DEFV(Int,INIT(nombre_de_decimales_base_B_du_parametre_T,NOMBRE_DE_DECIMALES_BASE_B_DU_PARAMETRE_T))); /* Nombre de decimales en base 4 du parametre 'T' qui doit etre pair... */ DEFV(Local,DEFV(Float,INIT(Parametre_T,FLOT__UNDEF))); /* Parametre 'T'. */ DEFV(Local,DEFV(Float,INIT(Coordonnee_courante___X,FZERO))); DEFV(Local,DEFV(Float,INIT(Coordonnee_courante___Y,FZERO))); DEFV(Local,DEFV(Float,INIT(Coordonnee_courante___Z,FZERO))); /* Coordonnees 'X', 'Y' et 'Z' a l'instant 'T' courant. */ /* */ /* Le 20220405120625, la valeur par defaut est passee de 'FLOT__UNDEF' a 'FZERO' afin */ /* de premdre en compte les cas ou l'une des composantes n'est pas generee... */ DEFV(Local,DEFV(Float,INIT(Coordonnee_anterieure_X,FLOT__UNDEF))); DEFV(Local,DEFV(Float,INIT(Coordonnee_anterieure_Y,FLOT__UNDEF))); DEFV(Local,DEFV(Float,INIT(Coordonnee_anterieure_Z,FLOT__UNDEF))); /* Coordonnees 'X', 'Y' et 'Z' a l'instant 'T' precedent. */ BFonctionV DEFV(FonctionV,SurjectionDePeano(DecimalesParametre_T)) DEFV(Argument,DEFV(Int,DTb0(DecimalesParametre_T))); Bblock DEFV(Int,DdTb1(POINTERi,DecimalesCoordonnee_X,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z,ADRESSE_NON_ENCORE_DEFINIE)); MdTb1(DecimalesCoordonnee_X,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z,Int,ADRESSE_NON_ENCORE_DEFINIE); DEFV(Int,DdTb1(POINTERi,DecimalesCoordonnee_Y,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z,ADRESSE_NON_ENCORE_DEFINIE)); MdTb1(DecimalesCoordonnee_Y,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z,Int,ADRESSE_NON_ENCORE_DEFINIE); DEFV(Int,DdTb1(POINTERi,DecimalesCoordonnee_Z,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z,ADRESSE_NON_ENCORE_DEFINIE)); MdTb1(DecimalesCoordonnee_Z,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z,Int,ADRESSE_NON_ENCORE_DEFINIE); DEFV(Int,INIT(index1,UNDEF)); EDITION_DES_EXPLICATIONS(BLOC( Bblock CAL2(Prin0("\nT=0.{")); DoIn(index1,INDEX_DE_LA_PREMIERE_DECIMALE,nombre_de_decimales_base_B_du_parametre_T,I) Bblock DEFV(Int,INIT(DecimaleCourante_T,UNDEF)); EGAL(DecimaleCourante_T,INDEXATION_DES_DECIMALES(DecimalesParametre_T,index1)); CAL2(Prin1("%d",DecimaleCourante_T)); Eblock EDoI Eblock CAL2(Prin0("}")); ) ); Test(IL_FAUT(generer_la_composante_X)) Bblock EDITION_DES_EXPLICATIONS(BLOC( Bblock CAL2(Prin0("\nX=0.{")); Eblock ) ); DoIn(index1,INDEX_DE_LA_PREMIERE_DECIMALE,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z,I) Bblock DEFV(Int,INIT(DecimaleCourante_T,UNDEF)); DEFV(Int,INIT(somme_X,ZERO)); DEFV(Int,INIT(DecimaleCourante_X,UNDEF)); DEFV(Int,INIT(index_SX,UNDEF)); DEFV(Int,INIT(index_T,AXPB(dimension_de_la_courbe,index1,translation__index_TX))); Test(INCLff(index_T,INDEX_DE_LA_PREMIERE_DECIMALE,nombre_de_decimales_base_B_du_parametre_T)) Bblock DoIn(index_SX,INDEX_DE_LA_PREMIERE_DECIMALE,ADD2(index1,translation__index_SX),I) Bblock DEFV(Int,INIT(index_X,AXPB(dimension_de_la_courbe,index_SX,translation__index_X))); Test(INCLff(index_X,INDEX_DE_LA_PREMIERE_DECIMALE,nombre_de_decimales_base_B_du_parametre_T)) Bblock INCR(somme_X,INDEXATION_DES_DECIMALES(DecimalesParametre_T,index_X)); Eblock ATes Bblock Eblock ETes Eblock EDoI EGAL(DecimaleCourante_T,INDEXATION_DES_DECIMALES(DecimalesParametre_T,index_T)); SELECTION_COORDONNEE(DecimaleCourante_X,somme_X); EGAL(INDEXATION_DES_DECIMALES(DecimalesCoordonnee_X,index1),DecimaleCourante_X); EDITION_DES_EXPLICATIONS(BLOC( Bblock CAL2(Prin1("%d--",DecimaleCourante_X)); Eblock ) ); Eblock ATes Bblock Eblock ETes Eblock EDoI EDITION_DES_EXPLICATIONS(BLOC( Bblock CAL2(Prin0("}")); Eblock ) ); Eblock ATes Bblock Eblock ETes Test(IL_FAUT(generer_la_composante_Y)) Bblock EDITION_DES_EXPLICATIONS(BLOC( Bblock CAL2(Prin0("\nY=0.{")); Eblock ) ); DoIn(index1,INDEX_DE_LA_PREMIERE_DECIMALE,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z,I) Bblock DEFV(Int,INIT(DecimaleCourante_T,UNDEF)); DEFV(Int,INIT(somme_Y,ZERO)); DEFV(Int,INIT(DecimaleCourante_Y,UNDEF)); DEFV(Int,INIT(index_SY,UNDEF)); DEFV(Int,INIT(index_T,AXPB(dimension_de_la_courbe,index1,translation__index_TY))); Test(INCLff(index_T,INDEX_DE_LA_PREMIERE_DECIMALE,nombre_de_decimales_base_B_du_parametre_T)) Bblock DoIn(index_SY,INDEX_DE_LA_PREMIERE_DECIMALE,ADD2(index1,translation__index_SY),I) Bblock DEFV(Int,INIT(index_Y,AXPB(dimension_de_la_courbe,index_SY,translation__index_Y))); Test(INCLff(index_Y,INDEX_DE_LA_PREMIERE_DECIMALE,nombre_de_decimales_base_B_du_parametre_T)) Bblock INCR(somme_Y,INDEXATION_DES_DECIMALES(DecimalesParametre_T,index_Y)); Eblock ATes Bblock Eblock ETes Eblock EDoI EGAL(DecimaleCourante_T,INDEXATION_DES_DECIMALES(DecimalesParametre_T,index_T)); SELECTION_COORDONNEE(DecimaleCourante_Y,somme_Y); EGAL(INDEXATION_DES_DECIMALES(DecimalesCoordonnee_Y,index1),DecimaleCourante_Y); EDITION_DES_EXPLICATIONS(BLOC( Bblock CAL2(Prin1("-%d-",DecimaleCourante_Y)); Eblock ) ); Eblock ATes Bblock Eblock ETes Eblock EDoI EDITION_DES_EXPLICATIONS(BLOC( Bblock CAL2(Prin0("}")); Eblock ) ); Eblock ATes Bblock Eblock ETes Test(IL_FAUT(generer_la_composante_Z)) Bblock EDITION_DES_EXPLICATIONS(BLOC( Bblock CAL2(Prin0("\nZ=0.{")); Eblock ) ); DoIn(index1,INDEX_DE_LA_PREMIERE_DECIMALE,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z,I) Bblock DEFV(Int,INIT(DecimaleCourante_T,UNDEF)); DEFV(Int,INIT(somme_Z,ZERO)); DEFV(Int,INIT(DecimaleCourante_Z,UNDEF)); DEFV(Int,INIT(index_SZ,UNDEF)); DEFV(Int,INIT(index_T,AXPB(dimension_de_la_courbe,index1,translation__index_TZ))); Test(INCLff(index_T,INDEX_DE_LA_PREMIERE_DECIMALE,nombre_de_decimales_base_B_du_parametre_T)) Bblock DoIn(index_SZ,INDEX_DE_LA_PREMIERE_DECIMALE,ADD2(index1,translation__index_SZ),I) Bblock DEFV(Int,INIT(index_Z,AXPB(dimension_de_la_courbe,index_SZ,translation__index_Z))); Test(INCLff(index_Z,INDEX_DE_LA_PREMIERE_DECIMALE,nombre_de_decimales_base_B_du_parametre_T)) Bblock INCR(somme_Z,INDEXATION_DES_DECIMALES(DecimalesParametre_T,index_Z)); Eblock ATes Bblock Eblock ETes Eblock EDoI EGAL(DecimaleCourante_T,INDEXATION_DES_DECIMALES(DecimalesParametre_T,index_T)); SELECTION_COORDONNEE(DecimaleCourante_Z,somme_Z); EGAL(INDEXATION_DES_DECIMALES(DecimalesCoordonnee_Z,index1),DecimaleCourante_Z); EDITION_DES_EXPLICATIONS(BLOC( Bblock CAL2(Prin1("--%d",DecimaleCourante_Z)); Eblock ) ); Eblock ATes Bblock Eblock ETes Eblock EDoI EDITION_DES_EXPLICATIONS(BLOC( Bblock CAL2(Prin0("}")); Eblock ) ); Eblock ATes Bblock Eblock ETes EDITION_DES_EXPLICATIONS(BLOC( Bblock CAL2(Prin0("\n")); Eblock ) ); CONVERSION_EN_BASE_10(TOUJOURS_VRAI ,Parametre_T ,DecimalesParametre_T ,nombre_de_decimales_base_B_du_parametre_T ); CONVERSION_EN_BASE_10(generer_la_composante_X ,Coordonnee_courante___X ,DecimalesCoordonnee_X ,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z ); CONVERSION_EN_BASE_10(generer_la_composante_Y ,Coordonnee_courante___Y ,DecimalesCoordonnee_Y ,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z ); CONVERSION_EN_BASE_10(generer_la_composante_Z ,Coordonnee_courante___Z ,DecimalesCoordonnee_Z ,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z ); FdTb1(DecimalesCoordonnee_Z,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z,Int,ADRESSE_PLUS_DEFINIE); FdTb1(DecimalesCoordonnee_Y,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z,Int,ADRESSE_PLUS_DEFINIE); FdTb1(DecimalesCoordonnee_X,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_Y_ET_Z,Int,ADRESSE_PLUS_DEFINIE); RETU_VIDE; Eblock EFonctionV /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T E N T A T I V E D E */ /* S U R J E C T I O N F R A C T A L E D E [ 0 , 1 ] D A N S [ 0 , 1 ] x [ 0 , 1 ] x [ 0 , 1 ] D E P E A N O : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Logical,INIT(editer_la_definition_du_cube,EDITER_LA_DEFINITION_DU_CUBE)); DEFV(Logical,INIT(editer_la_definition_des_sous_cubes,EDITER_LA_DEFINITION_DES_SOUS_CUBES)); /* Faut-il editer la definition du cube ('VRAI') ou pas ('FAUX') ? L'edition de la */ /* definition des 8 sous-cubes a ete introduite le 20220519182601.. */ DEFV(Logical,INIT(chainer_les_points,CHAINER_LES_POINTS)); /* Faut-il chainer les points ('VRAI') ou pas ('FAUX') ? */ DEFV(Float,INIT(ponderation_de_T,PONDERATION_DE_T)); 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 'T', 'X', 'Y' et 'Z'. */ #include xci/valeurs.03.I" /*..............................................................................................................................*/ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_L("definition_cube=""dc=",editer_la_definition_du_cube); GET_ARGUMENT_L("definition_sous_cubes=""dsc=",editer_la_definition_des_sous_cubes); /* Argument introduit le 20220519182608... */ GET_ARGUMENT_L("editer_explications=""ee=",editer_des_explications); GET_ARGUMENT_I("base=""b=",base_de_definition); GET_ARGUMENT_I("nombre_decimales=""nd=",nombre_de_decimales_base_B_du_parametre_T); GET_ARGUMENT_L("chainer_points=""cp=",chainer_les_points); GET_ARGUMENT_L("tridimensionnelle=""3D=",generer_une_courbe_tridimensionnelle); GET_ARGUMENT_N("bidimensionnelle=""2D=",generer_une_courbe_tridimensionnelle); GET_ARGUMENT_L("generer_X=""gX=",generer_la_composante_X); GET_ARGUMENT_L("generer_Y=""gY=",generer_la_composante_Y); GET_ARGUMENT_L("generer_Z=""gZ=",generer_la_composante_Z); /* Options introduites le 20220405120625... */ GET_ARGUMENT_I("translation_SX=""tSX=",translation__index_SX); GET_ARGUMENT_I("translation_TX=""tTX=",translation__index_TX); GET_ARGUMENT_I("translation_X=""tX=",translation__index_X); GET_ARGUMENT_I("translation_SY=""tSY=",translation__index_SY); GET_ARGUMENT_I("translation_TY=""tTY=",translation__index_TY); GET_ARGUMENT_I("translation_Y=""tY=",translation__index_Y); GET_ARGUMENT_I("translation_SZ=""tSZ=",translation__index_SZ); GET_ARGUMENT_I("translation_TZ=""tTZ=",translation__index_TZ); GET_ARGUMENT_I("translation_Z=""tZ=",translation__index_Z); /* Options introduites le 20220405115239... */ GET_ARGUMENT_I("s0=",selection_0); GET_ARGUMENT_I("s1=",selection_1); GET_ARGUMENT_I("s2=",selection_2); GET_ARGUMENT_I("s3=",selection_3); GET_ARGUMENT_I("s4=",selection_4); GET_ARGUMENT_I("s5=",selection_5); GET_ARGUMENT_I("s6=",selection_6); GET_ARGUMENT_I("s7=",selection_7); GET_ARGUMENT_I("s8=",selection_8); GET_ARGUMENT_I("s9=",selection_9); /* Arguments introduits le 20220404142306... */ GET_ARGUMENT_F("c0=",conversion_0); GET_ARGUMENT_F("c1=",conversion_1); GET_ARGUMENT_F("c2=",conversion_2); GET_ARGUMENT_F("c3=",conversion_3); GET_ARGUMENT_F("Pt=""PT=",ponderation_de_T); GET_ARGUMENT_F("Px=""PX=",ponderation_de_X); GET_ARGUMENT_F("Py=""PY=",ponderation_de_Y); GET_ARGUMENT_F("Pz=""PZ=",ponderation_de_Z); PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1; ) ); Test(IL_FAUT(generer_une_courbe_tridimensionnelle)) Bblock Eblock ATes Bblock /* Possibilite introduite le 20220405121437... */ EGAL(base_de_definition,BASE_DE_DEFINITION_2D); Test(I3ET(IL_FAUT(generer_la_composante_X) ,IL_FAUT(generer_la_composante_Y) ,IL_FAUT(generer_la_composante_Z) ) ) Bblock GENERATION_BIDIMENSIONNELLE(generer_la_composante_X,translation__index_SX,translation__index_TX,translation__index_X ,generer_la_composante_Y,translation__index_SY,translation__index_TY,translation__index_Y ,generer_la_composante_Z ); Eblock ATes Bblock Eblock ETes Test(IL_NE_FAUT_PAS(generer_la_composante_X)) Bblock GENERATION_BIDIMENSIONNELLE(generer_la_composante_Y,translation__index_SY,translation__index_TY,translation__index_Y ,generer_la_composante_Z,translation__index_SZ,translation__index_TZ,translation__index_Z ,generer_la_composante_X ); /* Possibilite introduite le 20220406103932 a des fins de test... */ Eblock ATes Bblock Eblock ETes Test(IL_NE_FAUT_PAS(generer_la_composante_Y)) Bblock GENERATION_BIDIMENSIONNELLE(generer_la_composante_Z,translation__index_SZ,translation__index_TZ,translation__index_Z ,generer_la_composante_X,translation__index_SX,translation__index_TX,translation__index_X ,generer_la_composante_Y ); /* Possibilite introduite le 20220406103932 a des fins de test... */ Eblock ATes Bblock Eblock ETes Test(IL_NE_FAUT_PAS(generer_la_composante_Z)) Bblock GENERATION_BIDIMENSIONNELLE(generer_la_composante_X,translation__index_SX,translation__index_TX,translation__index_X ,generer_la_composante_Y,translation__index_SY,translation__index_TY,translation__index_Y ,generer_la_composante_Z ); /* Possibilite introduite le 20220406103932 a des fins de test... */ Eblock ATes Bblock Eblock ETes Eblock ETes Test(IFET(IFNE(base_de_definition,BASE_DE_DEFINITION_3D) ,I4OU(IFNE(conversion_0,CONVERSION_0) ,IFNE(conversion_1,CONVERSION_1) ,IFNE(conversion_2,CONVERSION_2) ,IFNE(conversion_3,CONVERSION_3) ) ) ) Bblock PRINT_ATTENTION("le dispositif de conversion des chiffres n'est pas disponible lorsqu'il y a changement de base."); Eblock ATes Bblock Eblock ETes Test(NON_DIVISIBLE(nombre_de_decimales_base_B_du_parametre_T,dimension_de_la_courbe)) Bblock PRINT_ATTENTION("le nombre de decimales du parametre 'T' doit etre divisible par la dimension de la courbe"); CAL1(Prer1("(la valeur '%d' sera remplacee par ",nombre_de_decimales_base_B_du_parametre_T)); EGAL(nombre_de_decimales_base_B_du_parametre_T ,iMULTIPLE(nombre_de_decimales_base_B_du_parametre_T,dimension_de_la_courbe) ); CAL1(Prer1("'%d')\n",nombre_de_decimales_base_B_du_parametre_T)); Eblock ATes Bblock Eblock ETes begin_nouveau_block Bblock DEFV(Int,INIT(index1,UNDEF)); DEFV(Int,DdTb1(POINTERi,DecimalesParametre_T,nombre_de_decimales_base_B_du_parametre_T,ADRESSE_NON_ENCORE_DEFINIE)); MdTb1(DecimalesParametre_T,nombre_de_decimales_base_B_du_parametre_T,Int,ADRESSE_NON_ENCORE_DEFINIE); DoIn(index1 ,SOUS(INDEX_DE_LA_PREMIERE_DECIMALE,INDEX_DE_LA_PREMIERE_DECIMALE) ,SOUS(nombre_de_decimales_base_B_du_parametre_T,INDEX_DE_LA_PREMIERE_DECIMALE) ,I ) Bblock EGAL(IdTb1(DecimalesParametre_T,index1,nombre_de_decimales_base_B_du_parametre_T),ZERO); Eblock EDoI Repe(NOMBRE_DE_POINTS) Bblock DEFV(Int,INIT(index2,UNDEF)); DEFV(Int,INIT(retenue,UN)); Test(IL_FAUT(chainer_les_points)) Bblock Test(IFGT(compteur_des_repetitions_du_Repe,PREMIERE_ITERATION_D_UN_Repe)) Bblock EGAL(Coordonnee_anterieure_X,Coordonnee_courante___X); EGAL(Coordonnee_anterieure_Y,Coordonnee_courante___Y); EGAL(Coordonnee_anterieure_Z,Coordonnee_courante___Z); Eblock ATes Bblock Eblock ETes Eblock ATes Bblock Eblock ETes CALS(SurjectionDePeano(DecimalesParametre_T)); /* Surjection courante a partir du parametre 'T' courant... */ Test(IL_FAUT(chainer_les_points)) Bblock Test(IFGT(compteur_des_repetitions_du_Repe,PREMIERE_ITERATION_D_UN_Repe)) Bblock EDITION_DES_COORDONNEES(TOUJOURS_VRAI ,"xA=%+.^^^ yA=%+.^^^ zA=%+.^^^" ,Coordonnee_anterieure_X ,Coordonnee_anterieure_Y ,Coordonnee_anterieure_Z ); EDITION_DES_COORDONNEES(TOUJOURS_VRAI ,"xB=%+.^^^ yB=%+.^^^ zB=%+.^^^" ,Coordonnee_courante___X ,Coordonnee_courante___Y ,Coordonnee_courante___Z ); Eblock ATes Bblock Eblock ETes Eblock ATes Bblock CAL2(Prin2(Cara(chain_Aconcaten5(INTRODUCTION_FORMAT,valeurs_signees,".*",format_d_edition,"\n")) ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) ,LIZ4(ponderation_de_T,FLOT(Parametre_T) ,ponderation_de_X,FLOT(Coordonnee_courante___X) ,ponderation_de_Y,FLOT(Coordonnee_courante___Y) ,ponderation_de_Z,FLOT(Coordonnee_courante___Z) ) ) ); Eblock ETes DoDe(index2 ,SOUS(INDEX_DE_LA_PREMIERE_DECIMALE,INDEX_DE_LA_PREMIERE_DECIMALE) ,SOUS(nombre_de_decimales_base_B_du_parametre_T,INDEX_DE_LA_PREMIERE_DECIMALE) ,I ) Bblock INCR(IdTb1(DecimalesParametre_T,index2,nombre_de_decimales_base_B_du_parametre_T),retenue); /* Incrementation du parametre 'T'... */ Test(IFEQ(IdTb1(DecimalesParametre_T,index2,nombre_de_decimales_base_B_du_parametre_T),base_de_definition)) Bblock EGAL(IdTb1(DecimalesParametre_T,index2,nombre_de_decimales_base_B_du_parametre_T),ZERO); EGAL(retenue,UN); Eblock ATes Bblock EGAL(retenue,ZERO); Eblock Eblock ETes EDoD Eblock ERep Test(IL_FAUT(editer_la_definition_du_cube)) Bblock Test(IL_FAUT(chainer_les_points)) Bblock #include xci/valeurs_Hilbert3D.I" /* Afin d'etre compatible avec 'v $xiirv/.PEAN.21.$U', il faut que le cube soit trace apres */ /* la trajectoire de 'T' et ce afin que ce cube semble etre derriere cette trajectoire... */ Eblock ATes Bblock PRINT_ATTENTION("lors de l'edition de points isoles, la definition du cube ne peut etre editee"); Eblock ETes Eblock ATes Bblock Eblock ETes EDITION_DES_EXPLICATIONS(BLOC( Bblock CAL2(Prin3("Rapport des 2 cas de selection : %d/%d=%f\n" ,compteur_selection_1 ,compteur_selection_2 ,DIVI(FLOT(compteur_selection_1),FLOT(compteur_selection_2)) ) ); Eblock ) ); FdTb1(DecimalesParametre_T,nombre_de_decimales_base_B_du_parametre_T,Int,ADRESSE_PLUS_DEFINIE); Eblock end_nouveau_block RETU_Commande; Eblock ECommande