#######################################################################################################################################
# #
# D I F F U S I O N T R I D I M E N S I O N N E L L E " D O U C E " #
# ( C A L C U L D ' I S O S U R F A C E S D E L A D E N S I T E D E P A R T I C U L E S ) : #
# #
# #
# Author of '$xiirk/.DIFZ.13.1.$U' : #
# #
# Jean-Francois Colonna (LACTAMME, 20070630131131). #
# #
#######################################################################################################################################
$Z setParam _____Pas 1
$Z # Introduit le 20070701103201... #
$Z SETParam _____Binariser FAUX
$Z # Introduit le 20070701100711 (d'ou la modification 'v $xiirk/.DIFZ.11.3.$U unset'...). #
$Z setParam _____PaletteC $xiP/arc_ciel.01
$Z # Introduit le 20070701103746... #
$c #include <stdio.h>
$c #include <math.h>
$c
$c #define RAYONmin Bande0
$c #define RAYONmax Nbandes
$c #define dRAYON -1
$c
$c #define NIVEAU0 0
$c #define NIVEAUn 255
$c
$c #define RAYON (RAYONmax-rayon+RAYONmin)
$c
$c int main()
$c {
$c double rayon;
$c double seuil_inferieur=NIVEAU0,seuil_superieur;
$c double facteur;
$c
$c int n=1;
$c
$c for (rayon=RAYONmax ; rayon>=RAYONmin ; rayon=rayon+dRAYON)
$c {
$c double dniveau=((-2*RAYON*exp(-(RAYON*RAYON)/(RAYONmax*RAYONmax)))*dRAYON);
$c /* Les images '$_____imagesD' contiennent des exponentielles dont le niveau est donne */
$c /* par : */
$c /* */
$c /* 2 */
$c /* -rayon */
$c /* niveau = e */
$c /* */
$c /* 'D' designant une differentielle, on a donc : */
$c /* */
$c /* 2 */
$c /* -rayon */
$c /* Dniveau = -2.rayon.e .Drayon */
$c /* */
$c /* Ici, on calcule donc l'increment 'Dniveau' des niveaux pour un increment 'Drayon' */
$c /* constant et egal a 'dRAYON'. Ainsi, les iso-surfaces auront toutes "la meme epaisseur"... */
$c
$c seuil_superieur=seuil_inferieur+dniveau;
$c seuil_inferieur=seuil_inferieur+(dniveau/2);
$c }
$c
$c facteur=(double)NIVEAUn/seuil_superieur;
$c /* Facteur de renormalisation garantissant ("a epsilon pres") que 'seuil_inferieur' */
$c /* atteindra bien 'NIVEAUn' a la fin des iterations... */
$c
$c seuil_inferieur=NIVEAU0;
$c
$c for (rayon=RAYONmax ; rayon>=RAYONmin ; rayon=rayon+dRAYON)
$c {
$c double dniveau=facteur*((-2*RAYON*exp(-(RAYON*RAYON)/(RAYONmax*RAYONmax)))*dRAYON);
$c
$c seuil_superieur=seuil_inferieur+dniveau;
$c
$c printf("echo %cimage=%04d : IsoSurface=%.2f%c\n"
$c ,'"'
$c ,n
$c ,((seuil_inferieur+seuil_superieur)/2)*(1/(double)NIVEAUn)
$c ,'"'
$c );
$c /* Edition d'une aide au legendage des images (introduit le 20070701111757). */
$c
$c printf("$xci/accumule.02$X
$c A=$_____imagesD.
$c premiere=$_____Premiere derniere=$_____Derniere pas=$_____Pas
$c binariser=$_____Binariser
$c passe_bande=VRAI
$c seuil_inferieur=%d seuil_superieur=%d
$c seuil=$NOIR_PLANCHER
$c trx=0 try=0
$c R=$_____imagesISD.%04d
$c $formatI\n"
$c ,(int)seuil_inferieur,(int)seuil_superieur
$c ,n
$c );
$c /* Calcul des iso-surfaces... */
$c
$c printf("$xci/vraies_C$X
$c A=$_____imagesISD.%04d
$c p=$_____PaletteC
$c R=$xTV/COUCHE
$c $formatI\n"
$c ,n
$c );
$c printf("execRVB $xci/pt_isole.01$X
$c A=$xTV/COUCHE%cs
$c points=9
$c seuil=0.05
$c R=$_____imagesISD.%04d%cs
$c $formatI\n"
$c ,'%'
$c ,n
$c ,'%'
$c );
$c
$c seuil_inferieur=seuil_inferieur+(dniveau/2);
$c
$c n++;
$c }
$c }
$Z unset _____Pas
$Z unset _____Binariser
$Z # Introduit le 20070706094859 a cause de 'v $xiirk/.DIFZ.13.1.$U _____Pas' et de #
$Z # 'v $xiirk/.DIFZ.13.1.$U _____Binariser'... #