Descriptions et exemples pour le raytracer POV-Ray par Friedrich A. Lohmüller
Boucles, Sinus, Cosinus et POV-Ray     
English English English
Italiano Italiano
Deutsch Deutsch

Home - Page d'accueil
- Tutoriel POV-Ray
   Boucles avec
   Sinus, Cosinus
   et POV-Ray
   1. Ondes linéaires.
 >2. Ondes
       concentriques.
   3. Tapis volants.
                                              - Téléchargement

Ondes concentriques

Jusqu'ici nous avons employée la fonction de sinus seulement en direction x. Un effet très attirant résulte si nous employons une modulation avec sinus de la position y de chaque sphère dépendant de sa distance du centre.
La distance d'un point de l'origine dans un système de coordonnées on peut calculer par la racine carrée della somme du carré de valeur x et le carré de valeur z - ce que a découvert monsieur Pythagore avant quelque temps.

#declare Ball =
 sphere{<0,0,0>,0.25
   texture{
     pigment{color rgb<1,0.65,0.0>}
     finish {diffuse 0.9 phong 1}
    }// fin de texture
 }// fin de sphere

#declare Z = -5; // start value Z
#declare EndZ = 5;//  end value Z
#declare Step = 0.5;// step value
//--- début de boucle Z :
#while ( Z < EndZ + Step)

  #declare X = -5;   // start value X
  #declare EndX = 5; //   end value X
  //---- début de boucle X:
  #while ( X < EndX + Step)

    // Le calcule
    // de la distance à l'origine:
    #declare R = sqrt(X*X + Z*Z);
    // modulé dépendant de R:
    object{ Ball
     translate < X, sin(2*R),Z>}

  #declare X = X+Step; // next X  value
  #end // -------- fin de boucle X

#declare Z = Z+Step; // next Z value
#end // ---------- fin de boucle Z

Modifié avec
#declare R = sqrt( X * X + Z * Z);
  #if (R < 5)
  object{Ball translate< X, cos(2*R), Z>}
  #end
on peut limiter la distance del´axe y à R < 5
et on peut utiliser cos(A) au lieu de sinus :


Réduire le rayon et augmenter la densité des sphères augmente le nombre des objets à calculer immense - dans la scène suivante sont à peu près de 20000 sphères et on a besoin de 15 Mo RAM pour calculer cette scène.
Ici en plus le valeur y des sphères est modulé inversement proportionnel au distance du centre.

#declare Ball =
 sphere{<0,0,0>,0.25
   texture{
     pigment{color rgb<1,0.65,0.0>}
     finish {diffuse 0.9 phong 1}
    }// fin de texture
 }// fin de sphere

#declare E = 8;
#declare Z = -E;    // start value Z
#declare EndZ = E;  //   end value Z
#declare Step = 0.1;// step value
//--- début de boucle Z:
#while ( Z < EndZ + Step)

  #declare X = -E;    // start value X
  #declare EndX = E;  //   end value X
  //-- début de boucle X:
  #while ( X < EndX + Step)
    #declare R = sqrt( X * X + Z * Z);
    #if (R < E)
     object{ Ball
     translate<X,5/(R+1)*cos(2*R),Z>}
    #end // of "#if (R < E)"
  #declare X = X+Step;// next X value
  #end // ---------- fin de boucle X

#declare Z = Z+Step;// next Z value
#end // ---------- fin de boucle Z

1. Ondes linéaires. 3. Sur tapis volants.
top

© Friedrich A. Lohmüller, 2011
www.f-lohmueller.de