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