/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E   L ' I N T E R P O L A T I O N   D E S   P A R A M E T R E S  :                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrq/nucleon.LX.1$I' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1991??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A L I T E S   S U R   L E S   T R A N S F O R M A T I O N S  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   iTRANSFORMAT_31(np,npA,npB)                                                                                                   \
                    ADD2(DIVI(FLOT(SOUS(np,npA)),FLOT(SOUS(npB,npA))),COORDONNEE_BARYCENTRIQUE_MINIMALE)                                \
                                        /* Formule definissant la coordonnee barycentrique d'interpolation pour le numero de         */ \
                                        /* periode 'np' dans [npA,npB] :                                                             */ \
                                        /*                                                                                           */ \
                                        /*                   np  - npA                                                               */ \
                                        /*                  -----------                                                              */ \
                                        /*                   npB - npA                                                               */ \
                                        /*                                                                                           */ \
                                        /* Enfin, on notera que lors du calcul de 'iTRANSFORMAT_31(...)', on ne verifie pas que le   */ \
                                        /* resultat est dans [COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE].  */
#define   iDERIVATION(dt)                                                                                                               \
                    DIVI(dt,FLOT(nombre_de_periodes_de_la_simulation))                                                                  \
                                        /* Formule "renormalisant" les derivees par rapport au nombre de periodes de la simulation.  */
#define   iINTERPOLATION(tA,dtA,tB,dtB,np,npA,npB)                                                                                      \
                    INTERPOLATION_CUBIQUE(tA,iDERIVATION(dtA)                                                                           \
                                         ,tB,iDERIVATION(dtB)                                                                           \
                                         ,iTRANSFORMAT_31(np,npA,npB)                                                                   \
                                          )                                                                                             \
                                        /* Formule definissant la methode d'interpolation des differentes variables controlant le    */ \
                                        /* point de vue.                                                                             */
#define   sTRANSFORMAT_31(np,np1,t1,dt1,np2,t2,dt2,np3,t3,dt3,np4,t4,dt4,np5,t5,dt5)                                                    \
                    fCOND(IFLT(np,np2)                                                                                                  \
                         ,iINTERPOLATION(t1,dt1,t2,dt2,np,np1,np2)                                                                      \
                         ,fCOND(IFLT(np,np3)                                                                                            \
                               ,iINTERPOLATION(t2,dt2,t3,dt3,np,np2,np3)                                                                \
                               ,fCOND(IFLT(np,np4)                                                                                      \
                                     ,iINTERPOLATION(t3,dt3,t4,dt4,np,np3,np4)                                                          \
                                     ,iINTERPOLATION(t4,dt4,t5,dt5,np,np4,np5)                                                          \
                                      )                                                                                                 \
                                )                                                                                                       \
                          )                                                                                                             \
                                        /* Formule generale definissant la suite des 4 transformations possibles. Par exemple,       */ \
                                        /* une rotation autour d'un axe sera definie par une suite de 5 triplets donnant chacun :    */ \
                                        /*                                                                                           */ \
                                        /* Exemple :                                                                                 */ \
                                        /*                                                                                           */ \
                                        /* -un numero de periode de debut ('npN'),                                                   */ \
                                        /* -la valeur de l'angle de rotation a cet instant ('tN'),                                   */ \
                                        /* -la valeur de la derivee de l'angle a cet instant ('dtN').                                */ \
                                        /*                                                                                           */ \
                                        /*        ^                                                                                  */ \
                                        /* theta  |                                                                                  */ \
                                        /*        |                                                                                  */ \
                                        /*   2.PI |.....................................................................             */ \
                                        /*        |                               dt3                                                */ \
                                        /*   t3   |...........................* * <-> *  * *                                         */ \
                                        /*        |                         *      .          *                                      */ \
                                        /*        |                                .            *                                    */ \
                                        /*        |                        *       .             \                                   */ \
                                        /*   t4   |...............................................* dt4                              */ \
                                        /*        |                dt2    *        .              .\                                 */ \
                                        /*   t2   |........... * * <->* *          .              . *                                */ \
                                        /*        |          *      .              .              .                                  */ \
                                        /*        |                 .              .              .   *                              */ \
                                        /*        |         *       .              .              .     *                            */ \
                                        /*        |                 .              .              .        *    dt5                  */ \
                                        /*   t5   |.dt1....*..................................................* <->                  */ \
                                        /*   t1   |.<->* *          .              .              .              .                   */ \
                                        /*        |  .              .              .              .              .                   */ \
                                        /*        O--+--------------+--------------+--------------+--------------+------>            */ \
                                        /*          np1            np2            np3            np4            np5   numero         */ \
                                        /*                                                                            de  la         */ \
                                        /*                                                                            periode        */ \
                                        /*                                                                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N S   P A R T I C U L I E R E S  :                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   sLUMINANCE(numero_de_la_periode)                                                                                              \
                    sTRANSFORMAT_31(numero_de_la_periode                                                                                \
                                                                                                                                        \
                                   ,periode_1_de_modulation_de_la_luminance                                                             \
                                   ,rapport_1_de_modulation_de_la_luminance                                                             \
                                   ,Drapport_1_de_modulation_de_la_luminance                                                            \
                                                                                                                                        \
                                   ,periode_2_de_modulation_de_la_luminance                                                             \
                                   ,rapport_2_de_modulation_de_la_luminance                                                             \
                                   ,Drapport_2_de_modulation_de_la_luminance                                                            \
                                                                                                                                        \
                                   ,periode_3_de_modulation_de_la_luminance                                                             \
                                   ,rapport_3_de_modulation_de_la_luminance                                                             \
                                   ,Drapport_3_de_modulation_de_la_luminance                                                            \
                                                                                                                                        \
                                   ,periode_4_de_modulation_de_la_luminance                                                             \
                                   ,rapport_4_de_modulation_de_la_luminance                                                             \
                                   ,Drapport_4_de_modulation_de_la_luminance                                                            \
                                                                                                                                        \
                                   ,periode_5_de_modulation_de_la_luminance                                                             \
                                   ,rapport_5_de_modulation_de_la_luminance                                                             \
                                   ,Drapport_5_de_modulation_de_la_luminance                                                            \
                                                                                                                                        \
                                    )                                                                                                   \
                                        /* Formule generale definissant la suite des 4 modulations de luminance.                     */
