/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R O T A T I O N   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/RotProj3D.11$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20060602141127).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
@define   PRAGMA_CPP_____MODULE_NON_DERIVABLE

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V A L E U R S   I M P L I C I T E S   D E S   P A R A M E T R E S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   FAIRE_UNE_ROTATION_TRIDIMENSIONNELLE                                                                                          \
                    VRAI                                                                                                                \
                                        /* Faut-il faire une rotation tridimensionnelle ('VRAI') ou bien une transformation          */ \
                                        /* arbitraire ('FAUX') ce qui ouvre la porte a des 'IFS' tridimensionnelles...               */

#define   RAPPORT_DE_ZOOM                                                                                                               \
                    ABSENCE_D_EFFET_DE_ZOOM                                                                                             \
                                        /* Rapport de zoom (introduit le 20060603095209).                                            */
#define   ROTATION_OX_IMPLICITE                                                                                                         \
                    FZERO
#define   ROTATION_OY_IMPLICITE                                                                                                         \
                    FZERO
#define   ROTATION_OZ_IMPLICITE                                                                                                         \
                    FZERO
                                        /* Angles de rotation.                                                                       */
#define   TRANSLATION_OX_IMPLICITE                                                                                                      \
                    FZERO
#define   TRANSLATION_OY_IMPLICITE                                                                                                      \
                    FZERO
