Home
- POV-Ray Tutorial
Casualità con POV-Ray
> Numeri casuali in Loops
- Quadratico e cubico
- Colori e Scale
- Inclinare e piegare
- Alberi con casualità
- L'include file 'rand.inc'
- height_field riempito
- Fiore casuale
- Insert Menu Add-on
& Download
|
|
Fondamenti su Numeri casuali e Loops
|
In POV-Ray c'è una funzione per generare sequenze differente di numeri casuali.
Con usare questi numeri casuali in un while loop siamo in grado di simulare con POV-Ray
distribuzioni irregolari di una apparenza molto realistica e naturale.
A rigore questa funzione genera numeri "pseudo-casuali", cioè
con ogni nuovo rendering otteniamo la stessa serie di numeri distribuiti casuali
- questo è una casualità riproducibile.
Per dimostrare quest'effetto di questa funzione di casualità usiamo un while loop per
arrangiare oggetti regolari.
Informazioni di base su l'uso while loop con POV-Ray
si trova nella sezione "While Loops con POV-Ray".
Nota: All tutti i file di scena per POV-Ray dei esempi seguenti si può scaricare
(con l'estensione '.pov' e anche come un file di tipo '.txt'!).
Prima usiamo un while loop semplice per arrangiare piccole sfere lungo l'asse x
di x = -5 a x = +5:
|
//----------------------------------
#declare Ball =
sphere{<0,0,0>,0.25
texture{
pigment{color rgb<1,0.65,0>}
finish {phong 1}
} // end of texture
} // end of sphere -----------
#declare NrX = -10; // start
#declare EndNrX = 10; // end
#while (NrX < EndNrX+1)
object{Ball translate<NrX*0.5,0,0>}
#declare NrX = NrX + 1; //next Nr
#end // ------------ end of loop ---- |
|
|
Con "#declare Random_1 = seed (1153);" definiciamo
la sequenza dei numeri casuali.
Si può usare questi valori con
"rand( Random_1 )". Ogni chiamata di questo tipo genera un alto numero casuale
suddiviso equamente con valori tra 0 e 1.
|
//-----------------------------------
#declare Rnd_1 = seed (1153);
//-----------------------------------
#declare Ball =
sphere{<0,0,0>,0.5
texture{
pigment{color rgb<1,0.65,0>}
finish {phong 1}
} // end of texture
} // end of sphere -----------
#declare NrX = -5; // start
#declare EndNrX = 5; // end
#while (NrX < EndNrX+1)
object{Ball
translate<NrX,rand(Rnd_1),0>}
#declare NrX = NrX + 1; //next Nr
#end // ------------ end of loop ---- |
|
|
Nella definizione della serie di numeri casuali
con "#declare Random_1 = seed (1153);" ogni altro numero di "seed"
genera una serie differente di numeri casuali.
Per questo possiamo sperimentare facilemente con altre serie con
numeri differenti per "seed" - è possibile che c'è
una altra sequenza di numeri produce una sequenza di numeri casuali "più bella".
Nota: Questa è una una casualità riproducibile, cioè: Con ogni rendering dello stesso file di scena
otteniamo esattamente la stessa sequenza di valori tra 0 e 1.
Numeri casuali prodotti in questa maniera per amore di esattezza si chiamano numeri pseudo-casuali.
Qualche esempio per l'uso di 'rand(...)':
valori tra 0 e 1: " rand( Random_1) "
valori tra 0 e 5: " 5*rand( Random_1) "
valori tra -1 e +1: " -1+2* rand( Random_1) " o " 2*(0.5-rand( Random_1)) "
interi tra 0 e 10: " int(10*rand(Random_1) ) "
|
//------------------------------------
#declare Rnd_1 = seed (1153);
#declare Rnd_2 = seed (553) ;
//------------------------------------
#declare Ball_1 =
sphere{<0,0,0>,0.5
texture{
pigment{color rgb<1,0.65,0>}
finish {phong 1}
} // end of texture
} // end of sphere ------------
#declare Ball_2 =
sphere{<0,0,0>,0.5
texture{
pigment{color <1,0.2.0,0>}
finish {phong 1}
} // end of texture
} // end of sphere ------------
#declare NrX = -5; // start
#declare EndNrX = 5; // end
#while (NrX < EndNrX+1)
object{Ball_1
translate<NrX,5*rand(Rnd_1),0>}
object{Ball_2
translate<NrX,2*rand(Rnd_2),0>}
#declare NrX = NrX + 1; //next Nr
#end // ------------ end of loop ------ |
|
|
top
|
© Friedrich A. Lohmüller, 2015
www.f-lohmueller.de
|
|
Visitors:
(since May-1999)
Thanks for your visit!
|
|