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