/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T E S T   D E   L A   P R O J E C T I O N   P L A N E   Q U E L C O N Q U E  :                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xtKi/projector.01$K' :                                                                                         */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1989??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   INTERSECTE(Xp,Yp,Zp)                                                                                                          \
                    Bblock                                                                                                              \
                    INITIALISATION_POINT_3D(point,_____cNORMALISE_OX(Xp),_____cNORMALISE_OY(Yp),_____cNORMALISE_OZ(Zp));                \
                                        /* Le point a projeter est symetrique de l'observateur par rapport au centre du              */ \
                                        /* plan de projection.                                                                       */ \
                    PROJECTION_PLANE_QUELCONQUE(intersection,point,plan,observateur);                                                   \
                                        /* Projection : on doit donc trouver le centre de l'ecran...                                 */ \
                    CAL2(Prin3("point = (%d,%d,%d)\n"                                                                                   \
                              ,PINTE(Xp)                                                                                                \
                              ,PINTE(Yp)                                                                                                \
                              ,PINTE(Zp)                                                                                                \
                               )                                                                                                        \
                         );                                                                                                             \
                    CAL2(Prin3(" --> intersection = (%d,%d,%d)"                                                                         \
                              ,_cDENORMALISE_OX(ASD1(intersection,x))                                                                   \
                              ,_cDENORMALISE_OY(ASD1(intersection,y))                                                                   \
                              ,_cDENORMALISE_OZ(ASD1(intersection,z))                                                                   \
                               )                                                                                                        \
                         );                                                                                                             \
                    Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T E S T   D E   L A   P R O J E C T I O N   P L A N E   Q U E L C O N Q U E  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(pointF_3D,observateur);
                                        /* Definition de la position de l'observateur.                                               */
     DEFV(pointF_3D,point);
                                        /* Point courant a projeter.                                                                 */
     DEFV(pointF_3D,intersection);
                                        /* Point d'intersection recherche.                                                           */
     DEFV(plan_3D,plan);
                                        /* Plan de projection.                                                                       */
     /*..............................................................................................................................*/
     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(VIDE;)
                    );

     SET_ECHANTILLONNAGE(PasX,PasY);
     EGAL(ASD1(plan,pA),FZERO);
     EGAL(ASD1(plan,pB),FZERO);
     EGAL(ASD1(plan,pC),FU);
     EGAL(ASD1(plan,pD),FZERO);
                                        /* Le plan de projection est le plan (OX,OY), soit Z=0.                                      */
     INITIALISATION_POINT_3D(observateur,_____cNORMALISE_OX(Xmin),_____cNORMALISE_OY(Ymin),_____cNORMALISE_OZ(Zmax));
                                        /* L'observateur est sur OZ au point +Zmax.                                                  */
     INTERSECTE(Xmax,Ymax,NEGA(Zmax));
                                        /* Projection : on doit donc trouver le centre de l'ecran...                                 */
     INTERSECTE(Xmin,Ymin,NEGA(Zmax));
                                        /* Projection...                                                                             */
     INTERSECTE(INFINI,INFINI,ZERO);
                                        /* Projection...                                                                             */
     INTERSECTE(MOIT(MOINS_L_INFINI),MOIT(MOINS_L_INFINI),ZERO);
                                        /* Projection. On notera le 'MOIT(...)' destine a eviter le message :                        */
                                        /*                                                                                           */
                                        /*                  Floating point exception                                                 */
                                        /*                                                                                           */

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.