\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}