Beispiele zum Raytracer POV-Ray von Friedrich A. Lohmüller
English   English English version

Gitarren-Körper Themen Wendeltreppe

Rad - mit und ohne #while-Anweisung

Beispiel für die Verwendung von "#while"

Objekte:    "torus", "cylinder"
Methoden: "declare", "union", "#while"

b) Ohne while-Schleife

...
#declare SpeichenAnzahl = 16; 
#declare W = 360/SpeichenAnzahl;  
//---------------------------------------------------- Rad
union{
torus{0.9,0.20 scale <1,1,1> rotate<90,0,0>
         texture{Felgentex}} // Felge
torus{1.0,0.25 scale <1,1,1> rotate<90,0,0>
         texture{Reifentex}} // Reifen
cylinder {<0,0,-0.48>,<0,0, 0.48>,0.05
         texture{Felgentex}} // Rad-Nabe
//---------------------- ohne #while-Schleife: --------<<1

union{
 cylinder {<-1,0, 0>,<1,0, 0>,0.05 rotate<0,0, 0*W>}
 cylinder {<-1,0, 0>,<1,0, 0>,0.05 rotate<0,0, 1*W>}
 cylinder {<-1,0, 0>,<1,0, 0>,0.05 rotate<0,0, 2*W>}
 cylinder {<-1,0, 0>,<1,0, 0>,0.05 rotate<0,0, 3*W>}
 cylinder {<-1,0, 0>,<1,0, 0>,0.05 rotate<0,0, 4*W>}
 cylinder {<-1,0, 0>,<1,0, 0>,0.05 rotate<0,0, 5*W>}
 cylinder {<-1,0, 0>,<1,0, 0>,0.05 rotate<0,0, 6*W>}
 cylinder {<-1,0, 0>,<1,0, 0>,0.05 rotate<0,0, 7*W>}
 texture{Felgentex}}

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

Statt der detailierten einzelnen Aufzählung sich nur gering verändernder Anweisungen kann man in derartigen Fällen eine Wiederholungs-Schleife verwenden. Dies reduziert nicht nur die Schreibarbeit beträchtlich (sicher: man kann Textpassagen auch mit "cut and paste" leicht vervielfältigen!), sondern erlaubt es auch die Anzahl der Elemente, ebenso wie die Schrittweite in der sie wiederholt werden sollen, problemlos und schnell zu verändern.

b) Mit while-Schleife


//oder von <<1 bis <<2 --- mit while-Schleife --------->>1
#declare Nr= 0;  
#declare EndNr = SpeichenAnzahl/2;

#while ( Nr < EndNr )
  cylinder {<-1,0, 0>,<1,0, 0>,0.05
            rotate<0,0,180/EndNr*Nr>
            texture{Felgentex}}
  #declare Nr = Nr +1;
#end // ----------------------------------------------->>2
translate<0,1.25,0> rotate<0,40,0>} // end of union 
//---------------------------------------------- end ----
Sample while loop
Zugehörige Szenenbeschreibung für POV-Ray:
".txt"-Datei oder ".pov"-Datei

POVRAY verwendet als Wiederholungs-Schleife die while-Schleife. Ob der zwischen "#while" und dem zugehörigen "#end" liegende Teil ausgeführt wird, entscheidet sich durch die hinter "#while" in Klammern stehende Bedingung. Dies geschieht bereits vor Ausführung der Anweisungen in diesem Teil.
Es handelt sich dabei um die aus Programmiersprachen bekannte "vorhergeprüfte Schleife" - sogenannter "pro-checked loop". Eine aus vielen Programmiersprachen mit dem Befehl "repeat ... until" bekannte "nachhergeprüfte Schleife" - sogenannter "post-checked loop" - gibt es in POVRAY bislang nicht. Dies ist kein gravierender Mangel, da sich jede dieser Schleifen durch Umformulieren der Abbruchbedingung in eine Schleife der anderen Art umwandeln läßt.


Gitarren-Körper Themen Wendeltreppe

© Friedrich A. Lohmüller, 2004
email email: (legacy email redacted)
homepage:www.f-lohmueller.de