Is there a straightforward way to draw a 3D graph over a disc domain? Say z=x^2-y^2 for x^2+y^2<1.

[I just started to use asymptote; this page explained me how to do it for a rectangular domain. I hope it is an easy question.]


One way to make sure that x^2+y^2<1 is to use polar coordinates. Then x=r cos(phi) and y=r sin(phi).

 import graph3;
 import solids;
 import interpolate;



 pen darkgreen=rgb(0,138/255,122/255);


 //function: call the radial coordinate r=t.x and the angle phi=t.y
 triple f(pair t) {
 return ((t.x)*cos(t.y), (t.x)*sin(t.y),

 surface s=surface(f,(0,1),(0.49,2.5*pi),32,16,
          usplinetype=new splinetype[] {notaknot,notaknot,monotonic},
 pen p=rgb(0,0,.7); 

enter image description here

  • Thank you, but is there a direct way to make a condition x^2+y^2<1 for the arguments? – Anton Petrunin Apr 1 '19 at 4:31
  • @marmot: The x-axis near origin should be hidden from the given point of view. Is there any way to improve this issue? E.g., by setting some samples-option? – Marian G. Apr 1 '19 at 5:28
  • 3
    A line has a thickness, a surface not. It is why you see the x-axis near origin. You can observe the same behavior with a simple square surface and the x-axis. Perhaps it is possible to avoid its by creating two z translated surfaces, but you have to manage the boundary... – O.G. Apr 1 '19 at 13:16

Your Answer

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

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