1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- module pltpara; % Computing parametric curve.
- % (x,y) = (x(t),y(t))
- % or
- % (x,y,z) = (x(t),y(t),z(t))
- % or
- % (x,y,z) = (x(t,u),y(t,u),z(t,u))
- % Author: Herbert Melenk, ZIB Berlin.
- symbolic procedure plotevalpara1(x);
- begin scalar xlo,xhi,ylo,yhi,rx,ry,fcn,fcns,pts;
- rx:=plotrange(x,
- reval(plot_xrange or '(!*interval!* -10 10)));
- xlo:=car rx;
- xhi:=cadr rx;
- fcns:= reverse plotfunctions!*;
- % ry:=plotrange(y, reval(plot_yrange or nil));
- if ry then <<ylo:=car ry; yhi:=cadr ry>>;
- while fcns do
- <<fcn := cddar fcns; fcns := cdr fcns;
- pts:=plotevalpara11(fcn,x,xlo,xhi).pts;
- >>;
- if length fcn=2 then plotdriver(plot!-2exp,'x,'y,list pts,nil)
- else plotdriver(plot!-3exp!-reg,'x,'y,'z,list pts) % WN list added
- end;
- symbolic procedure plotevalpara11(fm,x,xlo,xhi);
- begin scalar plotsynerr!*,l,d,d0,u,v,p,fl;
- scalar plotderiv!*;
- integer nx;
- fl:= for each f in fm collect rdwrap f.f;
- p:=float (nx:=plot!-points(x));
- d:=(d0:=(xhi-xlo))/p;
- v:=xlo;
- for i:=0:nx do
- <<u:= for each f in fl collect plotevalform(car f,cdr f,{x.v});
- if plotsynerr!* then typerr(fm,"function to plot");
- if smemq('overflow,u) then u:=nil;
- l:=u.l;
- v:=v+d;
- >>;
- return reversip l;
- end;
- symbolic procedure plotevalpara2(x,y);
- begin scalar xlo,xhi,ylo,yhi,rx,ry,fcn,fcns,pts;
- rx:=plotrange(x,
- reval(plot_xrange or '(!*interval!* -10 10)));
- xlo:=car rx; xhi:=cadr rx;
- fcns:= reverse plotfunctions!*;
- ry:=plotrange(y,
- reval(plot_yrange or '(!*interval!* -10 10)));
- ylo:=car ry; yhi:=cadr ry;
- fcn := cddar fcns; fcns := cdr fcns;
- if length fcn neq 3 then typerr(cdar fcns,"function to plot");
- pts:=plotevalpara21(fcn,x,xlo,xhi,y,ylo,yhi);
- plotdriver(plot!-3exp!-reg,'x,'y,'z,list pts) % WN list added
- end;
- symbolic procedure plotevalpara21(fm,x,xlo,xhi,y,ylo,yhi);
- begin scalar plotsynerr!*,l,ll,dx,dy,u,v,p,fl,w;
- scalar plotderiv!*;
- integer nx,ny;
- fl:= for each f in fm collect rdwrap f.f;
- p:=float(nx:=plot!-points(x));
- dx:=(xhi-xlo)/p;
- p:=float(ny:=plot!-points(y));
- dy:=(yhi-ylo)/p;
- v:=xlo;
- for i:=0:nx do
- <<w:= ylo; l:=nil;
- for j:=0:ny do
- <<u:= for each f in fl collect
- plotevalform(car f,cdr f,{x.v,y.w});
- if plotsynerr!* then typerr(fm,"function to plot");
- if smemq('overflow,u) then u:=nil;
- l:=u.l;
- w:=w+dy
- >>;
- v:=v+dx;
- ll:=l.ll;
- >>;
- return ll;
- end;
- endmodule;
- end;
|