Retour

cylindres.tex

Télécharger le fichier Fichier PDF
\documentclass{article}
\usepackage{pst-solides3d}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[garamond]{mathdesign}
\renewcommand{\ttdefault}{lmtt}
\usepackage[a4paper,dvips,hmargin=2cm,vmargin=3cm]{geometry}
\usepackage[colorlinks=true,dvips]{hyperref}
\usepackage{showexpl}
\usepackage{framed}
\usepackage{soul}
\usepackage[frenchb]{babel}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Jean-Michel Sarlat et Guillaume Connan
\newenvironment{gbar}{%
  \def\FrameCommand{{\color{red}\vrule width 2pt}\colorbox{yellow!30}}%
  \MakeFramed {\advance\hsize-\width \FrameRestore}}%
{\endMakeFramed}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand\Cadre[1]{\psframebox[fillstyle=solid,fillcolor=yellow,linecolor={[cmyk]{0,0,1,0.1}}]{\texttt{#1}}}
\newcommand\encadre[1]{\begin{center}
\psframebox[fillstyle=solid,fillcolor=green!33,linecolor=green,linewidth=0.5mm]{
  \begin{minipage}{0.95\textwidth}
  {#1}
  \end{minipage}}
  \end{center}}
\title{\Cadre{pst-solides3d} : variations autour d'un cylindre}
\begin{document}
\maketitle
\tableofcontents
\section{Intersection de deux cylindres}
 
Le but est de représenter l'intersection de deux cylindres identiques
dont les axes sont perpendiculaires. Le solide de départ est un cylindre
sur lequel on va réaliser différentes opérations.
 
\subsection{Taillage d'une extrémité du cylindre en biseau}
 
% Par définition du cylindre (dans \texttt{pst-solides3d}) l'axe est
% vertical, on va donc le faire tourner de 90\,$^{\mathrm{o}}$ autour de
% l'axe $Ox$ %avant de le couper par le plan et de n'en conserver qu'une
% moitié.
 
On coupe le cylindre en son milieu par deux plans faisant un angle de
$\pm45\,^{\mathrm{o}}$ avec l'axe.
 
Dessinons, d'abord les traces des plans de coupe sur le cylindre :
 
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-2)(4,2)
\psframe(-4,-2)(4,2)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -30 20,Decran=50}
\psSolid[object=cylindre,
   ngrid=9 18,
   r=2,h=12,
   RotX=90,
   fillcolor=yellow!50,
   intersectiontype=0,
   intersectionplan={[1 -1 0 0][1 1 0 0]},
   intersectioncolor=(bleu) (rouge),
   intersectionlinewidth=1.5 1.5,
   action=draw*](0,6,0)
\axesIIID[linecolor=green,axisemph={\color{green}}](2,6,2)(3,8,3)
\end{pspicture}
\end{LTXexample}
 
On effectue la première coupe, et on dessine la partie du cylindre qui
est conservée pour la suite.
 
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-2)(4,2)
\psframe(-4,-2)(4,2)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -30 20,Decran=50}
\psset{solidmemory}
\psSolid[object=plantype,
   definition=equation,
   args={[1 -1 0 0 ]},
   base=-4 4 -2 2,
   name=monplan2]
\psSolid[object=cylindre,
   r=2,
   h=12,
   RotX=90,
   ngrid=9 18,action=none,
   name=cylindre1](0,6,0)
% séparation du cylindre 1
\psSolid[object=load,
        load=cylindre1,
        plansepare=monplan2,action=none,
        name=divisioncylindre1]
\psSolid[object=load,fillcolor=yellow!50,
        load=divisioncylindre11]
% on trace le plan défini au départ
\psSolid[object=plan,
   definition=plantype,
   args=monplan2,
   showBase,
   action=draw
]
\composeSolid
\end{pspicture}
\end{LTXexample}
\subsection{Deuxième biseau}
 
On coupe l'extrémité biseautée par un deuxième biseau à angle droit du
premier et on enregistre les données du solide obtenu, afin de ne plus
avoir à faire ces calculs :
 
\begin{gbar}
 \begin{verbatim}
\psSolid[object=load,
        load=cylindre1,
        plansepare=monplan2,action=none,
        name=divisioncylindre1]
\psSolid[object=load,fillcolor=yellow!50,
        load=divisioncylindre11,
        plansepare=monplan1,action=none,
        name=divisioncylindre2]
\psSolid[object=load,
       load=divisioncylindre20,
       file=cylindrebiseau,
       action=writesolid]
  \end{verbatim}
\end{gbar}
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-3)(4,3)
\psframe(-4,-3)(4,3)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -60 50,Decran=50}
\psset{solidmemory}
\psSolid[object=plantype,
   definition=equation,
   args={[1 1 0 0 ]},
   base=-4 4 -2 2,
   name=monplan1]
