#######################################################################################################################################
#                                                                                                                                     #
#         G E N E R A T I O N   D ' U N   E N T R E L A C S   D Y N A M I Q U E   A L E A T O I R E  :                                #
#                                                                                                                                     #
#                                                                                                                                     #
#         Author of '$xiirv/.ENTR.51.2.$U' :                                                                                          #
#                                                                                                                                     #
#                     Jean-Francois Colonna (LACTAMME, 20051120115412).                                                               #
#                                                                                                                                     #
#######################################################################################################################################

$Z                  SETParam            Premiere                      1

$Z                  SETParam            Derniere                      64

$Z                  setParam            _____NPoints                  20
$Z                                      # Donne le nombre de points qui vont etre generes ; le nombre d'arcs, lui sera fonction de    #
$Z                                      # $_____NPoints et de {$_____NInferieur,$_____NSuperieur}. On notera qu'evidemment, dans      #
$Z                                      # le processus aleatoire qui va suivre, un meme point peut etre duplique un nombre de fois    #
$Z                                      # choisi aleatoirement dans {$_____NInferieur,$_____NSuperieur}...                            #

$Z                  setParam            _____NInferieur               1
$Z                                      # Definit le nombre inferieur de duplications autorisees.                                     #

$Z                  setParam            _____NSuperieur               8
$Z                                      # Definit le nombre superieur de duplications autorisees.                                     #

$Z                  setParam            _____Graine                   1234567

$Z                  setParam            _____Increment                123

$Z                  setParam            _____MinX                     0.0

$Z                  setParam            _____MaxX                     1.0

$Z                  setParam            _____MinY                     0.0

$Z                  setParam            _____MaxY                     1.0

$Z                  setParam            _____MinZ                     0.0

$Z                  setParam            _____MaxZ                     1.0

$Z                  setParam            _____NiveauR_D                $GRIS_1

$Z                  setParam            _____NiveauV_D                $GRIS_1

$Z                  setParam            _____NiveauB_D                $GRIS_1

$Z                  setParam            _____NiveauR_A                $GRIS_8

$Z                  setParam            _____NiveauV_A                $GRIS_8

$Z                  setParam            _____NiveauB_A                $GRIS_8

$Z                  setParam            _____RayonInf                 0.01

$Z                  setParam            _____RayonSup                 $_____RayonInf

$Z                  setParam            _____Grossissement            1
$Z                                      # Parametre introduit le 20051123102635...                                                    #

$Z                  setParam            _____Zoom                     0.8

$Z                  setParam            _____RotationOX               0.0

$Z                  setParam            _____RotationOY               0.0

$Z                  setParam            _____RotationOZ               0.0

$Z                  setParam            _____Points                   32

$Z                  setParam            _____NombreR                  8

$Z                  setParam            _____Derivee                  1.0

$Z                  alias     Graines   'set       VaRiAbLe="\!*"                                                                 ;    \\
$Z                                       GenRdn                                                                                   ;    \\
$Z                                       eval      "set $VaRiAbLe=$GenRdnValeur"                                                  ;    \\
$Z                                       unset     VaRiAbLe FiLeT'
$Z                                      # Generateur des differentes graines ...                                                      #
$Z
$Z                  set       GenRdnGraine=$_____Graine
$Z                  set       GenRdnIncrement=$_____Increment
$Z                                      # Parametrage du generateur aleatoire...                                                      #
$Z
$Z                  Graines   Graine_S
$Z                  Graines   Graine_P

$Z                  $DELETE   $xTV/DUPLICATEUR

$Z                  $xrv/val_alea.01$X  ne=$_____NPoints                                                                                \
$Z                                      graine=$Graine_S                                                                                \
$Z                                      LISTE_BORNES_INFERIEURES=$_____NInferieur                                                       \
$Z                                      LISTE_BORNES_SUPERIEURES=$_____NSuperieur                                                       \
$Z                                      formater=VRAI entiers=VRAI                                                                      \
$Z                                      message_borne_superieure_entiere=FAUX                                                           \
$Z                                      exemplaires=1                                                                                   \
$Z                                                                                                  > $xTV/DUPLICATEUR
$Z                                      # Les valeurs aleatoires generees ci-apres via 'GenAlea' ou 'GenAleaC' seront dupliquees      #
$Z                                      # individuellement un nombre variable de fois defini par '$xTV/DUPLICATEUR'.                  #

$Z                  set       PaRaMeTrEs="somme=VRAI produit=FAUX Men_tete=FAUX"
$Z                  set       NParticules_s2=`$xrv/cumul.01$X ne=$_____NPoints fichier=$xTV/DUPLICATEUR $PaRaMeTrEs signe="$K_VIDE"`

