jeudi 28 juillet 2011

Sections Coniques : partie 1

Les sections d'un cône avec PStricks et son package pst-solides3d. Il existe de nombreuses façons de les réaliser, en voici quelques-unes. Tous les cas ont été envisagés et les méthodes employées sont diverses : commandes PStricks ou usage du code jps dans la macro \codejps. Afin d'obtenir des tracés avec une haute résolution les solides ont été pré-calculés, pour ensuite pouvoir être utilisés rapidement, car sinon le temps de calcul de l'interpréteur postscript est relativement long. Dans cette première partie, c'est la macro \codejps qui est essentiellement utilisée : on utilise les commandes PostScript incluses dans le fichier pst-solides3d.pro.

Tous les fichiers liés à cette première partie (.tex, .pdf et .dat) sont dans l'archive :
On a donc opéré en quatre étapes :
Étape 1 :
% fabrique du bi-cône
\codejps{
-5 3 0 [18 60] newcone
 5 3 0 [18 60] newcone
  dup solidfacesreverse
 solidfuz
(bicone) writesolidfile
 }
Explications : le cône est vertical, le premier paramètre est la cote du centre de la base, le deuxième le rayon de la base et le troisième la cote du sommet du cône. Entre les crochets, on place le nombre de divisions pour la hauteur et pour la base : 18 sous-divisions pour la hauteur et  60 sous-divisions pour la base (soit un pas de 10°), c'est la définition du maillage du cône : 18x60. Plus le maillage est serré et plus le temps de calcul sera long pour la coupe du bicône par un plan, d'où l'intérêt de sauvegarder les données des deux parties obtenues lors de la partition du bicône, car, par contre, la lecture des données est très rapide, ce qui permet ensuite d'affiner la mise en page, le choix des couleurs, le point de vue, les annotations sur le schéma etc. sans être obligé d'attendre que l'interpréteur ait terminé les calculs.
Cette étape enregistre sur le disque les données du bicône (bicone-sommets.dat etc.). On pourra ensuite commenter ces lignes (ajouter un % au début de chaque ligne), il est, en effet, inutile de recommencer ces calculs à chaque nouvelle compilation.
Étape 2 : la partition du bicône par un plan et l'écriture des données des deux parties ainsi obtenues.
Explications : le plan est défini par son équation ax+by+cz+d=0 avec le paramètre plansepare={[a b c d]}. Les deux parties ainsi obtenues sont réunies par un seul nom avec name=biconepartcircle (dans le cas de la section circulaire, tout autre nom est possible), chacune des parties sera indexée respectivement biconepartcircle0 et biconepartcircle1.

\psset{solidmemory}
\psSolid[object=datfile,
   file=bicone,
   plansepare={[0 0 1 -3]},
   name=biconepartcircle,
  action=none]
\psSolid[object=load,
   load=biconepartcircle1,
   file=biconepartcircle1,action=writesolid]
\psSolid[object=load,
   load=biconepartcircle0,
   file=biconepartcircle0,action=writesolid]

L'étape du calcul des caractéristiques des deux parties est la plus longue. Ensuite, lorsque les données auront été enregistrées, on pourra commenter toutes les lignes précédentes, pour se consacrer à la mise en page.
Étape 3 : l'affichage des deux parties par la lecture des données, par exemple pour la partie 1 :
\psSolid[object=datfile,
   file=biconepartcircle1,
  grid,
   fillcolor={[rgb]{0.5 0.72 0.5}},incolor=yellow!50,
   rm=0 1,
   hollow]
 Étape 4 : le dessin de l'intersection, cercle, ellipse, parabole ou hyperbole suivant le cas.
Les équations paramétriques de l'intersection se déterminent aisément, quelques explications sont données dans les documents du sous répertoire "sections_bicone_doc" de l'archive :

 Le problème le plus délicat est la détermination des limites du paramètre. Il peut-être traité à part ou bien résolu directement avec du code postscript.
Si vous souhaitez faire vous-même les calculs adaptées à votre problème particulier pour enregistrer les données, il faudra dé-commenter les lignes correspondantes.
1 - Section Circulaire :
 

\documentclass{article}
\usepackage{pst-solides3d}
\begin{document}
\begin{center}
\begin{pspicture}(-5,-6)(8,7)
\pstVerb{/theta 3 5 atan def
         /tantheta 3 5 div def
         /rayon 3 tantheta mul def}%
%\codejps{ % bicone de rayon 3 et de 1/2 hauteur 5
%-5 3 0 [24 60] newcone
% 5 3 0 [24 60] newcone
% dup solidfacesreverse
% solidfuz
%(bicone) writesolidfile
% }
\psset{viewpoint=50 -30 30 rtp2xyz,,Decran=50,lightsrc=viewpoint}
\psframe[fillstyle=solid,fillcolor=gray!50](-5,-6)(8,7)%
\psSolid[object=grille,base=-4 4 -4 8,linecolor={[rgb]{0.72 0.72 0.5}}](0,0,-5)
%\psset{solidmemory}
%\psSolid[object=datfile,
%   file=bicone,
%   plansepare={[0 0 1 -3]},
%   name=biconepartcircle,
%  action=none]
%\psSolid[object=load,
%   load=biconepartcircle1,
%   file=biconepartcircle1,action=writesolid]
%\psSolid[object=load,
%   load=biconepartcircle0,
%   file=biconepartcircle0,action=writesolid]
%
\psSolid[object=datfile,
   file=biconepartcircle1,grid,
   fillcolor={[rgb]{0.5 0.72 0.5}},incolor=yellow!50,
   rm=0 1,
   hollow]
% l'intersection
\defFunction[algebraic]{cercle}(t){rayon*cos(t)}{rayon*sin(t)}{3}
\psSolid[object=courbe,r=0,
         range=0 2 pi mul,
         linecolor=red,%{[rgb]{0.08 0.24 0.09}},
         function=cercle]%
\psSolid[object=plan,action=draw,
   definition=equation,
   args={[0 0 1 -3]},
   base=-3 3 -5 5,planmarks,showBase]
\psSolid[object=datfile,
   file=biconepartcircle0,grid,
   fillcolor={[rgb]{0.5 0.72 0.5}},incolor=yellow!50,
   rm=0 1,
   hollow](0,5,0)
\axesIIID[linecolor=blue](0,0,3)(4,3,6)
\composeSolid
\end{pspicture}
\end{center}
\end{document}
Éventuellement, cliquer sur "Plus d'infos" pour les autres sections.