/*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A D I S T A N C E P A R C O U R U E P A R */ /* U N E N S E M B L E D E P O I N T S { X , Y , Z } : */ /* */ /* */ /* Author of '$xrv/distance.01$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 19990929091028). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L E U R S I M P L I C I T E S D E S P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define CUMULER_LES_DISTANCES_SUCCESSIVES \ VRAI \ /* Doit-on cumuler les distances successives ('VRAI') ou pas ('FAUX') ? Ceci fut introduit */ \ /* le 20150622084041... */ #define EDITER_LES_CUMULS_SUCCESSIFS \ FAUX \ /* Doit-on editer les cumuls successifs ('VRAI') ou pas ('FAUX') ? Ceci fut introduit le */ \ /* le 20181128114935 en assurant la compatibilite anterieure... */ \ /* */ \ /* On notera le 20181130085855 que cela avait ete introduit dans le but d'aplatir la */ \ /* courbe de von Koch, mais que la solution 'v $xrc/Cfract_2D.12$K 20181128210650', plus */ \ /* simple, a finalement ete utilisee... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S F I C H I E R S : */ /* */ /*************************************************************************************************************************************/ #include xrv/ARITHMET.1d.I" /* Passage a l'allocation dynamique le 20060214190417... */ #include xrv/ARITHMET.21.I" #include xrv/champs_5.41.I" #define X_IMPLICITE \ FZERO #define Y_IMPLICITE \ FZERO #define Z_IMPLICITE \ FZERO gGENERATION_D_UN_FICHIER(fichier_LISTE_X,liste_initiale_des_X); gGENERATION_D_UN_FICHIER(fichier_LISTE_Y,liste_initiale_des_Y); gGENERATION_D_UN_FICHIER(fichier_LISTE_Z,liste_initiale_des_Z); /* Definition en memoire des fichiers de coordonnees cartesiennes. */ #define ELEMENT_DU_FICHIER_LISTE_X(index) \ gELEMENT_DU_FICHIER(liste_initiale_des_X,index) #define ELEMENT_DU_FICHIER_LISTE_Y(index) \ gELEMENT_DU_FICHIER(liste_initiale_des_Y,index) #define ELEMENT_DU_FICHIER_LISTE_Z(index) \ gELEMENT_DU_FICHIER(liste_initiale_des_Z,index) /* Acces a un element courant des fichiers de coordonnees cartesiennes. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A D I S T A N C E P A R C O U R U E P A R */ /* U N E N S E M B L E D E P O I N T S { X , Y , Z } : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock #include xrv/ARITHMET.22.I" DEFV(Float,INIT(coordonnee_X_precedente,FLOT__UNDEF)); DEFV(Float,INIT(coordonnee_Y_precedente,FLOT__UNDEF)); DEFV(Float,INIT(coordonnee_Z_precedente,FLOT__UNDEF)); /* Definition des coordonnees {X,Y,Z} precedentes dans les fichiers. */ DEFV(Logical,INIT(cumuler_les_distances_successives,CUMULER_LES_DISTANCES_SUCCESSIVES)); /* Doit-on cumuler les distances successives ('VRAI') ou pas ('FAUX') ? Ceci fut introduit */ /* le 20150622084041... */ DEFV(Logical,INIT(editer_les_cumuls_successifs,EDITER_LES_CUMULS_SUCCESSIFS)); /* Doit-on editer les cumuls successifs ('VRAI') ou pas ('FAUX') ? Ceci fut introduit le */ /* le 20181128114935 en assurant la compatibilite anterieure... */ /* */ /* On notera le 20181130085855 que cela avait ete introduit dans le but d'aplatir la */ /* courbe de von Koch, mais que la solution 'v $xrc/Cfract_2D.12$K 20181128210650', plus */ /* simple, a finalement ete utilisee... */ /*..............................................................................................................................*/ GET_ARGUMENTS_(nombre_d_arguments ,BLOC(PROCESS_ARGUMENT_I("nombre_elements=""ne=",nombre_d_elements ,BLOC(VIDE;) ,BLOC(Bblock PRINT_AVERTISSEMENT("'ne=' doit etre defini avant toute entree de fichiers"); Eblock ) ); PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01; PROKESF_ARGUMENT_FICHIER("LISTE_X=" ,fichier_LISTE_X ,liste_initiale_des_X ,X_IMPLICITE ,lTRANSFORMAT_0d ,iGENERATION_D_UN_FICHIER ); PROKESF_ARGUMENT_FICHIER("LISTE_Y=" ,fichier_LISTE_Y ,liste_initiale_des_Y ,Y_IMPLICITE ,lTRANSFORMAT_0d ,iGENERATION_D_UN_FICHIER ); PROKESF_ARGUMENT_FICHIER("LISTE_Z=" ,fichier_LISTE_Z ,liste_initiale_des_Z ,Z_IMPLICITE ,lTRANSFORMAT_0d ,iGENERATION_D_UN_FICHIER ); GET_ARGUMENT_L("cumuler=",cumuler_les_distances_successives); GET_ARGUMENT_N("point_a_point=""pap=",cumuler_les_distances_successives); /* Arguments introduits le 20150622084412... */ GET_ARGUMENT_L("editer_cumuls_successifs=""ecs=",editer_les_cumuls_successifs); /* Arguments introduits le 20150622084412... */ ) ); begin_nouveau_block /* Introduit le 20181128115914... */ Bblock DEFV(Float,INIT(cumul_des_distances_courantes,FZERO)); /* Distance parcourue par l'ensemble des points {X,Y,Z}. */ DoIn(index ,PREMIER_ELEMENT_D_UN_FICHIER ,DERNIER_ELEMENT_D_UN_FICHIER ,I ) Bblock DEFV(Float,INIT(coordonnee_X,ELEMENT_DU_FICHIER_LISTE_X(index))); DEFV(Float,INIT(coordonnee_Y,ELEMENT_DU_FICHIER_LISTE_Y(index))); DEFV(Float,INIT(coordonnee_Z,ELEMENT_DU_FICHIER_LISTE_Z(index))); /* Recuperation des coordonnees {X,Y,Z} courantes dans les fichiers. */ Test(IFGT(index,PREMIER_ELEMENT_D_UN_FICHIER)) Bblock DEFV(Float,INIT(distance_courante ,RdisF3D(coordonnee_X_precedente ,coordonnee_Y_precedente ,coordonnee_Z_precedente ,coordonnee_X ,coordonnee_Y ,coordonnee_Z ) ) ); Test(IL_FAUT(cumuler_les_distances_successives)) Bblock INCR(cumul_des_distances_courantes,distance_courante); /* Calcul de la distance courante par accumulation. */ Test(IL_FAUT(editer_les_cumuls_successifs)) Bblock CAL2(Prin1("%+.^^^\n",cumul_des_distances_courantes)); /* Edition du cumul des distances (possibilite introduite le 20181128114935)... */ Eblock ATes Bblock Eblock ETes Eblock ATes Bblock CAL2(Prin1("%+.^^^\n",distance_courante)); /* Edition de la distance courante entre le point courant et le point precedent (possibilite */ /* introduite le 20150622084412...). */ Eblock ETes Eblock ATes Bblock Eblock ETes EGAL(coordonnee_X_precedente,coordonnee_X); EGAL(coordonnee_Y_precedente,coordonnee_Y); EGAL(coordonnee_Z_precedente,coordonnee_Z); /* Definition du point precedent... */ Eblock EDoI Test(IL_FAUT(cumuler_les_distances_successives)) Bblock Test(IL_FAUT(editer_les_cumuls_successifs)) /* Test introduit le 20181128114935... */ Bblock Eblock ATes Bblock CAL2(Prin1("distance = %+.^^^\n",cumul_des_distances_courantes)); /* Edition de la distance parcourue par les points {X,Y,Z}. */ /* */ /* Le 20060105161139, le format "16g" est passe a "^^g" pour plus de souplesse... */ /* */ /* Le 20091123123529, le format "^^g" est passe a "^^^" pour plus de souplesse... */ Eblock ETes Eblock ATes Bblock Eblock ETes Eblock end_nouveau_block lGENERATION_D_UN_FICHIER(liste_initiale_des_Z,Z_IMPLICITE); lGENERATION_D_UN_FICHIER(liste_initiale_des_Y,Y_IMPLICITE); lGENERATION_D_UN_FICHIER(liste_initiale_des_X,X_IMPLICITE); RETU_Commande; Eblock ECommande