/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R S E C T I O N   D E   D E U X   P S E U D O - P R O J E C T I O N S  :                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrs/intersection3D.11$K' :                                                                                     */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20200731101812).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE
#include  image_image_IMAGESF_EXT

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   EPSILON_DISTANCE                                                                                                              \
                    tgEPSILON                                                                                                           \
                                        /* Definition de l'epsilon de detection d'intersection.                                      */

#define   PONDERATION_MOYE                                                                                                              \
                    FU
#define   PONDERATION_MIN2                                                                                                              \
                    FZERO
#define   PONDERATION_MAX2                                                                                                              \
                    FZERO
#define   PONDERATION_SE12                                                                                                              \
                    FZERO
#define   PONDERATION_SE22                                                                                                              \
                    FZERO
                                        /* Definition des ponderations de selection du mode de calcul des coordonnees des points     */
                                        /* d'intersection.                                                                           */
                                        /*                                                                                           */
                                        /* On notera les selecteurs 'SE12(...)' et 'SE22(...)' qui permettent respectivement de      */
                                        /* conserver les coordonnees originales des premiere et deuxieme pseudo-projections...       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PseudoProjection_A1X                                                                                                          \
                    IFmageA1
#define   PseudoProjection_A1Y                                                                                                          \
                    IFmageA2
#define   PseudoProjection_A1Z                                                                                                          \
                    IFmageA3

#define   PseudoProjection_A2X                                                                                                          \
                    IFmageA4
#define   PseudoProjection_A2Y                                                                                                          \
                    IFmageA5
#define   PseudoProjection_A2Z                                                                                                          \
                    IFmageA6

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R S E C T I O N   D E   D E U X   P S E U D O - P R O J E C T I O N S  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_PseudoProjection_A1X),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_PseudoProjection_A1Y),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_PseudoProjection_A1Z),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_PseudoProjection_A2X),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_PseudoProjection_A2Y),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_PseudoProjection_A2Z),NOM_PIPE));

     DEFV(Float,INIT(epsilon_distance,EPSILON_DISTANCE));
                                        /* Definition de l'epsilon de detection d'intersection.                                      */

     DEFV(Float,INIT(ponderation_MOYE,PONDERATION_MOYE));
     DEFV(Float,INIT(ponderation_MIN2,PONDERATION_MIN2));
     DEFV(Float,INIT(ponderation_MAX2,PONDERATION_MAX2));
     DEFV(Float,INIT(ponderation_SE12,PONDERATION_SE12));
     DEFV(Float,INIT(ponderation_SE22,PONDERATION_SE22));
                                        /* Definition des ponderations de selection du mode de calcul des coordonnees des points     */
                                        /* d'intersection.                                                                           */
                                        /*                                                                                           */
                                        /* On notera les selecteurs 'SE12(...)' et 'SE22(...)' qui permettent respectivement de      */
                                        /* conserver les coordonnees originales des premiere et deuxieme pseudo-projections...       */
     /*..............................................................................................................................*/
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imagePP1X=""PP1X=",nom_PseudoProjection_A1X);
                         GET_ARGUMENT_C("imagePP1Y=""PP1Y=",nom_PseudoProjection_A1Y);
                         GET_ARGUMENT_C("imagePP1Z=""PP1Z=",nom_PseudoProjection_A1Z);
                         GET_ARGUMENT_C("imagePP2X=""PP2X=",nom_PseudoProjection_A2X);
                         GET_ARGUMENT_C("imagePP2Y=""PP2Y=",nom_PseudoProjection_A2Y);
                         GET_ARGUMENT_C("imagePP2Z=""PP2Z=",nom_PseudoProjection_A2Z);

                         GET_ARGUMENT_F("epsilon=""e=",epsilon_distance);

                         GET_ARGUMENT_F("ponderation_MOYE=""pMOYE=",ponderation_MOYE);
                         GET_ARGUMENT_F("ponderation_MIN2=""pMIN2=",ponderation_MIN2);
                         GET_ARGUMENT_F("ponderation_MAX2=""pMAX2=",ponderation_MAX2);
                         GET_ARGUMENT_F("ponderation_SE12=""pSE12=",ponderation_SE12);
                         GET_ARGUMENT_F("ponderation_SE22=""pSE22=",ponderation_SE22);
                         )
                    );

     Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(PseudoProjection_A1X,nom_PseudoProjection_A1X))))
          Bblock
          Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(PseudoProjection_A1Y,nom_PseudoProjection_A1Y))))
               Bblock
               Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(PseudoProjection_A1Z,nom_PseudoProjection_A1Z))))
                    Bblock
                    Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(PseudoProjection_A2X,nom_PseudoProjection_A2X))))
                         Bblock
                         Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(PseudoProjection_A2Y,nom_PseudoProjection_A2Y))))
                              Bblock
                              Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(PseudoProjection_A2Z,nom_PseudoProjection_A2Z))))
                                   Bblock
                                   begin_image_AvecEditionProgression
                                        /* L'edition de la progression a ete introduite le 20200731141024 car, en effet, etant       */
                                        /* donnes les deux 'begin_image' imbriques, le processus promet d'etre lent a partir du      */
                                        /* format 'Pal'...                                                                           */
                                        Bblock
                                        DEFV(Float,INIT(coordonnee_A1X,loadF_point(PseudoProjection_A1X,X,Y)));
                                        DEFV(Float,INIT(coordonnee_A1Y,loadF_point(PseudoProjection_A1Y,X,Y)));
                                        DEFV(Float,INIT(coordonnee_A1Z,loadF_point(PseudoProjection_A1Z,X,Y)));
                                        /* Point courant de la premiere pseudo-projection.                                           */

                                        begin_image
                                             Bblock
                                             DEFV(Float,INIT(coordonnee_A2X,loadF_point(PseudoProjection_A2X,X,Y)));

                                             Test(IFLE(SOUA(coordonnee_A1X,coordonnee_A2X),epsilon_distance))
                                        /* Optimisation introduite le 20200803155516 basee sur le fait que la distance entre deux    */
                                        /* points projetee sur l'axe 'OX' est inferieure ou egale a la distance euclidienne entre    */
                                        /* ces deux points (le temps de calcul a effectivement ete divise par 3...).                 */
                                                  Bblock
                                                  DEFV(Float,INIT(coordonnee_A2Y,loadF_point(PseudoProjection_A2Y,X,Y)));

                                                  Test(IFLE(SOUA(coordonnee_A1Y,coordonnee_A2Y),epsilon_distance))
                                        /* Optimisation introduite le 20200803155516 basee sur le fait que la distance entre deux    */
                                        /* points projetee sur l'axe 'OY' est inferieure ou egale a la distance euclidienne entre    */
                                        /* ces deux points (le temps de calcul a effectivement ete divise par 3...).                 */
                                                       Bblock
                                                       DEFV(Float,INIT(coordonnee_A2Z,loadF_point(PseudoProjection_A2Z,X,Y)));

                                                       Test(IFLE(SOUA(coordonnee_A1Z,coordonnee_A2Z),epsilon_distance))
                                        /* Optimisation introduite le 20200803155516 basee sur le fait que la distance entre deux    */
                                        /* points projetee sur l'axe 'OZ' est inferieure ou egale a la distance euclidienne entre    */
                                        /* ces deux points (le temps de calcul a effectivement ete divise par 3...).                 */
                                                            Bblock
                                                            DEFV(Float,INIT(distance_12
                                                                           ,RdisF3D(coordonnee_A1X,coordonnee_A1Y,coordonnee_A1Z
                                                                                   ,coordonnee_A2X,coordonnee_A2Y,coordonnee_A2Z
                                                                                    )
                                                                            )
                                                                 );
                                        /* Distance courante entre les deux pseudo-projections...                                    */

                                                            Test(IFLE(distance_12,epsilon_distance))
                                                                 Bblock
                                        /* Cas ou les deux points sont proches l'un de l'autre : il y a intersection...              */
                                                                 CAL2(Prin4("X=%+.^^^ Y=%+.^^^ Z=%+.^^^ DISTANCE=%+.^^^\n"
                                                                           ,LIZ5(ponderation_MOYE,MOYE(coordonnee_A1X,coordonnee_A2X)
                                                                                ,ponderation_MIN2,MIN2(coordonnee_A1X,coordonnee_A2X)
                                                                                ,ponderation_MAX2,MAX2(coordonnee_A1X,coordonnee_A2X)
                                                                                ,ponderation_SE12,SE12(coordonnee_A1X,coordonnee_A2X)
                                                                                ,ponderation_SE22,SE22(coordonnee_A1X,coordonnee_A2X)
                                                                                 )
                                                                           ,LIZ5(ponderation_MOYE,MOYE(coordonnee_A1Y,coordonnee_A2Y)
                                                                                ,ponderation_MIN2,MIN2(coordonnee_A1Y,coordonnee_A2Y)
                                                                                ,ponderation_MAX2,MAX2(coordonnee_A1Y,coordonnee_A2Y)
                                                                                ,ponderation_SE12,SE12(coordonnee_A1Y,coordonnee_A2Y)
                                                                                ,ponderation_SE22,SE22(coordonnee_A1Y,coordonnee_A2Y)
                                                                                 )
                                                                           ,LIZ5(ponderation_MOYE,MOYE(coordonnee_A1Z,coordonnee_A2Z)
                                                                                ,ponderation_MIN2,MIN2(coordonnee_A1Z,coordonnee_A2Z)
                                                                                ,ponderation_MAX2,MAX2(coordonnee_A1Z,coordonnee_A2Z)
                                                                                ,ponderation_SE12,SE12(coordonnee_A1Z,coordonnee_A2Z)
                                                                                ,ponderation_SE22,SE22(coordonnee_A1Z,coordonnee_A2Z)
                                                                                 )
                                                                           ,distance_12
                                                                            )
                                                                      );
                                                                 Eblock
                                                            ATes
                                                                 Bblock
                                                                 Eblock
                                                            ETes
                                                            Eblock
                                                       ATes
                                                            Bblock
                                                            Eblock
                                                       ETes
                                                       Eblock
                                                  ATes
                                                       Bblock
                                                       Eblock
                                                  ETes
                                                  Eblock
                                             ATes
                                                  Bblock
                                                  Eblock
                                             ETes
                                             Eblock
                                        end_image
                                        Eblock
                                   end_image_AvecEditionProgression
                                   Eblock
                              ATes
                                   Bblock
                                   Test__CODE_ERREUR__ERREUR07;
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                              Test__CODE_ERREUR__ERREUR07;
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Test__CODE_ERREUR__ERREUR07;
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Test__CODE_ERREUR__ERREUR07;
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Test__CODE_ERREUR__ERREUR07;
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Test__CODE_ERREUR__ERREUR07;
          Eblock
     ETes

     RETU_Commande;
     Eblock
ECommande



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