\psSolid[object=plantype,
   definition=equation,
   args={[1 -1 0 0 ]},
   base=-4 4 -2 2,
   name=monplan2]
\IfFileExists{cylindrebiseau-sommets.dat}{%
\psSolid[object=datfile,fillcolor=yellow!50,
        file=cylindrebiseau]
\psSolid[object=plan,
   definition=plantype,
   args=monplan2,
   action=draw]
\psSolid[object=plan,
   definition=plantype,
   args=monplan1,
   action=draw]
}{
\psSolid[object=cylindre,
   r=2,
   h=12,
   RotX=90,
   ngrid=9 18,action=none,
   name=cylindre1](0,6,0)
% premier biseau
\psSolid[object=load,
        load=cylindre1,
        plansepare=monplan2,action=none,
        name=divisioncylindre1]
% second biseau
\psSolid[object=load,fillcolor=yellow!50,
        load=divisioncylindre11,
        plansepare=monplan1,action=none,
        name=divisioncylindre2]
\psSolid[object=load,
       load=divisioncylindre20,
       file=cylindrebiseau,
       action=writesolid]
}
\composeSolid
\end{pspicture}
\end{LTXexample}
\subsection{Réalisation de la réunion de quatre cylindres}
 
Ce cylindre biseauté va être recopié 3 fois en subissant à chaque fois
une rotation de 90\,$^{\mathrm{o}}$ autour de l'axe $Oz$. La dernière
opération consistera à fusionner l'ensemble des quatre cylindres et pour
terminer à enregistrer les données de la croix pour, éventuellement, une
utilisation ultérieure.
 
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-3)(4,3)
\psframe(-4,-3)(4,3)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -30 20,Decran=50}
\psset{solidmemory}
\IfFileExists{cross-sommets.dat}{%
\psSolid[object=datfile,
        file=cross,deactivatecolor]
}{
\psSolid[object=datfile,
        file=cylindrebiseau,
        fillcolor=green!50,
        action=none,name=cylindrebiseau1]
\psSolid[object=datfile,RotZ=90,
        fillcolor=green!50,
        file=cylindrebiseau,name=cylindrebiseau2,action=none]
\psSolid[object=datfile,RotZ=180,
        fillcolor=green!50,
        file=cylindrebiseau,name=cylindrebiseau3,action=none]
\psSolid[object=datfile,RotZ=270,
        fillcolor=green!50,
        file=cylindrebiseau,name=cylindrebiseau4,action=none]
\psSolid[object=fusion,
        base=cylindrebiseau1 cylindrebiseau2
        cylindrebiseau3 cylindrebiseau4,
        action=writesolid,file=cross]%
}
\axesIIID[linecolor=red,axisemph={\color{red}}](6,6,2)(8,8,3)
%\composeSolid
\end{pspicture}
\end{LTXexample}
\subsection{Partager la croix par le plan de symétrie horizontal}
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-3)(4,3)
\psframe(-4,-3)(4,3)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -30 20,Decran=50}
\psset{solidmemory}
\IfFileExists{cross-sommets.dat}{%
\psSolid[object=datfile,
        file=cross,deactivatecolor,
        plansepare={[0 0 1 0]},
        action=none,
        name=crossdivision]%
\psSolid[object=load,deactivatecolor,
        load=crossdivision1]%
\psSolid[object=grille,base=-6 6 -6 6,ngrid=9 9,color1=black!5,color2=black!40, hue=(color2) (color1)]
\psSolid[object=load,deactivatecolor,
        load=crossdivision0]
}{
\psSolid[object=datfile,
        file=cylindrebiseau,
        fillcolor=green!50,
        action=none,name=cylindrebiseau1]
\psSolid[object=datfile,RotZ=90,
        fillcolor=green!50,
        file=cylindrebiseau,name=cylindrebiseau2,action=none]
\psSolid[object=datfile,RotZ=180,
        fillcolor=green!50,
        file=cylindrebiseau,name=cylindrebiseau3,action=none]
\psSolid[object=datfile,RotZ=270,
        fillcolor=green!50,
        file=cylindrebiseau,name=cylindrebiseau4,action=none]
\psSolid[object=fusion,
        base=cylindrebiseau1 cylindrebiseau2
        cylindrebiseau3 cylindrebiseau4,
        action=writesolid,file=cross]%
}
\axesIIID[linecolor=red,axisemph={\color{red}}](6,6,2)(8,8,4)
\end{pspicture}
\end{LTXexample}
\subsection{La structure d'une des deux moitiés}
 
Comme on peut le constater, elle présente une certaine incohérence, du
fait de l'absence de nombreuses faces !
 
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-3)(4,3)
\psframe(-4,-3)(4,3)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -30 20,Decran=50}
\psset{solidmemory}
\psSolid[object=datfile,
        file=cross,deactivatecolor,
        plansepare={[0 0 1 0]},
        action=none,
        name=crossdivision]%