#define   sTRANSLATION(numero_de_la_periode,coordonnee,accroissement)                                                                   \
                    sTRANSFORMAT_31(numero_de_la_periode                                                                                \
                                                                                                                                        \
                                   ,ASD1(periode_1_de_translation_de_l_origine,coordonnee)                                              \
                                   ,ASD1(translation_1_de_l_origine,accroissement)                                                      \
                                   ,ASD1(Dtranslation_1_de_l_origine,accroissement)                                                     \
                                                                                                                                        \
                                   ,ASD1(periode_2_de_translation_de_l_origine,coordonnee)                                              \
                                   ,ASD1(translation_2_de_l_origine,accroissement)                                                      \
                                   ,ASD1(Dtranslation_2_de_l_origine,accroissement)                                                     \
                                                                                                                                        \
                                   ,ASD1(periode_3_de_translation_de_l_origine,coordonnee)                                              \
                                   ,ASD1(translation_3_de_l_origine,accroissement)                                                      \
                                   ,ASD1(Dtranslation_3_de_l_origine,accroissement)                                                     \
                                                                                                                                        \
                                   ,ASD1(periode_4_de_translation_de_l_origine,coordonnee)                                              \
                                   ,ASD1(translation_4_de_l_origine,accroissement)                                                      \
                                   ,ASD1(Dtranslation_4_de_l_origine,accroissement)                                                     \
                                                                                                                                        \
                                   ,ASD1(periode_5_de_translation_de_l_origine,coordonnee)                                              \
                                   ,ASD1(translation_5_de_l_origine,accroissement)                                                      \
                                   ,ASD1(Dtranslation_5_de_l_origine,accroissement)                                                     \
                                                                                                                                        \
                                    )                                                                                                   \
                                        /* Formule generale definissant la suite des 4 translations de l'origine.                    */
#define   sTRANSLATION_OX(numero_de_la_periode)                                                                                         \
                    sTRANSLATION(numero_de_la_periode,x,dx)
                                        /* Formule generale definissant la suite des 4 translations de l'origine suivant l'axe 'OX'. */
#define   sTRANSLATION_OY(numero_de_la_periode)                                                                                         \
                    sTRANSLATION(numero_de_la_periode,y,dy)
                                        /* Formule generale definissant la suite des 4 translations de l'origine suivant l'axe 'OY'. */
