%% $Id: pst-hyperboloid-doc.tex 1278 2026-06-04 15:27:05Z herbert $ \DocumentMetadata{lang=en} \documentclass[11pt,english,BCOR10mm,DIV12,bibliography=totoc,parskip=false, smallheadings, headexclude,footexclude,twoside]{pst-doc} \usepackage{pst-hyperboloid} \let\pstFV\fileversion \addbibresource{\jobname.bib} \usepackage{enumitem,xltabular,hvindex,hvlogos,minted-code,hvextern} \setkeys{hv}{moveToExampleDir,ExampleDir=exa-pdf,showFilename=false,force=false} \setlist{nosep} \usepackage{makeidx} \makeindex \def\bgImage{\begin{pspicture}(-5,-4)(5,7) \psset{viewpoint=50 60 30 rtp2xyz,lightsrc=viewpoint,Decran=50} \pstVerb{/decalage 150 3.14159265359 mul 180 div def /H 4 def /Rayon 2 def}% \defFunction[algebraic]{hyperboloidonesheet}(u,v)% {Rayon*(cos(u)*(1-v)+v*(cos(u+decalage)))} {Rayon*(sin(u)*(1-v)+v*(sin(u+decalage)))} {v*H}% \psSolid[object=surfaceparametree,dotsize=3.5pt, ngrid=36 18, tablez=0 0.1 4 {} for, zcolor=0 1 0.5 1, base=0 2 Pi mul 1 0 , function=hyperboloidonesheet] \gridIIID[Zmin=0,Zmax=4](-3,3)(-3,3) \end{pspicture} } \title{Hyperbolids with PSTricks} \author{Manuel Luque \\Herbert Voß} \begin{document} \settitle \tableofcontents \section{Introduction} The command is \Lcs{psHyperboloid}\Largs{options}\Larg{(x,y,z)}. The examples can be run with the sequence \Lprog{latex}$\rightarrow$""\Lprog{dvips}$\rightarrow$""\Lprog{ps2pdf} or with \Lprog{lualatex} if you want directly the \Lext{pdf} output. Some of the examples with a splitted object needs heavy calculations which may take more than 30 minutes on slow machines! The mesh is defined by the option \LKeyword{ngrid=n1 n2}, where \texttt{n1} is the number of meridians and \texttt{n2} is the number of levels. The \Index{height} of the hyperboloid is defined by the option \LKeyword{h=8}, and the radius of the bases by \LKeyword{R=4} (default values). The number of inner and outer facets is calculated using the formula: \[ n_1\times n_2\times 4\times 2 \] If one wishes to mesh only the exterior, the option to be used—after calculation—is: \begin{verbatim} fcol= n1*n2*4 2 n1*n2*4*2{ /Rang exch def Rang (Blue) Rang 1 add (Yellow) } for \end{verbatim} \begin{center} \input{\jobname-exa1} \end{center} \begin{codeblockA}[title=First example] \begin{pspicture}(-8,-7.2)(6,6) \psset{viewpoint=25 25 30 rtp2xyz,lightsrc=viewpoint,Decran=25} \gridIIID[Zmin=-4,Zmax=4,showAxes=false](-4,4)(-4,4) \psHyperboloid[ hollow,linewidth=0.25\pslinewidth,grid, % inouthue=1 0 0.5 1, fcol= 0 2 5760{ /Rang exch def Rang (Black) Rang 1 add (White) } for, ngrid=36 20] \psLineIIID(4,-4,4)(4,4,4)(-4,4,4) \psLineIIID(4,4,-4)(4,4,4) \end{pspicture} \end{codeblockA} %% \begin{center} \input{\jobname-exa2} \end{center} \begin{codeblockA}[title=First example] \begin{pspicture}(-8,-7)(6,5) \psset{viewpoint=25 25 20 rtp2xyz,lightsrc=,Decran=25} \gridIIID[Zmin=-4,Zmax=4,showAxes=false](-4,4)(-4,4) \psHyperboloid[ hollow,linewidth=0.25\pslinewidth,grid,% inouthue=1 0 0.5 1, fcol= 0 2 862{/Rang exch def Rang (Blue) Rang 1 add (Yellow) } for 864 2 1726{/Rang exch def Rang (Cyan) Rang 1 add (Yellow) } for, ngrid=18 12 ] \psLineIIID(4,-4,4)(4,4,4)(-4,4,4) \psLineIIID(4,4,-4)(4,4,4) \end{pspicture} \end{codeblockA} \section{Hyperboloid of one sheet} The hyperboloid of one sheet is a ruled surface. We consider the \Index{generator line} $\overline{A_1A_2}$, defined by the cylinder's height $H$, its radius $R$, and the angular offset $θ$ between the two endpoints.\index{cylinder} From this, we derive the \Index{parametric equations} for the hyperboloid: \[ \left\{ \begin{matrix}[l] x =&R\big((1-k)\cos(t)+k\cos(t+\theta)\big)\\ y =&R\big((1-k)\sin(t)+k\sin(t+\theta)\big)\\ z =&kH \end{matrix} \right. \] The parameter ranges are: $k ∈ [0, 1]$ and $t ∈ [0, 2π]$. The value of $θ$ controls the constriction at the center of the hyperboloid. Depending on the sign of $θ$, the generator lines spiral to the right or to the left. \subsection{Examples and various possible representations} \begin{center} \input{\jobname-exa3} \end{center} \begin{codeblockA}[title = Example 1] \begin{pspicture}(-8,-3)(8,9) \psset{unit=1cm} \psset{viewpoint=50 60 30 rtp2xyz,lightsrc=viewpoint,Decran=50} \psframe(-5,-3)(5,9) \pstVerb{/iface 0 def /decalage 150 3.14159265359 mul 180 div def /H 6 def /Rayon 3 def}% \defFunction[algebraic]{hyperboloidonesheet}(u,v)% {Rayon*(cos(u)*(1-v)+v*(cos(u+decalage)))} {Rayon*(sin(u)*(1-v)+v*(sin(u+decalage)))} {v*H} \psSolid[object=surfaceparametree, ngrid=36 18, hue=0 1 0.5 1, %fillcolor=JaunePale, incolor=yellow!20,%show=all,num=all, fcol= 0 1 35{ % PS code for the color setting /Rang exch def Rang 2 div cvi 2 mul cvi Rang eq {/Damier {iface (Red)} def}{/Damier {iface (Cyan)} def} ifelse 18 { Damier /iface iface 1 add def } repeat } for, % end fcol= base=0 2 Pi mul 0 1, function=hyperboloidonesheet] \gridIIID[Zmin=0,Zmax=6](-3,3)(-3,3) \end{pspicture} \end{codeblockA} %%% \begin{center} \input{\jobname-exa4} \end{center} \begin{codeblockA}[breakable, title=Example 2] \begin{pspicture}(-8,-3)(8,8) \psset{unit=1cm} \psset{viewpoint=50 60 30 rtp2xyz,lightsrc=viewpoint,Decran=50} \psframe(-5,-3)(5,8) \pstVerb{/iface 0 def /decalage -90 3.14159265359 mul 180 div def /H 4 def /Rayon 3 def}% \defFunction[algebraic]{hyperboloidonesheet}(u,v)% {Rayon*(cos(u)*(1-v)+v*(cos(u+decalage)))} {Rayon*(sin(u)*(1-v)+v*(sin(u+decalage)))} {v*H}% \psSolid[object=surfaceparametree, ngrid=36 18, fcol= 0 1 71{/Rang exch def Rang 2 div cvi 2 mul cvi Rang eq {/Damier {iface (Black) iface 1 add (White)} def}{/Damier {iface (White) iface 1 add (Black)} def}ifelse 9{ Damier /iface iface 2 add def } repeat } for, base=0 2 Pi mul 0 1, function=hyperboloidonesheet] \gridIIID[Zmin=0,Zmax=4](-3,3)(-3,3) \end{pspicture} \end{codeblockA} %%--- \begin{center} \input{\jobname-exa5} \end{center} \begin{codeblockA}[breakable, title=Example 3] \begin{pspicture}(-8,-3)(8,8) \psset{unit=1cm} \psset{viewpoint=50 60 30 rtp2xyz,lightsrc=viewpoint,Decran=50} \psframe(-5,-3)(5,8) \pstVerb{/iface 0 def /decalage -120 3.14159265359 mul 180 div def /H 4 def /Rayon 3 def}% \defFunction[algebraic]{hyperboloidonesheet}(u,v)% {Rayon*(cos(u)*(1-v)+v*(cos(u+decalage)))} {Rayon*(sin(u)*(1-v)+v*(sin(u+decalage)))} {v*H}% \psSolid[object=surfaceparametree, ngrid=36 18, incolor=yellow!20, fcol= 0 1 35{/Rang exch def Rang 2 div cvi 2 mul cvi Rang eq {/Damier {iface (Black) iface 1 add (White)} def}{/Damier {iface (White) iface 1 add (Black)} def}ifelse 9 { Damier /iface iface 2 add def } repeat } for, base=0 2 Pi mul 1 0, function=hyperboloidonesheet] \gridIIID[Zmin=0,Zmax=4](-3,3)(-3,3) \end{pspicture} \end{codeblockA} %%%%%% \begin{center} \input{\jobname-exa6} \end{center} \begin{codeblockA}[breakable, title=Example 3] \begin{pspicture}(-5,-4)(5,7) \psset{viewpoint=50 60 30 rtp2xyz,lightsrc=viewpoint,Decran=50} \psframe(-5,-4)(5,7) \pstVerb{/decalage 150 3.14159265359 mul 180 div def /H 4 def /Rayon 2 def}% \defFunction[algebraic]{hyperboloidonesheet}(u,v)% {Rayon*(cos(u)*(1-v)+v*(cos(u+decalage)))} {Rayon*(sin(u)*(1-v)+v*(sin(u+decalage)))} {v*H}% \psSolid[object=surfaceparametree,dotsize=3.5pt, ngrid=36 18, tablez=0 0.1 4 {} for, zcolor=0 1 0.5 1, base=0 2 Pi mul 1 0 , function=hyperboloidonesheet] \gridIIID[Zmin=0,Zmax=4](-3,3)(-3,3) \end{pspicture} \end{codeblockA} \clearpage %%%%%%%%%%----------------- \section{Sections of a Hyperboloid of One Sheet} The radius of the generating hyperbola varies from bottom to top, following the relation: \[ \frac{r^2}{a^2}=4k^2\left(\frac{R^2}{a^2}-1\right)+1 \] \[ r=\sqrt{4k^2(R^2-a^2)+a^2}\ \text{with}\ -\frac{1}{2}\leqslant k\leqslant\frac{1}{2} \] \begin{center} \input{\jobname-exa7} \end{center} \begin{codeblockA}[breakable, title=Example 4] \begin{pspicture}(-8,-7)(8,7) \psset{solidmemory, viewpoint=50 30 20 rtp2xyz,lightsrc=viewpoint,Decran=50} \pstVerb{/Hauteur 8 def /nEtages 20 def /Pas 1 nEtages div def /nMeridiens 36 def /DemiAxeFocal 1 def % rayon de l'étranglement au milieu /RayonBases 4 def}% \psSolid[object=grille,base=-4 4 -4 4,linewidth=0.5\pslinewidth](0,0,Hauteur 2 div neg) \psSolid[object=new, incolor=yellow!50, fillcolor=ForestGreen!20, hollow, sommets=0.5 Pas neg -0.5 Pas neg add { /k exch def 0 1 nMeridiens 1 sub { /i exch def /r 4 k dup mul mul RayonBases dup mul DemiAxeFocal dup mul sub mul DemiAxeFocal dup mul add sqrt def 360 nMeridiens div i mul cos r mul 360 nMeridiens div i mul sin r mul k Hauteur mul } for } for, faces={ 0 1 nEtages 1 sub { /k1 exch def k1 nMeridiens mul 1 add 1 k1 1 add nMeridiens mul 1 sub { /i exch def [i i 1 sub nMeridiens i add 1 sub nMeridiens i add] } for [k1 nMeridiens mul k1 1 add nMeridiens mul 1 sub k1 2 add nMeridiens mul 1 sub k1 1 add nMeridiens mul] } for }]% end \pssolid \gridIIID[Zmin=-4,Zmax=4](-4,4)(-4,4) \end{pspicture} \end{codeblockA} \newpage \begin{center} \input{\jobname-exa8} \end{center} % dessin 2 : coupe par un plan vertical tangent \begin{codeblockA}[breakable, title=Example 5] \begin{pspicture}(-8,-7)(8,7) \psset{solidmemory,viewpoint=50 30 20 rtp2xyz,lightsrc=viewpoint,Decran=50} \pstVerb{/Hauteur 8 def /nEtages 20 def /Pas 1 nEtages div def /nMeridiens 36 def /DemiAxeFocal 2 def % rayon de l'étranglement au milieu /RayonBases 4 def}% \psSolid[object=grille,base=-4 4 -4 4,linewidth=0.5\pslinewidth](0,0,Hauteur 2 div neg) \psSolid[object=new,fillcolor=red!50,incolor=yellow,hollow,action=draw**, sommets=0.5 Pas neg -0.5 Pas neg add{ /k exch def 0 1 nMeridiens 1 sub { /i exch def /r 4 k dup mul mul RayonBases dup mul DemiAxeFocal dup mul sub mul DemiAxeFocal dup mul add sqrt def 360 nMeridiens div i mul cos r mul 360 nMeridiens div i mul sin r mul k Hauteur mul } for } for, faces={ 0 1 nEtages 1 sub { /k1 exch def k1 nMeridiens mul 1 add 1 k1 1 add nMeridiens mul 1 sub { /i exch def [i i 1 sub nMeridiens i add 1 sub nMeridiens i add] } for [k1 nMeridiens mul k1 1 add nMeridiens mul 1 sub k1 2 add nMeridiens mul 1 sub k1 1 add nMeridiens mul] } for }, plansepare={[1 0 0 DemiAxeFocal neg]}, name=coupeHyperboloidTest,action=none] \psSolid[object=load,incolor=yellow!50,fillcolor=ForestGreen!20,rm=2 609, intersectionplan={[1 0 0 DemiAxeFocal neg]},intersectioncolor=(bleu), intersectionlinewidth=2, intersectiontype=0, load=coupeHyperboloidTest1] \psSolid[object=plan, definition=equation,args={[1 0 0 DemiAxeFocal neg] 90},linecolor=red, % fillcolor=Aquamarine, planmarks,base=-4 4 -4 4,showBase,action=draw] \gridIIID[Zmin=-4,Zmax=4](-4,4)(-4,4) \end{pspicture} \end{codeblockA} \newpage % dessin 3 : coupe par un plan vertical x>a \begin{center} \input{\jobname-exa9} \end{center} % dessin 2 : coupe par un plan vertical tangent \begin{codeblockA}[breakable, title=Example 6] \begin{pspicture}(-8,-7)(8,7) \psset{solidmemory, viewpoint=50 30 20 rtp2xyz,lightsrc=viewpoint,Decran=50} \pstVerb{/Hauteur 8 def /nEtages 20 def /Pas 1 nEtages div def /nMeridiens 36 def /DemiAxeFocal 1 def % rayon de l'étranglement au milieu /RayonBases 4 def /DemiAxeNonFocal Hauteur 2 div RayonBases dup mul DemiAxeFocal dup mul sub sqrt div DemiAxeFocal mul def /X0 1.5 def /Z0 DemiAxeNonFocal X0 DemiAxeFocal div dup mul 1 sub sqrt mul def /Ymax DemiAxeFocal Hauteur 2 DemiAxeNonFocal mul div dup mul 1 add X0 DemiAxeFocal div dup mul sub sqrt mul def}% \psSolid[object=grille,base=-4 4 -4 4,linewidth=0.5\pslinewidth](0,0,Hauteur 2 div neg) \psSolid[object=new,incolor=yellow!50, fillcolor=ForestGreen!20, hollow, sommets= 0.5 Pas neg -0.5 Pas neg add{ /k exch def 0 1 nMeridiens 1 sub { /i exch def /r 4 k dup mul mul RayonBases dup mul DemiAxeFocal dup mul sub mul DemiAxeFocal dup mul add sqrt def 360 nMeridiens div i mul cos r mul 360 nMeridiens div i mul sin r mul k Hauteur mul } for } for, faces={ 0 1 nEtages 1 sub { /k1 exch def k1 nMeridiens mul 1 add 1 k1 1 add nMeridiens mul 1 sub { /i exch def [i i 1 sub nMeridiens i add 1 sub nMeridiens i add] } for [k1 nMeridiens mul k1 1 add nMeridiens mul 1 sub k1 2 add nMeridiens mul 1 sub k1 1 add nMeridiens mul] } for}, plansepare={[1 0 0 -1.5]},name=coupeHyperboloidTest,action=none] \psSolid[object=load,deactivatecolor=true, %fillcolor=red!50,incolor=yellow,rm=0, linewidth=0.5\pslinewidth,rm=0,load=coupeHyperboloidTest1] \psSolid[object=plan,definition=equation,args={[1 0 0 -1.5] 90},linecolor=blue,% fillcolor=Aquamarine, planmarks,base=-4 4 -4 4,name=PlanCoupe,showBase,action=draw] \defFunction[algebraic]{hyperbol1}(t){X0}{t}{sqrt(((X0^2+t^2)/(DemiAxeFocal^2)-1))*DemiAxeNonFocal} \defFunction[algebraic]{hyperbol2}(t){X0}{t}{-sqrt(((X0^2+t^2)/(DemiAxeFocal^2)-1))*DemiAxeNonFocal} \psSolid[object=courbe,linewidth=2\pslinewidth,function=hyperbol1,range=Ymax neg Ymax,r=0,linecolor=red]% \psSolid[object=courbe,linewidth=2\pslinewidth,function=hyperbol2,range=Ymax neg Ymax,r=0,linecolor=red]% \gridIIID[Zmin=-4,Zmax=4](-4,4)(-4,4) \end{pspicture} \end{codeblockA} \newpage % dessin 4 : coupe par un plan vertical x>a \begin{center} \input{\jobname-exa10} \end{center} \begin{codeblockA}[breakable, title=Example 6] \begin{pspicture}(-8,-7)(8,7) \psset{solidmemory,viewpoint=50 30 20 rtp2xyz,lightsrc=viewpoint,Decran=50,resolution=200} \pstVerb{/Hauteur 8 def /nEtages 20 def /Pas 1 nEtages div def /nMeridiens 36 def /DemiAxeFocal 1 def % rayon de l'étranglement au milieu /RayonBases 4 def /DemiAxeNonFocal Hauteur 2 div RayonBases dup mul DemiAxeFocal dup mul sub sqrt div DemiAxeFocal mul def /X0 0.5 def /Y0 DemiAxeFocal 1 X0 DemiAxeFocal div dup mul sub sqrt mul def /Ymax RayonBases def}% \psSolid[object=grille,base=-4 4 -4 4,linewidth=0.5\pslinewidth](0,0,Hauteur 2 div neg)% \psSolid[object=new,fillcolor=red!50,incolor=yellow,hollow,action=draw**, sommets= 0.5 Pas neg -0.5 Pas neg add{ /k exch def 0 1 nMeridiens 1 sub { /i exch def /r 4 k dup mul mul RayonBases dup mul DemiAxeFocal dup mul sub mul DemiAxeFocal dup mul add sqrt def 360 nMeridiens div i mul cos r mul 360 nMeridiens div i mul sin r mul k Hauteur mul } for } for 0 1 nMeridiens 1 sub {/J exch def RayonBases 360 nMeridiens div J mul cos mul RayonBases 360 nMeridiens div J mul sin mul Hauteur 2 div } for, faces={ 0 1 nEtages 1 sub { /k1 exch def k1 nMeridiens mul 1 add 1 k1 1 add nMeridiens mul 1 sub { /i exch def [i i 1 sub nMeridiens i add 1 sub nMeridiens i add] } for [k1 nMeridiens mul k1 1 add nMeridiens mul 1 sub k1 2 add nMeridiens mul 1 sub k1 1 add nMeridiens mul] } for}, plansepare={[1 0 0 -0.5]},name=coupeHyperboloidTest, action=none] \psSolid[object=load,incolor=yellow!50,fillcolor=ForestGreen!20,linewidth=0.5\pslinewidth, rm=0 1,%numfaces=all,%rm=0, % intersectionplan={[1 0 0 -0.5]}, % intersectioncolor=(bleu), % intersectionlinewidth=2, % intersectiontype=0, load=coupeHyperboloidTest1] \defFunction[algebraic]{hyperbol3}(t){X0}{t}{DemiAxeNonFocal*sqrt((t^2+X0^2)/(DemiAxeFocal^2)-1)} \defFunction[algebraic]{hyperbol4}(t){X0}{t}{-DemiAxeNonFocal*sqrt((t^2+X0^2)/(DemiAxeFocal^2)-1)} \psSolid[object=courbe,linewidth=2\pslinewidth,function=hyperbol3,range=Y0 neg -4, r=0,linecolor=red]% \psSolid[object=courbe,linewidth=2\pslinewidth, function=hyperbol3,range=Y0 4,r=0,linecolor=red]% \psSolid[object=courbe,linewidth=2\pslinewidth, function=hyperbol4,range=Y0 4,r=0,linecolor=red]% \psSolid[object=courbe,linewidth=2\pslinewidth, function=hyperbol4,range=Y0 neg -4,r=0,linecolor=red]% \psSolid[object=plan, definition=equation,args={[1 0 0 -0.5] 90},linecolor=red, planmarks, base=-4 4 -4 4, showBase,action=draw ] \gridIIID[Zmin=-4,Zmax=4](-4,4)(-4,4) %\psPoint(X0,Y0,0){P}\psdot(P) \end{pspicture} \end{codeblockA} \newpage % dessin 5 : coupe par un plan incliné : x+z=0 ellipse \begin{center} \input{\jobname-exa11} \end{center} \begin{codeblockA}[breakable, title=Example 7] \begin{pspicture}(-8,-7)(8,9) \psset{solidmemory,viewpoint=100 30 20 rtp2xyz,lightsrc=viewpoint,Decran=133} \pstVerb{/Hauteur 8 def /nEtages 36 def /Pas 1 nEtages div def /nMeridiens 36 def /DemiAxeFocal 1 def % rayon de l'étranglement au milieu /RayonBases 3 def /DemiAxeNonFocal Hauteur 2 div RayonBases dup mul DemiAxeFocal dup mul sub sqrt div DemiAxeFocal mul def /xMax DemiAxeNonFocal DemiAxeFocal mul DemiAxeNonFocal dup mul DemiAxeFocal dup mul sub sqrt div def /GrandAxe xMax 2 sqrt mul def}% \psSolid[object=grille,base=-3 3 -3 3,linewidth=0.5\pslinewidth,linecolor=red](0,0,Hauteur 2 div neg)% \psSolid[object=new,fillcolor=red!50,incolor=yellow,%hollow, action=draw*, sommets= 0.5 Pas neg -0.5 Pas neg add{ /k exch def 0 1 nMeridiens 1 sub { /i exch def /r 4 k dup mul mul RayonBases dup mul DemiAxeFocal dup mul sub mul DemiAxeFocal dup mul add sqrt def 360 nMeridiens idiv i mul cos r mul 360 nMeridiens idiv i mul sin r mul k Hauteur mul } for } for, faces={ 0 1 nEtages 1 sub { /k1 exch def k1 nMeridiens mul 1 add 1 k1 1 add nMeridiens mul 1 sub { /i exch def [i i 1 sub nMeridiens i add 1 sub nMeridiens i add] } for [k1 nMeridiens mul k1 1 add nMeridiens mul 1 sub k1 2 add nMeridiens mul 1 sub k1 1 add nMeridiens mul] } for % faces du dessus et de dessous %[0 1 nMeridiens 1 sub {}for] %[nMeridiens nEtages 1 add mul 1 sub -1 nMeridiens nEtages mul {}for ] },plansepare={[1 0 1 0]}, name=coupeHyperboloidTest,action=none] \psSolid[object=load,incolor=yellow!50, fillcolor=ForestGreen!20,linewidth=0.5\pslinewidth, rm=0,load=coupeHyperboloidTest1,hollow=true](0,0,0) \defFunction[algebraic]{ellipse}(t){DemiAxeFocal*cos(t)}{GrandAxe*sin(t)}{} \psSolid[object=plan,definition=equation,args={[1 0 1 0] 90},linecolor=red,fillcolor=Aquamarine, planmarks, base=-3 3 -3 2 sqrt mul 3 2 sqrt mul,showBase,action=draw ]% \defFunction[algebraic]{ellipse}(t){DemiAxeFocal*cos(t)}{GrandAxe*sin(t)}{} \psSolid[object=plan,definition=equation, args={[1 0 1 0] 90},base=-10 10 -10 10,action=none,name=monplan]% \psProjection[object=courbeR2,plan=monplan,range=0 2 pi mul,resolution=360, linecolor=red,fillstyle=solid,opacity=0.5,linewidth=2\pslinewidth,function=ellipse ]% \composeSolid %\psPoint(0,DemiAxeFocal,0){F}\psdot(F) %\psPoint(xMax neg,0,xMax){F2}\psdot[linecolor=red](F2) \gridIIID[Zmin=-4,Zmax=4,linewidth=1\pslinewidth](-3,3)(-3,3) \end{pspicture} \end{codeblockA} \newpage % dessin 6 : coupe par un plan vertical x>a \begin{center} \input{\jobname-exa12} \end{center} \begin{codeblockA}[breakable, title=Example 8] \begin{pspicture}(-8,-7)(8,7) \psset{solidmemory,viewpoint=100 30 30 rtp2xyz,lightsrc=viewpoint,Decran=133} \pstVerb{/Hauteur 6 def /nEtages 36 def /Pas 1 nEtages div def /nMeridiens 36 def /DemiAxeFocal 1 def % rayon de l'étranglement au milieu /RayonBases 3 def /JaunePale {0.89 0.79 0.435 setrgbcolor} def}% \psSolid[object=new,fillcolor=red!50,incolor=yellow,%hollow, action=draw*,sommets= 0.5 Pas neg -0.5 Pas neg add{ /k exch def 0 1 nMeridiens 1 sub { /i exch def /r 4 k dup mul mul RayonBases dup mul DemiAxeFocal dup mul sub mul DemiAxeFocal dup mul add sqrt def 360 nMeridiens idiv i mul cos r mul 360 nMeridiens idiv i mul sin r mul k Hauteur mul } for } for, faces={ %face du dessus [0 1 nMeridiens 1 sub {}for] % les faces latérales 0 1 nEtages 1 sub { /k1 exch def k1 nMeridiens mul 1 add 1 k1 1 add nMeridiens mul 1 sub { /i exch def [i i 1 sub nMeridiens i add 1 sub nMeridiens i add] } for [k1 nMeridiens mul k1 1 add nMeridiens mul 1 sub k1 2 add nMeridiens mul 1 sub k1 1 add nMeridiens mul] } for % face de dessous %[nMeridiens nEtages 1 add mul 1 sub -1 nMeridiens nEtages mul {}for ] [nMeridiens nEtages mul 1 nMeridiens nEtages 1 add mul 1 sub {}for ] },plansepare={[1 0 0 -1.5]},name=coupeHyperboloidTest,action=none] % file=hyperboloideVersion2, % action=writesolid] %\psSolid[object=datfile, % file=hyperboloideVersion2, fillcolor=red!50,incolor=yellow, linewidth=0.5\pslinewidth % ] \psSolid[object=load,incolor=yellow!50,fillcolor=ForestGreen!20, fcol=0 (JaunePale) 1 (JaunePale),% 1078 (JaunePale), linewidth=0.5\pslinewidth, % numfaces=all, intersectionplan={[1 0 0 -1.5]},intersectioncolor=(bleu),intersectionlinewidth=2, intersectiontype=0,load=coupeHyperboloidTest1,hollow=false] \psSolid[object=plan,definition=equation,args={[1 0 0 -1.5] 90},linecolor=red, fillcolor=Aquamarine,planmarks,base=-3 3 -3 3,showBase,action=draw] \gridIIID[Zmin=-3,Zmax=3](-3,3)(-3,3) \end{pspicture} \end{codeblockA} \newpage % dessin 7 : coupe par un plan incliné : bande \begin{center} \input{\jobname-exa13} \end{center} \begin{codeblockA}[breakable, title=Example 8] \begin{pspicture}(-8,-7)(8,7) \psset{solidmemory,viewpoint=100 60 20 rtp2xyz,lightsrc=viewpoint,Decran=100} \pstVerb{/Hauteur 8 def /nEtages 36 def /Pas 1 nEtages div def /nMeridiens 36 def /DemiAxeFocal 1 def % rayon de l'étranglement au milieu /RayonBases 3 def /DemiAxeNonFocal Hauteur 2 div RayonBases dup mul DemiAxeFocal dup mul sub sqrt div DemiAxeFocal mul def /xMax DemiAxeNonFocal DemiAxeFocal mul DemiAxeNonFocal dup mul DemiAxeFocal dup mul sub sqrt div def /GrandAxe xMax 2 sqrt mul def /ConeAsymptote DemiAxeFocal DemiAxeNonFocal div def }% \psSolid[object=grille,base=-3 3 -3 3,linewidth=0.5\pslinewidth,linecolor=red](0,0,Hauteur 2 div neg)% \psSolid[object=new,fillcolor=red!50,incolor=yellow,%hollow, action=draw*,sommets= 0.5 Pas neg -0.5 Pas neg add{ /k exch def 0 1 nMeridiens 1 sub { /i exch def /r 4 k dup mul mul RayonBases dup mul DemiAxeFocal dup mul sub mul DemiAxeFocal dup mul add sqrt def 360 nMeridiens idiv i mul cos r mul 360 nMeridiens idiv i mul sin r mul k Hauteur mul } for } for, faces={ 0 1 nEtages 1 sub { /k1 exch def k1 nMeridiens mul 1 add 1 k1 1 add nMeridiens mul 1 sub { /i exch def [i i 1 sub nMeridiens i add 1 sub nMeridiens i add] } for [k1 nMeridiens mul k1 1 add nMeridiens mul 1 sub k1 2 add nMeridiens mul 1 sub k1 1 add nMeridiens mul] } for % faces du dessus et de dessous %[0 1 nMeridiens 1 sub {}for] %[nMeridiens nEtages 1 add mul 1 sub -1 nMeridiens nEtages mul {}for ] }, plansepare={[0 1 ConeAsymptote 0]},name=coupeHyperboloidTest,action=none] \psSolid[object=load,incolor=yellow!50,fillcolor=ForestGreen!20, linewidth=0.5\pslinewidth, rm=0,% intersectionplan={[0 1 ConeAsymptote 0]}, intersectioncolor=(bleu), % intersectionlinewidth=2,intersectiontype=0, load=coupeHyperboloidTest1,hollow=true](0,0,0) \defFunction[algebraic]{ellipse}(t){DemiAxeFocal*cos(t)}{GrandAxe*sin(t)}{} \psSolid[object=plan,definition=equation,args={[0 1 ConeAsymptote 0] 180},linecolor=red, fillcolor=Aquamarine,planmarks,base=-3 3 -4.9 4.9,showBase,action=draw]% \psSolid[object=plan, definition=equation,args={[0 1 ConeAsymptote 0] 180},base=-5 5 -4.9 4.9, action=none,name=monplan]% \psProjection[object=droite,plan=monplan,linewidth=3\pslinewidth,linecolor=red,args=1 5 1 -5] \psProjection[object=droite,linewidth=3\pslinewidth,plan=monplan,linecolor=red,args=-1 5 -1 -5] \composeSolid %\psPoint(0,DemiAxeFocal,0){F}\psdot(F) %\psPoint(xMax neg,0,xMax){F2}\psdot[linecolor=red](F2) \gridIIID[Zmin=-4,Zmax=4,linewidth=1\pslinewidth](-3,3)(-3,3) \end{pspicture} \end{codeblockA} \newpage % dessin 8 : coupe par un plan incliné : parabole \begin{center} \input{\jobname-exa14} \end{center} \begin{codeblockA}[breakable, title=Example 9] \begin{pspicture}(-8,-7)(8,7) \psset{solidmemory} \psset{viewpoint=100 60 20 rtp2xyz,lightsrc=viewpoint,Decran=100} \pstVerb{ /Hauteur 8 def /nEtages 36 def /Pas 1 nEtages div def /nMeridiens 36 def /DemiAxeFocal 1 def % rayon de l'étranglement au milieu /RayonBases 3 def /DemiAxeNonFocal Hauteur 2 div RayonBases dup mul DemiAxeFocal dup mul sub sqrt div DemiAxeFocal mul def /xMax DemiAxeNonFocal DemiAxeFocal mul DemiAxeNonFocal dup mul DemiAxeFocal dup mul sub sqrt div def /GrandAxe xMax 2 sqrt mul def /ConeAsymptote DemiAxeFocal DemiAxeNonFocal div def }% \psSolid[object=grille,base=-3 3 -3 3,linewidth=0.5\pslinewidth,linecolor=red](0,0,Hauteur 2 div neg)% \psSolid[object=new,fillcolor=red!50,incolor=yellow,%hollow, action=draw*, sommets= 0.5 Pas neg -0.5 Pas neg add{ /k exch def 0 1 nMeridiens 1 sub { /i exch def /r 4 k dup mul mul RayonBases dup mul DemiAxeFocal dup mul sub mul DemiAxeFocal dup mul add sqrt def 360 nMeridiens idiv i mul cos r mul 360 nMeridiens idiv i mul sin r mul k Hauteur mul } for } for, faces={ 0 1 nEtages 1 sub { /k1 exch def k1 nMeridiens mul 1 add 1 k1 1 add nMeridiens mul 1 sub { /i exch def [i i 1 sub nMeridiens i add 1 sub nMeridiens i add] } for [k1 nMeridiens mul k1 1 add nMeridiens mul 1 sub k1 2 add nMeridiens mul 1 sub k1 1 add nMeridiens mul] } for % faces du dessus et de dessous %[0 1 nMeridiens 1 sub {}for] %[nMeridiens nEtages 1 add mul 1 sub -1 nMeridiens nEtages mul {}for ] }, plansepare={[0 1 ConeAsymptote -1]}, name=coupeHyperboloidTest, action=none] \psSolid[object=load, incolor=yellow!50, fillcolor=ForestGreen!20, linewidth=0.5\pslinewidth, rm=0, load=coupeHyperboloidTest1,hollow=true](0,0,0) \defFunction[algebraic]{parabole1}(t) {DemiAxeFocal*sqrt(1+(t/DemiAxeNonFocal)^2-((1-ConeAsymptote*t)/DemiAxeFocal)^2)}{1-ConeAsymptote*t}{t} \defFunction[algebraic]{parabole2}(t) {-DemiAxeFocal*sqrt(1+(t/DemiAxeNonFocal)^2-((1-ConeAsymptote*t)/DemiAxeFocal)^2)}{1-ConeAsymptote*t}{t} \psSolid[object=plan, definition=equation, args={[0 1 ConeAsymptote -1] 180}, linecolor=red, fillcolor=Aquamarine, planmarks, base=-3 3 -4.9 4.9, showBase,action=draw ]% \psSolid[object=courbe, r=0, range=0 4, linecolor=blue,linewidth=0.05, resolution=360, function=parabole1]% \psSolid[object=courbe, r=0, range=0 4, linecolor=blue,linewidth=0.05, resolution=360, function=parabole2]% %\psPoint(0,DemiAxeFocal,0){F}\psdot(F) %\psPoint(xMax neg,0,xMax){F2}\psdot[linecolor=red](F2) \gridIIID[Zmin=-4,Zmax=4,linewidth=1\pslinewidth](-3,3)(-3,3) \end{pspicture} \end{codeblockA} \section{Sections of a Hyperboloid of One Sheet} In this part the mesh of the hyperboloid is defined as a ruled surface. A dedicated macro is used to draw the hyperboloid: \Lcs{psHyperboloid}\OptArg*{Options}\Largr{x,y,z} The available options, along with their default values, are listed below: \begin{description} \item [\LKeyword{R=4}]: base radius; \item [\LKeyword{h=8}]: height; \item [\LKeyword{ngrid=36 20}]: defines the mesh—specifically, the number of lines and the number of circles; \item [\LKeyword{base=0 360 0 1}]: specifies the range of rotation around the axis (from 0° to 360°) and the height variation (from k × 0.5H, where 0 < k < 1); \item [\LKeyword{AngleTorsion=150}]: the angular offset between the endpoints of the generating line. \end{description} We consider the generating line $\overline{A_1A_2}$, defined by the cylinder's height $H$, its radius $R$, and the \Index{angular offset} $θ$ between its two endpoints. \begin{center} \input{\jobname-exa15} \end{center} \begin{codeblockA}[breakable, title=The geometry of a hyperboloid] \begin{pspicture}(-8,-6)(8,6) \psset{solidmemory,viewpoint=50 40 30 rtp2xyz,lightsrc=viewpoint,Decran=50} \psframe(-5,-6)(5,6) \pstVerb{/decalage 60 def /H 6 def /Rayon 3 def}% \psSolid[object=plan,definition=equation,args={[0 0 1 H neg 2 div]},action=none,name=planH] \psset{plan=planH} \psProjection[object=cercle,resolution=360,args=0 0 Rayon,linecolor=blue,range=0 360] \psProjection[object=cercle,resolution=360,args=0 0 Rayon 2 div,linecolor=red,range=0 decalage] \psSolid[object=plan,definition=equation,args={[0 0 1 H 2 div]},action=none,name=plan0] \psset{plan=plan0} \psProjection[object=cercle,resolution=360,args=0 0 Rayon,linecolor=blue,range=0 360] \psProjection[object=texte,fontsize=20,linecolor=red,PSfont=Symbol,pos=cc,plan=planH,text=q,phi=120](2,1)% \psPoint(Rayon,0,H 2 div neg){A1}\psdot(A1) \psPoint(Rayon,0,H 2 div){A'1}\psdot(A'1) \psPoint(0,0,0){O}\psdot(O) \psLineIIID[linestyle=dashed](Rayon,0,H 2 div)(Rayon neg,0,H 2 div) \psPoint(0,0,H 2 div neg){O1}\psPoint(0,0,H 2 div){O2} \psPoint(Rayon decalage cos mul,Rayon decalage sin mul,H 2 div){A2} \psline[linecolor=red](A1)(A2)\psdots(O1)(O2)(A2)\psline(O2)(A2) \psline[linestyle=dashed](A1)(A'1) \psline[linestyle=dashed](O1)(O2) \psline(O1)(A1) \uput[d](A1){$A_1$} \uput[u](A2){$A_2$} \uput[ur](O2){$O_2$} \uput[ur](O1){$O_1$} \uput[ur](O){$O$} \gridIIID[Zmin=-3,Zmax=3](-3,3)(-3,3) \end{pspicture} \end{codeblockA} \clearpage From this, we derive the parametric equations of the hyperboloid: \[ \left\{ \begin{array}[m]{l} x=R\big((1-k)\cos(t)+k\cos(t+\theta)\big)\\[1em] y=R\big((1-k)\sin(t)+k\sin(t+\theta)\big)\\[1em] z=(k-\frac{1}{2})H \end{array} \right. \] \begin{center} \input{\jobname-exa16} \end{center} \begin{codeblockA}[breakable, title=Simple Hyperboloid] \begin{pspicture}(-8,-7)(8,7) \psset{solidmemory,viewpoint=500 20 30 rtp2xyz,lightsrc=viewpoint,Decran=500} \psHyperboloid[hollow,incolor=yellow!50,fillcolor=ForestGreen!20] \gridIIID[Zmin=-4,Zmax=4](-4,4)(-4,4) \end{pspicture} \end{codeblockA} \newpage \begin{center} \input{\jobname-exa17} \end{center} \index{Triangle} \begin{codeblockA}[breakable, title=Triangles] \begin{pspicture}(-8,-7)(5,6) \psframe(-8,-7)(5,6) \psset{solidmemory,viewpoint=50 60 20 rtp2xyz,lightsrc=viewpoint,Decran=40} \pstVerb{/X0 0.5 def}% \psSolid[object=grille,base=-4 6 -4 4,ngrid=10 8,linewidth=0.5\pslinewidth,linecolor=red](0,0,-4)% \psHyperboloid[hollow,R=4,incolor=yellow!50,fillcolor=ForestGreen!20, plansepare={[1 0 0 DemiAxeFocal neg]},name=coupeHyperboloidTest,action=none] \psSolid[object=load,incolor=yellow!50,fillcolor=ForestGreen!20,linewidth=0.5\pslinewidth, rm=0,intersectionplan={[1 0 0 DemiAxeFocal neg]},intersectioncolor=(rouge), intersectionlinewidth=1,intersectiontype=0,load=coupeHyperboloidTest1] \psSolid[object=load,incolor=yellow!50,fillcolor=ForestGreen!20,linewidth=0.5\pslinewidth,% rm=0 1 253, RotZ=-20,load=coupeHyperboloidTest0](2,0,0) \psSolid[object=plan,definition=equation, args={[1 0 0 DemiAxeFocal neg] 90},linecolor=blue,% fillcolor=Aquamarine, planmarks,base=-4 4 -4 4,showBase,action=draw] \gridIIID[Zmin=-4,Zmax=4](-4,6)(-4,4) \end{pspicture} \end{codeblockA} \newpage \begin{center} \input{\jobname-exa18} \end{center} \begin{codeblockA}[breakable, title=Parabolas] \begin{pspicture}(-8,-7)(8,7) \psset{solidmemory,viewpoint=50 20 20 rtp2xyz,lightsrc=viewpoint,Decran=40} \pstVerb{/X0 1.5 def}% \psSolid[object=grille,base=-4 4 -4 4,ngrid=8 8,linewidth=0.5\pslinewidth,linecolor=red](0,0,-4)% \psHyperboloid[hollow,incolor=yellow!50,fillcolor=ForestGreen!20,plansepare={[1 0 0 X0 neg]}, name=coupeHyperboloidTest,action=none] \psSolid[object=load,incolor=yellow!50,fillcolor=ForestGreen!20,linewidth=0.5\pslinewidth, rm=0 1,load=coupeHyperboloidTest1] \defFunction[algebraic]{hyperbol1}(t){X0}{t}{sqrt(((X0^2+t^2)/(DemiAxeFocal^2)-1))*DemiAxeNonFocal} \defFunction[algebraic]{hyperbol2}(t){X0}{t}{-sqrt(((X0^2+t^2)/(DemiAxeFocal^2)-1))*DemiAxeNonFocal} \psSolid[object=courbe,linewidth=2\pslinewidth,function=hyperbol1,range=Ymax neg Ymax,r=0,linecolor=red]% \psSolid[object=courbe,linewidth=2\pslinewidth,function=hyperbol2,range=Ymax neg Ymax,r=0,linecolor=red]% \psSolid[object=load,incolor=yellow!50,linewidth=0.5\pslinewidth,fillcolor=ForestGreen!20, rm=0 1 178 179,load=coupeHyperboloidTest0,RotZ=-100](5,-4,0) \psSolid[object=plan,definition=equation,args={[1 0 0 -1.5] 90},linecolor=blue,planmarks, base=-4 4 -4 4,ngrid={},showBase,action=draw] \gridIIID[Zmin=-4,Zmax=4](-4,4)(-4,4) \end{pspicture} \end{codeblockA} \newpage \begin{center} \input{\jobname-exa19} \end{center} \begin{codeblockA}[breakable, title=Parallel Lines] \begin{pspicture}(-5,-9)(11,6) \psframe(-5,-9)(11,6) \psset{solidmemory,viewpoint=50 50 20 rtp2xyz,lightsrc=viewpoint,Decran=40} \pstVerb{/X0 1.5 def}% \psSolid[object=grille,base=-4 4 -4 12,ngrid=8 20,linewidth=0.5\pslinewidth,linecolor=red](0,0,-4)% \psHyperboloid[hollow,incolor=yellow!50,fillcolor=ForestGreen!20,plansepare={[0 1 ConeAsymptote 0]}, name=coupeHyperboloidTest,action=none] \psSolid[object=load,incolor=yellow!50,fillcolor=ForestGreen!20,linewidth=0.5\pslinewidth, rm=0 1,load=coupeHyperboloidTest1] \psSolid[object=load,incolor=yellow!50,linewidth=0.5\pslinewidth,fillcolor=ForestGreen!20,% rm=0 1 178 179, load=coupeHyperboloidTest0](0,7,0) \psSolid[object=plan,definition=equation,args={[0 1 ConeAsymptote 0] 180},linecolor=blue, planmarks,ngrid=,base=-4 4 -5.55 5.55,showBase,action=draw] \psSolid[object=plan,definition=equation,args={[0 1 ConeAsymptote 0] 180},base=-5.5 5.5 -5.55 5.55, action=none,name=monplan]% \psProjection[object=droite,plan=monplan,linewidth=1.5\pslinewidth,linecolor=red,args=1 5 1 -5] \psProjection[object=droite,linewidth=1.5\pslinewidth,plan=monplan,linecolor=red,args=-1 5 -1 -5] \composeSolid \gridIIID[Zmin=-4,Zmax=4](-4,4)(-4,12) \end{pspicture} \end{codeblockA} \newpage \begin{center} \input{\jobname-exa20} \end{center} \index{Hyperbole} \begin{codeblockA}[breakable, title=The Hyperbole] \begin{pspicture}(-8,-7)(5,6) \psframe(-8,-7)(5,6) \psset{solidmemory,viewpoint=50 60 20 rtp2xyz,lightsrc=viewpoint,Decran=40} \pstVerb{/X0 0.5 def}% \psSolid[object=grille,base=-4 8 -4 4,ngrid=12 8,linewidth=0.5\pslinewidth,linecolor=red](0,0,-4)% \psHyperboloid[hollow,incolor=yellow!50,fillcolor=ForestGreen!20,plansepare={[1 0 0 X0 neg]}, name=coupeHyperboloidTest,action=none] \psSolid[object=load,incolor=yellow!50,fillcolor=ForestGreen!20,linewidth=0.5\pslinewidth, rm=0 1,load=coupeHyperboloidTest1] \psSolid[object=load,incolor=yellow!50,fillcolor=ForestGreen!20, linewidth=0.5\pslinewidth, rm=0 1 333,load=coupeHyperboloidTest0](4,0,0) \defFunction[algebraic]{hyperbol3}(t){X0}{t}{DemiAxeNonFocal*sqrt((t^2+X0^2)/(DemiAxeFocal^2)-1)} \defFunction[algebraic]{hyperbol4}(t){X0}{t}{-DemiAxeNonFocal*sqrt((t^2+X0^2)/(DemiAxeFocal^2)-1)} \psSolid[object=courbe,linewidth=2\pslinewidth,function=hyperbol3,range=Y0 neg -4,r=0,linecolor=red]% \psSolid[object=courbe,linewidth=2\pslinewidth,function=hyperbol3,range=Y0 4,r=0,linecolor=red]% \psSolid[object=courbe,linewidth=2\pslinewidth,function=hyperbol4,range=Y0 4,r=0,linecolor=red]% \psSolid[object=courbe,linewidth=2\pslinewidth,function=hyperbol4,range=Y0 neg -4, r=0,linecolor=red]% \psSolid[object=plan,definition=equation,args={[1 0 0 -0.5] 90},linecolor=blue,planmarks, ngrid=,base=-4 4 -4 4,showBase,action=draw] \gridIIID[Zmin=-4,Zmax=4](-4,8)(-4,4) \end{pspicture} \end{codeblockA} \newpage \begin{center} \input{\jobname-exa21} \end{center} \index{Ellipse} \begin{codeblockA}[breakable, title=The Ellipse] \begin{pspicture}(-8,-7)(5,6) \psframe(-8,-7)(5,6) \psset{solidmemory,viewpoint=50 60 20 rtp2xyz,lightsrc=viewpoint,Decran=40} \pstVerb{/X0 0.5 def}% \psSolid[object=grille,base=-3 8 -4 4,ngrid=11 8,linewidth=0.5\pslinewidth,linecolor=red](0,0,-4)% \psHyperboloid[hollow,R=3,incolor=yellow!50,fillcolor=ForestGreen!20, plansepare={[1 0 1 0]},name=coupeHyperboloidTest,action=none] \psSolid[object=load,incolor=yellow!50,fillcolor=ForestGreen!20,linewidth=0.5\pslinewidth,rm=0, % 1, load=coupeHyperboloidTest1] \psSolid[object=load,incolor=yellow!50,fillcolor=ForestGreen!20,linewidth=0.5\pslinewidth,%rm=0 1, load=coupeHyperboloidTest0](5,0,0) \defFunction[algebraic]{ellipse}(t){DemiAxeFocal*cos(t)}{GrandAxe*sin(t)}{} \psSolid[object=plan,definition=equation,args={[1 0 1 0] 90},linecolor=red,planmarks, base=-4 4 -4 2 sqrt mul 3 2 sqrt mul,showBase,action=draw]% \defFunction[algebraic]{ellipse}(t){DemiAxeFocal*cos(t)}{GrandAxe*sin(t)}{} \psSolid[object=plan,definition=equation,args={[1 0 1 0] 90},base=-10 10 -10 10,action=none, name=monplan]% \psProjection[object=courbeR2,plan=monplan,range=0 2 pi mul,resolution=360,linecolor=red, fillstyle=solid,opacity=0.5,linewidth=1.5\pslinewidth,function=ellipse]% \composeSolid \gridIIID[Zmin=-4,Zmax=4](-3,8)(-4,4) \end{pspicture} \end{codeblockA} \newpage \begin{center} \input{\jobname-exa22} \end{center} \index{Parabel} \begin{codeblockA}[breakable, title=The Parabola] \begin{pspicture}(-5,-7)(10,6) \psframe(-5,-7)(10,6) \psset{solidmemory} \psset{viewpoint=50 20 20 rtp2xyz,lightsrc=viewpoint,Decran=40} \pstVerb{/X0 0.5 def}% \psSolid[object=grille,base=-4 4 -4 8,ngrid=8 12,linewidth=0.5\pslinewidth,linecolor=red](0,0,-4)% \psHyperboloid[hollow,R=4,incolor=yellow!50,fillcolor=ForestGreen!20,plansepare={[0 1 ConeAsymptote -1]}, name=coupeHyperboloidTest,action=none] \psSolid[object=load,incolor=yellow!50,fillcolor=ForestGreen!20,linewidth=0.5\pslinewidth, rm=0,load=coupeHyperboloidTest1] \psSolid[object=load,incolor=yellow!50,fillcolor=ForestGreen!20,linewidth=0.5\pslinewidth, rm=236,load=coupeHyperboloidTest0](0,5,0) \psSolid[object=plan,definition=equation,args={[0 1 ConeAsymptote -1] 180},linecolor=red, planmarks,base=-4 4 -5 5,showBase,action=draw]% \defFunction[algebraic]{parabole1}(t){DemiAxeFocal*sqrt(1+(t/DemiAxeNonFocal)^2-((1-ConeAsymptote*t)/DemiAxeFocal)^2)}{1-ConeAsymptote*t}{t} \defFunction[algebraic]{parabole2}(t){-DemiAxeFocal*sqrt(1+(t/DemiAxeNonFocal)^2-((1-ConeAsymptote*t)/DemiAxeFocal)^2)}{1-ConeAsymptote*t}{t} \psSolid[object=courbe,r=0,range=0 4,linecolor=blue,linewidth=0.05,resolution=360,function=parabole1]% \psSolid[object=courbe,r=0,range=0 4,linecolor=blue,linewidth=0.05,resolution=360,function=parabole2]% \composeSolid \gridIIID[Zmin=-4,Zmax=4](-4,4)(-4,8) \end{pspicture} \end{codeblockA} \nocite{*} \printbibliography \printindex \end{document}