Descriptions et exemples pour le POV-Ray raytracer par Friedrich A. Lohmueller,

Boucles avec POV-Ray     
English English English
Italiano Italiano
Deutsch Deutsch

Page d'Accueil
- Tutoriel POV-Ray

  Boucles en POV-Ray
>1. 'For' et 'While'
       Comparaison
  2. Transformations
       Linéaires
  3. Transformations
       Circulaires
  4. Moebius etc.
  5. Vis, Hélices
       et Spirales
  6. Spirales
       avec Torsion
  7. Coquilles
       d'Escargot
       et Ammonites
  8. Spirales sphériques 1
  9. Spirales sphériques 2
 10. Spirales Fibonacci
                                               
 
 
  - Téléchargement

Boucles 'tant que' et Boucles 'for' - Une Comparaison.

Le boucle 'for' est à disposition en POV-Ray 3.7 ( depuis beta 37 ).
(Attention : Le boucle 'for' ne marche pas avec la version 3.6.2 !)
Ici une comparaison de ces boucles :

Pour eviter chaque collision avec des noms incorporés et des mots réservés de POV-Ray,
il est très recommandé de utiliser seulement des mots que commencent avec des capitals (lettres majuscules)

pour tous les noms des variables declarés par le utilisateur.
On doit tenir compte que x = <1,0,0> est un mot réservé, on prend au lieu par ex. "X".

Syntaxe 'While Loop' (while loop) :

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

Syntaxe 'For Loop' (for loop) :

//------------------------------------
#for (Identifier, Start, End [, Step])
  //... do something
  // depending on value of Identifier.
#end // ------------- end of loop ----
Note: Step (longueur de pas) est optionnel !
(default Step=1)

Exemple 'While Loop':

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

Exemple 'For Loop':

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 --------------------
Note: 5 pas = 6 empreintes des pas!

Pour la déclaration de 'MyObject' voir le fichier de la scène!
Fichier de la scène pour POV-Ray: .pov ou: .txt

La longueur de pas ('step') peut être chaque nombre réel!
Aussi des valeurs negatives sont permis.
Les boucles ci-dessus on peut aussi faire dans cette manière :
while loop:

 #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 loop:

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

Attention :   Eviter des boucle sans fin est votre propre risc de faire !
On doit s'assurer que la boucle s'arrête vraiment après un nombre limité des pas !
Autrement POV-Ray fait le parsing d'une boulce sans fin avec verser des données inutiles dans le RAM sans fin!
Voir l'exemple suivant d'une boucle que finisse jamais
(au moins si on n'a pas pressé le bouton rouge de 'Stop') :
Une boucle while avec une longueur de pas erronée :

#local Cntr = 0;  // start
#local End  = 5;  // end
#local Step = - 1; // step !!wrong!!
 // while loop start
 #while ( Cntr <= End )
   object{ MyObject
           translate<0,0,Cntr*2>}
 #local Cntr = Cntr + Step; // next
 #end // -------- end of while loop
Il s'agit d'une boucle sans fin !
 
 
 
 
 
Avec une boucle for cela n'est pas si dramatique :

 #for (Cntr, 0, 5, -1)
    // faire quelque chose
 #end // ------ end of #for loop
Cette boucle for type 'nonsense' cause seulement un farniente!

top

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