#define   sTRANSLATION_OZ(numero_de_la_periode)                                                                                         \
                    sTRANSLATION(numero_de_la_periode,z,dz)
                                        /* Formule generale definissant la suite des 4 translations de l'origine suivant l'axe 'OZ'. */
#define   sZOOM(numero_de_la_periode)                                                                                                   \
                    sTRANSFORMAT_31(numero_de_la_periode                                                                                \
                                   ,periode_1_du_zoom,rapport_1_du_zoom,Drapport_1_du_zoom                                              \
                                   ,periode_2_du_zoom,rapport_2_du_zoom,Drapport_2_du_zoom                                              \
                                   ,periode_3_du_zoom,rapport_3_du_zoom,Drapport_3_du_zoom                                              \
                                   ,periode_4_du_zoom,rapport_4_du_zoom,Drapport_4_du_zoom                                              \
                                   ,periode_5_du_zoom,rapport_5_du_zoom,Drapport_5_du_zoom                                              \
                                    )                                                                                                   \
                                        /* Formule generale definissant la suite des 4 zooms possibles.                              */
#define   sROTATION_OX(numero_de_la_periode)                                                                                            \
                    sTRANSFORMAT_31(numero_de_la_periode                                                                                \
                                   ,periode_1_autour_de_OX,angle_1_autour_de_OX,Dangle_1_autour_de_OX                                   \
                                   ,periode_2_autour_de_OX,angle_2_autour_de_OX,Dangle_2_autour_de_OX                                   \
                                   ,periode_3_autour_de_OX,angle_3_autour_de_OX,Dangle_3_autour_de_OX                                   \
                                   ,periode_4_autour_de_OX,angle_4_autour_de_OX,Dangle_4_autour_de_OX                                   \
                                   ,periode_5_autour_de_OX,angle_5_autour_de_OX,Dangle_5_autour_de_OX                                   \
                                    )                                                                                                   \
                                        /* Formule generale definissant la suite des 4 rotations possibles autour de l'axe 'OX'.     */
#define   sROTATION_OY(numero_de_la_periode)                                                                                            \
                    sTRANSFORMAT_31(numero_de_la_periode                                                                                \
                                   ,periode_1_autour_de_OY,angle_1_autour_de_OY,Dangle_1_autour_de_OY                                   \
                                   ,periode_2_autour_de_OY,angle_2_autour_de_OY,Dangle_2_autour_de_OY                                   \
                                   ,periode_3_autour_de_OY,angle_3_autour_de_OY,Dangle_3_autour_de_OY                                   \
                                   ,periode_4_autour_de_OY,angle_4_autour_de_OY,Dangle_4_autour_de_OY                                   \
                                   ,periode_5_autour_de_OY,angle_5_autour_de_OY,Dangle_5_autour_de_OY                                   \
                                    )                                                                                                   \
                                        /* Formule generale definissant la suite des 4 rotations possibles autour de l'axe 'OY'.     */
#define   sROTATION_OZ(numero_de_la_periode)                                                                                            \
                    sTRANSFORMAT_31(numero_de_la_periode                                                                                \
                                   ,periode_1_autour_de_OZ,angle_1_autour_de_OZ,Dangle_1_autour_de_OZ                                   \
                                   ,periode_2_autour_de_OZ,angle_2_autour_de_OZ,Dangle_2_autour_de_OZ                                   \
                                   ,periode_3_autour_de_OZ,angle_3_autour_de_OZ,Dangle_3_autour_de_OZ                                   \
                                   ,periode_4_autour_de_OZ,angle_4_autour_de_OZ,Dangle_4_autour_de_OZ                                   \
                                   ,periode_5_autour_de_OZ,angle_5_autour_de_OZ,Dangle_5_autour_de_OZ                                   \
                                    )                                                                                                   \
                                        /* Formule generale definissant la suite des 4 rotations possibles autour de l'axe 'OX'.     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   D E   T Y P E   ' Z O O M '  :                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PERIODE_1_DU_ZOOM                                                                                                             \
                    PERIODE_1_DE_MODULATION_DE_LA_LUMINANCE
#define   RAPPORT_1_DU_ZOOM                                                                                                             \
                    GRO4(FRA3(FU))
#define   dRAPPORT_1_DU_ZOOM                                                                                                            \
                    FZERO
DEFV(Local,DEFV(Int,INIT(periode_1_du_zoom,PERIODE_1_DU_ZOOM)));
DEFV(Local,DEFV(Float,INIT(rapport_1_du_zoom,RAPPORT_1_DU_ZOOM)));
DEFV(Local,DEFV(Float,INIT(Drapport_1_du_zoom,dRAPPORT_1_DU_ZOOM)));
                                        /* Definition de la periode '1' du zoom.                                                     */
