# Drawing a surface over a nonrectangular domain in asymptote

I use asymptote because of its amazing 3D capabilities. However, when I tried to plot a surface over a nonrectangular domain, I could not do it without getting jagged edges. As far as I know, other software such as Mathematica, Maple, or JavaView allow this kind of plots.

So the question is: is it possible to draw a generic surface in asymptote over a nonrectangular domain in such a way that its edges are smooth?

• If you want an implicit plot, the `contour3` module may be helpful. Otherwise, I'm reasonably sure the solution you describe below (mapping the domain onto a rectangle) is the only other currently feasible solution. I suppose you could set the mesh to be extremely fine so that the ragged edges are less obvious, but that would take forever to compile without really solving the problem. Sep 20, 2013 at 18:36

I found a solution that consists of mapping the domain onto a rectangle. If a domain D in R^2 can be represented as

``````D={(a(u,v), b(u,v)); u1<=u<=u2, v1<=v<=v2}
``````

then, to plot a function f(x,y) over D, we could define the following function in asymptote:

``````triple g(pair p){
real x=a(p.x,p.y), y=b(p.x,p.y);
return (x,y,f(x,y));
}
``````

Finally, the surface is plotted as follows

``````draw(surface(g,(u1,v1),(u2,v2),...),...);
``````