#######################################################################################################################################
# #
# 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 }