$Z                  set       NSegment=2
$Z                  @         NParticules = $NParticules_s2 * $NSegment

$Z                  $DELETE   $xTV/PERMUTATEUR

$Z                  $xci/valeurs_alea$X premiere=1 derniere=$NParticules_s2                                                             \
$Z                                      graine=$Graine_P                                                                                \
$Z                                      inf=1                                                                                           \
$Z                                      sup=$NParticules_s2                                                                             \
$Z                                      entiers=VRAI sans_collisions=VRAI                                                               \
$Z                                      message_borne_superieure_entiere=FAUX                                                     |&    \
$Z                  $xrv/SOUS.11$X      ne=0                                                                                            \
$Z                                      fichier1="="                                                                                    \
$Z                                      fichier2=-1                                                                                     \
$Z                                                                                                  > $xTV/PERMUTATEUR
$Z                                      # Ensuite, les valeurs aleatoires dupliquees via '$xTV/DUPLICATEUR' seront permutees          #
$Z                                      # aleatoirement via '$xTV/PERMUTATEUR'...                                                     #

$Z                  alias     GenAlea   'set       Gr=\!:1 ; set In=\!:2 ; set Su=\!:3 ; set FiR=\!:4                             ;    \\
$Z                                       $DELETE   $FiR                                                                           ;    \\
$Z                                       $xrv/val_alea.01$X  ne=$_____NPoints graine=$Gr                                               \\
$Z                                                           LISTE_BORNES_INFERIEURES=$In LISTE_BORNES_SUPERIEURES=$Su                 \\
$Z                                                                                                                      > $FiR    ;    \\
$Z                                       unset     Gr In Su FiR'
$Z                  alias     GenAleaC  'set       Gr=\!:1 ; set In=\!:2 ; set Su=\!:3 ; set FiR=\!:4                             ;    \\
$Z                                       $DELETE   $FiR                                                                           ;    \\
$Z                             set       InD=`calcul -($Su-$In)/$_____FBrownien` ; set SuD=`calcul +($Su-$In)/$_____FBrownien`    ;    \\
$Z                                       $xrv/val_alea.01$X  ne=$_____NPoints graine=$Gr brownien=VRAI iterer=VRAI                     \\
$Z                                                 LISTE_BORNES_INFERIEURES_CUMULEES=$In LISTE_BORNES_SUPERIEURES_CUMULEES=$Su         \\
$Z                                                 LISTE_BORNES_INFERIEURES=$InD LISTE_BORNES_SUPERIEURES=$SuD                         \\
$Z                                                                                                                      > $FiR    ;    \\
$Z                                       unset     Gr In Su InD SuD FiR'

$Z                  alias     GenDupl   'set       FiA=\!:1 ; set FiR=\!:2                                                        ;    \\
$Z                                       $DELETE   $FiR                                                                           ;    \\
$Z                                       $xrv/duplique.01$X  ne=$_____NPoints                                                          \\
$Z                                                           exemplaires=$xTV/DUPLICATEUR                                              \\
$Z                                                           fichier=$FiA                                                         |    \\
$Z                                       $xrv/permute.11$X   ne=0                                                                      \\
$Z                                                           fichier==                                                                 \\
$Z                                                           permutation=$xTV/PERMUTATEUR                                         |    \\
$Z                                       $xrv/duplique.01$X  ne=0                                                                      \\
$Z                                                           fichier==                                                                 \\
$Z                                                           exemplaires=$NSegment                                     > $FiR     ;    \\
$Z                                       decaleC   $FiR      1                                                                    ;    \\
$Z                                       unset     FiA FiR'

$Z                  Graines   Graine_X
$Z                  Graines   Graine_Y
$Z                  Graines   Graine_Z

$Z                  if        ($?_____FBrownien == $EXIST) then
$Z                            GenAleaC  $Graine_X $_____MinX $_____MaxX $xTV/ALEATOIRES$COORD_X
$Z                            GenAleaC  $Graine_Y $_____MinY $_____MaxY $xTV/ALEATOIRES$COORD_Y
$Z                            GenAleaC  $Graine_Z $_____MinZ $_____MaxZ $xTV/ALEATOIRES$COORD_Z
$Z                  else
$Z                            GenAlea   $Graine_X $_____MinX $_____MaxX $xTV/ALEATOIRES$COORD_X
$Z                            GenAlea   $Graine_Y $_____MinY $_____MaxY $xTV/ALEATOIRES$COORD_Y
$Z                            GenAlea   $Graine_Z $_____MinZ $_____MaxZ $xTV/ALEATOIRES$COORD_Z
$Z                  endif

