/*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S R E L A T I V E S A L A D E R I V A T I O N F O R M E L L E */ /* D ' U N P S E U D O - T O R E " E P Y C Y C L O I D A L " T R I D I M E N S I O N N E L : */ /* */ /* */ /* Nota : */ /* */ /* Ce programme s'inspire du programme */ /* 'v $xrk/SinCos.11$K'... */ /* */ /* */ /* Author of '$xrs/epicycloide.31$I' : */ /* */ /* Jean-Francois Colonna (LACTAMME, 20170110121144). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S T R O I S F O N C T I O N S ' F ' : */ /* */ /* */ /* Definition ('v $xrs/epicycloide.31$K') : */ /* */ /* Le pseudo-tore "epicycloidal tridimensionnel" */ /* est defini parametriquement */ /* en fonction des deux parametres 'u' */ /* (appele aussi 'distance polaire' ou */ /* 'theta' ou encore 'latitude') et 'v' */ /* (appele aussi 'longitude' ou 'phi') : */ /* */ /* EX.v ECX ESX */ /* XEspace(u,v) = KX.e .[cos (OCX.v+PCX).sin (OSX.v+PSX)] + TX */ /* */ /* EY.v ECY ESY */ /* YEspace(u,v) = KY.e .[cos (OCY.v+PCY).sin (OSY.v+PSY)] + TY */ /* */ /* EZ.v ECZ ESZ */ /* ZEspace(u,v) = KZ.e .[cos (OCZ.v+PCZ).sin (OSZ.v+PSZ)] + TZ */ /* Courbe "epicycloidale tridimensionnelle". */ /* */ /* dXEspace(u,v) = d#XEspace(u,v) */ /* dYEspace(u,v) = d#YEspace(u,v) */ /* dZEspace(u,v) = d#ZEspace(u,v) */ /* */ /* Le vecteur {dXEspace(u,v),dYEspace(u,v),dZEspace(u,v)} defini un nouveau */ /* referentiel {{X1,X2,X3},{Y1,Y2,Y3},{Z1,Z2,Z3}} */ /* */ /* Xellipse(u,v) = Ra.cos(u) */ /* Yellipse(u,v) = Rb.sin(u) */ /* Zellipse(u,v) = 0 */ /* Definition d'une ellipse dans le plan {OX,OY}. */ /* */ /* F (u,v) = [Xellipse(u,v)*X1] + [Yellipse(u,v)*Y1] + [Zellipse(u,v)*Z1] + XEspace(u,v) */ /* x */ /* */ /* F (u,v) = [Xellipse(u,v)*X2] + [Yellipse(u,v)*Y2] + [Zellipse(u,v)*Z2] + YEspace(u,v) */ /* y */ /* */ /* F (u,v) = [Xellipse(u,v)*X3] + [Yellipse(u,v)*Y3] + [Zellipse(u,v)*Z3] + ZEspace(u,v) */ /* z */ /* Definition d'une ellipse dont le centre est le point */ /* courant {XEspace(u,v),YEspace(u,v),ZEspace(u,v)} et */ /* situee dans {Alpha(u,v),Beta_(u,v),Gamma(u,v)}. */ /* */ /* et (parametres par defaut) : */ /* */ /* KX = +1 */ /* TX = 0 */ /* EX = 0 */ /* ECX = +1 */ /* ESX = 0 */ /* OCX = +1 */ /* OSX = +1 */ /* PCX = 0 */ /* PSX = 0 */ /* */ /* KY = +1 */ /* TY = 0 */ /* EY = 0 */ /* ECY = +1 */ /* ESY = +1 */ /* OCY = +1 */ /* OSY = +1 */ /* PCY = 0 */ /* PSY = 0 */ /* */ /* KZ = +1 */ /* TZ = 0 */ /* EZ = 0 */ /* ECZ = 0 */ /* ESZ = +1 */ /* OCZ = +1 */ /* OSZ = +1 */ /* PCZ = 0 */ /* PSZ = 0 */ /* */ /* avec : */ /* */ /* u E [ 0 , 2.p ] */ /* */ /* v E [ 0 , 2.p ] */ /* */ /* (ou 'p' designe 'pi'). */ /* */ /* Tout ceci est tres inspire de 'v $xrk/SinCos.11$K' */ /* en faisant : */ /* */ /* v = t */ /* */ /* */ /*************************************************************************************************************************************/ /* ATTENTION, il est imperatif que les fonctions derivables formellement soient definies */ /* dans un fichier a part afin qu'elles ne soient pas l'objet d'une double definition. En */ /* effet, on trouve dans 'v $xcc/cpp$Z' : */ /* */ /* $CA $module$w */ /* | $xcp/cpp$X ... -c$PASSE_D -e$PASSE_5 */ /* > $fichierR */ /* */ /* Ainsi, si par exemple la definition de 'Fx(u,v)' etait faite localement dans le */ /* fichier '$xrf/recursif.11$K', cette definition apparaitrait deux fois dans le fichier */ /* '$module$w' : une premiere fois en tete, provenant de '$PASSE_D' ou l'on ne trouve que */ /* les definitions du type '-define ...', puis une deuxieme fois a la suite, la ou se trouve */ /* concatene au fichier '$module$W' des '-define ...' le fichier '$fichierA' a compiler... */ #define d1_XEspace_Courbe(u,v) \ d1_XEspace_xrs_epicycloide_31(u,v) #define d1_YEspace_Courbe(u,v) \ d1_YEspace_xrs_epicycloide_31(u,v) #define d1_ZEspace_Courbe(u,v) \ d1_ZEspace_xrs_epicycloide_31(u,v) #include xrs/epicycloide.31.1.I" /* Definition de l'equation de l'epicycloide generalisee. */ #include xrs/referentiel3D.11.I" /* Definition du referentiel au point {u,v} de l'epicycloide generalisee. */ -define Fx_Epicycloide_3(u,v) \ -_-_-_- LIN3(Xellipse(u,v),Composante_X1(u,v) \ -_-_-_- ,Yellipse(u,v),Composante_Y1(u,v) \ -_-_-_- ,Zellipse(u,v),Composante_Z1(u,v) \ -_-_-_- ,XEspace_xrs_epicycloide_31(u,v) \ -_-_-_- ) /* Definition de la fonction F (u,v). */ /* x */ -define Fy_Epicycloide_3(u,v) \ -_-_-_- LIN3(Xellipse(u,v),Composante_X2(u,v) \ -_-_-_- ,Yellipse(u,v),Composante_Y2(u,v) \ -_-_-_- ,Zellipse(u,v),Composante_Z2(u,v) \ -_-_-_- ,YEspace_xrs_epicycloide_31(u,v) \ -_-_-_- ) /* Definition de la fonction F (u,v). */ /* y */ -define Fz_Epicycloide_3(u,v) \ -_-_-_- LIN3(Xellipse(u,v),Composante_X3(u,v) \ -_-_-_- ,Yellipse(u,v),Composante_Y3(u,v) \ -_-_-_- ,Zellipse(u,v),Composante_Z3(u,v) \ -_-_-_- ,ZEspace_xrs_epicycloide_31(u,v) \ -_-_-_- ) /* Definition de la fonction F (u,v). */ /* z */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N S R E L A T I V E S A L A P S E U D O - P R O J E C T I O N : */ /* */ /*************************************************************************************************************************************/ -define Pxyz_Epicycloide_3 \ -_-_-_- Bblock \ -_-_-_- BLOC(VIDE;); \ -_-_-_- Eblock /* Initialisations specifiques a cette surface destinees a permettre la reinjection des */ /* trois pseudo-projections {Projection_de_Fx,Projection_de_Fy,Projection_de_Fz} dans */ /* 'v $xrs/project2D.11$K'. */