Beschreibungen und Beispiele zum Raytracer POV-Ray von Friedrich A. Lohmüller
Schleifen, Sinus, Kosinus und POV-Ray     
English English English
Italiano Italiano
Français français

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

top

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