$Z                  GenDupl   $xTV/ALEATOIRES$COORD_X $xTV/COORDONNEES.1$COORD_X
$Z                  GenDupl   $xTV/ALEATOIRES$COORD_Y $xTV/COORDONNEES.1$COORD_Y
$Z                  GenDupl   $xTV/ALEATOIRES$COORD_Z $xTV/COORDONNEES.1$COORD_Z
$Z                                      # Generation des coordonnees des points du premier entrelacs.                                 #

$Z                  Graines   Graine_R
$Z                  Graines   Graine_V
$Z                  Graines   Graine_B

$Z                  Graines   Graine_r
$Z                                      # La logique voudrait que la generation de ces graines soient faites apres celle des          #
$Z                                      # coordonnees ci-apres, mais cela est destine a assurer la compatibilite des formes et        #
$Z                                      # des couleurs avec 'v $xiirv/.ENTR.51.1.$U'...                                               #

$Z                  Graines   Graine_X
$Z                  Graines   Graine_Y
$Z                  Graines   Graine_Z

$Z                  if        ($?_____FBrownien == $EXIST) then
$Z                            GenAleaC  $Graine_X $_____MinX $_____MaxX $xTV/ALEATOIRES$COORD_X
$Z                            GenAleaC  $Graine_Y $_____MinY $_____MaxY $xTV/ALEATOIRES$COORD_Y
$Z                            GenAleaC  $Graine_Z $_____MinZ $_____MaxZ $xTV/ALEATOIRES$COORD_Z
$Z                  else
$Z                            GenAlea   $Graine_X $_____MinX $_____MaxX $xTV/ALEATOIRES$COORD_X
$Z                            GenAlea   $Graine_Y $_____MinY $_____MaxY $xTV/ALEATOIRES$COORD_Y
$Z                            GenAlea   $Graine_Z $_____MinZ $_____MaxZ $xTV/ALEATOIRES$COORD_Z
$Z                  endif

$Z                  GenDupl   $xTV/ALEATOIRES$COORD_X $xTV/COORDONNEES.2$COORD_X
$Z                  GenDupl   $xTV/ALEATOIRES$COORD_Y $xTV/COORDONNEES.2$COORD_Y
$Z                  GenDupl   $xTV/ALEATOIRES$COORD_Z $xTV/COORDONNEES.2$COORD_Z
$Z                                      # Generation des coordonnees des points du premier entrelacs.                                 #

$Z                  GenAlea   $Graine_R $_____NiveauR_D $_____NiveauR_A $xTV/ALEATOIRES$ROUGE
$Z                  GenAlea   $Graine_V $_____NiveauV_D $_____NiveauV_A $xTV/ALEATOIRES$VERTE
$Z                  GenAlea   $Graine_B $_____NiveauB_D $_____NiveauB_A $xTV/ALEATOIRES$BLEUE

$Z                  GenDupl   $xTV/ALEATOIRES$ROUGE $xTV/COULEURS$ROUGE
$Z                  GenDupl   $xTV/ALEATOIRES$VERTE $xTV/COULEURS$VERTE
$Z                  GenDupl   $xTV/ALEATOIRES$BLEUE $xTV/COULEURS$BLEUE
$Z                                      # Generation des couleurs des points...                                                       #

$Z                  GenAlea   $Graine_r $_____RayonInf $_____RayonSup $xTV/ALEATOIRES

$Z                  GenDupl   $xTV/ALEATOIRES $xTV/RAYONS
$Z                                      # Generation des rayons des points...                                                         #

$X                  echo      "neutre"
$X                                      # commande destinee uniquement a mettre a jour l'environnement 'env'...                       #