\psSolid[object=load,deactivatecolor,
        load=crossdivision1,numfaces=all]%(0,0,-2)
\composeSolid
\end{pspicture}
\end{LTXexample}
\section{Une croix creuse}
\subsection{On évide le cylindre biseauté}
 
Nous supposons que les données du cylindre biseauté ont été
enregistrées. Nous retirons les faces \Cadre{rm=0 1 68} qui
correspondent au biseau et à la face circulaire opposée, les indices des
faces ont été obtenus dans une étape intermédiaire avec l'option
\Cadre{numfaces=all}. On répète les mêmes opérations que pour la croix
pleine et on enregistre les données du solide creux obtenu.
 
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-3)(4,3)
\psframe(-4,-3)(4,3)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -13 10,Decran=50}
\psset{solidmemory}
\IfFileExists{crosshollow-sommets.dat}{%
\psSolid[object=datfile,deactivatecolor,
        file=crosshollow]%
}{
\psSolid[object=datfile,
        file=cylindrebiseau,rm=0 1 68,hollow,
        incolor=yellow!50,fillcolor=green!50,
        action=none,name=cylindrebiseau1]
\psSolid[object=datfile,RotZ=90,rm=0 1 68,hollow,
        incolor=yellow!50,fillcolor=green!50,
        file=cylindrebiseau,name=cylindrebiseau2,action=none]
\psSolid[object=datfile,RotZ=180,rm=0 1 68,hollow,
        incolor=yellow!50,fillcolor=green!50,
        file=cylindrebiseau,name=cylindrebiseau3,action=none]
\psSolid[object=datfile,RotZ=270,rm=0 1 68,hollow,
        incolor=yellow!50,fillcolor=green!50,
        file=cylindrebiseau,name=cylindrebiseau4,action=none]
\psSolid[object=fusion,
        base=cylindrebiseau1 cylindrebiseau2
        cylindrebiseau3 cylindrebiseau4,
        action=writesolid,file=crosshollow]
}
\composeSolid
\end{pspicture}
\end{LTXexample}
\subsection{On évide partiellement le cylindre biseauté}
 
