/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R O T A T I O N   D E   V E C T E U R S   S U I V A N T   L E S   A N G L E S   D ' E U L E R  :                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*             *     * * * * * *   * * * * * *   * * * * * *   *         *   * * * * * *   *   * * * * * *   *         *             */
/*                        *             *        *             **        *        *        *   *         *   **        *             */
/*            * *         *             *        *             * *       *        *        *   *         *   * *       *             */
/*                        *             *        *             *  *      *        *        *   *         *   *  *      *             */
/*           *   *        *             *        *             *   *     *        *        *   *         *   *   *     *             */
/*                        *             *        * * *         *    *    *        *        *   *         *   *    *    *             */
/*          * * * *       *             *        *             *     *   *        *        *   *         *   *     *   *             */
/*                        *             *        *             *      *  *        *        *   *         *   *      *  *             */
/*         *       *      *             *        *             *       * *        *        *   *         *   *       * *             */
/*                        *             *        *             *        **        *        *   *         *   *        **             */
/*        *         *     *             *        * * * * * *   *         *        *        *   * * * * * *   *         *             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        ATTENTION :                                                                                                                */
/*                                                                                                                                   */
/*                    Lors de l'utilisation des angles                                                                               */
/*                  d'Euler, la rotation inverse de celle                                                                            */
/*                  qui est definie par {+theta,+psi,+phi}                                                                           */
/*                  N'EST PAS celle qui est definie par                                                                              */
/*                  {-theta,-psi,-phi} !                                                                                             */
/*                                                                                                                                   */
/*                    Cela peut se verifier aisement en                                                                              */
/*                  generant deux triplets de type {theta,psi,phi}                                                                   */
/*                  grace a :                                                                                                        */
/*                                                                                                                                   */
/*                                      $xrv/Car_Euler.01$X $PaRaMeTrEs         directe=VRAI                                         */
/*                                                                                                                                   */
/*                  donnant {Dtheta,Dpsi,Dphi} et :                                                                                  */
/*                                                                                                                                   */
/*                                      $xrv/Car_Euler.01$X $PaRaMeTrEs         directe=FAUX                                         */
/*                                                                                                                                   */
/*                  donnant {Itheta,Ipsi,Iphi} avec :                                                                                */
/*                                                                                                                                   */
/*                                      set                 PaRaMeTrEs="$K_VIDE"                                                     */
/*                                      set                 PaRaMeTrEs="$PaRaMeTrEs""ne=1"                                           */
/*                                      set                 PaRaMeTrEs="$PaRaMeTrEs"" LISTE_V1X=... LISTE_V1Y=... LISTE_V1Z=..."     */
/*                                      set                 PaRaMeTrEs="$PaRaMeTrEs"" LISTE_V2X=... LISTE_V2Y=... LISTE_V2Z=..."     */
/*                                                                                                                                   */
/*                  et successivement :                                                                                              */
/*                                                                                                                                   */
/*                                      set                 PaRaMeTrEs="$PaRaMeTrEs"" pTHETA=1 pPSI=0 pPHI=0"                        */
/*                                      set                 PaRaMeTrEs="$PaRaMeTrEs"" pTHETA=0 pPSI=1 pPHI=0"                        */
/*                                      set                 PaRaMeTrEs="$PaRaMeTrEs"" pTHETA=0 pPSI=0 pPHI=1"                        */
/*                                                                                                                                   */
/*                  Enfin, on applique {Dtheta,Dpsi,Dphi} sur un                                                                     */
/*                  vecteur arbitraire {X1,Y1,Z1} ce qui donne                                                                       */
/*                  un vecteur {X2,Y2,Z2}, sur lequel on applique                                                                    */
/*                  {Itheta,Ipsi,Iphi} ce qui redonne {X1,Y1,Z1}                                                                     */
/*                  ('v $xtz/Rot_Euler.01$Z').                                                                                       */
/*                                                                                                                                   */
/*                    On notera bien qu'alors {Dtheta,Dpsi,Dphi}                                                                     */
/*                  et {Itheta,Ipsi,Iphi} n'ont pas de liens                                                                         */
/*                  directs entre-eux ('v $ximD/definit.1$DEF 20030630122915').                                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrv/Rot_Euler.01$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20030630103416).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   PONDERATION_X_IMPLICITE                                                                                                       \
                    FZERO
#define   PONDERATION_Y_IMPLICITE                                                                                                       \
                    FZERO
#define   PONDERATION_Z_IMPLICITE                                                                                                       \
                    FZERO
                                        /* Ponderation de selection des coordonnees apres rotation.                                  */
                                        /*                                                                                           */
                                        /* Le 20030703105407, le parametre 'PONDERATION_X_IMPLICITE' est passe de la valeur          */
                                        /* 'FU' a 'FZERO' par symetrie avec les autres programmes...                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   F I C H I E R S  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/ARITHMET.1d.I"
                                        /* Passage a l'allocation dynamique le 20060214182609...                                     */
