Home
- POV-Ray Tutorial
Loops,
seni e coseni
in POV-Ray
1. Onde lineare
>2. Gira e rigira...!
Onde concentriche
3. Tappeti volanti
- Download
|
Seni e coseni strutturati in onde concentriche
Sino ad ora abbiamo applicato la funzione sin(A) solo lungo l'asse X.
Si ottiene un notevole effetto se moduliamo una funzione sin(A) ai punti Y
di una sfera in relazione alla loro distanza dal centro La distanza
di un punto dall'origine in un sistema di assi cartesiani si calcola
col teorema di pitagora.
|
#declare Ball =
sphere{<0,0,0>,0.25
texture{
pigment{color rgb<1,0.65,0.0>}
finish {diffuse 0.9 phong 1}
}// end of texture
}// end of sphere
#declare Z = -5; // start value Z
#declare EndZ = 5;// end value Z
#declare Step = 0.5;// step value
//----------- loop start Z :
#while ( Z < EndZ + Step)
#declare X = -5; // start value X
#declare EndX = 5; // end value X
//------------ loop start X:
#while ( X < EndX + Step)
// calculazione
// della distanza dall'origine:
#declare R = sqrt(X*X + Z*Z);
// modulato dipendente di R:
object{ Ball translate < X, sin(2*R),Z>}
#declare X = X + Step; //next X value
#end // ------------------- loop end X
#declare Z = Z + Step; //next Z value
#end // ------------------ loop end Z |
|
|
Modificando come segue:
#declare R = sqrt(X*X + Z*Z);
#if (R < 5)
object{Ball translate< X, cos(2*R), Z>}
#end |
limitate la distanza tra l'asse Y ed R < 5
ed usate cos(A) invece del seno. Il risultato è quanto segue:
|
|
Riducendo il raggio ed aumentando la densità delle sfere si aumenta
a dismisura il numero delle stesse. Nell'immagine seguente ci sono
circa 20000 sfere per un'occupazione totale di 14 MB di RAM In più
il valore y delle sfere è stato definito inversamente proporzionale
alla distanza R dal centro dell'asse delle y.
|
#declare Ball =
sphere{<0,0,0>,0.25
texture{
pigment{color rgb<1,0.65,0.0>}
finish {diffuse 0.9 phong 1}
}// end of texture
}// end of sphere
#declare E = 8;
#declare Z = -E; // start value Z
#declare EndZ = E; // end value Z
#declare Step = 0.1;// step value
//------ loop start Z:
#while ( Z < EndZ + Step)
#declare X = -E; // start value X
#declare EndX = E; // end value X
//------- loop start 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 // ------------------- loop end X
#declare Z = Z + Step; // next Z value
#end // --------------------- loop end Z |
|
|
|