/*************************************************************************************************************************************/
/* */
/* 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