/*************************************************************************************************************************************/ /* */ /* 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 B I D I M E N S I O N N E L : */ /* */ /* */ /* Author of '$xrs/project2D.11$I' : */ /* */ /* Jean-Francois Colonna (LACTAMME, 20041107112321). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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/project2D.11$K') : */ /* */ /* Le projector bidimensionnel 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) = A .ImageX(u,v) + T */ /* x x x */ /* */ /* F (u,v) = A .ImageY(u,v) + T */ /* y y y */ /* */ /* F (u,v) = A .ImageZ(u,v) + T */ /* z z z */ /* */ /* (ou 'Image?(u,v)' sont des images flottantes indexees */ /* par (u,v) -coordonnees flottantes {Xf,Yf} respectivement- */ /* a l'aide d'une procedure d'interpolation bicubique) */ /* */ /* avec : */ /* */ /* u E [ 0 , 1 ] (--O--> Xf) */ /* */ /* v E [ 0 , 1 ] (--O--> Yf) */ /* */ /* */ /*************************************************************************************************************************************/ /* 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... */ /* Nota : les noms '*_Projector_1' ont ete changes en '*_Projector_2' le 20050619170106, */ /* puis en '*_Projector2D_1' le 20050620102241... */ #define Fx_Projector2D_1(u,v) \ AXPB(Image_Fx_amplificateur \ ,gFFload_point_coordonnees_01(Image_Fx \ ,u \ ,v \ ,Image_Fx_periodiser_u \ ,Image_Fx_periodiser_v \ ,Image_Fx_symetriser_u \ ,Image_Fx_symetriser_v \ ,Image_Fx_prolonger_u \ ,Image_Fx_prolonger_v \ ,Image_Fx_niveau_hors_image \ ,Image_Fx__interpoler_bilineairement_ou_bicubiquement \ ,Image_Fx__utiliser_l_interpolation_bilineaire \ ) \ ,Image_Fx_translateur \ ) \ /* Definition de la fonction F (u,v). */ \ /* x */ \ /* */ \ /* Le 20041113111928, j'ai voulu remplacer {u,v} par {u_NORMALISEE,v_NORMALISEE}, mais */ \ /* cela ne marche evidemment pas car, en effet, on veut pouvoir n'exploiter qu'une partie */ \ /* d'une image 'Image_F?'. C'est par exemple le cas dans 'v $xiirs/.PROJ.11.1.$U Mu=0.5' */ \ /* et une 'NORM(...)' sur {u,v} ferait perdre cette possibilite... */ #define Fy_Projector2D_1(u,v) \ AXPB(Image_Fy_amplificateur \ ,gFFload_point_coordonnees_01(Image_Fy \ ,u \ ,v \ ,Image_Fy_periodiser_u \ ,Image_Fy_periodiser_v \ ,Image_Fy_symetriser_u \ ,Image_Fy_symetriser_v \ ,Image_Fy_prolonger_u \ ,Image_Fy_prolonger_v \ ,Image_Fy_niveau_hors_image \ ,Image_Fy__interpoler_bilineairement_ou_bicubiquement \ ,Image_Fy__utiliser_l_interpolation_bilineaire \ ) \ ,Image_Fy_translateur \ ) \ /* Definition de la fonction F (u,v). */ \ /* y */ \ /* */ \ /* Le 20041113111928, j'ai voulu remplacer {u,v} par {u_NORMALISEE,v_NORMALISEE}, mais */ \ /* cela ne marche evidemment pas car, en effet, on veut pouvoir n'exploiter qu'une partie */ \ /* d'une image 'Image_F?'. C'est par exemple le cas dans 'v $xiirs/.PROJ.11.1.$U Mu=0.5' */ \ /* et une 'NORM(...)' sur {u,v} ferait perdre cette possibilite... */ #define Fz_Projector2D_1(u,v) \ AXPB(Image_Fz_amplificateur \ ,gFFload_point_coordonnees_01(Image_Fz \ ,u \ ,v \ ,Image_Fz_periodiser_u \ ,Image_Fz_periodiser_v \ ,Image_Fz_symetriser_u \ ,Image_Fz_symetriser_v \ ,Image_Fz_prolonger_u \ ,Image_Fz_prolonger_v \ ,Image_Fz_niveau_hors_image \ ,Image_Fz__interpoler_bilineairement_ou_bicubiquement \ ,Image_Fz__utiliser_l_interpolation_bilineaire \ ) \ ,Image_Fz_translateur \ ) \ /* Definition de la fonction F (u,v). */ \ /* z */ \ /* */ \ /* Le 20041113111928, j'ai voulu remplacer {u,v} par {u_NORMALISEE,v_NORMALISEE}, mais */ \ /* cela ne marche evidemment pas car, en effet, on veut pouvoir n'exploiter qu'une partie */ \ /* d'une image 'Image_F?'. C'est par exemple le cas dans 'v $xiirs/.PROJ.11.1.$U Mu=0.5' */ \ /* et une 'NORM(...)' sur {u,v} ferait perdre cette possibilite... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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_Projector2D_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' (introduit le 20050203103720)... */