/*************************************************************************************************************************************/ /* */ /* 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 C U B E A R R O N D I : */ /* */ /* */ /* Author of '$xrs/cube.11$I' : */ /* */ /* Jean-Francois Colonna (LACTAMME, 19990519113903). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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/cube.11$K') : */ /* */ /* Le cube 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') : */ /* */ /* F (u,v) = R.Dsin(u).Dcos(v) */ /* x */ /* */ /* F (u,v) = R.Dsin(u).Dsin(v) */ /* y */ /* */ /* F (u,v) = R.Dcos(u) */ /* z */ /* */ /* avec : */ /* */ /* sin(1.t) sin(3.t) sin(5.t) sin(7.t) sin(9.t) sin(11.t) */ /* Dsin(t) = K.[---------- - ---------- + ---------- - ---------- + ---------- - -----------] */ /* 2 2 2 2 2 2 */ /* 1 3 5 7 9 11 */ /* */ /* Dcos(t) = Dsin(t + (p/2)) */ /* */ /* (voir l'Aide-Memoire de Mathematiques, */ /* page 840 pour le developpement en Serie */ /* de Fourier des "Dents de Scie" qui indique */ /* que 'K' devrait valoir 4/p divise par p/2 */ /* -qui est le maximum de la fonction- ce qui */ /* est trop, peut-etre parce qu'il n'y a pas */ /* assez de termes dans le developpement...) */ /* avec : */ /* */ /* u E [ 0 , p ] */ /* */ /* v E [ 0 , 2.p ] */ /* */ /* (ou 'p' designe 'pi'). */ /* */ /* */ /*************************************************************************************************************************************/ /* 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 CoefficientNormalisation_Cube_1 \ -_-_-_- coefficient_de_renormalisation /* Ce coefficient (appele 'K' dans les formules ci-dessus) est determine "experimentalement" */ /* grace au programme 'v $xtc/DentScie.01$c' ; il est egal a : */ /* */ /* MAX2(ABSO(min),ABSO(max)) */ /* */ /* ou {min,max} designent les extrema edites par ce programme... */ /* */ /* Jusqu'au 20060526174621, la definition precedente etait : */ /* */ /* -define CoefficientNormalisation_Cube_1 \ */ /* -_-_-_- PARE(1.1921275137943792) */ /* */ /* mais c'est quand meme preferable de le determiner automatiquement. A la date du */ /* 20060526183847, il vaut 1.1921275137943794... */ -define DSINX_1_1(t) \ -_-_-_- NEUT(DIVI(SINX(GRO1(t)),EXP2(UN))) -define DSINX_1_3(t) \ -_-_-_- NEGA(DIVI(SINX(GRO3(t)),EXP2(TROIS))) -define DSINX_1_5(t) \ -_-_-_- NEUT(DIVI(SINX(GRO5(t)),EXP2(CINQ))) -define DSINX_1_7(t) \ -_-_-_- NEGA(DIVI(SINX(GRO7(t)),EXP2(SEPT))) -define DSINX_1_9(t) \ -_-_-_- NEUT(DIVI(SINX(GRO9(t)),EXP2(NEUF))) -define DSINX_1_B(t) \ -_-_-_- NEGA(DIVI(SINX(GRO11(t)),EXP2(ONZE))) /* Definitions introduites le afin de determiner 'CoefficientNormalisation_Cube_1' */ /* automatiquement dans 'v $xrs/cube.11$K coefficient_de_renormalisation'. */ -define DSINX_1(t) \ -_-_-_- MUL2(INVE(CoefficientNormalisation_Cube_1) \ -_-_-_- ,ADD6(DSINX_1_1(t) \ -_-_-_- ,DSINX_1_3(t) \ -_-_-_- ,DSINX_1_5(t) \ -_-_-_- ,DSINX_1_7(t) \ -_-_-_- ,DSINX_1_9(t) \ -_-_-_- ,DSINX_1_B(t) \ -_-_-_- ) \ -_-_-_- ) -define DCOSX_1(t) \ -_-_-_- DSINX_1(ADD2(t,PI_SUR_2)) /* Definition des fonctions 'cos(...)' et 'sin(...)' dites "en Dents de scie". On notera */ /* qu'il est preferable que le nombre de termes du developpement definissant 'DSINX_1(...)' */ /* soit pair (ici 6=2*3), et ce afin d'assurer la compatibilite avec le programme de test */ /* 'v $xtc/DentScie.01$c NTERMES'. */ -define Fx_Cube_1(u,v) \ -_-_-_- ADD2(MUL2(MUL2(parametre_r,DCOSX_1(v)),DSINX_1(u)) \ -_-_-_- ,FZERO \ -_-_-_- ) /* Definition de la fonction F (u,v). */ /* x */ -define Fy_Cube_1(u,v) \ -_-_-_- ADD2(MUL2(MUL2(parametre_r,DSINX_1(v)),DSINX_1(u)) \ -_-_-_- ,FZERO \ -_-_-_- ) /* Definition de la fonction F (u,v). */ /* y */ -define Fz_Cube_1(u,v) \ -_-_-_- ADD2(MUL2(parametre_r,DCOSX_1(u)) \ -_-_-_- ,FZERO \ -_-_-_- ) /* 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_Cube_1 \ -_-_-_- Bblock \ -_-_-_- EGAL(minimum_de_u,FZERO); \ -_-_-_- EGAL(maximum_de_u,CERCLE_TRIGONOMETRIQUE); \ -_-_-_- EGAL(minimum_de_v,FZERO); \ -_-_-_- EGAL(maximum_de_v,CERCLE_TRIGONOMETRIQUE); \ -_-_-_- /* Afin d'assurer la periodicite du champ... */ \ -_-_-_- iTRANSFORMAT_31(liste_PARAMETRE_R,FU); \ -_-_-_- /* Afin de definir un cube "unite"... */ \ -_-_-_- 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' (introduit le 20050203092638)... */