#define   TRANSLATION_OZ_IMPLICITE                                                                                                      \
                    FZERO
                                        /* Translation de l'origine.                                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/sequence.01.I"
                                        /* ATTENTION, on definit ainsi le symbole 'DERNIERE_IMAGE' qui ne sert a rien ici, puisque   */
                                        /* c'est en effet 'Zmax' qui joue ce role...                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R O T A T I O N   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  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_albumAFx),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_postfixeAFx),NOM_UNDEF_VIDE));
     DEFV(Int,INIT(premiere_imageAFx,PREMIERE_IMAGE));
     DEFV(Int,INIT(pas_des_imagesAFx,PAS_DES_IMAGES));
     DEFV(Int,INIT(nombre_de_chiffresAFx,NOMBRE_DE_CHIFFRES));
                                        /* Definition de l'album Argument 'Fx'...                                                    */
     DEFV(CHAR,INIC(POINTERc(nom_albumAFy),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_postfixeAFy),NOM_UNDEF_VIDE));
     DEFV(Int,INIT(premiere_imageAFy,PREMIERE_IMAGE));
     DEFV(Int,INIT(pas_des_imagesAFy,PAS_DES_IMAGES));
     DEFV(Int,INIT(nombre_de_chiffresAFy,NOMBRE_DE_CHIFFRES));
                                        /* Definition de l'album Argument 'Fy'...                                                    */
     DEFV(CHAR,INIC(POINTERc(nom_albumAFz),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_postfixeAFz),NOM_UNDEF_VIDE));
     DEFV(Int,INIT(premiere_imageAFz,PREMIERE_IMAGE));
     DEFV(Int,INIT(pas_des_imagesAFz,PAS_DES_IMAGES));
     DEFV(Int,INIT(nombre_de_chiffresAFz,NOMBRE_DE_CHIFFRES));
                                        /* Definition de l'album Argument 'Fz'...                                                    */
     DEFV(CHAR,INIC(POINTERc(nom_albumRFx),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_postfixeRFx),NOM_UNDEF_VIDE));
     DEFV(Int,INIT(premiere_imageRFx,PREMIERE_IMAGE));
     DEFV(Int,INIT(pas_des_imagesRFx,PAS_DES_IMAGES));
     DEFV(Int,INIT(nombre_de_chiffresRFx,NOMBRE_DE_CHIFFRES));
                                        /* Definition de l'album Resultat 'Fx'...                                                    */
     DEFV(CHAR,INIC(POINTERc(nom_albumRFy),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_postfixeRFy),NOM_UNDEF_VIDE));
     DEFV(Int,INIT(premiere_imageRFy,PREMIERE_IMAGE));
     DEFV(Int,INIT(pas_des_imagesRFy,PAS_DES_IMAGES));
     DEFV(Int,INIT(nombre_de_chiffresRFy,NOMBRE_DE_CHIFFRES));
                                        /* Definition de l'album Resultat 'Fy'...                                                    */
     DEFV(CHAR,INIC(POINTERc(nom_albumRFz),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_postfixeRFz),NOM_UNDEF_VIDE));
     DEFV(Int,INIT(premiere_imageRFz,PREMIERE_IMAGE));
     DEFV(Int,INIT(pas_des_imagesRFz,PAS_DES_IMAGES));
     DEFV(Int,INIT(nombre_de_chiffresRFz,NOMBRE_DE_CHIFFRES));
                                        /* Definition de l'album Resultat 'Fz'...                                                    */

     DEFV(Logical,INIT(faire_une_rotation_tridimensionnelle,FAIRE_UNE_ROTATION_TRIDIMENSIONNELLE));
                                        /* Faut-il faire une rotation tridimensionnelle ('VRAI') ou bien une transformation          */
                                        /* arbitraire ('FAUX') ce qui ouvre la porte a des 'IFS' tridimensionnelles...               */
     DEFV(Float,INIT(rapport_DE_ZOOM,RAPPORT_DE_ZOOM));
                                        /* Rapport de zoom (introduit le 20060603095209).                                            */
     DEFV(Float,INIT(angle_de_ROTATION_OX,ROTATION_OX_IMPLICITE));
     DEFV(Float,INIT(angle_de_ROTATION_OY,ROTATION_OY_IMPLICITE));
     DEFV(Float,INIT(angle_de_ROTATION_OZ,ROTATION_OZ_IMPLICITE));
                                        /* Angles de rotation.                                                                       */
     DEFV(Float,INIT(translation_OX,TRANSLATION_OX_IMPLICITE));
     DEFV(Float,INIT(translation_OY,TRANSLATION_OY_IMPLICITE));
     DEFV(Float,INIT(translation_OZ,TRANSLATION_OZ_IMPLICITE));
                                        /* Translation de l'origine.                                                                 */
     /*..............................................................................................................................*/
     INITIALISATION_TRANSFORMATION;
                                        /* Mise en place de la transformation neutre...                                              */

     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(
                         GET_ARGUMENT_C("albumAFx=""AFx=",nom_albumAFx);
                         GET_ARGUMENT_C("postfixeAFx=",nom_postfixeAFx);
                         GET_ARGUMENT_I("premiereAFx=",premiere_imageAFx);
                         GET_ARGUMENT_I("pasAFx=",pas_des_imagesAFx);
                         GET_ARGUMENT_I("chiffresAFx=",nombre_de_chiffresAFx);

                         GET_ARGUMENT_C("albumAFy=""AFy=",nom_albumAFy);
                         GET_ARGUMENT_C("postfixeAFy=",nom_postfixeAFy);
                         GET_ARGUMENT_I("premiereAFy=",premiere_imageAFy);
                         GET_ARGUMENT_I("pasAFy=",pas_des_imagesAFy);
                         GET_ARGUMENT_I("chiffresAFy=",nombre_de_chiffresAFy);

                         GET_ARGUMENT_C("albumAFz=""AFz=",nom_albumAFz);
                         GET_ARGUMENT_C("postfixeAFz=",nom_postfixeAFz);
                         GET_ARGUMENT_I("premiereAFz=",premiere_imageAFz);
                         GET_ARGUMENT_I("pasAFz=",pas_des_imagesAFz);
                         GET_ARGUMENT_I("chiffresAFz=",nombre_de_chiffresAFz);

                         GET_ARGUMENT_C("albumRFx=""RFx=",nom_albumRFx);
                         GET_ARGUMENT_C("postfixeRFx=",nom_postfixeRFx);
                         GET_ARGUMENT_I("premiereRFx=",premiere_imageRFx);
                         GET_ARGUMENT_I("pasRFx=",pas_des_imagesRFx);
                         GET_ARGUMENT_I("chiffresRFx=",nombre_de_chiffresRFx);

                         GET_ARGUMENT_C("albumRFy=""RFy=",nom_albumRFy);
                         GET_ARGUMENT_C("postfixeRFy=",nom_postfixeRFy);
                         GET_ARGUMENT_I("premiereRFy=",premiere_imageRFy);
                         GET_ARGUMENT_I("pasRFy=",pas_des_imagesRFy);
                         GET_ARGUMENT_I("chiffresRFy=",nombre_de_chiffresRFy);

                         GET_ARGUMENT_C("albumRFz=""RFz=",nom_albumRFz);
                         GET_ARGUMENT_C("postfixeRFz=",nom_postfixeRFz);
                         GET_ARGUMENT_I("premiereRFz=",premiere_imageRFz);
                         GET_ARGUMENT_I("pasRFz=",pas_des_imagesRFz);
                         GET_ARGUMENT_I("chiffresRFz=",nombre_de_chiffresRFz);

                         GET_ARGUMENT_L("rotation=",faire_une_rotation_tridimensionnelle);

                         GET_ARGUMENT_F("ZOOM=",rapport_DE_ZOOM);

                         PROCESS_ARGUMENT_F("ROTATION_OX=",angle_de_ROTATION_OX
                                           ,BLOC(VIDE;)
                                           ,BLOC(EGAL(vecteurs_____ordre_de_la_ROTATION_0X,nombre_d_arguments_recuperes);
                                                 )
                                            );
                         PROCESS_ARGUMENT_F("ROTATION_OY=",angle_de_ROTATION_OY
                                           ,BLOC(VIDE;)
                                           ,BLOC(EGAL(vecteurs_____ordre_de_la_ROTATION_0Y,nombre_d_arguments_recuperes);
                                                 )
                                            );
                         PROCESS_ARGUMENT_F("ROTATION_OZ=",angle_de_ROTATION_OZ
                                           ,BLOC(VIDE;)
                                           ,BLOC(EGAL(vecteurs_____ordre_de_la_ROTATION_0Z,nombre_d_arguments_recuperes);
                                                 )
                                            );

                         GET_ARGUMENT_F("a11=",ASD2(vecteurs_____matrix_3D,cx,cx));
                         GET_ARGUMENT_F("a12=",ASD2(vecteurs_____matrix_3D,cx,cy));
                         GET_ARGUMENT_F("a13=",ASD2(vecteurs_____matrix_3D,cx,cz));

                         GET_ARGUMENT_F("a21=",ASD2(vecteurs_____matrix_3D,cy,cx));
                         GET_ARGUMENT_F("a22=",ASD2(vecteurs_____matrix_3D,cy,cy));
                         GET_ARGUMENT_F("a23=",ASD2(vecteurs_____matrix_3D,cy,cz));

                         GET_ARGUMENT_F("a31=",ASD2(vecteurs_____matrix_3D,cz,cx));
                         GET_ARGUMENT_F("a32=",ASD2(vecteurs_____matrix_3D,cz,cy));
                         GET_ARGUMENT_F("a33=",ASD2(vecteurs_____matrix_3D,cz,cz));

                         GET_ARGUMENT_F("tX=""TRANSLATION_OX=",translation_OX);
                         GET_ARGUMENT_F("tY=""TRANSLATION_OY=",translation_OY);
                         GET_ARGUMENT_F("tZ=""TRANSLATION_OZ=",translation_OZ);
                         )
                    );

     begin_nouveau_block
          Bblock
          BDEFV(albumF,Album_AFx);
          BDEFV(albumF,Album_AFy);
          BDEFV(albumF,Album_AFz);
                                        /* Definition des trois projections Arguments.                                               */
          BDEFV(albumF,Album_RFx);
          BDEFV(albumF,Album_RFy);
          BDEFV(albumF,Album_RFz);
                                        /* Definition des trois projections Resultats.                                               */

          CALi(dAloadF_album(Album_AFx
                            ,nom_albumAFx
                            ,nom_postfixeAFx
                            ,premiere_imageAFx
                            ,pas_des_imagesAFx
                            ,nombre_de_chiffresAFx
                            ,FAUX
                            ,UNDEF
                            ,FAUX
                             )
               );
          CALi(dAloadF_album(Album_AFy
                            ,nom_albumAFy
                            ,nom_postfixeAFy
                            ,premiere_imageAFy
                            ,pas_des_imagesAFy
                            ,nombre_de_chiffresAFy
                            ,FAUX
                            ,UNDEF
                            ,FAUX
                             )
               );
          CALi(dAloadF_album(Album_AFz
                            ,nom_albumAFz
                            ,nom_postfixeAFz
                            ,premiere_imageAFz
                            ,pas_des_imagesAFz
                            ,nombre_de_chiffresAFz
                            ,FAUX
                            ,UNDEF
                            ,FAUX
                             )
               );
                                        /* Chargement des trois projections Arguments.                                               */
                                        /*                                                                                           */
                                        /* L'argument 'Inv' ('FAUX') a ete introduit le 20091125135416...                            */

          Test(IL_FAUT(faire_une_rotation_tridimensionnelle))
               Bblock
               T_ZOOM(rapport_DE_ZOOM);
                                        /* Mise en place du zoom (introduit le 20060603095209).                                      */
               GENERATION_DE_LA_MATRICE_DE_ROTATION(vecteurs_____ordre_de_la_ROTATION_0X
                                                   ,T_ROTATION_X(angle_de_ROTATION_OX);
                                                   ,vecteurs_____ordre_de_la_ROTATION_0Y
                                                   ,T_ROTATION_Y(angle_de_ROTATION_OY);
                                                   ,vecteurs_____ordre_de_la_ROTATION_0Z
                                                   ,T_ROTATION_Z(angle_de_ROTATION_OZ);
                                                    );
                                        /* Mise en place du produit des trois rotations relatives aux trois axes.                    */
               Eblock
          ATes
               Bblock
                                        /* Dans le cas ou la transformation est arbitraire, les coefficients de la matrice sont      */
                                        /* supposes corrects apres leur entree (totale ou partielle...).                             */
               Eblock
          ETes

          begin_album
               Bblock
               AstoreF_point(TRANSFORMATION_GEOMETRIQUE_3D_Fx(AloadF_point(Album_AFx,X,Y,Z)
                                                             ,AloadF_point(Album_AFy,X,Y,Z)
                                                             ,AloadF_point(Album_AFz,X,Y,Z)
                                                             ,translation_OX
                                                              )
                            ,Album_RFx
                            ,X
                            ,Y
                            ,Z
                             );
               AstoreF_point(TRANSFORMATION_GEOMETRIQUE_3D_Fy(AloadF_point(Album_AFx,X,Y,Z)
                                                             ,AloadF_point(Album_AFy,X,Y,Z)
                                                             ,AloadF_point(Album_AFz,X,Y,Z)
                                                             ,translation_OY
                                                              )
                            ,Album_RFy
                            ,X
                            ,Y
                            ,Z
                             );
               AstoreF_point(TRANSFORMATION_GEOMETRIQUE_3D_Fz(AloadF_point(Album_AFx,X,Y,Z)
                                                             ,AloadF_point(Album_AFy,X,Y,Z)
                                                             ,AloadF_point(Album_AFz,X,Y,Z)
                                                             ,translation_OZ
                                                              )
                            ,Album_RFz
                            ,X
                            ,Y
                            ,Z
                             );
                                        /* Rotation des trois projections...                                                         */
               Eblock
          end_album

          CALi(dAupdateF_album(nom_albumRFx
                              ,nom_postfixeRFx
                              ,premiere_imageRFx
                              ,pas_des_imagesRFx
                              ,Album_RFx
                              ,nombre_de_chiffresRFx
                              ,FAUX
                               )
               );
          CALi(dAupdateF_album(nom_albumRFy
                              ,nom_postfixeRFy
                              ,premiere_imageRFy
                              ,pas_des_imagesRFy
                              ,Album_RFy
                              ,nombre_de_chiffresRFy
                              ,FAUX
                               )
               );
          CALi(dAupdateF_album(nom_albumRFz
                              ,nom_postfixeRFz
                              ,premiere_imageRFz
                              ,pas_des_imagesRFz
                              ,Album_RFz
                              ,nombre_de_chiffresRFz
                              ,FAUX
                               )
               );
                                        /* Rangement des trois projections Resultats.                                                */
                                        /*                                                                                           */
                                        /* L'argument 'Inv' ('FAUX') a ete introduit le 20100624091741...                            */

          EDEFV(albumF,Album_RFz);
          EDEFV(albumF,Album_RFy);
          EDEFV(albumF,Album_RFx);
                                        /* Definition des trois projections Resultats.                                               */
          EDEFV(albumF,Album_AFz);
          EDEFV(albumF,Album_AFy);
          EDEFV(albumF,Album_AFx);
                                        /* Definition des trois projections Arguments.                                               */
          Eblock
     end_nouveau_block

     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.