Attendez donc il fait l'union du cylindre et d'une boite il fait tourner le cylindre ou la boite je comprend plus rien, il fait tourner le cylindre pour avoir les autres boites ?
autour de quel axe?
D'apres le code, il dessine 9 cylindres, tous a la meme position. Mais il ne les fait
pas tourner. Ce qu'il fait tourner, c'est les cubes:
Code:
box { <-0.5,-0.1,1.5> <0.5,0.6,2.5>
rotate<0,Nbre* 360/Nbre_De_Dents,0> // A chaque dent, on fait tourner la boite autour
// de l'axe des Y
pigment { Red } // En couleur pour visualiser
}
Tu vois que l'instruction rotate <> se trouve a l'interieur du block box { ... }; c'est a dire qu'elle s'applique uniquement a ce block, c.a.d. au cube.
La rotation se fait autour de l'axe y. La syntaxe generale est:
Code:
rotate <angle-par-rapport-a-l'axe-de-rotation-x,
angle-par-rapport-a-l'axe-de-rotation-y,
angle-par-rapport-a-l'axe-de-rotation-z>
Comme il fait tourner le cube autour de l'axe y, c'est la qu'il met l'angle de rotation. Les autres angles de rotations sont 0. C'est a dire: rotate<0, phi*Nbre, 0>.
Ce qu'il fait en plus, a la fin du programme, c'est ca:
Code:
object { Roue_Dentee // On met l'objet "Roue_Dentee" la ou on veut
rotate< 0, 0, 90 > // rotation pour la mettre verticale
translate<-1,2.4,2> // et tu la met ou tu veux
}
Ca veut dire qu'il dessine la roue dentee (avec la boucle #while etc...); et cette roue dentee, il la tourne autour de l'axe z a 90 degres, pour qu'elle soit deboue: rotate<0,0,90>. Cette roue dentee, il la pousse un peu vers la gauche (-1), vers le haut (2.4) et l'eloigne un peu (2) avec translate<-1, 2.4, 2>.
Ce qu'il faut comprendre: le code pour dessiner la roue dentee n'est qu'une procedure/fonction; il n'est execute que lorsqu'on invoque object { Roue_Dentee ... }. Ou, pour le dire autrement: il programme une function qui cree une union de cylindre et de cubes qu'il appelle Roue_Dentee; et avec object { Roue_Dentee ... }, il l'execute, c.a.d. qu'il dessine cette union concretement. Cette union de cylindre et de cubes, il la fait tourner autour de l'axe z a 90 degres.
Une autre chose qui n'est pas claire pour toi: le code entre #while et #end est execute 9 fois; c'est une boucle! Et comme il est execute 9 fois, ca veut dire qu'il cree 9 cylindres (tous a la meme place), et 9 cubes. Chaque cube est tourne autour de l'axe y par un angle different: 0*phi, 1*phi, 2*phi, ..., 8*phi; c'est pour ca que tu les vois tous autour du (des) cylindes.
La ou il y a une erreur: ce n'est pas necessaire de dessiner 9 cylindres, tous a la meme place. Comme j'ai explique, il aurait pu dessiner un seul cylindre et 9 boxes comme ca:
Code:
union {
cylinder { ... }
#while (....)
box { ... rotate <...> pigment <...> }
...
#end
}
Dans ce cas, seul un cylindre est dessine, puis, a l'interieur de la boucle #while, 9 cubes (box) sont dessines, et tournes autour de l'axe y puis colories rouge.