Descrizioni ed esempi per POV-Ray di Friedrich A. Lohmüller,

Casualità con POV-Ray  - parte 1    
English English English
Français français
Deutsch Deutsch

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

 
 
File di scena per POV-Ray .pov o .txt

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 ----
File di scena per POV-Ray .pov o .txt

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 ------
File di scena per POV-Ray .pov o .txt






0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
top

© Friedrich A. Lohmüller, 2015
www.f-lohmueller.de
 
Visitors:
(since May-1999)
Thanks for your visit!