On évide partiellement le cylindre biseauté en gardant la face
circulaire et on enregistre les données.
 
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-3)(4,3)
\psframe(-4,-3)(4,3)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -13 10,Decran=50}
\psset{solidmemory}
\IfFileExists{crosshollow2-sommets.dat}{%
\psSolid[object=datfile,deactivatecolor,
        file=crosshollow2]%
}{
\psSolid[object=datfile,
        file=cylindrebiseau,rm=0 68,hollow,
        incolor=yellow!50,fillcolor=green!50,
        action=none,name=cylindrebiseau1]
\psSolid[object=datfile,RotZ=90,rm=0 68,hollow,
        incolor=yellow!50,fillcolor=green!50,
        file=cylindrebiseau,name=cylindrebiseau2,action=none]
\psSolid[object=datfile,RotZ=180,rm=0 68,hollow,
        incolor=yellow!50,fillcolor=green!50,
        file=cylindrebiseau,name=cylindrebiseau3,action=none]
\psSolid[object=datfile,RotZ=270,rm=0 68,hollow,
        incolor=yellow!50,fillcolor=green!50,
        file=cylindrebiseau,name=cylindrebiseau4,action=none]
\psSolid[object=fusion,
        base=cylindrebiseau1 cylindrebiseau2
        cylindrebiseau3 cylindrebiseau4,
        action=writesolid,file=crosshollow2]
\psSolid[object=datfile,deactivatecolor,
        file=crosshollow2]
}
\composeSolid
\end{pspicture}
\end{LTXexample}
 
Nous avons maintenant un solide plein, mais qu'on peut pas partager ! Il
faut donc envisager de prendre pour base le cylindre biseauté plein, de
supprimer les faces \Cadre{rm=0 1 68}, mais \textbf{de ne pas creuser le
solide} : \Cadre{\st{hollow}}.
 
%\begin{LTXexample}[width=8cm]
%\begin{pspicture}(-8,-6)(8,6)
%\psframe(-4,-3)(4,3)
%\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -30 60,Decran=100}
%\psset{solidmemory}
%\psSolid[object=datfile,
%        file=crosshollow2,
%        plansepare={[0 0 1 0]},
%        action=none,
%        name=crossdivision]%
%\psSolid[object=load,
%        load=crossdivision1]%(0,0,-2)
%\composeSolid
%\end{pspicture}
%\end{LTXexample}
\subsection{Les deux moitiés de la croix creuse}
La croix creuse :
 
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-3)(4,3)
\psframe(-4,-3)(4,3)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -13 10,Decran=50}
\psset{solidmemory}
\IfFileExists{cross3-sommets.dat}{%
\psSolid[object=datfile,hollow,incolor=yellow!50,fillcolor=green!50,
        file=cross3]%
}{
\psSolid[object=datfile,
        file=cylindrebiseau,rm=0 1 68,
        fillcolor=green!50,
        action=none,name=cylindrebiseau1]
\psSolid[object=datfile,RotZ=90,rm=0 1 68,
        fillcolor=green!50,
        file=cylindrebiseau,name=cylindrebiseau2,action=none]
\psSolid[object=datfile,RotZ=180,rm=0 1 68,
        fillcolor=green!50,
        file=cylindrebiseau,name=cylindrebiseau3,action=none]
\psSolid[object=datfile,RotZ=270,rm=0 1 68,
        fillcolor=green!50,
        file=cylindrebiseau,name=cylindrebiseau4,action=none]
\psSolid[object=fusion,
        base=cylindrebiseau1 cylindrebiseau2
        cylindrebiseau3 cylindrebiseau4,
        action=writesolid,file=cross3]
\psSolid[object=datfile,deactivatecolor,
        file=cross3]
}
\composeSolid
\end{pspicture}
\end{LTXexample}
 