#define   PERIODE_2_DU_ZOOM                                                                                                             \
                    PERIODE_2_DE_MODULATION_DE_LA_LUMINANCE
#define   RAPPORT_2_DU_ZOOM                                                                                                             \
                    RAPPORT_1_DU_ZOOM
#define   dRAPPORT_2_DU_ZOOM                                                                                                            \
                    dRAPPORT_1_DU_ZOOM
DEFV(Local,DEFV(Int,INIT(periode_2_du_zoom,PERIODE_2_DU_ZOOM)));
DEFV(Local,DEFV(Float,INIT(rapport_2_du_zoom,RAPPORT_2_DU_ZOOM)));
DEFV(Local,DEFV(Float,INIT(Drapport_2_du_zoom,dRAPPORT_2_DU_ZOOM)));
                                        /* Definition de la periode '2' du zoom.                                                     */
#define   PERIODE_3_DU_ZOOM                                                                                                             \
                    PERIODE_3_DE_MODULATION_DE_LA_LUMINANCE
#define   RAPPORT_3_DU_ZOOM                                                                                                             \
                    RAPPORT_1_DU_ZOOM
#define   dRAPPORT_3_DU_ZOOM                                                                                                            \
                    dRAPPORT_1_DU_ZOOM
DEFV(Local,DEFV(Int,INIT(periode_3_du_zoom,PERIODE_3_DU_ZOOM)));
DEFV(Local,DEFV(Float,INIT(rapport_3_du_zoom,RAPPORT_3_DU_ZOOM)));
DEFV(Local,DEFV(Float,INIT(Drapport_3_du_zoom,dRAPPORT_3_DU_ZOOM)));
                                        /* Definition de la periode '3' du zoom.                                                     */
#define   PERIODE_4_DU_ZOOM                                                                                                             \
                    PERIODE_4_DE_MODULATION_DE_LA_LUMINANCE
#define   RAPPORT_4_DU_ZOOM                                                                                                             \
                    RAPPORT_1_DU_ZOOM
#define   dRAPPORT_4_DU_ZOOM                                                                                                            \
                    dRAPPORT_1_DU_ZOOM
DEFV(Local,DEFV(Int,INIT(periode_4_du_zoom,PERIODE_4_DU_ZOOM)));
DEFV(Local,DEFV(Float,INIT(rapport_4_du_zoom,RAPPORT_4_DU_ZOOM)));
DEFV(Local,DEFV(Float,INIT(Drapport_4_du_zoom,dRAPPORT_4_DU_ZOOM)));
                                        /* Definition de la periode '4' du zoom.                                                     */
#define   PERIODE_5_DU_ZOOM                                                                                                             \
                    PERIODE_5_DE_MODULATION_DE_LA_LUMINANCE
#define   RAPPORT_5_DU_ZOOM                                                                                                             \
                    RAPPORT_1_DU_ZOOM
#define   dRAPPORT_5_DU_ZOOM                                                                                                            \
                    dRAPPORT_1_DU_ZOOM
DEFV(Local,DEFV(Int,INIT(periode_5_du_zoom,PERIODE_5_DU_ZOOM)));
DEFV(Local,DEFV(Float,INIT(rapport_5_du_zoom,RAPPORT_5_DU_ZOOM)));
DEFV(Local,DEFV(Float,INIT(Drapport_5_du_zoom,dRAPPORT_5_DU_ZOOM)));
                                        /* Definition de la periode '5' du zoom.                                                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   D E   T Y P E   ' R O T A T I O N   A U T O U R   D E   O X '  :                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PERIODE_1_AUTOUR_DE_OX                                                                                                        \
                    PERIODE_1_DU_ZOOM
#define   ANGLE_1_AUTOUR_DE_OX                                                                                                          \
                    FZERO
#define   dANGLE_1_AUTOUR_DE_OX                                                                                                         \
                    FZERO
DEFV(Local,DEFV(Int,INIT(periode_1_autour_de_OX,PERIODE_1_AUTOUR_DE_OX)));
DEFV(Local,DEFV(Float,INIT(angle_1_autour_de_OX,ANGLE_1_AUTOUR_DE_OX)));
DEFV(Local,DEFV(Float,INIT(Dangle_1_autour_de_OX,dANGLE_1_AUTOUR_DE_OX)));
                                        /* Definition de la periode '1' de la rotation autour de 'OX'.                               */
