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