Dans les exemples précédents, on peut voir que les bi-cônes sont constitués de facettes polygonales. On peut adoucir cette représentation en augmentant le nombre de facettes avec le paramètre ngrid. Mais on peut aussi dessiner ces facettes en suivant les contours du cône (génératrices et cercles), ce qui rend leur dessin plus agréable.
1 - Méthode 1 : utilisation du package pst-solrev.
pst-solrev est une adaptation de pst-solides3d qui calcule des points intermédiaires sur les côtés des facettes pour coïncider un peu mieux avec une ligne suivie sur la surface à représenter (à définir paramétriquement). Une brêve documentation est incluse dans l'archive :
Ce package(qui n'est pas finalisé).
\documentclass[12pt]{article}
\usepackage[dvipsnames,svgnames,x11names]{xcolor}
\usepackage{pst-solrev}
\begin{document}
\begin{center}
\begin{pspicture}(-4,-4)(4,5)
\psset{lightsrc=50 30 25 rtp2xyz}
\psset{viewpoint=50 30 20 rtp2xyz,Decran=50}
\psSolid[object=grille,base=-3 3 -3 3,linewidth=0.5\pslinewidth](0,0,-3)
\pstVerb{/THETA 45 def % demi-angle au sommet
/tanTHETA THETA dup sin exch cos div def}%
\psset{solidmemory}
%\defEquations{bicone}%
% {v u cos mul}%
% {v u sin mul}%
% {v tanTHETA div}%
%\pstsolidrev[base=0 360 -3 3,
% ajustv,
% linecolor={[cmyk]{1,0,1,0.5}},
% fillcolor=yellow!50,incolor=green!50,
% plansepare={[1 0 0 -1]},
% name=partcone2nappes,
% action=none,ngrid=18 10]%
%\psSolid[object=load,
% load=partcone2nappes1,
%% enregistre les caractéristiques du solide
% file=hyperbole2nappes,
% action=writesolid
% ]%
\psSolid[object=datfile,
file=hyperbole2nappes,
hollow,rm=0 1 2,
incolor=yellow!50,
fillcolor=ForestGreen!20,
linewidth=0.5\pslinewidth
]
\defFunction[algebraic]{hyperbol1}(t){1}{t}{sqrt(t^2+1)}
\defFunction[algebraic]{hyperbol2}(t){1}{t}{-sqrt(t^2+1)}
\psSolid[object=courbe,
function=hyperbol1,range=8 sqrt neg 8 sqrt,
r=0,linecolor=red]%
\psSolid[object=courbe,
function=hyperbol2,range=8 sqrt neg 8 sqrt,
r=0,linecolor=red]%
\psSolid[object=plan,action=draw,linecolor=blue,
definition=equation,
args={[1 0 0 -1] 90},
base=-3 3 -3 3,planmarks,showBase](1,0,0)
\gridIIID[Zmin=-3,Zmax=3,spotX=r,showAxes](-3,3)(-3,3)
\end{pspicture}
\end{center}
\end{document}
La première étape : toutes les lignes qui sont commentées, consiste à définir les équations paramétriques du cône, à couper le bi-cône par le plan choisi et à enregistrer la partie qui nous intéresse. C'est l'étape la plus longue (on peut aller boire un café, faire la vaisselle, promener avec son chien etc. pendant ce temps).\usepackage[dvipsnames,svgnames,x11names]{xcolor}
\usepackage{pst-solrev}
\begin{document}
\begin{center}
\begin{pspicture}(-4,-4)(4,5)
\psset{lightsrc=50 30 25 rtp2xyz}
\psset{viewpoint=50 30 20 rtp2xyz,Decran=50}
\psSolid[object=grille,base=-3 3 -3 3,linewidth=0.5\pslinewidth](0,0,-3)
\pstVerb{/THETA 45 def % demi-angle au sommet
/tanTHETA THETA dup sin exch cos div def}%
\psset{solidmemory}
%\defEquations{bicone}%
% {v u cos mul}%
% {v u sin mul}%
% {v tanTHETA div}%
%\pstsolidrev[base=0 360 -3 3,
% ajustv,
% linecolor={[cmyk]{1,0,1,0.5}},
% fillcolor=yellow!50,incolor=green!50,
% plansepare={[1 0 0 -1]},
% name=partcone2nappes,
% action=none,ngrid=18 10]%
%\psSolid[object=load,
% load=partcone2nappes1,
%% enregistre les caractéristiques du solide
% file=hyperbole2nappes,
% action=writesolid
% ]%
\psSolid[object=datfile,
file=hyperbole2nappes,
hollow,rm=0 1 2,
incolor=yellow!50,
fillcolor=ForestGreen!20,
linewidth=0.5\pslinewidth
]
\defFunction[algebraic]{hyperbol1}(t){1}{t}{sqrt(t^2+1)}
\defFunction[algebraic]{hyperbol2}(t){1}{t}{-sqrt(t^2+1)}
\psSolid[object=courbe,
function=hyperbol1,range=8 sqrt neg 8 sqrt,
r=0,linecolor=red]%
\psSolid[object=courbe,
function=hyperbol2,range=8 sqrt neg 8 sqrt,
r=0,linecolor=red]%
\psSolid[object=plan,action=draw,linecolor=blue,
definition=equation,
args={[1 0 0 -1] 90},
base=-3 3 -3 3,planmarks,showBase](1,0,0)
\gridIIID[Zmin=-3,Zmax=3,spotX=r,showAxes](-3,3)(-3,3)
\end{pspicture}
\end{center}
\end{document}
Vous devez donc décommenter ces lignes si vous souhaitez créer votre propre section.
Les données étant enregistrées, on commente à nouveau ces lignes et la suite est très rapide : on peut se consacrer à la mise-en-page et aux ajouts d'annotations.
Tous les fichiers de cette partie sont ici dans le sous-dossier( pst-solrev) :
2 - Méthode 2 : écrire quelques lignes de postscript pour définir le bi-cône lissé et l'écriture sur le disque des données : part-cone2nappes.ps
%%%%%%%%%%%% cône à deux nappes %%%%%%%%%%%%%%%%
/nE 10 def % nb d’etages
/nM 18 def % nb de meridiens
/resolution 5 def
/ZMAX 8 def % hauteur du cône
/Radius 3 def % rayon de la base
/tanTheta Radius ZMAX 2 div def
/dZ ZMAX nE div def
/d2Z dZ resolution div def
/Depart 0 def
/Fin 360 def
/dA Fin Depart sub nM div def
/d2A dA resolution div def
/sommets [
ZMAX 2 div neg dZ ZMAX 2 div dZ sub {% sommets étage après étage
/zP exch def % z= h/a*k
/radius1 zP abs tanTheta mul def
[
Depart dA Fin dA sub { % le tour d'un cercle
/iM exch def
[ % une facette
iM d2A iM dA add { % les points intermediaires sur un côté du cercle
/Ai exch def
[
Ai cos radius1 mul
Ai sin radius1 mul
zP
]
} for
zP d2Z zP dZ add {/Zi exch def % les pts intermédiaires sur un côté du méridien
/radius2 Zi abs tanTheta mul def
[
Ai cos radius2 mul
Ai sin radius2 mul
Zi
]
} for
/radius3 zP dZ add abs tanTheta mul def
iM dA add d2A neg iM {/Ai exch def % les points intermediaires sur un côté du cercle supérieur
[
Ai cos radius3 mul
Ai sin radius3 mul
zP dZ add
]
} for
zP dZ add d2Z neg zP {/Zi exch def % les pts intermédiaires sur le côté du méridien en descendant
/radius4 Zi abs tanTheta mul def
[
iM cos radius4 mul
iM sin radius4 mul
Zi
]
} for
]
} for
]
} for
[
[
Fin d2A neg Depart d2A sub { % le tour d'un cercle
/iM exch def
% une facette
[
iM cos Radius mul
iM sin Radius mul
ZMAX 2 div neg
]
} for
]
]
[
[
Depart d2A Fin d2A sub { % le tour d'un cercle
/iM exch def
% une facette
[
iM cos Radius mul
iM sin Radius mul
ZMAX 2 div
]
} for
]
]
] def
%%%%%%%%%%%%%% le comptage %%%%%%%%%%%%%%%%%%%%%%%%%
/Nbre 0 def
/NbreEtages sommets length def % nombre d'étages
/Faces [
0 1 NbreEtages 1 sub {/i exch def
/NbreFaces sommets i get length def
/etage sommets i get def
/NbreFacettes etage length def
0 1 NbreFacettes 1 sub {/j exch def
/facette etage j get def
/nombreSommetsFacette facette length def
[
0 1 nombreSommetsFacette 1 sub {/k exch def
k Nbre add
} for
% nombreSommetsFacette -1 roll
]
/Nbre nombreSommetsFacette Nbre add def
} for
} for
] def
/tableau_des_sommets [
0 1 NbreEtages 1 sub {/i exch def
/etage sommets i get def
/NbreFacettes etage length def
0 1 NbreFacettes 1 sub {/j exch def
/Facette etage j get def
0 1 Facette length 1 sub { /k exch def
Facette k get aload pop
} for
} for
}for
] def
/chaine 15 string def
(cone2nappes-sommets.dat) (w) file /lefichiersommets exch def
(cone2nappes-faces.dat) (w) file /lefichierfaces exch def
0 3 tableau_des_sommets length 3 sub {
/i exch def
/x tableau_des_sommets i get def
/y tableau_des_sommets i 1 add get def
/z tableau_des_sommets i 2 add get def
lefichiersommets x chaine cvs writestring
lefichiersommets 32 write %% espace
lefichiersommets y chaine cvs writestring
lefichiersommets 32 write %% espace
lefichiersommets z chaine cvs writestring
lefichiersommets 10 write %% CR
} for
lefichiersommets closefile
0 1 Faces length 1 sub {
/i exch def
/Fi Faces i get def
lefichierfaces 91 write %% [
0 1 Fi length 1 sub {
/j exch def
lefichierfaces Fi j get chaine cvs writestring
lefichierfaces 32 write %% espace
} for
lefichierfaces 93 write %% ]
lefichierfaces 10 write %% CR
} for
lefichierfaces closefile
Ensuite effectuer la section du bi-cône par le plan : cone2nappes-write.tex
\documentclass{article}
\usepackage{pst-solides3d}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\begin{document}
\begin{center}
\psset{viewpoint=50 50 15 rtp2xyz,Decran=50}
\begin{pspicture}(-6,-3)(6,8)
\psset{solidmemory}
\psset{lightsrc=viewpoint}
\psSolid[object=new,fillcolor=white,incolor=yellow!20,
linewidth=0.5\pslinewidth,
% hollow,
sommets={(cone2nappes-sommets.dat) run},
faces={(cone2nappes-faces.dat) run},
plansepare={[1 0 0 -1]},
name=partcone2nappes,
action=none
]
\psSolid[object=load,
load=partcone2nappes1,
% rm=0,hollow,
% enregistre les caractéristiques du solide
file=hyperbole2nappes,
action=writesolid
]%
\gridIIID[Zmin=-4,Zmax=4,spotX=r,linecolor=gray!50,planmarks](-4,4)(-4,4)
\end{pspicture}
\end{center}
\end{document}
Et pour terminer le dessin : hyperbole2nappes.tex
\documentclass{article}
\usepackage{pst-solides3d}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\begin{document}
\begin{enumerate}
\item Le solide \textsf{cone deux nappes} a été coupé par le plan $x=1$ et les données enregistrées par l'option \textsf{action=writesolid}.
\item Dans une deuxième étape ce solide ainsi sectionné est affiché et complété avec le plan de coupe.
\end{enumerate}
\begin{center}
\psset{viewpoint=50 30 20 rtp2xyz,Decran=50}
\begin{pspicture}(-6,-3)(6,8)
\psset{lightsrc=viewpoint}
\psSolid[object=datfile,
file=hyperbole2nappes,
fcol=0 (0.875 0.75 0.625 setrgbcolor) 1 (0.875 0.75 0.625 setrgbcolor)]
\defFunction[algebraic]{hyperbol1}(t){1}{t}{(sqrt(t^2+1))*4/3}
\defFunction[algebraic]{hyperbol2}(t){1}{t}{-((sqrt(t^2+1))*4/3)}
\psSolid[object=courbe,
function=hyperbol1,range=8 sqrt neg 8 sqrt,
r=0,linecolor=red,
linewidth=2pt]%
\psSolid[object=courbe,
function=hyperbol2,range=8 sqrt neg 8 sqrt,
r=0,linecolor=red,
linewidth=2pt]%
\psSolid[object=plan,action=draw,linecolor=blue,
definition=equation,
args={[1 0 0 -1] 90},
base=-4 4 -4 4,planmarks,showBase](1,0,0)
\gridIIID[Zmin=-4,Zmax=4,spotX=r,showAxes](-4,4)(-4,4)
\end{pspicture}
\end{center}
\end{document}
Aucun commentaire:
Enregistrer un commentaire