#define   PERIODE_2_AUTOUR_DE_OX                                                                                                        \
                    PERIODE_2_DU_ZOOM
#define   ANGLE_2_AUTOUR_DE_OX                                                                                                          \
                    ANGLE_1_AUTOUR_DE_OX
#define   dANGLE_2_AUTOUR_DE_OX                                                                                                         \
                    dANGLE_1_AUTOUR_DE_OX
DEFV(Local,DEFV(Int,INIT(periode_2_autour_de_OX,PERIODE_2_AUTOUR_DE_OX)));
DEFV(Local,DEFV(Float,INIT(angle_2_autour_de_OX,ANGLE_2_AUTOUR_DE_OX)));
DEFV(Local,DEFV(Float,INIT(Dangle_2_autour_de_OX,dANGLE_2_AUTOUR_DE_OX)));
                                        /* Definition de la periode '2' de la rotation autour de 'OX'.                               */
#define   PERIODE_3_AUTOUR_DE_OX                                                                                                        \
                    PERIODE_3_DU_ZOOM
#define   ANGLE_3_AUTOUR_DE_OX                                                                                                          \
                    ANGLE_1_AUTOUR_DE_OX
#define   dANGLE_3_AUTOUR_DE_OX                                                                                                         \
                    dANGLE_1_AUTOUR_DE_OX
DEFV(Local,DEFV(Int,INIT(periode_3_autour_de_OX,PERIODE_3_AUTOUR_DE_OX)));
DEFV(Local,DEFV(Float,INIT(angle_3_autour_de_OX,ANGLE_3_AUTOUR_DE_OX)));
DEFV(Local,DEFV(Float,INIT(Dangle_3_autour_de_OX,dANGLE_3_AUTOUR_DE_OX)));
                                        /* Definition de la periode '3' de la rotation autour de 'OX'.                               */
#define   PERIODE_4_AUTOUR_DE_OX                                                                                                        \
                    PERIODE_4_DU_ZOOM
#define   ANGLE_4_AUTOUR_DE_OX                                                                                                          \
                    ANGLE_1_AUTOUR_DE_OX
#define   dANGLE_4_AUTOUR_DE_OX                                                                                                         \
                    dANGLE_1_AUTOUR_DE_OX
DEFV(Local,DEFV(Int,INIT(periode_4_autour_de_OX,PERIODE_4_AUTOUR_DE_OX)));
DEFV(Local,DEFV(Float,INIT(angle_4_autour_de_OX,ANGLE_4_AUTOUR_DE_OX)));
DEFV(Local,DEFV(Float,INIT(Dangle_4_autour_de_OX,dANGLE_4_AUTOUR_DE_OX)));
                                        /* Definition de la periode '4' de la rotation autour de 'OX'.                               */
#define   PERIODE_5_AUTOUR_DE_OX                                                                                                        \
                    PERIODE_5_DU_ZOOM
#define   ANGLE_5_AUTOUR_DE_OX                                                                                                          \
                    ANGLE_1_AUTOUR_DE_OX
#define   dANGLE_5_AUTOUR_DE_OX                                                                                                         \
                    dANGLE_1_AUTOUR_DE_OX
DEFV(Local,DEFV(Int,INIT(periode_5_autour_de_OX,PERIODE_5_AUTOUR_DE_OX)));
DEFV(Local,DEFV(Float,INIT(angle_5_autour_de_OX,ANGLE_5_AUTOUR_DE_OX)));
DEFV(Local,DEFV(Float,INIT(Dangle_5_autour_de_OX,dANGLE_5_AUTOUR_DE_OX)));
                                        /* Definition de la periode '5' de la rotation autour de 'OX'.                               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   D E   T Y P E   ' R O T A T I O N   A U T O U R   D E   O Y '  :                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PERIODE_1_AUTOUR_DE_OY                                                                                                        \
                    PERIODE_1_AUTOUR_DE_OX
#define   ANGLE_1_AUTOUR_DE_OY                                                                                                          \
                    ANGLE_1_AUTOUR_DE_OX
#define   dANGLE_1_AUTOUR_DE_OY                                                                                                         \
                    dANGLE_1_AUTOUR_DE_OX
DEFV(Local,DEFV(Int,INIT(periode_1_autour_de_OY,PERIODE_1_AUTOUR_DE_OY)));
DEFV(Local,DEFV(Float,INIT(angle_1_autour_de_OY,ANGLE_1_AUTOUR_DE_OY)));
DEFV(Local,DEFV(Float,INIT(Dangle_1_autour_de_OY,dANGLE_1_AUTOUR_DE_OY)));
                                        /* Definition de la periode '1' de la rotation autour de 'OY'.                               */
