/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   G E N E R A L E S   R E L A T I V E S   A   L A   V I S U A L I S A T I O N  :                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrk/attractor.14$I' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 1992??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P O U R   S E   S I M P L I F I E R   L A   V I E  :                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrq/nucleon.L5.L6.I"
#include  xrq/nucleon.LB.I"
                                        /* Avant le 20170125051018, il y avait ici :                                                 */
                                        /*                                                                                           */
                                        /*                  #include  xrq/nucleon.L5.I"                                              */
                                        /*                  #include  xrq/nucleon.L6.I"                                              */
                                        /*                                                                                           */
                                        /* et cela faisait enormement de choses completement inutiles, d'ou cette simplification...  */
                                        /*                                                                                           */
                                        /* Le fichier 'v $xrq/nucleon.L6$I' doit etre conserve a cause du generateur aleatoire       */
                                        /* ('v $xrq/nucleon.L6$I GENERATION_GENERALE_D_UNE_VALEUR') utilise par de nombreux          */
                                        /* programmes et par exemple 'v $xrk/rdn_walk.51$K'...                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A N T I - A L I A S I N G  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrq/nucleon.LP.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E   L A   S O U R C E   L U M I N E U S E  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrq/nucleon.LQ.I"

#undef    X_DE_LA_SOURCE_LUMINEUSE
#define   X_DE_LA_SOURCE_LUMINEUSE                                                                                                      \
                    Xcentre_ESPACE

#undef    Y_DE_LA_SOURCE_LUMINEUSE
#define   Y_DE_LA_SOURCE_LUMINEUSE                                                                                                      \
                    Ycentre_ESPACE

#undef    Z_DE_LA_SOURCE_LUMINEUSE
#define   Z_DE_LA_SOURCE_LUMINEUSE                                                                                                      \
                    GRO3(FRA5(Zmax_ESPACE))
                                        /* Pour corriger les initialisations precedentes...                                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E S   F O N D U S  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrq/nucleon.LR.2.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E   L A   G E S T I O N   D U   " D E P T H - C U E I N G "  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#TestADef PROFONDEUR_MINIMALE                                                                                                           \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE
#TestADef PROFONDEUR_MAXIMALE                                                                                                           \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE
#TestADef PROFONDEUR_MINIMALE_DE_TRONCATION                                                                                             \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE
#TestADef PROFONDEUR_MAXIMALE_DE_TRONCATION                                                                                             \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE

#include  xrq/nucleon.Ld.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E   L A   G E S T I O N   D U   Z O O M  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrq/nucleon.Le.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E   L A   V I S U A L I S A T I O N   D ' U N E   S P H E R E  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/champs_5.1C.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E S   T R A N S L A T I O N S   E T   R O T A T I O N S  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrq/nucleon.LT.2.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E S T I O N   D E S   C O U L E U R S  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/champs_5.15.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   N O M B R E   D ' I T E R A T I O N S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/attractor.41.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E S T I O N   D E   L A   L I S T E   D E S   P O I N T S   D E S T I N E E   A   F A I R E   U N   T R I                */
/*        S U R   L A   C O O R D O N N E E   ' Z '   D ' A R R I E R E   E N   A V A N T   P O U R   L U T T E R                    */
/*        E F F I C A C E M E N T   C O N T R E   L ' A L I A S I N G  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/champs_5.11.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A T T E N U A T I O N   D E S   L U M I N A N C E S   E N   F O N C T I O N   D U                                          */
/*        N U M E R O   D E   L ' I T E R A T I O N   C O U R A N T E  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   TOUTES_LES_ITERATIONS_SONT_VISUALISEES                                                                                        \
                    ZERO
#define   NOMBRE_D_ITERATIONS_VISUALISEES                                                                                               \
                    TOUTES_LES_ITERATIONS_SONT_VISUALISEES
DEFV(Local,DEFV(Int,INIT(nombre_d_iterations_visualisees,NOMBRE_D_ITERATIONS_VISUALISEES)));
                                        /* Nombre d'iterations (parmi les plus recentes) visualisees ; la valeur 'ZERO' signifie     */
                                        /* paradoxalement qu'elles sont toutes visualisees. On notera que cette convention bizarre   */
                                        /* est due au fait que l'onne peut ecrire :                                                  */
                                        /*                                                                                           */
                                        /*                  #define   NOMBRE_D_ITERATIONS_VISUALISEES                             \  */
                                        /*                                      nombre_d_iterations                                  */
                                        /*                                                                                           */
                                        /* car 'nombre_d_iterations' ne peut servir a initialiser 'nombre_d_iterations_visualisees'. */
