Beschreibungen und Beispiele zum Raytracer POV-Ray von Friedrich A. Lohmüller
Über Schleifen mit POV-Ray     
English English English
Italiano Italiano
Français français

Home
- POV-Ray Tutorial

  Schleifen mit POV-Ray
>1. For + While
       Vergleich
  2. Lineare
     Transformationen
  3. Zirkuläre
     Transformationen
  4. Möbius etc.
  5. Schrauben
       & Spiralen
  6. Verdrehte
       Spiralen
  7. Schnecken
       & Ammoniten
  8. Sphärische Spiralen1
  9. Sphärische Spiralen2
 10. Fibonacci Spiralen
                                         
 
 
  - Download

For-Schleife und While-Schleife - Vergleich

Die For-Schleife ist bei POV-Ray 3.7 neu implementiert (seit beta 37).
(Achtung: Die For-Schleife geht nicht mit version 3.6.2 !)
Hier ein Vergleich dieser ähnlichen Arten von Schleifen:

Um eine Kollision mit fest vordefinierten Bezeichnern und
in POV-Ray reservierten Wörter zu vermeiden,
wird dringend empfohlen, als Bezeichner für Variable und Objekte,
welche vom Benutzer definiert werden,
nur Wörter zu verwenden, die mit Großbuchstaben beginnen.

D.h. da x = <1,0,0> ein reserviertes Wört ist,
verwende man statt dessen z.B. "X".

Syntax 'While-Schleife' (while loop):

//------------------------------------
#local Identifier = Start;
#while (Identifier <= End)
  //... do something
  // depending on value of Identifier.
  #local Identifier = Identifier + Step;
#end // ------------- end of loop ----

Syntax 'For-Schleife' (for loop):

//------------------------------------
#for (Identifier, Start, End [, Step])
  //... do something
  // depending on value of Identifier.
#end // ------------- end of loop ----
Anmerkung: Step (Schrittweite) ist optional! (default Step=1)

Beispiel 'While-Schleife':

union{ //-------------------------------
 #local Cntr = 0; // start
 // while loop
 #while ( Cntr <= 5 )

   object{ MyObject
           translate<0,0,Cntr*2>
         } // end of object

 #local Cntr = Cntr + 1; // next
 #end // -------- end of #while loop

 rotate<0,0,0>
 translate<0,0,0>
} // end of union ----------------------

Beispiel 'For-Schleife':

union{ //-----------------------------

//#for (Identifier, Start, End [, Step])
 #for (Cntr, 0, 5, 1)

   object{ MyObject
           translate<0,0, Cntr*2 >
         } // end of object

 #end // ----------- end of #for loop

 rotate<0,0,0>
 translate<0,0,0>
} // end of union --------------------
Anmerkung: 5 Schritte = 6 Fußabdrücke!

Zur Deklaration von 'MyObject' siehe Szenedatei!
Szenedatei für POV-Ray: .pov oder: .txt

Die Schrittweite ('step') kann jeder beliebige reelle Zahlenwert sein!
Auch negative Werte sind erlaubt.
Die obigen Schleifen können auch in folgender Art ausgeführt werden:
While-Schleife:

 #local Cntr = 0; // start
 #while ( Cntr <= 10 )
   object{ MyObject
           translate<0,0, Cntr >
         } // end of object
 #local Cntr = Cntr + 2; // next
 #end // -------- end of #while loop
For-Schleife:

 #for (Cntr, 0, 10, 2)//..,Start,End,Step
   object{ MyObject
           translate<0,0, Cntr >
         } // end of object
 #end // ----------- end of #for loop

Warnung:  
Endlos-Schleifen zu vermeiden ist in der Verantwortung des Benutzers!
Man vergewissere sich, dass die Schleife auch wirklich nach einer endlichen Anzahl von Schritten stoppt! Andernfalls startet POV-Ray das Parsen einer endlosen Schleife und füllt das RAM endlos mit sinnlosen Daten!
Siehe folgendes Beispiel einer Schleife, die kein Ende findet
(wenigstens solange niemand auf den roten 'Stop'-Knopf drückt!):
Eine While-Schleife mit falscher Schrittweite:

#local Cntr = 0;  // start
#local End  = 5;  // end
#local Step = - 1; // step !!falsch!!
 // while loop start
 #while ( Cntr <= End )
   object{ MyObject
           translate<0,0,Cntr*2>}
 #local Cntr = Cntr + Step; // next
 #end // -------- end of while loop
Diese While-Schleife endet nie!
 
 
 
 
 
Mit einer For-Schleife ist dies nicht so dramatisch:

 #for (Cntr, 0, 5, -1)
    // do something
 #end // ------ end of #for loop
Dies 'Nonsense-For-Schleife' verursacht lediglich Nichtstun!

top

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