I would like to draw something like the image below (or as close as possible!)enter image description here.

I cannot copy and paste it directly into the presentation I am writing as I need to do quite a few edits.

Unfortunately this is way beyond my TikZ skills but if anyone is able to help me produce this it would be greatly appreciated and then hopefully I can take it from there and perform the edits I need (adding extra planes etc...)

If it helps, out of the planes shown, I only need the leftmost one.

Thanks very much for any help!

  • 1
    This looks more like a job for Asymptote. Commented Jan 3, 2016 at 22:49
  • @HenriMenke Sorry I don't understand. What do you mean?
    – user11128
    Commented Jan 3, 2016 at 22:50
  • Asymptote: The Vector Graphics Language Commented Jan 3, 2016 at 22:54
  • Here is a really nice tutorial for Asymptote. Commented Jan 3, 2016 at 22:56
  • I don't necessarily need the plane to be "hidden" in places inside/behind the hyperboloid. If it's possible to just draw a hyperboloid with a plane through the origin of the ambient space (doesn't have to be as beautiful as the picture above haha!) in TikZ then I'd probably prefer that option....
    – user11128
    Commented Jan 3, 2016 at 23:00

1 Answer 1


Here is a try with Asymptote (I'm a total Asymptote newbie myself). I copy-pasted parts from this answer and from this tutorial. Unfortunately, Ghostscript in Debian GNU/Linux is buggy. Therefore, I could not place labels.

settings.render = 16;
settings.prc = false;
import three;
import graph;


currentprojection = orthographic(2,0,10, up=Y);

draw(-2X--2X,arrow=Arrow3(),L=Label("$X$", position=EndPoint));
draw(-2Y--2Y,arrow=Arrow3(),L=Label("$U$", position=EndPoint));
label("$w \to \infty$",(2,1,0));

draw((0.5,-1,1)--(0.7,-0.2,1),arrow=Arrow3(size=5bp),L=Label("$\Pi_w$", position=BeginPoint));
draw((1.5,-1.3,0)--(1.3,-0.8,0),arrow=Arrow3(size=5bp),L=Label("$X+U = L \mathrm{e}^{w/L}$", position=BeginPoint));

pen color = red;
material surfacepen = material(diffusepen=color+opacity(1.0), emissivepen=0.5*color);
pen color = blue;
material planepen = material(diffusepen=opacity(0.4), emissivepen=0.8*color);

real f(real x) { return .5*x*x+.5; }
path3 p3 = path3(graph(f, -1, 1, operator..));

surface solidsurface = surface(p3, c=O, axis=X);
draw(solidsurface, surfacepen=surfacepen);

path3 p = (-1,1,1) -- (1,-1,1)  -- (1,-1,-1)  -- (-1,1,-1) -- cycle;
for (real s=0.0; s<=1.0; s+=0.5)
  draw(surface(shift(s*X)*p), surfacepen=planepen);


enter image description here

  • This is nice. I've never used Asymptote. However, what is the large black dot poking out for? Is that intentional?
    – cfr
    Commented Jan 4, 2016 at 0:05
  • @cfr That is the projection of the arrow head. I can remove it if you wish. Commented Jan 4, 2016 at 0:11
  • 1
    @Alenanno I processed your requests and found a computer with a non-broken Ghostscript, so now with labels. You are right, it looks much nicer this way. Commented Jan 4, 2016 at 9:05
  • 1
    @user11128 Your modifications can easily be done. Reading this tutorial will equip you with all the necessary skills (This might seem like an unfriendly response, but I want you to learn from my answer). The code is not specific to GNU/Linux. You can download a Windows version of Asymptote from here. Commented Jan 4, 2016 at 21:37
  • 1
    @user11128 You are implying, that I understand Asymptote: I don't. Commented Jan 4, 2016 at 22:13

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .