Files
oldlinux-files/Linux-0.98/Yggdrasil-0.98.3/usr/TeX/lib/mf/macros/graphbase.mf
2024-02-19 00:21:16 -05:00

53 lines
1.8 KiB
Plaintext

%%%
%%% File: graphbase.mf
%%%
mode_setup;
def bounds(expr a,b,c,d) = xneg:=a; xpos:=b; yneg:=c; ypos:=d; enddef;
def xconv(expr xvalue) = ((xvalue-xneg)/(xpos-xneg))*w enddef;
def yconv(expr yvalue) = ((yvalue-yneg)/(ypos-yneg))*h enddef;
def head(expr front,back,width,t) =
x1:=xpart front;y1:=ypart front; x2:=xpart back; y2:=ypart back;
x3:=xpart (z2+(width*(y2-y1)/2,width*(x1-x2)/2));
y3:=ypart (z2+(width*(y2-y1)/2,width*(x1-x2)/2));
x4:=xpart (z2+(width*(y1-y2)/2,width*(x2-x1)/2));
y4:=ypart (z2+(width*(y1-y2)/2,width*(x2-x1)/2));
draw z1{z2-z1}..tension t..z3;
draw z1{z2-z1}..tension t..z4;
enddef;
def arrow(expr tl,hd,hlen) =
x1:=xconv(xpart tl);y1:=yconv(ypart tl);x2:=xconv(xpart
hd);y2:=yconv(ypart hd);
draw z1..z2; head(z2,z2+(2*hlen*(z1-z2)/(length(z1-z2))),1,1);
enddef;
def axes(expr hlen) =
arrow((0,yneg),(0,ypos),hlen); arrow((xneg,0),(xpos,0),hlen);
enddef;
def curve(text t) =
path f;i=0;
for a=t:
x[incr i]:=xconv(xpart a);y[i]:=yconv(ypart a);
if i=1: f:=z[i] else: f:=f..z[i] fi;
endfor; draw f; enddef;
def xmarks(expr len)(text t) =
for a=t: draw (xconv(a),yconv(0)-len)..(xconv(a),yconv(0)+len);
endfor; enddef;
def ymarks(expr len)(text t) =
for a=t: draw (xconv(0)-len,yconv(a))..(xconv(0)+len,yconv(a));
endfor; enddef;
def line(expr a,b) =
x1:=xconv(xpart a); y1:=yconv(ypart a);
x2:=xconv(xpart b); y2:=yconv(ypart b);
draw z1..z2; enddef;
def point(expr a,b) =
x1:=xconv(xpart a); y1:=yconv(ypart a); scl:=b*pt;
fill fullcircle scaled scl shifted z1; enddef;
def circle(expr center,diam) =
x1:=xconv(xpart center);y1:=yconv(ypart center);
r:=xconv(diam)-xconv(0);
draw fullcircle scaled r shifted z1; enddef;
def ellipse(expr center,diamx,diamy,angle) =
x1:=xconv(xpart center);y1:=yconv(ypart center); th:=angle;
dx:=xconv(diamx)-xconv(0); dy:=yconv(diamy)-yconv(0);
draw fullcircle xscaled dx yscaled dy rotated th shifted z1; enddef;