#define   PERIODE_2_AUTOUR_DE_OY                                                                                                        \
                    PERIODE_2_AUTOUR_DE_OX
#define   ANGLE_2_AUTOUR_DE_OY                                                                                                          \
                    ANGLE_1_AUTOUR_DE_OY
#define   dANGLE_2_AUTOUR_DE_OY                                                                                                         \
                    dANGLE_1_AUTOUR_DE_OY
DEFV(Local,DEFV(Int,INIT(periode_2_autour_de_OY,PERIODE_2_AUTOUR_DE_OY)));
DEFV(Local,DEFV(Float,INIT(angle_2_autour_de_OY,ANGLE_2_AUTOUR_DE_OY)));
DEFV(Local,DEFV(Float,INIT(Dangle_2_autour_de_OY,dANGLE_2_AUTOUR_DE_OY)));
                                        /* Definition de la periode '2' de la rotation autour de 'OY'.                               */
#define   PERIODE_3_AUTOUR_DE_OY                                                                                                        \
                    PERIODE_3_AUTOUR_DE_OX
#define   ANGLE_3_AUTOUR_DE_OY                                                                                                          \
                    ANGLE_1_AUTOUR_DE_OY
#define   dANGLE_3_AUTOUR_DE_OY                                                                                                         \
                    dANGLE_1_AUTOUR_DE_OY
DEFV(Local,DEFV(Int,INIT(periode_3_autour_de_OY,PERIODE_3_AUTOUR_DE_OY)));
DEFV(Local,DEFV(Float,INIT(angle_3_autour_de_OY,ANGLE_3_AUTOUR_DE_OY)));
DEFV(Local,DEFV(Float,INIT(Dangle_3_autour_de_OY,dANGLE_3_AUTOUR_DE_OY)));
                                        /* Definition de la periode '3' de la rotation autour de 'OY'.                               */
#define   PERIODE_4_AUTOUR_DE_OY                                                                                                        \
                    PERIODE_4_AUTOUR_DE_OX
#define   ANGLE_4_AUTOUR_DE_OY                                                                                                          \
                    ANGLE_1_AUTOUR_DE_OY
#define   dANGLE_4_AUTOUR_DE_OY                                                                                                         \
                    dANGLE_1_AUTOUR_DE_OY
DEFV(Local,DEFV(Int,INIT(periode_4_autour_de_OY,PERIODE_4_AUTOUR_DE_OY)));
DEFV(Local,DEFV(Float,INIT(angle_4_autour_de_OY,ANGLE_4_AUTOUR_DE_OY)));
DEFV(Local,DEFV(Float,INIT(Dangle_4_autour_de_OY,dANGLE_4_AUTOUR_DE_OY)));
                                        /* Definition de la periode '4' de la rotation autour de 'OY'.                               */
#define   PERIODE_5_AUTOUR_DE_OY                                                                                                        \
                    PERIODE_5_AUTOUR_DE_OX
#define   ANGLE_5_AUTOUR_DE_OY                                                                                                          \
                    ANGLE_1_AUTOUR_DE_OY
#define   dANGLE_5_AUTOUR_DE_OY                                                                                                         \
                    dANGLE_1_AUTOUR_DE_OY
