« Povray/tutorials/Loop » : différence entre les versions
Aller à la navigation
Aller à la recherche
Aucun résumé des modifications |
|||
| Ligne 4 : | Ligne 4 : | ||
{{Admon/note|Fichiers inclus|Tous les fichiers de scène de POV-Ray des échantillons suivants sont téléchargeables. La plupart des fichiers de scène de POV-Ray emploient le [[Media:PovrayTutoIncludeAxis.inc|fichier d'inclusion pour le système de coordonnées]]. Ce dernier a besoin d'un [[Media:PovrayTutoFont.ttf|fichier de font]].}} | {{Admon/note|Fichiers inclus|Tous les fichiers de scène de POV-Ray des échantillons suivants sont téléchargeables. La plupart des fichiers de scène de POV-Ray emploient le [[Media:PovrayTutoIncludeAxis.inc|fichier d'inclusion pour le système de coordonnées]]. Ce dernier a besoin d'un [[Media:PovrayTutoFont.ttf|fichier de font]].}} | ||
== | == Transformations linéaires == | ||
{{Povray/tuto|D'abord nous considérons une boucle simple qui place de petites sphères le long de l'axe de <nowiki>x, de x = -5 à x = +5</nowiki> | {{Povray/tuto|D'abord nous considérons une boucle simple qui place de petites sphères le long de l'axe de <nowiki>x, de x = -5 à x = +5</nowiki> | ||
| Ligne 85 : | Ligne 85 : | ||
Avec cet échantillon, nos possibilités, considérée comme de pures transformations linéaires avec imbrication de boucles, nous semblons bien avoir parcouru tout notre monde tridimensionnel. | Avec cet échantillon, nos possibilités, considérée comme de pures transformations linéaires avec imbrication de boucles, nous semblons bien avoir parcouru tout notre monde tridimensionnel. | ||
== Transformations Circulaires == | |||
{{Povray/tuto|Jusqu'ici la boucle while a été seulement employée avec le mouvement de translation. Un effet intéressant résulte si nous employons le mouvement de rotation de la même manière. | |||
<syntaxhighlight lang="povray"> | |||
//---------------------------------- | |||
#declare Ball = | |||
sphere{<0,0,0>,0.6 | |||
texture{pigment{color Red} | |||
finish {ambient 0.15 | |||
diffuse 0.85 | |||
phong 1} | |||
} | |||
} | |||
#declare Radius = 3.00; | |||
#declare Nr = 0; // start | |||
#declare EndNr = 30; // end | |||
#while (Nr< EndNr) | |||
object{Ball | |||
translate<Radius,0,0> | |||
rotate<0,Nr*360/EndNr,0>} | |||
#declare Nr=Nr+1;//next Nr_minor | |||
#end // -------- fin de boucle ---- | |||
</syntaxhighlight> | |||
| [[Fichier:PovrayTutoLoop04.png|vignette|Simple boucle<br>[[Media:PovrayTutoLoop04.pov|Fichier POVRay correspondant]]]] | |||
}} | |||
{{Povray/tuto|Si nous laissons en plus tourner les sphères autour de la direction de z, nous obtenons une spirale circulaire : | |||
<syntaxhighlight lang="povray"> | |||
//---------------------------------- | |||
#declare Ball = | |||
sphere{<0,0,0>,0.25 | |||
texture{..see above..}}} | |||
#declare R_major = 3.00; | |||
#declare R_minor = 1.00; | |||
#declare N_major = 10; | |||
#declare N_minor = 430; | |||
#declare Nr = 0; // start | |||
#declare EndNr=N_major*N_minor;// end | |||
#while (Nr < EndNr) | |||
object{Ball | |||
translate<R_minor,0,0> | |||
rotate<0,0,Nr * 360/N_minor> | |||
translate<R_major,0,0> | |||
rotate<0,Nr * 360/EndNr,0>} | |||
#declare Nr = Nr+1;//next Nr | |||
#end // ------ fin de boucle ------- | |||
</syntaxhighlight> | |||
| [[Fichier:PovrayTutoLoop05.png|vignette|Spirale<br>[[Media:PovrayTutoLoop05.pov|Fichier POVRay correspondant]]]] | |||
}} | |||
{{Povray/tuto|Si nous continuons ce petit jeu, nous obtenons une double spirale ciorculaire - le nombre de sphères devient énorme - dans le paysage suivant là sommes environ 25 000 boules sur le champ et environ 17 Mo de RAM ont été employées. | |||
<syntaxhighlight lang="povray"> | |||
#declare Ball = | |||
sphere{<0,0,0>,0.1 | |||
texture{.. see above..}}} | |||
//-------------------------------- | |||
#declare R_major = 3.50; | |||
#declare R_minor = 1.00; | |||
#declare R_inner = 0.30; | |||
#declare N_maj = 14; | |||
#declare N_min = 18; | |||
#declare N_in = 100; | |||
//-------------------------------- | |||
#declare Nr = 0; // start loop | |||
#while (Nr < N_maj*N_min*N_in) | |||
object{Ball | |||
translate<0,0,R_inner> | |||
rotate<0,Nr * 360/N_inner,0> | |||
translate<R_minor,0,0> | |||
rotate<0,0,Nr * 360/(N_min*N_in)> | |||
translate<R_major,0,0> | |||
rotate<0,Nr*360/(N_maj*N_min*N_in),0> | |||
} | |||
#declare Nr=Nr+1;// next Nr | |||
#end // --------- fin de boucle -- | |||
</syntaxhighlight> | |||
| [[Fichier:PovrayTutoLoop06.png|vignette|Double spirale<br>[[Media:PovrayTutoLoop06.pov|Fichier POVRay correspondant]]]] | |||
}} | |||
== Moebius == | |||
{{Povray/tuto| | |||
<syntaxhighlight lang="povray"> | |||
</syntaxhighlight> | |||
| [[Fichier:PovrayTutoLoop07.png|vignette|<br>[[Media:PovrayTutoLoop07.pov|Fichier POVRay correspondant]]]] | |||
}} | |||
Version du 8 septembre 2013 à 11:11
Introduction
Dans ce tutorial, je veux montrer quelques applications élémentaires de la boucle « tant que » [ While loops ] dans POV-Ray. La boucle While est employée pour le placement régulier des objets. Les exemples suivants montrent une boucle simple et des boucles imbriquées.
Transformations linéaires
D'abord nous considérons une boucle simple qui place de petites sphères le long de l'axe de x, de x = -5 à x = +5
//------------------------------------
#declare Ball =
sphere{<0,0,0>,0.5
texture{pigment{color Red}
finish {ambient 0.15
diffuse 0.85
phong 1}
}
}
#declare NrX = -5; // start
#declare EndNrX = 5; // end
#while (NrX < EndNrX+1)
object{Ball translate <NrX,0,0>}
#declare NrX = NrX + 1; //next Nr
#end // ----------- fin de boucle ----
|
Si nous imbriquons une boucle existante dans une autre boucle, faisant un pas de la valeur z = 0 à z = +5, nous obtenons un champ rectangulaire couvert par des objets identiques
//------------------------------------
#declare Boxy =
box {<0,0,0>,< 1,1,1> scale 0.5
texture{pigment{color White}
finish {ambient 0.1
diffuse 0.9}}}
#declare DistanceX = 1.00;
#declare DistanceZ = 1.00;
#declare NrX = 0; // startX
#declare EndNrX = 7; // endX
#while (NrX < EndNrX) // <-- loop X
#declare NrZ = 0; // start
#declare EndNrZ = 7; // end
#while (NrZ < EndNrZ) // <- loop Z
object{Boxy
translate<NrX*DistanceX, 0,
NrZ*DistanceZ>}
#declare NrZ = NrZ + 1; // next NrZ
#end // ------------- fin de boucle Z
#declare NrX = NrX + 1;// next NrX
#end // ----------- fin de boucle X --
|
Il est posibble d'imbriquer une boucle dans une boucle additionnelle imbriquée, faisant un pas de la valeur y = 0 à y = +5. Avec ceci, nous obtenons une boîte constituée par les objets identiquement formés
//------------------------------------
#declare DX = 1.00;
#declare DY = 1.00;
#declare DZ = 1.00;
#declare NrX = 0; // startX
#declare EndNrX = 5; // endX
#while (NrX < EndNrX)
#declare NrY = 0; // startY
#declare EndNrY = 5; // endY
#while (NrY < EndNrY)
#declare NrZ = 0; // startZ
#declare EndNrZ = 5; // endZ
#while (NrZ < EndNrZ)
object{Boxy
translate
<NrX*DX,NrY*DY,NrZ*DZ>
}
#declare NrZ = NrZ+1;// next NrZ
#end // -------- fin de boucle Z
#declare NrY = NrY+1;// next NrY
#end // -------- fin de boucle Y
#declare NrX = NrX+1;// next NrX
#end // --------- fin de boucle X ----
|
Avec cet échantillon, nos possibilités, considérée comme de pures transformations linéaires avec imbrication de boucles, nous semblons bien avoir parcouru tout notre monde tridimensionnel.
Transformations Circulaires
Jusqu'ici la boucle while a été seulement employée avec le mouvement de translation. Un effet intéressant résulte si nous employons le mouvement de rotation de la même manière.
//----------------------------------
#declare Ball =
sphere{<0,0,0>,0.6
texture{pigment{color Red}
finish {ambient 0.15
diffuse 0.85
phong 1}
}
}
#declare Radius = 3.00;
#declare Nr = 0; // start
#declare EndNr = 30; // end
#while (Nr< EndNr)
object{Ball
translate<Radius,0,0>
rotate<0,Nr*360/EndNr,0>}
#declare Nr=Nr+1;//next Nr_minor
#end // -------- fin de boucle ----
|
Si nous laissons en plus tourner les sphères autour de la direction de z, nous obtenons une spirale circulaire :
//----------------------------------
#declare Ball =
sphere{<0,0,0>,0.25
texture{..see above..}}}
#declare R_major = 3.00;
#declare R_minor = 1.00;
#declare N_major = 10;
#declare N_minor = 430;
#declare Nr = 0; // start
#declare EndNr=N_major*N_minor;// end
#while (Nr < EndNr)
object{Ball
translate<R_minor,0,0>
rotate<0,0,Nr * 360/N_minor>
translate<R_major,0,0>
rotate<0,Nr * 360/EndNr,0>}
#declare Nr = Nr+1;//next Nr
#end // ------ fin de boucle -------
|
Si nous continuons ce petit jeu, nous obtenons une double spirale ciorculaire - le nombre de sphères devient énorme - dans le paysage suivant là sommes environ 25 000 boules sur le champ et environ 17 Mo de RAM ont été employées.
#declare Ball =
sphere{<0,0,0>,0.1
texture{.. see above..}}}
//--------------------------------
#declare R_major = 3.50;
#declare R_minor = 1.00;
#declare R_inner = 0.30;
#declare N_maj = 14;
#declare N_min = 18;
#declare N_in = 100;
//--------------------------------
#declare Nr = 0; // start loop
#while (Nr < N_maj*N_min*N_in)
object{Ball
translate<0,0,R_inner>
rotate<0,Nr * 360/N_inner,0>
translate<R_minor,0,0>
rotate<0,0,Nr * 360/(N_min*N_in)>
translate<R_major,0,0>
rotate<0,Nr*360/(N_maj*N_min*N_in),0>
}
#declare Nr=Nr+1;// next Nr
#end // --------- fin de boucle --
|