/*************************************************************************************************************************************/ /* */ /* 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 E S U R F A C E D E H O R N E R " C I R C U L A I R E " D U D E U X I E M E D E G R E : */ /* */ /* */ /* Author of '$xrs/Horner42.11$I' : */ /* */ /* Jean-Francois Colonna (LACTAMME, 20201012122312). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 de la surface ('v $xrs/Horner42.11$K') : */ /* */ /* La surface 'circulaire' de Horner */ /* est definie 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) = RX.HORNER_4_02(cos(u),sin(u),cos(v),sin(v),{pXijkl}) */ /* x */ /* */ /* F (u,v) = RY.HORNER_4_02(cos(u),sin(u),cos(v),sin(v),{pYijkl}) */ /* y */ /* */ /* F (u,v) = RZ.HORNER_4_02(cos(u),sin(u),cos(v),sin(v),{pZijkl}) */ /* z */ /* */ /* ('v $ximd/operator.1$FON HORNER_4_02') avec : */ /* */ /* {pXijkl} un ensemble de coefficients (i,j,k,l E {0,1,2}) */ /* {pYijkl} un ensemble de coefficients (i,j,k,l E {0,1,2}) */ /* {pZijkl} un ensemble de coefficients (i,j,k,l E {0,1,2}) */ /* */ /* et : */ /* 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 Fx_Horner42_1(u,v) \ MUL2(parametre_RX \ ,HORNER_4_02(COSX(u),SINX(u),COSX(v),SINX(v) \ ,pX_a2222,pX_a2221,pX_a2220,pX_a2212,pX_a2211,pX_a2210,pX_a2202,pX_a2201,pX_a2200 \ ,pX_a2122,pX_a2121,pX_a2120,pX_a2112,pX_a2111,pX_a2110,pX_a2102,pX_a2101,pX_a2100 \ ,pX_a2022,pX_a2021,pX_a2020,pX_a2012,pX_a2011,pX_a2010,pX_a2002,pX_a2001,pX_a2000 \ ,pX_a1222,pX_a1221,pX_a1220,pX_a1212,pX_a1211,pX_a1210,pX_a1202,pX_a1201,pX_a1200 \ ,pX_a1122,pX_a1121,pX_a1120,pX_a1112,pX_a1111,pX_a1110,pX_a1102,pX_a1101,pX_a1100 \ ,pX_a1022,pX_a1021,pX_a1020,pX_a1012,pX_a1011,pX_a1010,pX_a1002,pX_a1001,pX_a1000 \ ,pX_a0222,pX_a0221,pX_a0220,pX_a0212,pX_a0211,pX_a0210,pX_a0202,pX_a0201,pX_a0200 \ ,pX_a0122,pX_a0121,pX_a0120,pX_a0112,pX_a0111,pX_a0110,pX_a0102,pX_a0101,pX_a0100 \ ,pX_a0022,pX_a0021,pX_a0020,pX_a0012,pX_a0011,pX_a0010,pX_a0002,pX_a0001,pX_a0000 \ ) \ ) /* Definition de la fonction F (u,v). */ /* x */ #define Fy_Horner42_1(u,v) \ MUL2(parametre_RY \ ,HORNER_4_02(COSX(u),SINX(u),COSX(v),SINX(v) \ ,pY_a2222,pY_a2221,pY_a2220,pY_a2212,pY_a2211,pY_a2210,pY_a2202,pY_a2201,pY_a2200 \ ,pY_a2122,pY_a2121,pY_a2120,pY_a2112,pY_a2111,pY_a2110,pY_a2102,pY_a2101,pY_a2100 \ ,pY_a2022,pY_a2021,pY_a2020,pY_a2012,pY_a2011,pY_a2010,pY_a2002,pY_a2001,pY_a2000 \ ,pY_a1222,pY_a1221,pY_a1220,pY_a1212,pY_a1211,pY_a1210,pY_a1202,pY_a1201,pY_a1200 \ ,pY_a1122,pY_a1121,pY_a1120,pY_a1112,pY_a1111,pY_a1110,pY_a1102,pY_a1101,pY_a1100 \ ,pY_a1022,pY_a1021,pY_a1020,pY_a1012,pY_a1011,pY_a1010,pY_a1002,pY_a1001,pY_a1000 \ ,pY_a0222,pY_a0221,pY_a0220,pY_a0212,pY_a0211,pY_a0210,pY_a0202,pY_a0201,pY_a0200 \ ,pY_a0122,pY_a0121,pY_a0120,pY_a0112,pY_a0111,pY_a0110,pY_a0102,pY_a0101,pY_a0100 \ ,pY_a0022,pY_a0021,pY_a0020,pY_a0012,pY_a0011,pY_a0010,pY_a0002,pY_a0001,pY_a0000 \ ) \ ) /* Definition de la fonction F (u,v). */ /* y */ #define Fz_Horner42_1(u,v) \ MUL2(parametre_RZ \ ,HORNER_4_02(COSX(u),SINX(u),COSX(v),SINX(v) \ ,pZ_a2222,pZ_a2221,pZ_a2220,pZ_a2212,pZ_a2211,pZ_a2210,pZ_a2202,pZ_a2201,pZ_a2200 \ ,pZ_a2122,pZ_a2121,pZ_a2120,pZ_a2112,pZ_a2111,pZ_a2110,pZ_a2102,pZ_a2101,pZ_a2100 \ ,pZ_a2022,pZ_a2021,pZ_a2020,pZ_a2012,pZ_a2011,pZ_a2010,pZ_a2002,pZ_a2001,pZ_a2000 \ ,pZ_a1222,pZ_a1221,pZ_a1220,pZ_a1212,pZ_a1211,pZ_a1210,pZ_a1202,pZ_a1201,pZ_a1200 \ ,pZ_a1122,pZ_a1121,pZ_a1120,pZ_a1112,pZ_a1111,pZ_a1110,pZ_a1102,pZ_a1101,pZ_a1100 \ ,pZ_a1022,pZ_a1021,pZ_a1020,pZ_a1012,pZ_a1011,pZ_a1010,pZ_a1002,pZ_a1001,pZ_a1000 \ ,pZ_a0222,pZ_a0221,pZ_a0220,pZ_a0212,pZ_a0211,pZ_a0210,pZ_a0202,pZ_a0201,pZ_a0200 \ ,pZ_a0122,pZ_a0121,pZ_a0120,pZ_a0112,pZ_a0111,pZ_a0110,pZ_a0102,pZ_a0101,pZ_a0100 \ ,pZ_a0022,pZ_a0021,pZ_a0020,pZ_a0012,pZ_a0011,pZ_a0010,pZ_a0002,pZ_a0001,pZ_a0000 \ ) \ ) /* 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_Horner42_1 \ 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'... */