Descriptions et exemples pour le raytracer POV-Ray par Friedrich A. Lohmüller
Le hasard en POV-Ray - part 1     
English English English
Italiano Italiano
Deutsch Deutsch

Home- Page d'accueil
- Tutoriel POV-Ray

- Hasard en POV-Ray
  > Nombres aléatoires
   - Quadratique et cubique
   - 'color' et 'scale'
   - Basculer et incliner
   - Les arbres avec hazard
   - Le fichier 'rand.inc'
   - height_field rempli
   - Fleur aléatoire

  - Insert Menu Add-on
    & Téléchargement
                                   
 Les nombres aléatoires en boucles.      

En POV-Ray il y a une fonction intégrée laquelle nous permettons d'obtenir des séries des nombres aléatoires. Avec l'usage des ces nombres aléatoires en boucle 'while' nous pouvons simuler en POV-Ray des distibutions avec des apparences très réaliste et très naturelles.
À vrai dire cette fonction renvoie "nombres pseudo-aléatoire", autant dire que cela permettent d'obtenir des nombres aléatoires dont la succession ne varie pas d'un rendu à l'autre - un hazard reproductible.
Pour démontrer cet effet de cette fonction nous utilisons un boucle 'while' pour arranger des objets à intervalles égaux. Le fondaments des boucles 'while' avec POV-Ray sont expliqué dans la section " Boucles 'while' avec POV-Ray ".
Note : Tous les fichiers de scènes POV-Ray des exemples suivants on peut télécharger (avec l'extension: .pov, ou come fichiers .txt !).
 
Au début nous utilissons un boucle simple pour arranger des sphères petites le long du axe x de x = -5 à 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 ----

Avec "#declare Random_1 = seed (1153);" nous definissons une succession infiniment longue de valeurs aléatoires avec un paramètre appelé seed ("graine", en anglais).
Nous engendrons ces valeurs par "rand( Random_1 )". Chaque appel de ce commande engendre produit un autre nombre aléatoire avec le valeur distribué entre 0 et 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 ----

Dans la définition d'une succession infiniment longue de valeurs aléatoires par "#declare Random_1 = seed (1153);" chaque 'seed' donnera toujours une autre suite de nombres. Pour cela nous pouvons essayer très facile une autre suite de nombres avec un 'seed' différent - peut-être un autre 'seed' produit une suite de nombres plus joli.
Note: C'est un hazard reproductible, c'est à dire : un même 'seed' donnera toujours la même suite de nombres avec valeurs entre 0 et 1. ( nombres pseudo-aléatoire ).
Quelques Exemples per l'usage de 'rand( ... )' :
Valeurs entre 0 et 1 :     " rand( Random_1) " .
Valeurs entre 0 et 5 :     " 5*rand( Random_1) "
Valeurs entre -1 et +1 : " -1+2* rand( Random_1) " ou " 2*(0.5-rand( Random_1)) "
Entiers entre 0 et 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 ------







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


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