TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I wonder whether it is possible to draw the three following quadric surfaces (cone, hyperboloids)




(and the axis)

using pgfplots 3d or TikZ as it is done in the following image

enter image description here

share|improve this question
Welcome to LaTeX! Hi Brownian and welcome to TeX.sx. In its current form, your question might not receive many answers. Please take a look at the How to Ask-page and try to improve your question according to the guidance found there. This may require you to show some effort on your part in terms of attempting a solution. If you have questions about what to do or if you don't quite understand what this means, please ask for clarification using the add comment function. – percusse Aug 9 '12 at 22:15

Yes, it is certainly possible



When working with such surfaces, you have at least two choices:

  • work with the surfaces explicitly
  • work with the surfaces parametrically

If you work with the surfaces explicitly, then for your first surface


you end up using something like

enter image description here

which is pretty ugly. Instead, if you parameterize it using polar coordinates, then you get

enter image description here

which is much more elegant. You can apply this same approach for each of your other surfaces.


The only thing to note about the code below is that instead of using r and theta, I've used x and y; it might be possible to change this- see the documentation for details.




            zlabel style={rotate=90},
         % x^2+y^2-z^2=0
        \addplot3[mesh,black,domain=0:2,y domain=0:2*pi]({x*cos(deg(y))},{x*sin(deg(y))},{x});    
        \addplot3[mesh,black,domain=0:2,y domain=0:2*pi]({x*cos(deg(y))},{x*sin(deg(y))},{-x});    
         % x^2+y^2-z^2=-1
        \addplot3[mesh,blue,domain=0:2,y domain=0:2*pi]({x*cos(deg(y))},{x*sin(deg(y))},{sqrt(x^2+1)});    
        \addplot3[mesh,blue,domain=0:2,y domain=0:2*pi]({x*cos(deg(y))},{x*sin(deg(y))},{-sqrt(x^2+1)});    
        % x^2+y^2-z^2=1
        \addplot3[mesh,green,domain=1:2,y domain=0:2*pi,samples=15]({x*cos(deg(y))},{x*sin(deg(y))},{sqrt(x^2-1)});    
        \addplot3[mesh,green,domain=1:2,y domain=0:2*pi,samples=15]({x*cos(deg(y))},{x*sin(deg(y))},{-sqrt(x^2-1)});    
share|improve this answer

run it with xelatex


\psset{unit=0.8,viewpoint=50 60 30 rtp2xyz,Decran=50,lightsrc=viewpoint,
  ngrid=20 20, incolor=red!30, fillcolor=blue!30}
\psSolid[object=surfaceparametree,base=-4 4 pi pi neg,function=f1]
\psSolid[object=surfaceparametree,function=f4,base=-1 4 pi pi neg,opacity=0.4]
\psSolid[object=surfaceparametree,function=f6,base=1 4 pi pi neg,
\psSolid[object=surfaceparametree,function=f5,base=1 4 pi pi neg,opacity=0.2]


enter image description here

or with viewpoint=50 60 10 rtp2xyz:

enter image description here

share|improve this answer
Although the OP asked specifically about PGF, I want to thank you for an amazing image! BTW: Where does the need for XeLaTeX arise? – Dror Aug 10 '12 at 6:41
@Dror: Maybe it is the simplest compilation method among others such as pdflatex --shell-escape with \usepackage[pdf]{pstricks} or latex->dvips->ps2pdf combo. – kiss my armpit Aug 10 '12 at 7:22

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.