#include  xrv/ARITHMET.21.I"
#include  xrv/champs_5.41.I"

#define   VX_IMPLICITE                                                                                                                  \
                    FU
#define   VY_IMPLICITE                                                                                                                  \
                    FZERO
#define   VZ_IMPLICITE                                                                                                                  \
                    FZERO

gGENERATION_D_UN_FICHIER(fichier_LISTE_VX,liste_initiale_des_VX);
gGENERATION_D_UN_FICHIER(fichier_LISTE_VY,liste_initiale_des_VY);
gGENERATION_D_UN_FICHIER(fichier_LISTE_VZ,liste_initiale_des_VZ);
                                        /* Definition en memoire des fichiers definissant le vecteur 'V'.                            */

#define   ELEMENT_DU_FICHIER_LISTE_VX(index)                                                                                            \
                    gELEMENT_DU_FICHIER(liste_initiale_des_VX,index)
#define   ELEMENT_DU_FICHIER_LISTE_VY(index)                                                                                            \
                    gELEMENT_DU_FICHIER(liste_initiale_des_VY,index)
#define   ELEMENT_DU_FICHIER_LISTE_VZ(index)                                                                                            \
                    gELEMENT_DU_FICHIER(liste_initiale_des_VZ,index)
                                        /* Acces a un element courant des fichiers definissant le vecteur 'V'.                       */

#define   THETA_IMPLICITE                                                                                                               \
                    FZERO
#define   PSI__IMPLICITE                                                                                                                \
                    FZERO
#define   PHI__IMPLICITE                                                                                                                \
                    FZERO

gGENERATION_D_UN_FICHIER(fichier_LISTE_THETA,liste_initiale_des_THETA);
gGENERATION_D_UN_FICHIER(fichier_LISTE__PSI,liste_initiale_des__PSI);
gGENERATION_D_UN_FICHIER(fichier_LISTE__PHI,liste_initiale_des__PHI);
                                        /* Definition en memoire des fichiers definissant les angles d'Euler.                        */

#define   ELEMENT_DU_FICHIER_LISTE_THETA(index)                                                                                         \
                    gELEMENT_DU_FICHIER(liste_initiale_des_THETA,index)
#define   ELEMENT_DU_FICHIER_LISTE__PSI(index)                                                                                          \
                    gELEMENT_DU_FICHIER(liste_initiale_des__PSI,index)
#define   ELEMENT_DU_FICHIER_LISTE__PHI(index)                                                                                          \
                    gELEMENT_DU_FICHIER(liste_initiale_des__PHI,index)
                                        /* Acces a un element courant des fichiers definissant les angles d'Euler.                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R O T A T I O N   D E   V E C T E U R S   S U I V A N T   L E S   A N G L E S   D ' E U L E R  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
#include  xrv/ARITHMET.22.I"
#include  xci/valeurs.03.I"

     DEFV(Float,INIT(ponderation_X,PONDERATION_X_IMPLICITE));
     DEFV(Float,INIT(ponderation_Y,PONDERATION_Y_IMPLICITE));
     DEFV(Float,INIT(ponderation_Z,PONDERATION_Z_IMPLICITE));
                                        /* Ponderation de selection des coordonnees apres rotation.                                  */
     /*..............................................................................................................................*/
