diff options
Diffstat (limited to 'graphics/asymptote/base/graph3.asy')
-rw-r--r-- | graphics/asymptote/base/graph3.asy | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/graphics/asymptote/base/graph3.asy b/graphics/asymptote/base/graph3.asy index f690c6a3c1..f17b4e9707 100644 --- a/graphics/asymptote/base/graph3.asy +++ b/graphics/asymptote/base/graph3.asy @@ -2201,21 +2201,24 @@ picture vectorfield(path3 vector(pair v), triple f(pair z), pair a, pair b, string name="", render render=defaultrender) { picture pic; - real du=1/nu; - real dv=1/nv; + real du=(b.x-a.x)/(nu-1); + real dv=(b.y-a.y)/(nv-1); bool all=cond == null; real scale; if(maxlength > 0) { real size(pair z) { path3 g=vector(z); - return abs(point(g,size(g)-1)-point(g,0)); + triple w=point(g,size(g)-1)-point(g,0); + return max(w.x,w.y,w.z); } - real max=size((0,0)); + real max=size(a); for(int i=0; i <= nu; ++i) { - real x=interp(a.x,b.x,i*du); - for(int j=0; j <= nv; ++j) - max=max(max,size((x,interp(a.y,b.y,j*dv)))); + real u=a.x+i*du; + for(int j=0; j < nv; ++j) { + real v=a.y+j*dv; + max=max(max,size((u,v))); + } } scale=max > 0 ? maxlength/max : 1; } else scale=1; @@ -2224,9 +2227,10 @@ picture vectorfield(path3 vector(pair v), triple f(pair z), pair a, pair b, if(group) begingroup3(pic,name == "" ? "vectorfield" : name,render); for(int i=0; i <= nu; ++i) { - real x=interp(a.x,b.x,i*du); + real u=a.x+i*du; for(int j=0; j <= nv; ++j) { - pair z=(x,interp(a.y,b.y,j*dv)); + real v=a.y+j*dv; + pair z=(u,v); if(all || cond(z)) { path3 g=scale3(scale)*vector(z); string name="vector"; |