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