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