/*************************************************************************************************************************************/
/* */
/* 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 R O J E C T O R T R I D I M E N S I O N N E L : */
/* */
/* */
/* Author of '$xrs/project3D.11$I' : */
/* */
/* Jean-Francois Colonna (LACTAMME, 20050619172156). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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/project3D.11$K') : */
/* */
/* Le projector tridimensionnel est defini parametriquement */
/* en fonction des trois parametres 'u', 'v' et 'w' : */
/* */
/* F (u,v,w) = A .AlbumX(u,v,w) + T */
/* x x x */
/* */
/* F (u,v,w) = A .AlbumY(u,v,w) + T */
/* y y y */
/* */
/* F (u,v,w) = A .AlbumZ(u,v,w) + T */
/* z z z */
/* */
/* (ou 'Album?(u,v,w)' sont des albums flottants indexes */
/* par (u,v,w) -coordonnees flottantes {Xf,Yf,Zf} respectivement- */
/* a l'aide d'une procedure d'interpolation bicubique) */
/* */
/* avec : */
/* */
/* u E [ 0 , 1 ] (--O--> Xf) */
/* */
/* v E [ 0 , 1 ] (--O--> Yf) */
/* */
/* w E [ 0 , 1 ] (--O--> Zf) */
/* */
/* */
/*************************************************************************************************************************************/
/* 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,w)' 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 PAGE_COURANTE_D_UN_ALBUM(album,w) \
PAGE(album,_cDENORMALISE_OZ(SOUS(w,minimum_de_w))) \
/* Acces a la page courante d'un certain album en fonction de la coordonnee courante 'w'. */ \
/* Ceci fut introduit le 20060504111645... */
#define Fx_Projector3D_1(u,v,w) \
AXPB(Album_Fx_amplificateur \
,COND(IL_FAUT(visualiser_une_variete_tridimensionnelle) \
,gFFAload_point_coordonnees_01(Album_Fx \
,u \
,v \
,w \
,Album_Fx_periodiser_u \
,Album_Fx_periodiser_v \
,Album_Fx_periodiser_w \
,Album_Fx_symetriser_u \
,Album_Fx_symetriser_v \
,Album_Fx_symetriser_w \
,Album_Fx_prolonger_u \
,Album_Fx_prolonger_v \
,Album_Fx_prolonger_w \
,Album_Fx_niveau_hors_album \
,Album_Fx__interpoler_bilineairement_ou_bicubiquement \
,Album_Fx__utiliser_l_interpolation_bilineaire \
) \
,gFFload_point_coordonnees_01(PAGE_COURANTE_D_UN_ALBUM(Album_Fx,w) \
,u \
,v \
,Album_Fx_periodiser_u \
,Album_Fx_periodiser_v \
,Album_Fx_symetriser_u \
,Album_Fx_symetriser_v \
,Album_Fx_prolonger_u \
,Album_Fx_prolonger_v \
,Album_Fx_niveau_hors_album \
,Album_Fx__interpoler_bilineairement_ou_bicubiquement \
,Album_Fx__utiliser_l_interpolation_bilineaire \
) \
) \
,Album_Fx_translateur \
) \
/* Definition de la fonction F (u,v,w). */ \
/* x */
#define Fy_Projector3D_1(u,v,w) \
AXPB(Album_Fy_amplificateur \
,COND(IL_FAUT(visualiser_une_variete_tridimensionnelle) \
,gFFAload_point_coordonnees_01(Album_Fy \
,u \
,v \
,w \
,Album_Fy_periodiser_u \
,Album_Fy_periodiser_v \
,Album_Fy_periodiser_w \
,Album_Fy_symetriser_u \
,Album_Fy_symetriser_v \
,Album_Fy_symetriser_w \
,Album_Fy_prolonger_u \
,Album_Fy_prolonger_v \
,Album_Fy_prolonger_w \
,Album_Fy_niveau_hors_album \
,Album_Fy__interpoler_bilineairement_ou_bicubiquement \
,Album_Fy__utiliser_l_interpolation_bilineaire \
) \
,gFFload_point_coordonnees_01(PAGE_COURANTE_D_UN_ALBUM(Album_Fy,w) \
,u \
,v \
,Album_Fy_periodiser_u \
,Album_Fy_periodiser_v \
,Album_Fy_symetriser_u \
,Album_Fy_symetriser_v \
,Album_Fy_prolonger_u \
,Album_Fy_prolonger_v \
,Album_Fy_niveau_hors_album \
,Album_Fy__interpoler_bilineairement_ou_bicubiquement \
,Album_Fy__utiliser_l_interpolation_bilineaire \
) \
) \
,Album_Fy_translateur \
) \
/* Definition de la fonction F (u,v,w). */ \
/* y */
#define Fz_Projector3D_1(u,v,w) \
AXPB(Album_Fz_amplificateur \
,COND(IL_FAUT(visualiser_une_variete_tridimensionnelle) \
,gFFAload_point_coordonnees_01(Album_Fz \
,u \
,v \
,w \
,Album_Fz_periodiser_u \
,Album_Fz_periodiser_v \
,Album_Fz_periodiser_w \
,Album_Fz_symetriser_u \
,Album_Fz_symetriser_v \
,Album_Fz_symetriser_w \
,Album_Fz_prolonger_u \
,Album_Fz_prolonger_v \
,Album_Fz_prolonger_w \
,Album_Fz_niveau_hors_album \
,Album_Fz__interpoler_bilineairement_ou_bicubiquement \
,Album_Fz__utiliser_l_interpolation_bilineaire \
) \
,gFFload_point_coordonnees_01(PAGE_COURANTE_D_UN_ALBUM(Album_Fz,w) \
,u \
,v \
,Album_Fz_periodiser_u \
,Album_Fz_periodiser_v \
,Album_Fz_symetriser_u \
,Album_Fz_symetriser_v \
,Album_Fz_prolonger_u \
,Album_Fz_prolonger_v \
,Album_Fz_niveau_hors_album \
,Album_Fz__interpoler_bilineairement_ou_bicubiquement \
,Album_Fz__utiliser_l_interpolation_bilineaire \
) \
) \
,Album_Fz_translateur \
) \
/* Definition de la fonction F (u,v,w). */ \
/* 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_Projector3D_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/project3D.11$K' (introduit le 20050628104044)... */