$c                  #include  <stdio.h>
$c
$c                  #define   N0        Premiere
$c                  #define   N         Derniere
$c
$c                  #define   Interpole(D,A,n,N0,N)         ((N==N0) ? (D) : (((double)((A*(n-N0))+(D*(N-n))))/((double)(N-N0))))
$c
$c                  int       main()
$c                            {
$c                            int       n;
$c
$c                            for       (n=N0 ; n<=N ; n++)
$c                                      {
$c                                      double    lambda=Interpole(0.0,1.0,n,N0,N);
$c
$c                                      printf("$DELETE     $xTV/COORDONNEES$COORD_X\n");
$c                                      printf("$DELETE     $xTV/COORDONNEES$COORD_Y\n");
$c                                      printf("$DELETE     $xTV/COORDONNEES$COORD_Z\n");
$c
$c                                      printf("$xrv/BARY.11$X
$c                                                          ne=$NParticules
$c                                                          lambda=%f
$c                                                          fichier1=$xTV/COORDONNEES.1$COORD_X
$c                                                          fichier2=$xTV/COORDONNEES.2$COORD_X
$c                                                                                                  >   $xTV/COORDONNEES$COORD_X\n"
$c                                            ,lambda
$c                                             );
$c                                      printf("$xrv/BARY.11$X
$c                                                          ne=$NParticules
$c                                                          lambda=%f
$c                                                          fichier1=$xTV/COORDONNEES.1$COORD_Y
$c                                                          fichier2=$xTV/COORDONNEES.2$COORD_Y
$c                                                                                                  >   $xTV/COORDONNEES$COORD_Y\n"
$c                                            ,lambda
$c                                             );
$c                                      printf("$xrv/BARY.11$X
$c                                                          ne=$NParticules
$c                                                          lambda=%f
$c                                                          fichier1=$xTV/COORDONNEES.1$COORD_Z
$c                                                          fichier2=$xTV/COORDONNEES.2$COORD_Z
$c                                                                                                  >   $xTV/COORDONNEES$COORD_Z\n"
$c                                            ,lambda
$c                                             );
$c
$c                                      printf("$xrv/particule.10$X np=1 iterations=$NParticules
$c                                                          LISTE_X=$xTV/COORDONNEES$COORD_X
$c                                                          LISTE_Y=$xTV/COORDONNEES$COORD_Y
$c                                                          LISTE_Z=$xTV/COORDONNEES$COORD_Z
$c                                                          grossissement=$_____Grossissement
$c                                                          LISTE_RAYON=$xTV/RAYONS
$c                                                          LISTE_ROUGE=$xTV/COULEURS$ROUGE
$c                                                          LISTE_VERTE=$xTV/COULEURS$VERTE
$c                                                          LISTE_BLEUE=$xTV/COULEURS$BLEUE
$c                                                          Lz=1000 ZOOM=$_____Zoom
$c                                                          ROTATION_OX=$_____RotationOX
$c                                                          ROTATION_OY=$_____RotationOY
$c                                                          ROTATION_OZ=$_____RotationOZ
$c                                                          isoles=FAUX chainer=FAUX
$c                                                          ajuster_points=VRAI points=$_____Points nombreR=$_____NombreR
$c                                                          cubique=VRAI
$c                                                          LISTE_dX=$_____Derivee
$c                                                          LISTE_dY=$_____Derivee
$c                                                          LISTE_dZ=$_____Derivee
$c                                                          RVB=VRAI
$c                                                          R=$_____ImageR.%04d
$c                                                          chiffres=0
$c                                                                                                                      $formatI\n"
$c                                            ,n
$c                                             );
$c                                      /* Visualisation de l'entrelacs courant...                                                   */
$c                                      }
$c                            }

$Z                  $DELETE   $xTV/DUPLICATEUR
$Z                  $DELETE   $xTV/PERMUTATEUR
$Z                  $DELETE   $xTV/ALEATOIRES$COORD_X
$Z                  $DELETE   $xTV/ALEATOIRES$COORD_Y
$Z                  $DELETE   $xTV/ALEATOIRES$COORD_Z
$Z                  $DELETE   $xTV/COORDONNEES.1$COORD_X
$Z                  $DELETE   $xTV/COORDONNEES.1$COORD_Y
$Z                  $DELETE   $xTV/COORDONNEES.1$COORD_Z
$Z                  $DELETE   $xTV/COORDONNEES.2$COORD_X
$Z                  $DELETE   $xTV/COORDONNEES.2$COORD_Y
$Z                  $DELETE   $xTV/COORDONNEES.2$COORD_Z
$Z                  $DELETE   $xTV/COORDONNEES$COORD_X
$Z                  $DELETE   $xTV/COORDONNEES$COORD_Y
$Z                  $DELETE   $xTV/COORDONNEES$COORD_Z
$Z                  $DELETE   $xTV/ALEATOIRES$ROUGE
$Z                  $DELETE   $xTV/ALEATOIRES$VERTE
$Z                  $DELETE   $xTV/ALEATOIRES$BLEUE
$Z                  $DELETE   $xTV/COULEURS$ROUGE
$Z                  $DELETE   $xTV/COULEURS$VERTE
$Z                  $DELETE   $xTV/COULEURS$BLEUE
$Z                  $DELETE   $xTV/ALEATOIRES
$Z                  $DELETE   $xTV/RAYONS



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