#include  xrv/champs_5.1A.I"
                                        /* Ceci fut introduit le 20070103172821...                                                   */

     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(PROCESS_ARGUMENT_I("nombre_elements=""ne=",nombre_d_elements
                                           ,BLOC(VIDE;)
                                           ,BLOC(Bblock
                                                 PRINT_AVERTISSEMENT("'ne=' doit etre defini avant toute entree de fichiers");
                                                 Eblock
                                                 )
                                            );

                         PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01;

                         PROKESF_ARGUMENT_FICHIER("LISTE_VX="
                                                 ,fichier_LISTE_VX
                                                 ,liste_initiale_des_VX
                                                 ,VX_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_VY="
                                                 ,fichier_LISTE_VY
                                                 ,liste_initiale_des_VY
                                                 ,VY_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_VZ="
                                                 ,fichier_LISTE_VZ
                                                 ,liste_initiale_des_VZ
                                                 ,VZ_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         PROKESF_ARGUMENT_FICHIER("LISTE_THETA="
                                                 ,fichier_LISTE_THETA
                                                 ,liste_initiale_des_THETA
                                                 ,THETA_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_PSI="
                                                 ,fichier_LISTE__PSI
                                                 ,liste_initiale_des__PSI
                                                 ,PSI__IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_PHI="
                                                 ,fichier_LISTE__PHI
                                                 ,liste_initiale_des__PHI
                                                 ,PHI__IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         GET_ARGUMENT_F("px=""pX=""Pond1=",ponderation_X);
                                        /* A ne pas confondre avec 'v $xig/fonct$vv$DEF ENTREE_ARGUMENT_pasX'...                     */
                         GET_ARGUMENT_F("py=""pY=""Pond2=",ponderation_Y);
                                        /* A ne pas confondre avec 'v $xig/fonct$vv$DEF ENTREE_ARGUMENT_pasY'...                     */
                         GET_ARGUMENT_F("pz=""pZ=""Pond3=",ponderation_Z);
                                        /* A ne pas confondre avec 'v $xig/fonct$vv$DEF ENTREE_ARGUMENT_pasZ'...                     */

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_3;
                                        /* Cette procedure fut introduite le 20070103172821...                                       */

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;
                                        /* Cette procedure fut introduite le 20061226193004...                                       */

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_5;
                                        /* Cette procedure fut introduite le 20211005104956...                                       */
                         )
                    );

     gOPERATION_SUR_LES_FICHIERS(BLOC(
                                      DEFV(Float,INIT(coordonnee_VX,ELEMENT_DU_FICHIER_LISTE_VX(index)));
                                      DEFV(Float,INIT(coordonnee_VY,ELEMENT_DU_FICHIER_LISTE_VY(index)));
                                      DEFV(Float,INIT(coordonnee_VZ,ELEMENT_DU_FICHIER_LISTE_VZ(index)));
                                        /* Recuperation des coordonnees {X,Y,Z} courantes dans les fichiers du vecteur 'V'.          */
                                      DEFV(Float,INIT(angle_theta,ELEMENT_DU_FICHIER_LISTE_THETA(index)));
                                      DEFV(Float,INIT(angle__psi,ELEMENT_DU_FICHIER_LISTE__PSI(index)));
                                      DEFV(Float,INIT(angle__phi,ELEMENT_DU_FICHIER_LISTE__PHI(index)));
                                        /* Recuperation des angles d'Euler {theta,psi,phi}.                                          */

                                      DEFV(deltaF_3D,vecteur_avant_rotation);
                                      DEFV(deltaF_3D,vecteur_apres_rotation);
                                        /* Definition du vecteur courant avant et apres rotation...                                  */
                                      DEFV(matrixF_3D,matrice_de_rotation);
                                        /* Definition de la matrice de rotation courante.                                            */

                                      INITIALISATION_ACCROISSEMENT_3D(vecteur_avant_rotation
                                                                     ,coordonnee_VX
                                                                     ,coordonnee_VY
                                                                     ,coordonnee_VZ
                                                                      );
                                        /* Initialisation du vecteur courant.                                                        */
                                      INITIALISATION_D_UNE_MATRICE_DE_ROTATION_D_EULER(matrice_de_rotation
                                                                                      ,angle_theta
                                                                                      ,angle__psi
                                                                                      ,angle__phi
                                                                                       );
                                        /* Initialisation de la matrice de rotation d'Euler.                                         */
                                      PRODUIT_MATRICE_ACCROISSEMENT_3D(vecteur_apres_rotation
                                                                      ,matrice_de_rotation
                                                                      ,vecteur_avant_rotation
                                                                       );
                                        /* Rotation du vecteur courant.                                                              */
                                      )
                                ,LIZ3(ponderation_X,ASD1(vecteur_apres_rotation,dx)
                                     ,ponderation_Y,ASD1(vecteur_apres_rotation,dy)
                                     ,ponderation_Z,ASD1(vecteur_apres_rotation,dz)
                                      )
                                ,EDITER_LA_VALEUR_RESULTANTE_DANS_gOPERATION_SUR_LES_FICHIERS
                                ,nombre_d_exemplaires_du_resultat_de_l_operation_sur_les_valeurs_courantes
                                 );
                                        /* Rotation de vecteurs suivant les angles d'Euler.                                          */

     lGENERATION_D_UN_FICHIER(liste_initiale_des__PHI,PHI__IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des__PSI,PSI__IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_THETA,THETA_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_VZ,VZ_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_VY,VY_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_VX,VX_IMPLICITE);

     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.