From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.tex.context/2836 Path: main.gmane.org!not-for-mail From: David Arnold Newsgroups: gmane.comp.tex.context Subject: Sample Metapost files for calculus Date: Sat, 30 Sep 2000 11:19:39 -0700 Sender: owner-ntg-context@let.uu.nl Message-ID: <3.0.5.32.20000930111939.007f76f0@mail.northcoast.com> NNTP-Posting-Host: coloc-standby.netfonds.no Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=====================_970363179==_" X-Trace: main.gmane.org 1035393611 12204 80.91.224.250 (23 Oct 2002 17:20:11 GMT) X-Complaints-To: usenet@main.gmane.org NNTP-Posting-Date: Wed, 23 Oct 2002 17:20:11 +0000 (UTC) Original-To: ntg-context@ntg.nl Xref: main.gmane.org gmane.comp.tex.context:2836 X-Report-Spam: http://spam.gmane.org/gmane.comp.tex.context:2836 --=====================_970363179==_ Content-Type: text/plain; charset="us-ascii" All, I've attached a sample Metapost file that generates some figures I needed for my latest calculus exam. One file I use a lot is a little function grapher I wrote in Metapost. I wrote it so that you just have to change the clipping window and the function definition. Afterwards, I have to change some labels manually, but that doesn't take much time. It's pretty good with continuous functions, but discontinuous functions, like (x+1)/(x-1) have to be drawn in pieces. I am not a good enough programmer to figure out how to write code to take care of curves with discontinuities. See beginfig(4);...endfig; for an example of what I am talking about here. --=====================_970363179==_ Content-Type: text/plain; charset="us-ascii" Content-Disposition: attachment; filename="exam.mp" input mp-tool; %prologues:=0; %pi numeric pi; pi:=3.14159; %cos function for radian input def cos(expr x)= cosd(180/pi*x) enddef; %sin function for radian input def sin(expr x)= sind(180/pi*x) enddef; %xtick marks def xtick(expr p)= draw ((0,-2pt)--(0,2pt)) shifted p; enddef; %ytick marks def ytick(expr p)= draw ((-2pt,0)--(2pt,0)) shifted p; enddef; %opendot vardef open(expr pos)= path p; p:=fullcircle scaled 3pt; p:=p shifted pos; fill p withcolor white; draw p withcolor red; enddef; %closedot vardef closed(expr pos)= path p; p:=fullcircle scaled 3pt; p:=p shifted pos; fill p withcolor red; draw p withcolor red; enddef; vardef pointarrow (expr pat, loc, len, off) = save l, r, s, t ; path l, r ; numeric s ; pair t ; t := if pair loc : loc else : point loc along pat fi ; s := len/2 - off ; if s<=0 : s := 0 elseif s>len : s := len fi ; r := pat cutbefore t ; r := (r cutafter point (arctime s of r) of r) ; s := len/2 + off ; if s<=0 : s := 0 elseif s>len : s := len fi ; l := reverse (pat cutafter t) ; l := (reverse (l cutafter point (arctime s of l) of l)) ; (l..r) enddef ; def rightarrow (expr p,t,l) = pointarrow(p,t,l,-l) enddef ; def leftarrow (expr p,t,l) = pointarrow(p,t,l,+l) enddef ; def centerarrow(expr p,t,l) = pointarrow(p,t,l, 0) enddef ; beginfig(1); %initialize scale numeric u; 10u=2in; %draw the grid for k=-5u step 1u until 5u: draw (k,-5u)--(k,5u) withcolor 0.85white; draw (-5u,k)--(5u,k) withcolor 0.85 white; endfor; %draw axes drawdblarrow (-5u,0)--(5u,0); label.rt(btex $x$ etex, (5u,0)); drawdblarrow (0,-5u)--(0,5u); label.top(btex $y$ etex, (0,5u)); %draw the piecewise graph pickup pencircle scaled 1pt; drawarrow (1u,0)--(-4u,-5u) withcolor red; drawarrow (1u,3u)--(5u,3u) withcolor red; pickup defaultpen; %label f label.rt(btex $f$ etex, (5u,3u)); %draw points open and closed open ((1u,0)); closed ((1u,2u)); open ((1u,3u)); endfig; beginfig(2); %initialize scale numeric u; 10u=2in; %draw the grid for k=-5u step 1u until 5u: draw (k,-5u)--(k,5u) withcolor 0.85white; draw (-5u,k)--(5u,k) withcolor 0.85 white; endfor; %draw axes drawdblarrow (-5u,0)--(5u,0); label.rt(btex $x$ etex, (5u,0)); drawdblarrow (0,-5u)--(0,5u); label.top(btex $y$ etex, (0,5u)); %draw the piecewise graph pickup pencircle scaled 1pt; drawarrow (1u,0)--(-4u,-5u) withcolor red; drawarrow (1u,3u)--(5u,3u) withcolor red; pickup defaultpen; %label f label.rt(btex $f$ etex, (5u,3u)); %draw points open and closed open ((1u,0)); closed ((1u,2u)); open ((1u,3u)); %highlight limit direction with arrows path p; p:=(-4u,-5u)--(1u,0); pickup pencircle scaled 1pt; drawarrow rightarrow(p,point .3 of p, .5cm) withcolor blue; drawarrow rightarrow(p,point .6 of p, .5cm) withcolor blue; pickup defaultpen; endfig; beginfig(3); %initialize scale numeric u; 10u=2in; %draw the grid for k=-5u step 1u until 5u: draw (k,-5u)--(k,5u) withcolor 0.85white; draw (-5u,k)--(5u,k) withcolor 0.85 white; endfor; %draw axes drawdblarrow (-5u,0)--(5u,0); label.rt(btex $x$ etex, (5u,0)); drawdblarrow (0,-5u)--(0,5u); label.top(btex $y$ etex, (0,5u)); %draw the piecewise graph pickup pencircle scaled 1pt; drawarrow (1u,3u)--(-5u,3u) withcolor red; drawarrow (1u,3u)--(5u,3u) withcolor red; pickup defaultpen; %label f label.rt(btex $f$ etex, (5u,3u)); %draw points open and closed open ((1u,3u)); closed ((1u,2u)); endfig; beginfig(4); %Define function to be drawn def f(expr x)= x*x-4 enddef; %Declare and initialize viewing window numeric xmin, xmax, ymin, ymax; xmin=-5; xmax=5; ymin=-5; ymax=5; %Declare and initialize scaling variables numeric ux, uy; (xmax-xmin)*ux=2in; (ymax-ymin)*uy=2in; %Declare and initialize clipping boundary path q; q:=(xmin,ymin)--(xmin,ymax)--(xmax,ymax)--(xmax,ymin)--cycle; q:=q xscaled ux yscaled uy; %Declare and initialize number of plotted points numeric N; N:=200; %Declare and calculate plotting increment delta x numeric dx; dx:=(xmax-xmin)/N; %Declare and create function path path p; p:=(xmin,f(xmin)); for x=xmin step dx until xmax: p:=p--(x,f(x)); endfor; p:=p--(xmax,f(xmax)); %Scale function path p:=p xscaled ux yscaled uy; %Clip function path draw p; clip currentpicture to q; %Save and clear the function path picture pic; pic:=currentpicture; clearit; %draw the grid for k=xmin*ux step 1ux until xmax*ux: draw (k,ymin*uy)--(k,ymax*uy) withcolor 0.85white; endfor; for k=ymin*uy step 1uy until ymax*uy: draw (xmin*ux,k)--(xmax*ux,k) withcolor 0.85white; endfor; %Draw and label coordinate axes drawdblarrow (xmin*ux,0)--(xmax*ux,0); label.rt(btex $x$ etex,(xmax*ux,0)); drawdblarrow (0,ymin*uy)--(0,ymax*uy); label.top(btex $y$ etex,(0,ymax*uy)); %Superimpose function plot draw pic withcolor red; %label xticks label.bot(btex $5$ etex, (xmax*ux,0)); %label yticks label.lft(btex $5$ etex,(0,ymax*uy)); endfig; beginfig(5); %Define function to be drawn def f(expr x)= x*x-4 enddef; %Declare and initialize viewing window numeric xmin, xmax, ymin, ymax; xmin=-5; xmax=5; ymin=-5; ymax=5; %Declare and initialize scaling variables numeric ux, uy; (xmax-xmin)*ux=2in; (ymax-ymin)*uy=2in; %Declare and initialize clipping boundary path q; q:=(xmin,ymin)--(xmin,ymax)--(xmax,ymax)--(xmax,ymin)--cycle; q:=q xscaled ux yscaled uy; %Declare and initialize number of plotted points numeric N; N:=200; %Declare and calculate plotting increment delta x numeric dx; dx:=(xmax-xmin)/N; %Declare and create function path path p; p:=(xmin,f(xmin)); for x=xmin step dx until xmax: p:=p--(x,f(x)); endfor; p:=p--(xmax,f(xmax)); %Scale function path p:=p xscaled ux yscaled uy; %Clip function path draw p; clip currentpicture to q; %Save and clear the function path picture pic; pic:=currentpicture; clearit; %draw the grid for k=xmin*ux step 1ux until xmax*ux: draw (k,ymin*uy)--(k,ymax*uy) withcolor 0.85white; endfor; for k=ymin*uy step 1uy until ymax*uy: draw (xmin*ux,k)--(xmax*ux,k) withcolor 0.85white; endfor; %Draw and label coordinate axes drawdblarrow (xmin*ux,0)--(xmax*ux,0); label.rt(btex $x$ etex,(xmax*ux,0)); drawdblarrow (0,ymin*uy)--(0,ymax*uy); label.top(btex $y$ etex,(0,ymax*uy)); %Superimpose function plot draw pic withcolor red; %label xticks label.bot(btex $5$ etex, (xmax*ux,0)); %label yticks label.lft(btex $5$ etex,(0,ymax*uy)); %draw the tangent line draw (-3ux,5uy)--(-4/3*ux,-5uy) withcolor blue; %draw right triangle draw (-3ux,5uy)--(-2ux,5uy)--(-2ux,-1uy) withcolor 0.625yellow; endfig; beginfig(6); %Define function to be drawn def f(expr x)= (x*x*x-12*x)/5 enddef; %Declare and initialize viewing window numeric xmin, xmax, ymin, ymax; xmin=-5; xmax=5; ymin=-5; ymax=5; %Declare and initialize scaling variables numeric ux, uy; (xmax-xmin)*ux=2in; (ymax-ymin)*uy=2in; %Declare and initialize clipping boundary path q; q:=(xmin,ymin)--(xmin,ymax)--(xmax,ymax)--(xmax,ymin)--cycle; q:=q xscaled ux yscaled uy; %Declare and initialize number of plotted points numeric N; N:=200; %Declare and calculate plotting increment delta x numeric dx; dx:=(xmax-xmin)/N; %Declare and create function path path p; p:=(xmin,f(xmin)); for x=xmin step dx until xmax: p:=p--(x,f(x)); endfor; p:=p--(xmax,f(xmax)); %Scale function path p:=p xscaled ux yscaled uy; %Clip function path draw p; clip currentpicture to q; %Save and clear the function path picture pic; pic:=currentpicture; clearit; %draw the grid for k=xmin*ux step 1ux until xmax*ux: draw (k,ymin*uy)--(k,ymax*uy) withcolor 0.85white; endfor; for k=ymin*uy step 1uy until ymax*uy: draw (xmin*ux,k)--(xmax*ux,k) withcolor 0.85white; endfor; %Draw and label coordinate axes drawdblarrow (xmin*ux,0)--(xmax*ux,0); label.rt(btex $x$ etex,(xmax*ux,0)); drawdblarrow (0,ymin*uy)--(0,ymax*uy); label.top(btex $y$ etex,(0,ymax*uy)); %Superimpose function plot draw pic withcolor red; %label xticks label.bot(btex $5$ etex, (xmax*ux,0)); %label yticks label.lft(btex $5$ etex,(0,ymax*uy)); %label the graph label.rt(btex $f$ etex, (4.5ux,5uy)); endfig; beginfig(7); %Define function to be drawn def f(expr x)= (x*x*x-12*x)/5 enddef; %Declare and initialize viewing window numeric xmin, xmax, ymin, ymax; xmin=-5; xmax=5; ymin=-5; ymax=5; %Declare and initialize scaling variables numeric ux, uy; (xmax-xmin)*ux=2in; (ymax-ymin)*uy=2in; %Declare and initialize clipping boundary path q; q:=(xmin,ymin)--(xmin,ymax)--(xmax,ymax)--(xmax,ymin)--cycle; q:=q xscaled ux yscaled uy; %Declare and initialize number of plotted points numeric N; N:=200; %Declare and calculate plotting increment delta x numeric dx; dx:=(xmax-xmin)/N; %Declare and create function path path p; p:=(xmin,f(xmin)); for x=xmin step dx until xmax: p:=p--(x,f(x)); endfor; p:=p--(xmax,f(xmax)); %Scale function path p:=p xscaled ux yscaled uy; %Highlight path where concave up path r; r:=p cutbefore (point 100 of p); %Clip function path draw p withcolor red; draw r withcolor blue; clip currentpicture to q; %Save and clear the function path picture pic; pic:=currentpicture; clearit; %draw the grid for k=xmin*ux step 1ux until xmax*ux: draw (k,ymin*uy)--(k,ymax*uy) withcolor 0.85white; endfor; for k=ymin*uy step 1uy until ymax*uy: draw (xmin*ux,k)--(xmax*ux,k) withcolor 0.85white; endfor; %Draw and label coordinate axes drawdblarrow (xmin*ux,0)--(xmax*ux,0); label.rt(btex $x$ etex,(xmax*ux,0)); drawdblarrow (0,ymin*uy)--(0,ymax*uy); label.top(btex $y$ etex,(0,ymax*uy)); %Superimpose function plot draw pic; %label xticks label.bot(btex $5$ etex, (xmax*ux,0)); %label yticks label.lft(btex $5$ etex,(0,ymax*uy)); %label the graph label.rt(btex $f$ etex, (4.5ux,5uy)); endfig; beginfig(8); %Define function to be drawn def f(expr x)= -(x*x*x-12*x)/5 enddef; %Declare and initialize viewing window numeric xmin, xmax, ymin, ymax; xmin=-5; xmax=5; ymin=-5; ymax=5; %Declare and initialize scaling variables numeric ux, uy; (xmax-xmin)*ux=2in; (ymax-ymin)*uy=2in; %Declare and initialize clipping boundary path q; q:=(xmin,ymin)--(xmin,ymax)--(xmax,ymax)--(xmax,ymin)--cycle; q:=q xscaled ux yscaled uy; %Declare and initialize number of plotted points numeric N; N:=200; %Declare and calculate plotting increment delta x numeric dx; dx:=(xmax-xmin)/N; %Declare and create function path path p; p:=(xmin,f(xmin)); for x=xmin step dx until xmax: p:=p--(x,f(x)); endfor; p:=p--(xmax,f(xmax)); %Scale function path p:=p xscaled ux yscaled uy; %Clip function path draw p withcolor red; clip currentpicture to q; %Save and clear the function path picture pic; pic:=currentpicture; clearit; %draw the grid for k=xmin*ux step 1ux until xmax*ux: draw (k,ymin*uy)--(k,ymax*uy) withcolor 0.85white; endfor; for k=ymin*uy step 1uy until ymax*uy: draw (xmin*ux,k)--(xmax*ux,k) withcolor 0.85white; endfor; %Draw and label coordinate axes drawdblarrow (xmin*ux,0)--(xmax*ux,0); label.rt(btex $x$ etex,(xmax*ux,0)); drawdblarrow (0,ymin*uy)--(0,ymax*uy); label.top(btex $y$ etex,(0,ymax*uy)); %Superimpose function plot draw pic; %label xticks label.bot(btex $5$ etex, (xmax*ux,0)); %label yticks label.lft(btex $5$ etex,(0,ymax*uy)); %label the graph label.rt(btex $f'$ etex, (4.5ux,-5uy)); endfig; end --=====================_970363179==_--