Home
- POV-Ray Tutorial
Schleifen,
Sinus, Kosinus
und POV-Ray
1. Lineare Wellen
>2. Jetzt geht's rund!
3. Fliegende
Teppiche
- Download
|
Sinus und Kosinus rund geschleift
- konzentrische Wellen -
Bisher wurde der Sinus nur in x-Richtung angewandt. Ein
besonders reizvoller Effekt ergibt sich jedoch, wenn man die
Sinus-Modulation der y-Lage der einzelnen Kugeln von ihrem
Abstand von der y-Achse abhängig macht. Hierzu sei daran
erinnert, daß der Abstand eines Punktes in kartesischen
Koordinaten mittels Pythagoras zu berechnen ist (d.h. Abstand R =
Wurzel aus (X Quadrat plus Z Quadrat)! ).
|
#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
//----- Schleifen-Anfang Z :
#while ( Z < EndZ + Step)
#declare X = -5; // start value X
#declare EndX = 5; // end value X
//----- Schleifen-Anfang 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 // ---------- Schleifen-Ende X
#declare Z = Z+Step;//next Z value
#end // --------- Schleifen-Ende Z |
|
|
Modifiziert mit
#declare R = sqrt(X*X + Z*Z);
#if (R < 5)
object{Ball translate<X,cos(2*R),Z>}
#end |
begrenzt man den Abstand von der y-Achse auf R < 5
und verwendet cos(A) anstelle des Sinus:
|
|
Verkleinert man den Kugelradius und erhöht ihre Dichte so
erhöht sich die Kugelzahl schnell beträchtlich - bei folgender
Szene sind rund 20 000 Kugeln im Spiel und werden etwa 14 MB RAM
benötigt. Zusätzlich wurde der y-Wert der Kugeln umgekehrt
proportional zum Abstand R von der Mittelachse moduliert.
|
#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; // Startwert Z
#declare EndZ = E; // Endwert Z
#declare Step = 0.1;// step value
//------ Schleifen-Anfang Z:
#while ( Z < EndZ + Step)
#declare X = -E; // Startwert X
#declare EndX = E; // Endwert X
//------- Schleifen-Anfang 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 // ----------Schleifen-Ende X
#declare Z = Z+Step;// next Z value
#end // ----------Schleifen-Ende Z |
|
|
|
|