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