####################################################################################################################################### # # # 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 # # S T E R E O S C O P I Q U E S ) : # # # # # # Author of '$xiirk/.DIFZ.14.1.$U' : # # # # Jean-Francois Colonna (LACTAMME, 20070706092707). # # # ####################################################################################################################################### $Z setParam _____Pas 1 $Z # Introduit le 20070706092707 (d'ou la modification 'v $xiirk/.DIFZ.13.1.$U unset'...). # $Z SETParam _____Binariser FAUX $Z # Introduit le 20070706092707 (d'ou la modification 'v $xiirk/.DIFZ.13.1.$U unset'...). # $Z set _____imagesTS=$xTV/STEREO $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 N0 1 $c #define N 16 $c $c #define d0 -0.008 $c #define dN +0.008 $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 int k; $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 for (k=N0 ; k<=N ; k++) $c { $c double decalage_stereoscopique=((dN*(k-N0))+(d0*(N-k)))/(N-N0); $c $c printf("$xci/accumule.02$X $c A=$_____imagesD. $c premiere=$_____Premiere derniere=$_____Derniere $c pas=$_____Pas $c binariser=$_____Binariser $c passe_bande=VRAI $c seuil_inferieur=%d seuil_superieur=%d $c seuil=$NOIR_PLANCHER $c trx=%f try=0 $c R=$_____imagesTS.%04d $c $formatI\n" $c ,(int)seuil_inferieur,(int)seuil_superieur $c ,decalage_stereoscopique $c ,k $c ); $c /* Calcul des iso-surfaces... */ $c } $c $c printf("$xci/reduction_16$X $c A=$_____imagesTS. $c premiere=%d derniere=%d pas=1 $c moyenne=VRAI $c R=$_____imagesRS.%04d$R16 $c $formatI\n" $c ,N0,N $c ,n $c ); $c /* Calcul des iso-surfaces stereoscopiques... */ $c $c seuil_inferieur=seuil_inferieur+(dniveau/2); $c $c n++; $c } $c }