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