L'objet lathe |
|
Un lathe est un objet obtenu en faisant tourner un profil autour de l'axe y. C'est exactement ce que fait un tour de mécanicien ou de menuisier. Pendant longtemps, j'ai négligé cet l'objet car il est difficile à maitriser. Pour définir comment les points du profil sont raccordés entre eux, il y a plusieurs methodes : linear_spline, quadratic_spline, cubic_spline, et bezier_spline. Avec la méthode linear_spline les points sont raccordés par des droites. La facilité avec laquelle ont peut utiliser cette méthode a pour contre partie la pauvreté de l'objet généré. Les 3 autres méthodes sont beaucoup plus riches et permettent de faire des objets plus "lissés"... mais au détriment de la complexité car il devient difficile de prévoir par quels point la courbe va passer. Ces courbes étant définie soit par des équations du 3iéme et 4iéme dégres, soit par des polynomes de Bézier. Mais que sont les "coubres de Bézier" ? Ce sont des courbes polynomiales décrites pour la premiére fois en 1972 par l'ingénieur français Pierre Bézier qui les utilisa pour concevoir par ordinateur, des voitures automobiles. Les plus importantes courbes de Bézier, sont les cubiques, qui sont utilisées en informatique pour le graphisme et dans de multiples systémes de traitement d'image tels que PostScript, pour dessiner des courbes lissées joignant des points ou des polygones de Bézier. Les polices de caractéres TrueType™ et Type1 utilisent des courbes de Bézier quadratiques plus simples. |
|
![]() |
Quatre points A, B, C et D dans le plan ou dans l'espace à trois dimensions définissent une courbe de Bézier cubique. La courbe se trace en partant du point A, en se dirigeant vers B et en arrivant au point D avec la direction CD. En général, la courbe ne passe ni par B ni par C; ces points sont simplement la pour donner une information de direction. La distance entre A et B détermine la longueur du déplacement dans la direction de B avant de tourner vers D. La courbe est obligatoirement contenue dans le quadrilatére ABCD. Les doites AB et DC sont respectivement les tangentes aux points A et D. Le déplacement des points B et C font varier la courbure en ces points qui eux, sont fixes. Quel rapport avec le bezier_spline de POVRay ? Et puis, c'est encore plus compliqué de définir un profil avec courbes polynomiales non ? |
Oui car manipuler des équation comme \( P(t)=(1-t)^{3}\mathbf {P} _{0}+3(1-t)^{2}t\mathbf {P} _{1}+3(1-t)t^{2}\mathbf {P} _{2}+t^{3}\mathbf {P} _{3} \) n'est pas évident, mais, car il y a un mais, depuis longtemps il existe des logiciels vectoriel qui utilisent ces courbes de Bézier avec un facilité déconcertantes ! Il s'agit (liste non limitative) de logiciels comme Abobe™ Illustrator et Macromedia™ FreeHand (qui malheureusement n'existe plus et qui a été lachement assassiné par Adobe) pour les plus connus. Ces logiciels utilisent comme langage Postscript™. Vous pouvez aller sur la page Abobe pour plus de précisions sur ce langage. Le lien avec POVRay se précise peu à peu : on utilise un logiciel vectoriel pour tracer une courbe, on l'enregistre au format PostScript(.eps). Il ne reste "plus" qu'à extraire de ce fichier eps les données et de les mettres en forme pour en faire un lathe { } utilisant les bezier_spline. POVRay demande un ensemble de quatres points pour définir chaque segment. Ces segments de la courbe sont définis comme suit :
Nous voiçi donc avec un fichier postscript qui contient notre courbe de Bézier, Pierre Bézier. Il faut maintenant trouver un langage pratique qui permette d'extraire facilement et de rapporter des données... qui peut se tranduire en anglais par : Pratical Extraction and Report Language... PERL ! Ce langage a de plus l'énorme avantage d'être implémenté sur quasiment toutes les plateformes informatiques existantes. J'ai donc écrit un script PERL qui fait tout le boulot. Cool..! Enfin presque. N'ayant JAMAIS écris de PERL il a fallut que je me documente et je tiens içi à remercier les personnes qui m'ont aidées sur le forum fr.comp.lang.perl. Le script est utilisé de la maniére suivante : eps2pov file_name [deltaX].
|
|
![]() |
|
Cet exemple fait avec Macromedia FreeHand montre un profil tracé avec l'outil "plume". Le tracé est composé de droites et de courbes. Aux point de courbures, vous pouvez voir les "balanciers", tangentes en ces points qui définissent les courbures. L'affichage dans cette fenêtre des régles, en millimétres, vous permet de définir précisement votre profil. Le lathe { } généré aura comme dimensions : 1mm égale 1 Unité POV. Le profil étant dessiné, il faut le sélectionner car lui seul est intéressant. Choisir la commande "Exporter..." du menu fichier. Le dialogue ci-dessous apparaît : |
|
![]() |
|
Donner un nom à votre fichier. Choisisser le format EPS. Veiller bien à ce que seul l'objet sélectionné soit exporté.
Nous avons donc maintenant un fichier profil.eps. Dans une fenêtre "Terminal", aller dans le dossier ou se trouve enregistrer le fichier profil.eps par la commande cd, puis lancer le script eps2pov profil.eps. Dans le même dossier vous trouvez un fichier profil.inc qui doit contenir :#declare profilLathe = lathe { bezier_spline 56, < 0.000, 0.000>,< 0.000, 0.000>,< 16.567, -0.016>,< 16.997, -0.016>, < 16.997, -0.016>,< 18.654, -0.016>,< 19.997, -1.359>,< 19.997, -3.016>, < 19.997, -3.016>,< 19.997, -3.016>,< 29.997, -3.016>,< 29.997, -3.016>, < 29.997, -3.016>,< 29.997, -3.016>,< 31.997, -1.016>,< 31.997, -1.016>, < 31.997, -1.016>,< 31.997, -1.016>,< 31.997, 11.984>,< 31.997, 11.984>, < 31.997, 11.984>,< 29.236, 11.984>,< 26.997, 14.223>,< 26.997, 16.984>, < 26.997, 16.984>,< 26.997, 19.746>,< 29.236, 21.984>,< 31.997, 21.984>, < 31.997, 21.984>,< 31.997, 21.984>,< 31.997, 26.984>,< 31.997, 26.984>, < 31.997, 26.984>,< 31.997, 26.984>,< 29.997, 28.984>,< 29.997, 28.984>, < 29.997, 28.984>,< 29.997, 28.984>,< 19.997, 28.984>,< 19.997, 28.984>, < 19.997, 28.984>,< 19.997, 28.984>,< 17.997, 26.984>,< 17.997, 26.984>, < 17.997, 26.984>,< 17.997, 26.984>,< 17.997, 7.984>,< 17.997, 7.984>, < 17.997, 7.984>,< 17.997, 6.327>,< 16.654, 4.984>,< 14.997, 4.984>, < 14.997, 4.984>,< 14.505, 4.984>,< -0.003, 4.984>,< -0.003, 4.984> sturm }Quelques points importants à propos de cet exemple :
eps2pov profil.eps 0.003 Pour obtenir : #declare profilLathe = lathe { bezier_spline 56, < 0.003, 0.000>,< 0.003, 0.000>,< 16.570, -0.016>,< 17.000, -0.016>, < 17.000, -0.016>,< 18.657, -0.016>,< 20.000, -1.359>,< 20.000, -3.016>, < 20.000, -3.016>,< 20.000, -3.016>,< 30.000, -3.016>,< 30.000, -3.016>, < 30.000, -3.016>,< 30.000, -3.016>,< 32.000, -1.016>,< 32.000, -1.016>, < 32.000, -1.016>,< 32.000, -1.016>,< 32.000, 11.984>,< 32.000, 11.984>, < 32.000, 11.984>,< 29.239, 11.984>,< 27.000, 14.223>,< 27.000, 16.984>, < 27.000, 16.984>,< 27.000, 19.746>,< 29.239, 21.984>,< 32.000, 21.984>, < 32.000, 21.984>,< 32.000, 21.984>,< 32.000, 26.984>,< 32.000, 26.984>, < 32.000, 26.984>,< 32.000, 26.984>,< 30.000, 28.984>,< 30.000, 28.984>, < 30.000, 28.984>,< 30.000, 28.984>,< 20.000, 28.984>,< 20.000, 28.984>, < 20.000, 28.984>,< 20.000, 28.984>,< 18.000, 26.984>,< 18.000, 26.984>, < 18.000, 26.984>,< 18.000, 26.984>,< 18.000, 7.984>,< 18.000, 7.984>, < 18.000, 7.984>,< 18.000, 6.327>,< 16.657, 4.984>,< 15.000, 4.984>, < 15.000, 4.984>,< 14.508, 4.984>,< 0.000, 4.984>,< 0.000, 4.984> sturm }Aprés copier/coller du lathe { } ou #include "profil.inc" nous pouvons ajouter dans notre scéne : object { profilLathe translate -min_extent(profilLathe).y*y pigment { color Green } finish { ambient 0.40 diffuse 0.60 phong 0.95 phong_size 25 } }Pour obtenir ces images : | |
![]() |
![]() |
Quelques remarques :
| |
Voici deux images pour lesquelles j'ai utilisé ce script. |
|
![]() Bâtons d'énergie extra-terrestre ![]() Bouchon de carafe en cristal |