Hélices & Spirales : boucle while et transformations

Cet exercice vous permettra de maitriser les transformations "translate" et "rotate" ainsi que les boucles "while". Les 2 premières étapes sont identiques à celle du TP d'initiation..
Deux fichiers vous permettent de commencer sans trop de difficultés. Copier le fichier include : basics.inc et le fichier pov : TP0-0.pov dans votre répertoire de travail.
Lancer Povray sur ce fichier (double cliquer sur TP0-0.pov). Puis lancez "Run". Vous devez voir apparaître l'image ci-contre. Un fichier TP0-0.bmp a été créé dans votre répertoire de travail.
Les 3 axes sont : rouge pour X, vert pour Y et bleu pour Z. Le damier est composé de case de UN de coté. Vous pouvez changer le point de vue en changeant la caméra. Il suffit de commenter (ajouter // au debut) :
//vue_courante()
et de décommenter une autre, par exemple :
vue_dessus(distance_camera)

Vous êtes maintenant prêt à commencer...
0.Pour commencer :
Réalisons une géométrie simple : une sphère rouge telle qu'elle est présentée sur l'image de droite.
  • Placer la sphère au centre de la case grise, à proximité de l'axe . Utilisez le menu Insert/Shapes(Shorter Versions)/Sphere et modifiez les valeurs  mises par defaut.  La syntaxe de la sphere est : sphere { <centre>  rayon } 
  • La sphère est noire car il n'a pas de couleur associée. Ajoutez le champs pigment { color ....} pour afficher la sphère en rouge. Attention la couleur doit se trouver DANS la déclaration de la sphère.
  • Ajouter une reflexion avec finish { phong ... }
  • Utiliser une variable: R pour définir le rayon avec l'instruction : #declare R=0.3; . La déclaration doit se trouver AVANT son utilisation. Attention au ";". 
A la fin de cette étape vous devez produire l'image qui est ci-contre.
1. Les transformations : "translate" et "rotate" :
Réduire la boule que vous placerez sur le coin droit du damier à l'aide de l'instruction "translate". Vous appliquerez ensuite une rotation de 20° pour obtenir l'image de droite. La syntaxe est simple :
  • translate < vecteur >
  • rotate <axis> angle (degrees).
Attention la transformation doit se trouver DANS la déclaration de la sphère. Une façon plus élégante consiste a déclarer un objet qui englobe toutes les définitions :
  object {
    géométrie
    aspect
    transformations ... }
2. La boucle while :
Un avantage énorme de la "programmation" est de pouvoir répéter une séquence d'instruction; ici l'instanciation d'une géométrie dont on fera varier la position.
Répétez l'opération de l'étape précédente à l'aide de la boucle "while" (il n'y a pas de boucle "for") dont on rappelle lla syntaxe :
#while ( condition )
...

#end
Un compteur de boucle se déclare et s'incrémente comme suit :
#declare i=0;
...
#declare i=i+1;
3. Un anneau homothétique :
Changez de point de vue : passez en vue de dessus : vue_dessus(distance_camera)
Adaptez le rayon de la boule et/ou l'angle entre les boules pour qu'elles soient jointes (connexes). Réalisez une macro qui produit un anneau. Appelez 3 fois la macro pour produire l'image ci-contre.



4. Une hélice
Modifiez la macro pour réaliser une hélice d'un pas donné. N'oubliez pas d'adapter le calcul de l'angle inter-boule en fonction du pas de l'hélice.

5. La double hélice d'un brin d'ADN
Placez 2 hélices en vis-a-vis que vous joindrez avec des cylindres comme le montre la figure ci-contre. Adaptez la position et l'orientation de la camera.

Extension : Réalisez une coquille d'escargot ou celle d'une amonite suivant le même principe : passez d'une hélice à une spirale et adapter le rayon des boules.