#######################################################################################################################################
#                                                                                                                                     #
#         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'...                                                  #



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.