Les deux moitiés obtenues sont enregistrées.
 
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-6)(4,6)
\psframe(-4,-5)(4,5)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -30 20,Decran=50}
\psset{solidmemory}
\IfFileExists{cross3division0-sommets.dat}{%
\psSolid[object=datfile,deactivatecolor,
        file=cross3division1](0,0,-2)
\psSolid[object=datfile,deactivatecolor,
        file=cross3division0](0,0,2)
}{
\psSolid[object=datfile,
        file=cross3,
        plansepare={[0 0 1 0]},
        action=none,
        name=cross3division]%
\psSolid[object=load,hollow,incolor=yellow!50,fillcolor=green!50,
        load=cross3division1,
        file=cross3division1,
        action=writesolid]
\psSolid[object=datfile,deactivatecolor,
        file=cross3division1](0,0,-2)
\psSolid[object=load,hollow,incolor=yellow!50,fillcolor=green!50,
        load=cross3division0,
        file=cross3division0,
        action=writesolid]
\psSolid[object=datfile,deactivatecolor,
        file=cross3division0](0,0,2)
}
\composeSolid
\end{pspicture}
\end{LTXexample}
\subsection{Dessiner les lignes d'intersection}
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-4)(4,4)
\psframe(-4,-4)(4,4)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -30 20,Decran=50}
\psSolid[object=datfile,deactivatecolor,
        file=cross3division1,
        intersectiontype=0,
        intersectionplan={[1 -1 0 0][1 1 0 0]},
        intersectioncolor=(bleu) (rouge),
        intersectionlinewidth=1.5 1.5]
\psSolid[object=datfile,deactivatecolor,
        file=cross3division0,
        intersectiontype=0,
        intersectionplan={[1 -1 0 0][1 1 0 0]},
        intersectioncolor=(bleu) (rouge),
        intersectionlinewidth=1.5 1.5]
\end{pspicture}
\end{LTXexample}
\subsection{Intercaler en sandwich, un quadrillage entre les deux moitiés}
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-4)(4,4)
\psframe(-4,-4)(4,4)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -30 20,Decran=50}
\psSolid[object=datfile,deactivatecolor,
        file=cross3division1]
\psSolid[object=grille,base=-6 6 -6 6,ngrid=9 9,color1=white,color2=gray!50, hue=(color2) (color1)]
\psSolid[object=datfile,deactivatecolor,
        file=cross3division0]
\end{pspicture}
\end{LTXexample}
\section{Tailler l'extrémité du cylindre en pointe avec 4 facettes}
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-3)(4,3)
\psframe(-4,-3)(4,3)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -30 30,Decran=50}
\IfFileExists{cylindrepointe-sommets.dat}{%
\psSolid[object=datfile,
         fillcolor=red!50,
         file=cylindrepointe]
}{
\psset{solidmemory}
\psSolid[object=datfile,
        file=cylindrebiseau,
        plansepare={[0 -1 1 0]},
        fillcolor=green!50,
        action=none,name=cylindrepointe1]
\psSolid[object=load,
        load=cylindrepointe11,
        plansepare={[0 1 1 0]},
        action=none,name=cylindrepointe2]
\psSolid[object=load,fillcolor=red!50,
        load=cylindrepointe20,action=none,
        file=cylindrepointe,action=writesolid]
\composeSolid
}
\end{pspicture}
\end{LTXexample}
\section{Intersection de trois cylindres identiques d'axes orthogonaux}
\subsection{Le cylindre et sa face concave}
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-3)(4,3)
\psframe(-4,-3)(4,3)
\IfFileExists{cylindreconcave-sommets.dat}{%
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 160 30,Decran=50}
\psSolid[object=datfile,fillcolor=yellow!50,
        file=cylindreconcave]
}{%
\codejps{
% pour enregistrer les données
% du cylindre sans le biseau
% avec la partie enlevée en creux
-6 2 6 [6 24] newcylindre
{0 90 0 rotateOpoint3d} solidtransform
[1 -1 0 0] solidplansepare
/cylindretest1 exch def
/cylindretest0 exch def
cylindretest0
[1 1 0 0] solidplansepare
/cylindretest21 exch def
/cylindretest20 exch def
cylindretest21
dup [0 13] solidrmfaces
dup solidfacesreverse
/faceconcave exch def
faceconcave
{0 0 90 rotateOpoint3d} solidtransform
/faceconcave exch def
cylindretest20
 dup [0 62] solidrmfaces
faceconcave
solidfuz
 (cylindreconcave) writesolidfile
}
}
\end{pspicture}
\end{LTXexample}
 