DEFV(Local,DEFV(Int,INIT(periode_5_autour_de_OY,PERIODE_5_AUTOUR_DE_OY)));
DEFV(Local,DEFV(Float,INIT(angle_5_autour_de_OY,ANGLE_5_AUTOUR_DE_OY)));
DEFV(Local,DEFV(Float,INIT(Dangle_5_autour_de_OY,dANGLE_5_AUTOUR_DE_OY)));
                                        /* Definition de la periode '5' de la rotation autour de 'OY'.                               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A N S F O R M A T I O N   D E   T Y P E   ' R O T A T I O N   A U T O U R   D E   O Z '  :                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PERIODE_1_AUTOUR_DE_OZ                                                                                                        \
                    PERIODE_1_AUTOUR_DE_OX
#define   ANGLE_1_AUTOUR_DE_OZ                                                                                                          \
                    ANGLE_1_AUTOUR_DE_OX
#define   dANGLE_1_AUTOUR_DE_OZ                                                                                                         \
                    dANGLE_1_AUTOUR_DE_OX
DEFV(Local,DEFV(Int,INIT(periode_1_autour_de_OZ,PERIODE_1_AUTOUR_DE_OZ)));
DEFV(Local,DEFV(Float,INIT(angle_1_autour_de_OZ,ANGLE_1_AUTOUR_DE_OZ)));
DEFV(Local,DEFV(Float,INIT(Dangle_1_autour_de_OZ,dANGLE_1_AUTOUR_DE_OZ)));
                                        /* Definition de la periode '1' de la rotation autour de 'OZ'.                               */
#define   PERIODE_2_AUTOUR_DE_OZ                                                                                                        \
                    PERIODE_2_AUTOUR_DE_OX
#define   ANGLE_2_AUTOUR_DE_OZ                                                                                                          \
                    ANGLE_1_AUTOUR_DE_OZ
#define   dANGLE_2_AUTOUR_DE_OZ                                                                                                         \
                    dANGLE_1_AUTOUR_DE_OZ
DEFV(Local,DEFV(Int,INIT(periode_2_autour_de_OZ,PERIODE_2_AUTOUR_DE_OZ)));
DEFV(Local,DEFV(Float,INIT(angle_2_autour_de_OZ,ANGLE_2_AUTOUR_DE_OZ)));
DEFV(Local,DEFV(Float,INIT(Dangle_2_autour_de_OZ,dANGLE_2_AUTOUR_DE_OZ)));
                                        /* Definition de la periode '2' de la rotation autour de 'OZ'.                               */
#define   PERIODE_3_AUTOUR_DE_OZ                                                                                                        \
                    PERIODE_3_AUTOUR_DE_OX
#define   ANGLE_3_AUTOUR_DE_OZ                                                                                                          \
                    ANGLE_1_AUTOUR_DE_OZ
#define   dANGLE_3_AUTOUR_DE_OZ                                                                                                         \
                    dANGLE_1_AUTOUR_DE_OZ
DEFV(Local,DEFV(Int,INIT(periode_3_autour_de_OZ,PERIODE_3_AUTOUR_DE_OZ)));
DEFV(Local,DEFV(Float,INIT(angle_3_autour_de_OZ,ANGLE_3_AUTOUR_DE_OZ)));
DEFV(Local,DEFV(Float,INIT(Dangle_3_autour_de_OZ,dANGLE_3_AUTOUR_DE_OZ)));
                                        /* Definition de la periode '3' de la rotation autour de 'OZ'.                               */
#define   PERIODE_4_AUTOUR_DE_OZ                                                                                                        \
                    PERIODE_4_AUTOUR_DE_OX
#define   ANGLE_4_AUTOUR_DE_OZ                                                                                                          \
                    ANGLE_1_AUTOUR_DE_OZ
#define   dANGLE_4_AUTOUR_DE_OZ                                                                                                         \
                    dANGLE_1_AUTOUR_DE_OZ
DEFV(Local,DEFV(Int,INIT(periode_4_autour_de_OZ,PERIODE_4_AUTOUR_DE_OZ)));
DEFV(Local,DEFV(Float,INIT(angle_4_autour_de_OZ,ANGLE_4_AUTOUR_DE_OZ)));
DEFV(Local,DEFV(Float,INIT(Dangle_4_autour_de_OZ,dANGLE_4_AUTOUR_DE_OZ)));
                                        /* Definition de la periode '4' de la rotation autour de 'OZ'.                               */
#define   PERIODE_5_AUTOUR_DE_OZ                                                                                                        \
                    PERIODE_5_AUTOUR_DE_OX
#define   ANGLE_5_AUTOUR_DE_OZ                                                                                                          \
                    ANGLE_1_AUTOUR_DE_OZ
#define   dANGLE_5_AUTOUR_DE_OZ                                                                                                         \
                    dANGLE_1_AUTOUR_DE_OZ
