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