I have the code for planes intersecting a hyperboloid from a previous thread (see below) and I now want to label the upper point where the hyperboloid intersects the vertical axis as A.

If I try to do this with a simple dot command, the dot appears to be half-hidden behind the hyperboloid which is undesirable. Now from reading p77-78 of this guide (http://math.uchicago.edu/~cstaats/Charles_Staats_III/Notes_and_papers_files/asymptote_tutorial.pdf), it appears to be because Asymptote doesn't know which is meant to be on top and is just guessing. The suggested resolution is to cut out the relevant part of the surface but they only provide an example of how to do this for something simple like a circle but my situation with the hyperboloid is much more complicated. Does anyone have any advice?


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

  • Try using layering as described in Section 3.15 ("Layering: moving objects closer to camera") of the document you cite. – Charles Staats Jan 5 '16 at 18:08
  • @CharlesStaats Hi. I don't understand how I should use the code at the bottom of p87. Should I first declare e.g. "P=(1,2,3);" and then copy and past that code and then "draw P;"? This gives me syntax errors though. – user11128 Jan 5 '16 at 19:46
  • @CharlesStaats Also, wouldn't this be dealt with in Section 3.17 (Writing on Surfaces) which is incomplete? – user11128 Jan 5 '16 at 23:52
  • Section 3.17 is intended to be about things like this, which I'm guessing is not what you are trying to accomplish. – Charles Staats Jan 6 '16 at 4:27
  • 1
    Have you tried it with L=Label("$A$", align=NE)? – Charles Staats Jan 7 '16 at 5:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.