DEFV(Local,DEFV(Int,INIT(periode_5_autour_de_OZ,PERIODE_5_AUTOUR_DE_OZ)));
DEFV(Local,DEFV(Float,INIT(angle_5_autour_de_OZ,ANGLE_5_AUTOUR_DE_OZ)));
DEFV(Local,DEFV(Float,INIT(Dangle_5_autour_de_OZ,dANGLE_5_AUTOUR_DE_OZ)));
                                        /* Definition de la periode '5' de la rotation autour de 'OZ'.                               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N I T I A L I S A T I O N   D E S   I N T E R P O L A T I O N S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ___DEBUT_DE_L_INITIALISATION_DES_INTERPOLATIONS                                                                               \
                    Bblock                                                                                                              \
                    Eblock                                                                                                              \
                                        /* Debut initialisation des differentes interpolations...                                    */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(DEBUT_DE_L_INITIALISATION_DES_INTERPOLATIONS,PV,___DEBUT_DE_L_INITIALISATION_DES_INTERPOLATIONS))

EFonctionI

#define   ___FIN_DE_L_INITIALISATION_DES_INTERPOLATIONS                                                                                 \
                    Bblock                                                                                                              \
                    Eblock                                                                                                              \
                                        /* Fin initialisation des differentes interpolations...                                      */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(FIN_DE_L_INITIALISATION_DES_INTERPOLATIONS,PV,___FIN_DE_L_INITIALISATION_DES_INTERPOLATIONS))

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A N G E M E N T   D U   P O I N T   D E   V U E  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ___CHANGEMENT_DU_POINT_DE_VUE                                                                                                 \
                    Bblock                                                                                                              \
                    INITIALISATION_SYSTEMATIQUE_TRANSFORMATION;                                                                         \
                                        /* Retour a la transformation neutre...                                                      */ \
                    EGAL(rapport_courant_du_zoom,sZOOM(numero_de_la_periode_courante));                                                 \
                                        /* Calcul du rapport courant du zoom, et ce en particulier afin de determiner correctement   */ \
                                        /* le rayon apparent des particules...                                                       */ \
                    INITIALISATION_ACCROISSEMENT_3D(translation_de_l_origine                                                            \
                                                   ,FZERO                                                                               \
                                                   ,FZERO                                                                               \
                                                   ,FZERO                                                                               \
                                                    );                                                                                  \
                                        /* Reinitialisation a priori de la translation de l'origine, et ce au cas ou le calcul       */ \
                                        /* des 'sTRANSLATION(...)' qui suit serait deplace apres 'GESTION_DE_LA_SOURCE_LUMINEUSE'... */ \
                    INITIALISATION_ACCROISSEMENT_3D(translation_de_l_origine                                                            \
                                                   ,sTRANSLATION_OX(numero_de_la_periode_courante)                                      \
                                                   ,sTRANSLATION_OY(numero_de_la_periode_courante)                                      \
                                                   ,sTRANSLATION_OZ(numero_de_la_periode_courante)                                      \
                                                    );                                                                                  \
                                        /* Mise en place de la translation de l'origine.                                             */ \
                    T_ZOOM(rapport_courant_du_zoom);                                                                                    \
                                        /* Mise en place du zoom.                                                                    */ \
                    GESTION_DE_LA_SOURCE_LUMINEUSE;                                                                                     \
                                        /* On notera avec attention que 'GESTION_DE_LA_SOURCE_LUMINEUSE' est effectue ici apres      */ \
                                        /* le zoom, mais avant la rotation, et ce afin que la source lumineuse reste immobile au     */ \
                                        /* niveau orientation par rapport a l'observateur (sinon, elle risquerait de se retrouver    */ \
                                        /* derriere le proton...).                                                                   */ \
                    EGAL(modulation_courante_de_la_luminance,sLUMINANCE(numero_de_la_periode_courante));                                \
                                        /* Calcul de la modulation courante de la luminance.                                         */ \
                    T_ROTATION_X(sROTATION_OX(numero_de_la_periode_courante));                                                          \
                    T_ROTATION_Y(sROTATION_OY(numero_de_la_periode_courante));                                                          \
                    T_ROTATION_Z(sROTATION_OZ(numero_de_la_periode_courante));                                                          \
                                        /* Mise en place du produit des trois rotations relatives aux trois axes.                    */ \
                    Eblock                                                                                                              \
                                        /* Changement du point de vue de l'observateur.                                              */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(CHANGEMENT_DU_POINT_DE_VUE,PV,___CHANGEMENT_DU_POINT_DE_VUE))

EFonctionI



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.