/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D ' U N R E F E R E N T I E L T R I D I M E N S I O N N E L */
/* E T D ' U N E E L L I P S E E N U N P O I N T D ' U N E C O U R B E : */
/* */
/* */
/* Author of '$xrs/referentiel3D.11$I' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20161229085315). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L ' I N I T I A L I S A T I O N */
/* D U V E C T E U R { X1 , X2 , X3 } : */
/* */
/*************************************************************************************************************************************/
#define DEFINITION_OX_a2 \
FU
#define DEFINITION_OX_a3 \
FU
DEFV(Local,DEFV(Float,INIT(Definition_OX_a2,DEFINITION_OX_a2)));
DEFV(Local,DEFV(Float,INIT(Definition_OX_a3,DEFINITION_OX_a3)));
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S P O N D E R A T I O N S */
/* D E S E L E C T I O N D E S T R O I S D E R I V E E S : */
/* */
/*************************************************************************************************************************************/
/* Les ponderations qui suivent ont ete introduites a des fins de test... */
#define PONDERATION_Z1_dX \
FU
#define PONDERATION_Z1_dY \
FZERO
#define PONDERATION_Z1_dZ \
FZERO
DEFV(Local,DEFV(Float,INIT(ponderation_Z1_dX,PONDERATION_Z1_dX)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z1_dY,PONDERATION_Z1_dY)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z1_dZ,PONDERATION_Z1_dZ)));
#define PONDERATION_Z2_dX \
FZERO
#define PONDERATION_Z2_dY \
FU
#define PONDERATION_Z2_dZ \
FZERO
DEFV(Local,DEFV(Float,INIT(ponderation_Z2_dX,PONDERATION_Z2_dX)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z2_dY,PONDERATION_Z2_dY)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z2_dZ,PONDERATION_Z2_dZ)));
#define PONDERATION_Z3_dX \
FZERO
#define PONDERATION_Z3_dY \
FZERO
#define PONDERATION_Z3_dZ \
FU
DEFV(Local,DEFV(Float,INIT(ponderation_Z3_dX,PONDERATION_Z3_dX)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z3_dY,PONDERATION_Z3_dY)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z3_dZ,PONDERATION_Z3_dZ)));
/* Les ponderations qui precedent ont ete introduites a des fins de test... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S P O N D E R A T I O N S */
/* D E S E L E C T I O N D E S T R O I S A N G L E S : */
/* */
/*************************************************************************************************************************************/
/* Les ponderations qui suivent ont ete introduites a des fins de test... */
#define PONDERATION_X1_X1 \
FU
#define PONDERATION_X1_X2 \
FZERO
#define PONDERATION_X1_X3 \
FZERO
#define PONDERATION_X1_Y1 \
FZERO
#define PONDERATION_X1_Y2 \
FZERO
#define PONDERATION_X1_Y3 \
FZERO
#define PONDERATION_X1_Z1 \
FZERO
#define PONDERATION_X1_Z2 \
FZERO
#define PONDERATION_X1_Z3 \
FZERO
DEFV(Local,DEFV(Float,INIT(ponderation_X1_X1,PONDERATION_X1_X1)));
DEFV(Local,DEFV(Float,INIT(ponderation_X1_X2,PONDERATION_X1_X2)));
DEFV(Local,DEFV(Float,INIT(ponderation_X1_X3,PONDERATION_X1_X3)));
DEFV(Local,DEFV(Float,INIT(ponderation_X1_Y1,PONDERATION_X1_Y1)));
DEFV(Local,DEFV(Float,INIT(ponderation_X1_Y2,PONDERATION_X1_Y2)));
DEFV(Local,DEFV(Float,INIT(ponderation_X1_Y3,PONDERATION_X1_Y3)));
DEFV(Local,DEFV(Float,INIT(ponderation_X1_Z1,PONDERATION_X1_Z1)));
DEFV(Local,DEFV(Float,INIT(ponderation_X1_Z2,PONDERATION_X1_Z2)));
DEFV(Local,DEFV(Float,INIT(ponderation_X1_Z3,PONDERATION_X1_Z3)));
#define PONDERATION_X2_X1 \
FZERO
#define PONDERATION_X2_X2 \
FU
#define PONDERATION_X2_X3 \
FZERO
#define PONDERATION_X2_Y1 \
FZERO
#define PONDERATION_X2_Y2 \
FZERO
#define PONDERATION_X2_Y3 \
FZERO
#define PONDERATION_X2_Z1 \
FZERO
#define PONDERATION_X2_Z2 \
FZERO
#define PONDERATION_X2_Z3 \
FZERO
DEFV(Local,DEFV(Float,INIT(ponderation_X2_X1,PONDERATION_X2_X1)));
DEFV(Local,DEFV(Float,INIT(ponderation_X2_X2,PONDERATION_X2_X2)));
DEFV(Local,DEFV(Float,INIT(ponderation_X2_X3,PONDERATION_X2_X3)));
DEFV(Local,DEFV(Float,INIT(ponderation_X2_Y1,PONDERATION_X2_Y1)));
DEFV(Local,DEFV(Float,INIT(ponderation_X2_Y2,PONDERATION_X2_Y2)));
DEFV(Local,DEFV(Float,INIT(ponderation_X2_Y3,PONDERATION_X2_Y3)));
DEFV(Local,DEFV(Float,INIT(ponderation_X2_Z1,PONDERATION_X2_Z1)));
DEFV(Local,DEFV(Float,INIT(ponderation_X2_Z2,PONDERATION_X2_Z2)));
DEFV(Local,DEFV(Float,INIT(ponderation_X2_Z3,PONDERATION_X2_Z3)));
#define PONDERATION_X3_X1 \
FZERO
#define PONDERATION_X3_X2 \
FZERO
#define PONDERATION_X3_X3 \
FU
#define PONDERATION_X3_Y1 \
FZERO
#define PONDERATION_X3_Y2 \
FZERO
#define PONDERATION_X3_Y3 \
FZERO
#define PONDERATION_X3_Z1 \
FZERO
#define PONDERATION_X3_Z2 \
FZERO
#define PONDERATION_X3_Z3 \
FZERO
DEFV(Local,DEFV(Float,INIT(ponderation_X3_X1,PONDERATION_X3_X1)));
DEFV(Local,DEFV(Float,INIT(ponderation_X3_X2,PONDERATION_X3_X2)));
DEFV(Local,DEFV(Float,INIT(ponderation_X3_X3,PONDERATION_X3_X3)));
DEFV(Local,DEFV(Float,INIT(ponderation_X3_Y1,PONDERATION_X3_Y1)));
DEFV(Local,DEFV(Float,INIT(ponderation_X3_Y2,PONDERATION_X3_Y2)));
DEFV(Local,DEFV(Float,INIT(ponderation_X3_Y3,PONDERATION_X3_Y3)));
DEFV(Local,DEFV(Float,INIT(ponderation_X3_Z1,PONDERATION_X3_Z1)));
DEFV(Local,DEFV(Float,INIT(ponderation_X3_Z2,PONDERATION_X3_Z2)));
DEFV(Local,DEFV(Float,INIT(ponderation_X3_Z3,PONDERATION_X3_Z3)));
#define PONDERATION_Y1_X1 \
FZERO
#define PONDERATION_Y1_X2 \
FZERO
#define PONDERATION_Y1_X3 \
FZERO
#define PONDERATION_Y1_Y1 \
FU
#define PONDERATION_Y1_Y2 \
FZERO
#define PONDERATION_Y1_Y3 \
FZERO
#define PONDERATION_Y1_Z1 \
FZERO
#define PONDERATION_Y1_Z2 \
FZERO
#define PONDERATION_Y1_Z3 \
FZERO
DEFV(Local,DEFV(Float,INIT(ponderation_Y1_X1,PONDERATION_Y1_X1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y1_X2,PONDERATION_Y1_X2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y1_X3,PONDERATION_Y1_X3)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y1_Y1,PONDERATION_Y1_Y1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y1_Y2,PONDERATION_Y1_Y2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y1_Y3,PONDERATION_Y1_Y3)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y1_Z1,PONDERATION_Y1_Z1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y1_Z2,PONDERATION_Y1_Z2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y1_Z3,PONDERATION_Y1_Z3)));
#define PONDERATION_Y2_X1 \
FZERO
#define PONDERATION_Y2_X2 \
FZERO
#define PONDERATION_Y2_X3 \
FZERO
#define PONDERATION_Y2_Y1 \
FZERO
#define PONDERATION_Y2_Y2 \
FU
#define PONDERATION_Y2_Y3 \
FZERO
#define PONDERATION_Y2_Z1 \
FZERO
#define PONDERATION_Y2_Z2 \
FZERO
#define PONDERATION_Y2_Z3 \
FZERO
DEFV(Local,DEFV(Float,INIT(ponderation_Y2_X1,PONDERATION_Y2_X1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y2_X2,PONDERATION_Y2_X2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y2_X3,PONDERATION_Y2_X3)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y2_Y1,PONDERATION_Y2_Y1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y2_Y2,PONDERATION_Y2_Y2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y2_Y3,PONDERATION_Y2_Y3)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y2_Z1,PONDERATION_Y2_Z1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y2_Z2,PONDERATION_Y2_Z2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y2_Z3,PONDERATION_Y2_Z3)));
#define PONDERATION_Y3_X1 \
FZERO
#define PONDERATION_Y3_X2 \
FZERO
#define PONDERATION_Y3_X3 \
FZERO
#define PONDERATION_Y3_Y1 \
FZERO
#define PONDERATION_Y3_Y2 \
FZERO
#define PONDERATION_Y3_Y3 \
FU
#define PONDERATION_Y3_Z1 \
FZERO
#define PONDERATION_Y3_Z2 \
FZERO
#define PONDERATION_Y3_Z3 \
FZERO
DEFV(Local,DEFV(Float,INIT(ponderation_Y3_X1,PONDERATION_Y3_X1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y3_X2,PONDERATION_Y3_X2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y3_X3,PONDERATION_Y3_X3)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y3_Y1,PONDERATION_Y3_Y1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y3_Y2,PONDERATION_Y3_Y2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y3_Y3,PONDERATION_Y3_Y3)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y3_Z1,PONDERATION_Y3_Z1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y3_Z2,PONDERATION_Y3_Z2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Y3_Z3,PONDERATION_Y3_Z3)));
#define PONDERATION_Z1_X1 \
FZERO
#define PONDERATION_Z1_X2 \
FZERO
#define PONDERATION_Z1_X3 \
FZERO
#define PONDERATION_Z1_Y1 \
FZERO
#define PONDERATION_Z1_Y2 \
FZERO
#define PONDERATION_Z1_Y3 \
FZERO
#define PONDERATION_Z1_Z1 \
FU
#define PONDERATION_Z1_Z2 \
FZERO
#define PONDERATION_Z1_Z3 \
FZERO
DEFV(Local,DEFV(Float,INIT(ponderation_Z1_X1,PONDERATION_Z1_X1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z1_X2,PONDERATION_Z1_X2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z1_X3,PONDERATION_Z1_X3)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z1_Y1,PONDERATION_Z1_Y1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z1_Y2,PONDERATION_Z1_Y2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z1_Y3,PONDERATION_Z1_Y3)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z1_Z1,PONDERATION_Z1_Z1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z1_Z2,PONDERATION_Z1_Z2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z1_Z3,PONDERATION_Z1_Z3)));
#define PONDERATION_Z2_X1 \
FZERO
#define PONDERATION_Z2_X2 \
FZERO
#define PONDERATION_Z2_X3 \
FZERO
#define PONDERATION_Z2_Y1 \
FZERO
#define PONDERATION_Z2_Y2 \
FZERO
#define PONDERATION_Z2_Y3 \
FZERO
#define PONDERATION_Z2_Z1 \
FZERO
#define PONDERATION_Z2_Z2 \
FU
#define PONDERATION_Z2_Z3 \
FZERO
DEFV(Local,DEFV(Float,INIT(ponderation_Z2_X1,PONDERATION_Z2_X1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z2_X2,PONDERATION_Z2_X2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z2_X3,PONDERATION_Z2_X3)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z2_Y1,PONDERATION_Z2_Y1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z2_Y2,PONDERATION_Z2_Y2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z2_Y3,PONDERATION_Z2_Y3)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z2_Z1,PONDERATION_Z2_Z1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z2_Z2,PONDERATION_Z2_Z2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z2_Z3,PONDERATION_Z2_Z3)));
#define PONDERATION_Z3_X1 \
FZERO
#define PONDERATION_Z3_X2 \
FZERO
#define PONDERATION_Z3_X3 \
FZERO
#define PONDERATION_Z3_Y1 \
FZERO
#define PONDERATION_Z3_Y2 \
FZERO
#define PONDERATION_Z3_Y3 \
FZERO
#define PONDERATION_Z3_Z1 \
FZERO
#define PONDERATION_Z3_Z2 \
FZERO
#define PONDERATION_Z3_Z3 \
FU
DEFV(Local,DEFV(Float,INIT(ponderation_Z3_X1,PONDERATION_Z3_X1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z3_X2,PONDERATION_Z3_X2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z3_X3,PONDERATION_Z3_X3)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z3_Y1,PONDERATION_Z3_Y1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z3_Y2,PONDERATION_Z3_Y2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z3_Y3,PONDERATION_Z3_Y3)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z3_Z1,PONDERATION_Z3_Z1)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z3_Z2,PONDERATION_Z3_Z2)));
DEFV(Local,DEFV(Float,INIT(ponderation_Z3_Z3,PONDERATION_Z3_Z3)));
/* Les ponderations qui precedent ont ete introduites a des fins de test... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D U R E F E R E N T I E L : */
/* */
/*************************************************************************************************************************************/
#define EPSILON_DE_TEST_DE_NULLITE_DES_COMPOSANTES_Z \
FZERO
DEFV(Local,DEFV(Float,INIT(epsilon_de_test_de_nullite_des_composantes_Z,EPSILON_DE_TEST_DE_NULLITE_DES_COMPOSANTES_Z)));
/* Introduit le 20170202110148 pour voir si cela peut aider a resoudre le probleme des */
/* discontinuites evoque par 'v $xrs/referentiel3D.11$I discontinuites'. Choisir une */
/* valeur nulle pour cet epsilon retablit les conditions anterieures... */
/* */
/* Effectivement cela ne sert a rien et le 20170202112711 la valeur nulle par defaut */
/* a ete forcee, mais ce parametre est conserve : on ne sait jamais... */
DenumeT04(CalculNouveauReferentiel_UNDEF
,CalculNouveauReferentiel_avec_Z1
,CalculNouveauReferentiel_avec_Z2
,CalculNouveauReferentiel_avec_Z3
,types_de_CalculNouveauReferentiel
)
DEFV(Local,DEFV(Int,INIT(type_de_CalculNouveauReferentiel_courant__,CalculNouveauReferentiel_UNDEF)));
DEFV(Local,DEFV(Int,INIT(type_de_CalculNouveauReferentiel_precedent,CalculNouveauReferentiel_UNDEF)));
#define Definition_OX(a1,a2,a3,c1,c2,c3) \
Bblock \
Test(IZNE(c1)) \
Bblock \
EGAL(a2,Definition_OX_a2); \
EGAL(a3,Definition_OX_a3); \
EGAL(a1,DIVI(NEGA(LIZ2(a2,c2,a3,c3)),c1)); \
/* Le vecteur {a1,a2,a3} est calcule "arbitrairement" tel qu'il soit orthogonal au */ \
/* vecteur {c1,c2,c3}. Leur produit scalaire est donc nul : */ \
/* */ \
/* a1.c1 + a2.c2 + a3.c3 = 0 */ \
/* */ \
/* en supposant que la coordonnee 'c1' n'est pas nulle (ce que l'on teste avant d'appeler */ \
/* 'Definition_OX(...)' et ce que l'on reverifie ici), on fixe arbitrairement (par defaut) : */ \
/* */ \
/* a2 = 1 */ \
/* a3 = 1 */ \
/* */ \
/* d'ou la valeur de 'a1'... */ \
Eblock \
ATes \
Bblock \
PRINT_ERREUR("Erreur de logique"); \
/* Et oui, puisqu'un tel test a ete deja fait juste avant l'appel a 'Definition_OX(...)'... */ \
Eblock \
ETes \
Eblock
#define NormalisationVecteur(a1,a2,a3) \
Bblock \
DEFV(Float,INIT(norme,GpytF3D(a1,a2,a3))); \
\
EGAL(a1,DIVI(a1,norme)); \
EGAL(a2,DIVI(a2,norme)); \
EGAL(a3,DIVI(a3,norme)); \
Eblock
#define CalculNouveauReferentiel(ComposanteACalculer,pX1,pX2,pX3,pY1,pY2,pY3,pZ1,pZ2,pZ3) \
Bblock \
DEFV(Float,INIT(d1_XEspace,d1_XEspace_Courbe(u,v))); \
DEFV(Float,INIT(d1_YEspace,d1_YEspace_Courbe(u,v))); \
DEFV(Float,INIT(d1_ZEspace,d1_ZEspace_Courbe(u,v))); \
\
DEFV(Logical,INIT(CalculerLesComposantes,VRAI)); \
\
DEFV(Float,INIT(X1,FLOT__UNDEF)); \
DEFV(Float,INIT(X2,FLOT__UNDEF)); \
DEFV(Float,INIT(X3,FLOT__UNDEF)); \
\
DEFV(Float,INIT(Y1,FLOT__UNDEF)); \
DEFV(Float,INIT(Y2,FLOT__UNDEF)); \
DEFV(Float,INIT(Y3,FLOT__UNDEF)); \
\
DEFV(Float,INIT(Z1,FLOT__UNDEF)); \
DEFV(Float,INIT(Z2,FLOT__UNDEF)); \
DEFV(Float,INIT(Z3,FLOT__UNDEF)); \
/* Definition d'un nouveau referentiel 'XYZ' par rapport a l'ancien 'xyz'... */ \
\
EGAL(Z1 \
,LIZ3(ponderation_Z1_dX,d1_XEspace \
,ponderation_Z1_dY,d1_YEspace \
,ponderation_Z1_dZ,d1_ZEspace \
) \
); \
EGAL(Z2 \
,LIZ3(ponderation_Z2_dX,d1_XEspace \
,ponderation_Z2_dY,d1_YEspace \
,ponderation_Z2_dZ,d1_ZEspace \
) \
); \
EGAL(Z3 \
,LIZ3(ponderation_Z3_dX,d1_XEspace \
,ponderation_Z3_dY,d1_YEspace \
,ponderation_Z3_dZ,d1_ZEspace \
) \
); \
/* Definition de l'axe 'OZ' "autour" duquel on souhaite creer un referentiel {OX,OY,OZ} */ \
/* direct et orthornome... */ \
/* */ \
/* Cet axe 'OZ' est le vecteur tangent a la courbe... */ \
/* */ \
/* On notera le 20170308074314 que par defaut : */ \
/* */ \
/* Z1 = d1_XEspace */ \
/* Z2 = d1_YEspace */ \
/* Z3 = d1_ZEspace */ \
/* */ \
/* et que l'ensemble {Z1,Z2,Z3} ainsi defini est le meme pour les neuf appels consecutifs */ \
/* de 'CalculNouveauReferentiel(ComposanteACalculer,...)'... */ \
\
Test(IZNE_a_peu_pres(Z1,epsilon_de_test_de_nullite_des_composantes_Z)) \
Bblock \
Definition_OX(X1,X2,X3,Z1,Z2,Z3); \
EGAL(type_de_CalculNouveauReferentiel_courant__,CalculNouveauReferentiel_avec_Z1); \
Eblock \
ATes \
Bblock \
Test(IZNE_a_peu_pres(Z2,epsilon_de_test_de_nullite_des_composantes_Z)) \
Bblock \
Definition_OX(X2,X3,X1,Z2,Z3,Z1); \
EGAL(type_de_CalculNouveauReferentiel_courant__,CalculNouveauReferentiel_avec_Z2); \
Eblock \
ATes \
Bblock \
Test(IZNE_a_peu_pres(Z3,epsilon_de_test_de_nullite_des_composantes_Z)) \
Bblock \
Definition_OX(X3,X1,X2,Z3,Z1,Z2); \
EGAL(type_de_CalculNouveauReferentiel_courant__,CalculNouveauReferentiel_avec_Z3); \
/* Definition de l'axe 'OX' tel qu'il soit orthogonal a l'axe 'OZ' (mais de facon */ \
/* arbitraire...). */ \
/* */ \
/* Il semblerait le 20170130112212 que ce dispositif introduise finalement des */ \
/* discontinuites dans la coordonnee 'u' (celle qui en particulier permet de definir */ \
/* l'ellipse orthogonale a la courbe) comme cela s'est vu a cette date en essayant */ \
/* de construire une helice sur la surface 'v $xiirs/HELI.11'. A condition de bien */ \
/* respecter la definition de la droite dans le plan {u,v} tel que cela est indique dans */ \
/* 'v $xrs/surfaces.13$I 20170130111050, on obtient bien une helice, mais elle est */ \
/* constituee de plusieurs morceaux qui ne se raccordent pas. Cela fut verifie en jouant */ \
/* sur les parametres arbitraires 'Definition_OX_a2' et 'Definition_OX_a3' qui, avec des */ \
/* valeurs differentes modifiaient la localisation des differents morceaux sur la surface... */ \
/* */ \
/* Le probleme des discontinuites semble se confirmer le 20170202095641 grace au programme */ \
/* 'v $xtc/helicoide.11.01$c .xrs.helicoide.11.I'... */ \
/* */ \
/* Cela a ete visualise le 20170202104934 avec 'v $xiirs/HELI.11.DiscontinuitesParalleles' */ \
/* en utilisant un nombre impair de paralleles... */ \
/* */ \
/* Cela a ete ensuite confirme avec 'v $xiirs/CYLI.31' qui ne presente pas de discontinuites */ \
/* etant donnee la geometrie du cylindre, puis avec 'v $xiirs/HELI.21' le 20170203145344 */ \
/* qui presente cinq zones de discontinuites : deux a gauche et trois a droite, au niveau */ \
/* des extrema a gauche et a droite de l'helicoide... */ \
/* */ \
/* La possibilite de corriger cette anomalie a ete introduite et controlee grace a */ \
/* l'indicateur 'tester_les_discontinuites_d_orientation_du_referentiel' le 20170305080850. */ \
Eblock \
ATes \
Bblock \
PRINT_ERREUR("Le vecteur (Z1,Z2,Z3) est le vecteur nul, le calcul est donc impossible"); \
EGAL(CalculerLesComposantes,FAUX); \
Eblock \
ETes \
Eblock \
ETes \
Eblock \
ETes \
\
Test(IL_FAUT(CalculerLesComposantes)) \
Bblock \
EGAL(Y1,PvectX(Z1,Z2,Z3,X1,X2,X3)); \
EGAL(Y2,PvectY(Z1,Z2,Z3,X1,X2,X3)); \
EGAL(Y3,PvectZ(Z1,Z2,Z3,X1,X2,X3)); \
/* Definition de l'axe 'OY' tel qu'il soit orthogonal au plan {OX,OZ} et en faisant que */ \
/* le referentiel {OX,OY,OZ} ainsi cree soit direct (et de plus orthornome, ce qui est */ \
/* fait ci-apres avec 'NormalisationVecteur(...)'). */ \
\
NormalisationVecteur(X1,X2,X3); \
NormalisationVecteur(Y1,Y2,Y3); \
NormalisationVecteur(Z1,Z2,Z3); \
/* Nouveau referentiel {OX,OY,OZ}... */ \
/* */ \
/* ATTENTION : il est essentiel que la normalisation des vecteurs {X1,X2,X3}, {Y1,Y2,Y3} */ \
/* et {Z1,Z2,Z3} ait lieu APRES le calcul du produit vectoriel precedent... */ \
\
EGAL(ComposanteACalculer \
,LIZ9(pX1,X1 \
,pX2,X2 \
,pX3,X3 \
,pY1,Y1 \
,pY2,Y2 \
,pY3,Y3 \
,pZ1,Z1 \
,pZ2,Z2 \
,pZ3,Z3 \
) \
); \
Eblock \
ATes \
Bblock \
EGAL(ComposanteACalculer,FZERO); \
Eblock \
ETes \
Eblock \
/* Calcul final d'une composante parmi neuf... */
#define TESTER_LES_DISCONTINUITES_D_ORIENTATION_DU_REFERENTIEL \
VRAI
DEFV(Local,DEFV(Logical,INIT(tester_les_discontinuites_d_orientation_du_referentiel
,TESTER_LES_DISCONTINUITES_D_ORIENTATION_DU_REFERENTIEL
)
)
);
/* Indicateur de controle du test d'orientation du referentiel... */
DEFV(Local,DEFV(Int,INIT(numero_du_point_courant,PREMIER_POINT)));
#define PREMIER_TEST \
UN
#define DERNIER_TEST \
EXP2(TRI_DIMENSIONNEL)
DEFV(Local,DEFV(Int,INIT(numero_du_test_courant_d_orientation_du_referentiel,PREMIER_TEST)));
DEFV(Local,DEFV(Float,INIT(Coordonnee_v__precedente,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_X1_u_v__precedente,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_X2_u_v__precedente,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_X3_u_v__precedente,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_Y1_u_v__precedente,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_Y2_u_v__precedente,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_Y3_u_v__precedente,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_Z1_u_v__precedente,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_Z2_u_v__precedente,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_Z3_u_v__precedente,FLOT__UNDEF)));
#define CALCUL_DES_COMPOSANTES_PRECEDENTES \
Bblock \
EGAL(Composante_X1_u_v__precedente,Composante_X1_u_v__courante__); \
EGAL(Composante_X2_u_v__precedente,Composante_X2_u_v__courante__); \
EGAL(Composante_X3_u_v__precedente,Composante_X3_u_v__courante__); \
EGAL(Composante_Y1_u_v__precedente,Composante_Y1_u_v__courante__); \
EGAL(Composante_Y2_u_v__precedente,Composante_Y2_u_v__courante__); \
EGAL(Composante_Y3_u_v__precedente,Composante_Y3_u_v__courante__); \
EGAL(Composante_Z1_u_v__precedente,Composante_Z1_u_v__courante__); \
EGAL(Composante_Z2_u_v__precedente,Composante_Z2_u_v__courante__); \
EGAL(Composante_Z3_u_v__precedente,Composante_Z3_u_v__courante__); \
Eblock \
/* Calcul des composantes precedentes... */
DEFV(Local,DEFV(Float,INIT(Coordonnee_u__courante__,FLOT__UNDEF)));
/* A priori, ne sert a rien mais est definie par symetrie avec 'Coordonnee_v__courante__'... */
DEFV(Local,DEFV(Float,INIT(Coordonnee_v__courante__,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_X1_u_v__courante__,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_X2_u_v__courante__,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_X3_u_v__courante__,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_Y1_u_v__courante__,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_Y2_u_v__courante__,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_Y3_u_v__courante__,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_Z1_u_v__courante__,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_Z2_u_v__courante__,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Composante_Z3_u_v__courante__,FLOT__UNDEF)));
#define CALCUL_DES_COMPOSANTES_COURANTES \
Bblock \
CalculNouveauReferentiel(Composante_X1_u_v__courante__ \
,ponderation_X1_X1,ponderation_X1_X2,ponderation_X1_X3 \
,ponderation_X1_Y1,ponderation_X1_Y2,ponderation_X1_Y3 \
,ponderation_X1_Z1,ponderation_X1_Z2,ponderation_X1_Z3 \
); \
CalculNouveauReferentiel(Composante_X2_u_v__courante__ \
,ponderation_X2_X1,ponderation_X2_X2,ponderation_X2_X3 \
,ponderation_X2_Y1,ponderation_X2_Y2,ponderation_X2_Y3 \
,ponderation_X2_Z1,ponderation_X2_Z2,ponderation_X2_Z3 \
); \
CalculNouveauReferentiel(Composante_X3_u_v__courante__ \
,ponderation_X3_X1,ponderation_X3_X2,ponderation_X3_X3 \
,ponderation_X3_Y1,ponderation_X3_Y2,ponderation_X3_Y3 \
,ponderation_X3_Z1,ponderation_X3_Z2,ponderation_X3_Z3 \
); \
CalculNouveauReferentiel(Composante_Y1_u_v__courante__ \
,ponderation_Y1_X1,ponderation_Y1_X2,ponderation_Y1_X3 \
,ponderation_Y1_Y1,ponderation_Y1_Y2,ponderation_Y1_Y3 \
,ponderation_Y1_Z1,ponderation_Y1_Z2,ponderation_Y1_Z3 \
); \
CalculNouveauReferentiel(Composante_Y2_u_v__courante__ \
,ponderation_Y2_X1,ponderation_Y2_X2,ponderation_Y2_X3 \
,ponderation_Y2_Y1,ponderation_Y2_Y2,ponderation_Y2_Y3 \
,ponderation_Y2_Z1,ponderation_Y2_Z2,ponderation_Y2_Z3 \
); \
CalculNouveauReferentiel(Composante_Y3_u_v__courante__ \
,ponderation_Y3_X1,ponderation_Y3_X2,ponderation_Y3_X3 \
,ponderation_Y3_Y1,ponderation_Y3_Y2,ponderation_Y3_Y3 \
,ponderation_Y3_Z1,ponderation_Y3_Z2,ponderation_Y3_Z3 \
); \
CalculNouveauReferentiel(Composante_Z1_u_v__courante__ \
,ponderation_Z1_X1,ponderation_Z1_X2,ponderation_Z1_X3 \
,ponderation_Z1_Y1,ponderation_Z1_Y2,ponderation_Z1_Y3 \
,ponderation_Z1_Z1,ponderation_Z1_Z2,ponderation_Z1_Z3 \
); \
CalculNouveauReferentiel(Composante_Z2_u_v__courante__ \
,ponderation_Z2_X1,ponderation_Z2_X2,ponderation_Z2_X3 \
,ponderation_Z2_Y1,ponderation_Z2_Y2,ponderation_Z2_Y3 \
,ponderation_Z2_Z1,ponderation_Z2_Z2,ponderation_Z2_Z3 \
); \
CalculNouveauReferentiel(Composante_Z3_u_v__courante__ \
,ponderation_Z3_X1,ponderation_Z3_X2,ponderation_Z3_X3 \
,ponderation_Z3_Y1,ponderation_Z3_Y2,ponderation_Z3_Y3 \
,ponderation_Z3_Z1,ponderation_Z3_Z2,ponderation_Z3_Z3 \
); \
Eblock \
/* Calcul des composantes courantes... */
#define Y_A_T_IL_CHANGEMENT_D_ORIENTATION_D_UNE_COMPOSANTE(composante__precedente,composante__courante__) \
IFNE_a_peu_pres_absolu(composante__precedente \
,composante__courante__ \
,epsilon_de_test_de_changement_d_orientation_du_referentiel \
) \
/* On notera que le 20170306090317, j'ai essaye : */ \
/* */ \
/* IFNE(SIGZ(composante__precedente),SIGZ(composante__courante__)) */ \
/* */ \
/* mais cela donne de tres mauvais resultats... */
#define IL_Y_A_CHANGEMENT_D_ORIENTATION_DU_REFERENTIEL \
I3OU(I3OU(Y_A_T_IL_CHANGEMENT_D_ORIENTATION_D_UNE_COMPOSANTE(Composante_X1_u_v__precedente \
,Composante_X1_u_v__courante__ \
) \
,Y_A_T_IL_CHANGEMENT_D_ORIENTATION_D_UNE_COMPOSANTE(Composante_X2_u_v__precedente \
,Composante_X2_u_v__courante__ \
) \
,Y_A_T_IL_CHANGEMENT_D_ORIENTATION_D_UNE_COMPOSANTE(Composante_X3_u_v__precedente \
,Composante_X3_u_v__courante__ \
) \
) \
,I3OU(Y_A_T_IL_CHANGEMENT_D_ORIENTATION_D_UNE_COMPOSANTE(Composante_Y1_u_v__precedente \
,Composante_Y1_u_v__courante__ \
) \
,Y_A_T_IL_CHANGEMENT_D_ORIENTATION_D_UNE_COMPOSANTE(Composante_Y2_u_v__precedente \
,Composante_Y2_u_v__courante__ \
) \
,Y_A_T_IL_CHANGEMENT_D_ORIENTATION_D_UNE_COMPOSANTE(Composante_Y3_u_v__precedente \
,Composante_Y3_u_v__courante__ \
) \
) \
,I3OU(Y_A_T_IL_CHANGEMENT_D_ORIENTATION_D_UNE_COMPOSANTE(Composante_Z1_u_v__precedente \
,Composante_Z1_u_v__courante__ \
) \
,Y_A_T_IL_CHANGEMENT_D_ORIENTATION_D_UNE_COMPOSANTE(Composante_Z2_u_v__precedente \
,Composante_Z2_u_v__courante__ \
) \
,Y_A_T_IL_CHANGEMENT_D_ORIENTATION_D_UNE_COMPOSANTE(Composante_Z3_u_v__precedente \
,Composante_Z3_u_v__courante__ \
) \
) \
) \
/* On notera que le 20170306090317, j'ai essaye de remplacer tous les 'I3OU(...)'s par */ \
/* des 'I3ET(...)'s, mais cela donne de tres mauvais resultats... */
#define PERMUTER_L_ORDRE_DE_PARCOURS_DES_COORDONNEES_u_v
/* Introduit le 20170307111551 a cause de 'v $xrs/referentiel3D.11$I 20170307094803'... */
#define NE_PAS_CHANGER_L_ORIENTATION_DU_REFERENTIEL \
FU
#define CHANGER_EVENTUELLEMENT_L_ORIENTATION_DU_REFERENTIEL(composante) \
MUL2(orientation_du_referentiel,composante)
DEFV(Local,DEFV(Float,INIT(orientation_du_referentiel,NE_PAS_CHANGER_L_ORIENTATION_DU_REFERENTIEL)));
/* Facteur permettant de changer ou pas l'orientation du referentiel... */
#define EPSILON_DE_TEST_DE_CHANGEMENT_D_ORIENTATION_DU_REFERENTIEL \
FRA2(FRA10(GRO3(GRO10(FU))))
DEFV(Local,DEFV(Float,INIT(epsilon_de_test_de_changement_d_orientation_du_referentiel
,EPSILON_DE_TEST_DE_CHANGEMENT_D_ORIENTATION_DU_REFERENTIEL
)
)
);
/* La valeur par defaut a ete determinee de maniere heuristique... */
#define EDITER_LE_REFERENTIEL \
FAUX
DEFV(Local,DEFV(Logical,INIT(editer_le_referentiel,EDITER_LE_REFERENTIEL)));
/* Indicateur introduit le 20170308174525... */
BFonctionV
DEFV(FonctionV,test_de_l_orientation_du_referentiel(u,v))
DEFV(Argument,DEFV(Float,u));
DEFV(Argument,DEFV(Float,v));
/* Definition des coordonnees parametriques. */
/* */
/* On notera le 20170307121634 que dans le cas du trace d'une helice sur une surface, en */
/* fait, les coordonnees {u,v}, lorsqu'on arrive ici ne "balaye" pas tout l'espace de */
/* parametrage [mu,Mu]x[mv,Mv] (comme v $xrs/surfaces.12$I DEFINITION_DE__FDoIn_uv' le */
/* definit, mais uniquement les coordonnees {u,v} qui sont sur l'helice qui est elle-meme */
/* definie, par exemple, par 'image_Droite_UV_Definition'... */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
Test(IL_FAUT(tester_les_discontinuites_d_orientation_du_referentiel))
Bblock
Test(EST_VRAI(c_est_le_calcul_de__cx__cy__cz))
/* Introduit le 20170308102415 afin de ne pas appeler cette fonction lors du calcul */
/* des differentielles... */
Bblock
Test(IFEQ(numero_du_test_courant_d_orientation_du_referentiel,PREMIER_TEST))
/* La premiere des neuf fonctions 'Composante_[XYZ][123](...)' appelee pour le point */
/* courant doit effectuer ce qui suit : */
Bblock
EGAL(Coordonnee_u__courante__,u);
EGAL(Coordonnee_v__courante__,v);
Test(IFEQ(numero_du_point_courant,PREMIER_POINT))
Bblock
EGAL(orientation_du_referentiel,NEUT(orientation_du_referentiel));
/* A priori, on ne changera pas l'orientation... */
EGAL(Coordonnee_v__precedente,SOUS(Coordonnee_v__courante__,tgEPSILON));
/* Initialisation arbitraire mais telle que les deux valeurs soient differentes... */
Eblock
ATes
Bblock
Eblock
ETes
Test(IFNE(Coordonnee_v__courante__,Coordonnee_v__precedente))
/* Cas ou la coordonnee 'v' qui assure le parcours de la courbe vient de changer : on va */
/* donc determiner le premier point de l'ellipse orthogonale a cette courbe... */
/* */
/* ATTENTION : je note le 20170307094803 que cela fait l'hypothese implicite que la */
/* coordonnee 'v' est parcourue dans une boucle "exterieure" a celle de la coordonnee 'u', */
/* alors que c'est le contraire ('v $xrs/surfaces.12$I FDoIn.u.minimum_de_u_effectif')... */
/* */
/* Grace a 'v $xrs/surfaces.12$I PERMUTER_L_ORDRE_DE_PARCOURS_DES_COORDONNEES_u_v', cela */
/* fut corrige le 20170307103744... */
Bblock
CALCUL_DES_COMPOSANTES_COURANTES;
Test(IFEQ(numero_du_point_courant,PREMIER_POINT))
Bblock
/* Dans le cas du premier point de la courbe, on ne peut evidemment pas tester si le */
/* refentiel a change d'orientation... */
Eblock
ATes
Bblock
Test(IFOU(SE22(IFNE(type_de_CalculNouveauReferentiel_courant__
,type_de_CalculNouveauReferentiel_precedent
)
,TOUJOURS_FAUX
)
,EST_VRAI(IL_Y_A_CHANGEMENT_D_ORIENTATION_DU_REFERENTIEL)
)
)
/* Lors du calcul de 'v $xiirs/EPIC.45', j'ai note que le changement de type de calcul du */
/* referentiel provoquait lui-aussi une discontinuite dans la suite des referentiels. Or */
/* cela n'est pas corrigeable (apparemment) par changement d'orientation, mais l'est */
/* en rendant non nulle (et par exemple, strictement positive) la coordonnee 'v'. C'est */
/* donc ce qui fut fait ('v $xiirs/$Fnota 20170308115859'... */
/* */
/* Le 20170310124146, je remarque donc que le test 'IFNE(...)' ci-dessus pourrait peut-etre */
/* etre supprime, ce que je tente le 20170310125912 avec le 'SE22' et le 'TOUJOURS_FAUX'... */
Bblock
EGAL(orientation_du_referentiel,NEGA(orientation_du_referentiel));
/* Dans le cas ou l'un des axes a change d'orientation, alors il faut changer l'orientation */
/* du referentiel... */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
Test(IFEQ(numero_du_test_courant_d_orientation_du_referentiel,DERNIER_TEST))
/* La derniere des neuf fonctions 'Composante_[XYZ][123](...)' appelee pour le point */
/* courant doit effectuer ce qui suit : */
Bblock
Test(IFNE(Coordonnee_v__courante__,Coordonnee_v__precedente))
Bblock
EGAL(type_de_CalculNouveauReferentiel_precedent,type_de_CalculNouveauReferentiel_courant__);
CALCUL_DES_COMPOSANTES_PRECEDENTES;
/* Lors du dernier test, il faut memoriser comment fut calcule le referentiel precedent... */
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(editer_le_referentiel))
/* Test introduit le 20170308174525... */
Bblock
CAL3(Prme2("point=%0*d"
,NOMBRE_DE_CHIFFRES_DECIMAUX(nombre_maximal_de_points_visualisables)
,numero_du_point_courant
)
);
CAL3(Prme2(" {u,v}={%+.^^^,%+.^^^}",Coordonnee_u__courante__,Coordonnee_v__courante__));
CAL3(Prme2(" referentiel(type=%d,orientation=%+g)={"
,type_de_CalculNouveauReferentiel_courant__
,orientation_du_referentiel
)
);
/* Le format "%+g" est destine a editer 'orientation_du_referentiel' comme un entier (qu'il */
/* est d'ailleurs, meme s'il est declare 'Float'). */
CALS(FPrme0("X={"));
CAL3(Prme1("%+.^^^",CHANGER_EVENTUELLEMENT_L_ORIENTATION_DU_REFERENTIEL(Composante_X1_u_v__courante__)));
CALS(FPrme0(","));
CAL3(Prme1("%+.^^^",CHANGER_EVENTUELLEMENT_L_ORIENTATION_DU_REFERENTIEL(Composante_X2_u_v__courante__)));
CALS(FPrme0(","));
CAL3(Prme1("%+.^^^",CHANGER_EVENTUELLEMENT_L_ORIENTATION_DU_REFERENTIEL(Composante_X3_u_v__courante__)));
CALS(FPrme0("},"));
CALS(FPrme0("Y={"));
CAL3(Prme1("%+.^^^",CHANGER_EVENTUELLEMENT_L_ORIENTATION_DU_REFERENTIEL(Composante_Y1_u_v__courante__)));
CALS(FPrme0(","));
CAL3(Prme1("%+.^^^",CHANGER_EVENTUELLEMENT_L_ORIENTATION_DU_REFERENTIEL(Composante_Y2_u_v__courante__)));
CALS(FPrme0(","));
CAL3(Prme1("%+.^^^",CHANGER_EVENTUELLEMENT_L_ORIENTATION_DU_REFERENTIEL(Composante_Y3_u_v__courante__)));
CALS(FPrme0("},"));
CALS(FPrme0("Z={"));
CAL3(Prme1("%+.^^^",CHANGER_EVENTUELLEMENT_L_ORIENTATION_DU_REFERENTIEL(Composante_Z1_u_v__courante__)));
CALS(FPrme0(","));
CAL3(Prme1("%+.^^^",CHANGER_EVENTUELLEMENT_L_ORIENTATION_DU_REFERENTIEL(Composante_Z2_u_v__courante__)));
CALS(FPrme0(","));
CAL3(Prme1("%+.^^^",CHANGER_EVENTUELLEMENT_L_ORIENTATION_DU_REFERENTIEL(Composante_Z3_u_v__courante__)));
CALS(FPrme0("}"));
CALS(FPrme0("}\n"));
Eblock
ATes
Bblock
Eblock
ETes
EGAL(Coordonnee_v__precedente,Coordonnee_v__courante__);
INCR(numero_du_point_courant,I);
EGAL(numero_du_test_courant_d_orientation_du_referentiel,PREMIER_TEST);
Eblock
ATes
Bblock
INCR(numero_du_test_courant_d_orientation_du_referentiel,I);
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
INCR(numero_du_point_courant,I);
/* Cela ne sert a rien, mais c'est malgre tout plus correct... */
Eblock
ETes
RETU_VIDE;
Eblock
EFonctionV
#define GENERE__FonctionF_Composante_XYZ(nom_et_arguments_de_la_fonction,p11,p12,p13,p21,p22,p23,p31,p32,p33) \
DEFV(FonctionF,nom_et_arguments_de_la_fonction) \
/* Introduit sous forme de fonction et non pas de 'define' afin de garantir une compilation */ \
/* sans probleme... */ \
DEFV(Argument,DEFV(Float,u)); \
DEFV(Argument,DEFV(Float,v)); \
/* Definition des coordonnees parametriques. */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
Bblock \
DEFV(Float,INIT(Composante,FLOT__UNDEF)); \
/*..............................................................................................................................*/ \
CALS(test_de_l_orientation_du_referentiel(u,v)); \
/* Faut-il inverser le referentiel ? */ \
\
CalculNouveauReferentiel(Composante \
,p11,p12,p13 \
,p21,p22,p23 \
,p31,p32,p33 \
); \
\
RETU(CHANGER_EVENTUELLEMENT_L_ORIENTATION_DU_REFERENTIEL(Composante)); \
/* Definition de la composante courante avec inversion eventuelle (celle-ci fut introduite */ \
/* le 20170305080908...). */ \
Eblock
BFonctionF
DEFV(Local,GENERE__FonctionF_Composante_XYZ(Composante_X1(u,v)
,ponderation_X1_X1,ponderation_X1_X2,ponderation_X1_X3
,ponderation_X1_Y1,ponderation_X1_Y2,ponderation_X1_Y3
,ponderation_X1_Z1,ponderation_X1_Z2,ponderation_X1_Z3
)
)
/* Definition de la composante 'X1'. */
EFonctionF
BFonctionF
DEFV(Local,GENERE__FonctionF_Composante_XYZ(Composante_X2(u,v)
,ponderation_X2_X1,ponderation_X2_X2,ponderation_X2_X3
,ponderation_X2_Y1,ponderation_X2_Y2,ponderation_X2_Y3
,ponderation_X2_Z1,ponderation_X2_Z2,ponderation_X2_Z3
)
)
/* Definition de la composante 'X2'. */
EFonctionF
BFonctionF
DEFV(Local,GENERE__FonctionF_Composante_XYZ(Composante_X3(u,v)
,ponderation_X3_X1,ponderation_X3_X2,ponderation_X3_X3
,ponderation_X3_Y1,ponderation_X3_Y2,ponderation_X3_Y3
,ponderation_X3_Z1,ponderation_X3_Z2,ponderation_X3_Z3
)
)
/* Definition de la composante 'X3'. */
EFonctionF
BFonctionF
DEFV(Local,GENERE__FonctionF_Composante_XYZ(Composante_Y1(u,v)
,ponderation_Y1_X1,ponderation_Y1_X2,ponderation_Y1_X3
,ponderation_Y1_Y1,ponderation_Y1_Y2,ponderation_Y1_Y3
,ponderation_Y1_Z1,ponderation_Y1_Z2,ponderation_Y1_Z3
)
)
/* Definition de la composante 'Y1'. */
EFonctionF
BFonctionF
DEFV(Local,GENERE__FonctionF_Composante_XYZ(Composante_Y2(u,v)
,ponderation_Y2_X1,ponderation_Y2_X2,ponderation_Y2_X3
,ponderation_Y2_Y1,ponderation_Y2_Y2,ponderation_Y2_Y3
,ponderation_Y2_Z1,ponderation_Y2_Z2,ponderation_Y2_Z3
)
)
/* Definition de la composante 'Y2'. */
EFonctionF
BFonctionF
DEFV(Local,GENERE__FonctionF_Composante_XYZ(Composante_Y3(u,v)
,ponderation_Y3_X1,ponderation_Y3_X2,ponderation_Y3_X3
,ponderation_Y3_Y1,ponderation_Y3_Y2,ponderation_Y3_Y3
,ponderation_Y3_Z1,ponderation_Y3_Z2,ponderation_Y3_Z3
)
)
/* Definition de la composante 'Y3'. */
EFonctionF
BFonctionF
DEFV(Local,GENERE__FonctionF_Composante_XYZ(Composante_Z1(u,v)
,ponderation_Z1_X1,ponderation_Z1_X2,ponderation_Z1_X3
,ponderation_Z1_Y1,ponderation_Z1_Y2,ponderation_Z1_Y3
,ponderation_Z1_Z1,ponderation_Z1_Z2,ponderation_Z1_Z3
)
)
/* Definition de la composante 'Z1'. */
EFonctionF
BFonctionF
DEFV(Local,GENERE__FonctionF_Composante_XYZ(Composante_Z2(u,v)
,ponderation_Z2_X1,ponderation_Z2_X2,ponderation_Z2_X3
,ponderation_Z2_Y1,ponderation_Z2_Y2,ponderation_Z2_Y3
,ponderation_Z2_Z1,ponderation_Z2_Z2,ponderation_Z2_Z3
)
)
/* Definition de la composante 'Z2'. */
EFonctionF
BFonctionF
DEFV(Local,GENERE__FonctionF_Composante_XYZ(Composante_Z3(u,v)
,ponderation_Z3_X1,ponderation_Z3_X2,ponderation_Z3_X3
,ponderation_Z3_Y1,ponderation_Z3_Y2,ponderation_Z3_Y3
,ponderation_Z3_Z1,ponderation_Z3_Z2,ponderation_Z3_Z3
)
)
/* Definition de la composante 'Z3'. */
EFonctionF
#define d_Composante_X1(u,v) \
d_FCONSTANTES
#define d_Composante_X2(u,v) \
d_FCONSTANTES
#define d_Composante_X3(u,v) \
d_FCONSTANTES
#define d_Composante_Y1(u,v) \
d_FCONSTANTES
#define d_Composante_Y2(u,v) \
d_FCONSTANTES
#define d_Composante_Y3(u,v) \
d_FCONSTANTES
#define d_Composante_Z1(u,v) \
d_FCONSTANTES
#define d_Composante_Z2(u,v) \
d_FCONSTANTES
#define d_Composante_Z3(u,v) \
d_FCONSTANTES
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L ' E L L I P S E : */
/* */
/*************************************************************************************************************************************/
-define Xellipse(u,v) \
-_-_-_- MUL2(parametre_Ra,COSX(u))
-define Yellipse(u,v) \
-_-_-_- MUL2(parametre_Rb,SINX(u))
-define Zellipse(u,v) \
-_-_-_- FZERO
/* Definition d'une ellipse dans le plan {OX,OZ} que l'on va ensuite amener dans le plan */
/* orthogonal a la tangente a la courbe, soit {{X1,X2,X3},{Y1,Y2,Y3},{Z1,Z2,Z3}}. */