\subsection{Raccordement d'un, deux ou trois cylindres sur le cylindre principal}
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-3)(4,4)
\psframe(-4,-3)(4,4)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 20 30,Decran=50}
\psset{solidmemory}
\psSolid[object=cylindre,
   r=2,
   h=12,
   RotX=90,
   fillcolor=yellow!50,
   ngrid=12 18,action=none,
   name=cylindre1](0,6,0)
\psSolid[object=datfile,fillcolor=yellow!50,
        file=cylindreconcave,
        action=none,
        name=cylindrebranche1
        ]
\psSolid[object=fusion,deactivatecolor,
        base=cylindre1 cylindrebranche1]%
\axesIIID(6,6,2)(8,8,4)
\composeSolid
\end{pspicture}
\end{LTXexample}
 
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-3)(4,4)
\psframe(-4,-3)(4,4)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -10 40,Decran=50}
\psset{solidmemory}
\psSolid[object=cylindre,
   r=2,
   h=12,
   RotX=90,
   fillcolor=yellow!50,
   ngrid=12 18,action=none,
   name=cylindre1](0,6,0)
\psSolid[object=datfile,fillcolor=yellow!50,
        file=cylindreconcave,
        action=none,
        name=cylindrebranche1
        ](0,-2,0)
\psSolid[object=datfile,fillcolor=yellow!50,
        file=cylindreconcave,
        action=none,RotY=-90,
        name=cylindrebranche2
        ](0,2,0)
\psSolid[object=fusion,deactivatecolor,
        base=cylindre1 cylindrebranche2 cylindrebranche1]%
\axesIIID(6,6,6)(8,8,8)
\composeSolid
\end{pspicture}
\end{LTXexample}
 
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-3)(4,4)
\psframe(-4,-3)(4,4)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -10 40,Decran=50}
\psset{solidmemory}
\psSolid[object=cylindre,
   r=2,
   h=12,
   RotX=90,
   fillcolor=yellow!50,
   ngrid=12 18,action=none,
   name=cylindre1](0,6,0)
\psSolid[object=datfile,fillcolor=yellow!50,
        file=cylindreconcave,
        action=none,
        name=cylindrebranche1
        ](0,0,0)
\psSolid[object=datfile,fillcolor=yellow!50,
        file=cylindreconcave,
        action=none,RotY=-90,
        name=cylindrebranche2
        ](0,0,0)
\psSolid[object=fusion,deactivatecolor,
        base=cylindre1 cylindrebranche2 cylindrebranche1]%
\axesIIID(6,6,6)(8,8,8)
\composeSolid
\end{pspicture}
\end{LTXexample}
 
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-4)(4,4)
\psframe(-4,-4)(4,4)
\IfFileExists{3cylindrespleins-sommets.dat}{%
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -30 30,Decran=50}
\psSolid[object=datfile,hue=0.7 0.9 0.5 1,
        file=3cylindrespleins]
}{%
\psset{solidmemory}
\psSolid[object=datfile,
        file=cylindrepointe,
        action=none,
        name=cylindre1]
\psSolid[object=datfile,
        RotX=90,
        file=cylindrepointe,
        action=none,
        name=cylindre2]
\psSolid[object=datfile,
        RotX=180,
        file=cylindrepointe,
        action=none,
        name=cylindre3]
\psSolid[object=datfile,
        RotX=270,
        file=cylindrepointe,
        action=none,
        name=cylindre4]
\psSolid[object=datfile,
        RotZ=-90,
        file=cylindrepointe,
        action=none,
        name=cylindre5]
\psSolid[object=datfile,
        RotZ=90,
        file=cylindrepointe,
        action=none,
        name=cylindre6]
\psSolid[object=fusion,
        base=cylindre1 cylindre2
             cylindre3 cylindre4
             cylindre5 cylindre6,
             file=3cylindrespleins,action=writesolid]
\composeSolid
}
\end{pspicture}
\end{LTXexample}
\subsection{Suppression des faces de la pointe et de la face circulaire}
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-3)(4,4)
%\psframe(-4,-3)(4,4)
\psset{solidmemory}
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -20 30,Decran=50}
\psSolid[object=datfile,
        file=cylindrepointe,
 %       numfaces=all
        rm=0 1 2 75 76,
        name=cylindrepointeevide1,
        action=none]
