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