picture slopefield(real f(real,real), pair a, pair b,
int nx=nmesh, int ny=nx,
real tickfactor=0.5, pen p=currentpen)
{
picture pic;
real dx=(b.x-a.x)/nx;
real dy=(b.y-a.y)/ny;
real step=0.5*tickfactor*min(dx,dy);
for(int i=0; i <= nx; ++i) {
real x=a.x+i*dx;
for(int j=0; j <= ny; ++j) {
pair cp=(x,a.y+j*dy);
real slope=f(cp.x,cp.y);
real mp=step/sqrt(1+slope^2);
draw(pic,(cp.x-mp,cp.y-mp*slope)--(cp.x+mp,cp.y+mp*slope),p);
}
}
return pic;
}
picture slopefield(real f(real), pair a, pair b,
int nx=nmesh, int ny=nx, pen p=currentpen)
{
return slopefield(new real(real x, real y) {return f(x);},a,b,nx,ny,p);
}
path curve(pair c, real f(real,real), pair a, pair b)
{
real step=stepfraction*(b.x-a.x);
real halfstep=0.5*step;
real sixthstep=step/6;