#define   VISUALISER_LE_FANTOME                                                                                                         \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(visualiser_le_fantome,VISUALISER_LE_FANTOME)));
                                        /* Dans le cas ou l'on ne visualise pas toutes les iterations, 'visualiser_le_fantome'       */
                                        /* indique si l'on doit visualiser le fantome ('VRAI'), c'est-a-dire toutes les iterations   */
                                        /* meme les plus anciennes (elles seront alors attenuees comme la "derniere visualisee"),    */
                                        /* ou pas ('FAUX').                                                                          */

#define   ATTENUATION_DE_LA_PREMIERE_ITERATION                                                                                          \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE
DEFV(Local,DEFV(Float,INIT(attenuation_de_la_premiere_iteration,ATTENUATION_DE_LA_PREMIERE_ITERATION)));
                                        /* Attenuation en luminance de la premiere iteration.                                        */
#define   ATTENUATION_DE_LA_DERNIERE_ITERATION                                                                                          \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE
DEFV(Local,DEFV(Float,INIT(attenuation_de_la_derniere_iteration,ATTENUATION_DE_LA_DERNIERE_ITERATION)));
                                        /* Attenuation en luminance de la derniere iteration.                                        */

#define   PREMIERE_ITERATION_VISUALISEE                                                                                                 \
                    COND(IFEQ(nombre_d_iterations_visualisees,TOUTES_LES_ITERATIONS_SONT_VISUALISEES)                                   \
                        ,PREMIERE_ITERATION_D_UN_Komp                                                                                   \
                        ,LSTX(PREMIERE_ITERATION_D_UN_Komp                                                                              \
                             ,NBRE(MIN2(nombre_d_iterations_visualisees,nombre_d_iterations),nombre_d_iterations)                       \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Numero de la premiere iteration visualisee.                                               */
#define   DERNIERE_ITERATION_VISUALISEE                                                                                                 \
                    LSTX(PREMIERE_ITERATION_D_UN_Komp,nombre_d_iterations)                                                              \
                                        /* Numero de la derniere iteration visualisee.                                               */

#define   mATTENUATION(composante,numero)                                                                                               \
                    MUL2(COND(IFLT(PREMIERE_ITERATION_VISUALISEE,DERNIERE_ITERATION_VISUALISEE)                                         \
                             ,BARY(attenuation_de_la_premiere_iteration                                                                 \
                                  ,attenuation_de_la_derniere_iteration                                                                 \
                                  ,NORM(COND(IFET(IL_FAUT(visualiser_le_fantome)                                                        \
                                                 ,IFLT(numero,PREMIERE_ITERATION_VISUALISEE)                                            \
                                                  )                                                                                     \
                                            ,PREMIERE_ITERATION_VISUALISEE                                                              \
                                            ,numero                                                                                     \
                                             )                                                                                          \
                                       ,PREMIERE_ITERATION_VISUALISEE                                                                   \
                                       ,DERNIERE_ITERATION_VISUALISEE                                                                   \
                                        )                                                                                               \
                                   )                                                                                                    \
                             ,attenuation_de_la_derniere_iteration                                                                      \
                              )                                                                                                         \
                        ,composante                                                                                                     \
                         )                                                                                                              \
                                        /* Fonction d'attenuation d'une composante chromatique.                                      */

BFonctionF

DEFV(Local,DEFV(FonctionF,attenuation(composante,numero)))
                                        /* ATTENTION, cette fonction a ete introduite afin de reduire la complexite des programmes   */
                                        /* '$c' generes, en particulier sur les SYSTEMEs 'SYSTEME_NWS3000_NEWSOS_2CC' et             */
                                        /* 'SYSTEME_VAX9000_ULTRIX_GCC'. Malgre, cela on recupere le message :                       */
                                        /*                                                                                           */
                                        /*                  out of swap space, pid ..., proc...                                      */
                                        /*                                                                                           */
                                        /* puis :                                                                                    */
                                        /*                                                                                           */
                                        /*                  Segmentation fault                                                       */
                                        /*                                                                                           */
                                        /* sur 'SYSTEME_NWS3000_NEWSOS_2CC', qui disparait avec un petit format d'image ('Suq' par   */
                                        /* exemple...).                                                                              */
DEFV(Argument,DEFV(Float,composante));
                                        /* Definition de la composante a attenuer en fonction du numero de l'iteration courante.     */
DEFV(Argument,DEFV(Int,numero));
                                        /* Definition du numero de l'iteration courante.                                             */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(mATTENUATION(composante,numero));
     Eblock

EFonctionF

#define   ATTENUATION(composante,numero)                                                                                                \
                    attenuation(FLOT(composante),INTE(numero))                                                                          \
                                        /* Fonction d'attenuation de la charge de couleur en fonction du numero de l'iteration       */ \
                                        /* courante.                                                                                 */



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.