\psSolid[object=load,
        load=cylindrepointeevide1,
        file=cylindrepointeevide,
        action=writesolid]
\psSolid[object=datfile,
        file=cylindrepointeevide,
        hollow
        ]
 \composeSolid
\end{pspicture}
\end{LTXexample}
\subsection{Intersection des 3 cylindres d'axes orthogonaux}
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-4)(4,4)
\psframe(-4,-4)(4,4)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -30 30,Decran=50}
\IfFileExists{3cylindrescreux-sommets.dat}{%
\psSolid[object=datfile,deactivatecolor,
         file=3cylindrescreux]
}{
\psset{solidmemory}
\psSolid[object=datfile,
        file=cylindrepointeevide,
        incolor=yellow!50,
        fillcolor=green!50,
        hollow,
        action=none,
        name=cylindre1]
\psSolid[object=datfile,
        RotX=90,
        file=cylindrepointeevide,
        incolor=yellow!50,
        fillcolor=green!50,
        hollow,
        action=none,
        name=cylindre2]
\psSolid[object=datfile,
        RotX=180,
        file=cylindrepointeevide,
        incolor=yellow!50,
        fillcolor=green!50,
        hollow,
        action=none,
        name=cylindre3]
\psSolid[object=datfile,
        RotX=270,
        file=cylindrepointeevide,
        incolor=yellow!50,
        fillcolor=green!50,
        hollow,
        action=none,
        name=cylindre4]
\psSolid[object=datfile,
        RotZ=-90,
        file=cylindrepointeevide,
        incolor=yellow!50,
        fillcolor=green!50,
        hollow,
        action=none,
        name=cylindre5]
\psSolid[object=datfile,
        RotZ=90,
        file=cylindrepointeevide,
        incolor=yellow!50,
        fillcolor=green!50,
        hollow,
        action=none,
        name=cylindre6]
\psSolid[object=fusion,%deactivatecolor,
        base=cylindre1 cylindre2
             cylindre3 cylindre4
             cylindre5 cylindre6,
             file=3cylindrescreux,action=writesolid]
\composeSolid
}
\end{pspicture}
\end{LTXexample}
\subsection{Une vue rapprochée}
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-4)(4,4)
\psframe(-4,-4)(4,4)
\psset{SphericalCoor,viewpoint=100 -10 12,Decran=50}
\psSolid[object=datfile,deactivatecolor,
        file=3cylindrescreux]
\end{pspicture}
\end{LTXexample}
 
\begin{LTXexample}[width=8cm]
\begin{pspicture*}(-4,-4)(4,4)
\psframe(-4,-4)(4,4)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=10 -10 85,Decran=5}
\psSolid[object=datfile,inouthue=0 1 0.5 1,
        file=3cylindrescreux]
\end{pspicture*}
\end{LTXexample}
\subsection{Séparation par le plan de symétrie horizontal}
\begin{LTXexample}[width=8cm]
\begin{pspicture}(-4,-6)(4,6)
\psframe(-4,-6)(4,6)
\psset{lightsrc=viewpoint,SphericalCoor,viewpoint=100 -12 20,Decran=50}
\psset{solidmemory}
\psSolid[object=datfile,
        file=3cylindresevides,
        plansepare={[0 0 1 0]},
        action=none,
        name=3cylindresevidesdivision]
\psSolid[object=load,hollow,
        incolor=yellow!50,
        fillcolor=green!50,
        load=3cylindresevidesdivision1](0,0,-2)
\psSolid[object=load,hollow,
        incolor=yellow!50,
        fillcolor=green!50,
        load=3cylindresevidesdivision0](0,0,2)
\composeSolid
\end{pspicture}
\end{LTXexample}
\end{document}