filenametemplate "figs-%c.mps"; beginfig(1); draw (0,0) -- (30,20) -- (-30,20) -- cycle; dotlabel.bot(btex $(0,0)$ etex, (0,0)); label.urt(btex $(30,20)$ etex, (30,20)); label.ulft(btex $(-30,20)$ etex, (-30,20)); endfig; beginfig(2); picture p; p = btex $\displaystyle\int_0^\infty e^{-x} \, \sin x \, dx $ etex; draw p; dotlabel.ulft("UL", ulcorner p); dotlabel.urt ("UR", urcorner p); dotlabel.llft("LL", llcorner p); dotlabel.lrt ("LR", lrcorner p); show "dim"; show (urcorner p); show (llcorner p); pair dim; dim := (urcorner p) - (llcorner p); width := xpart dim; height = ypart dim; show dim; show width; show height; endfig; beginfig(3); draw (0,30)--(120,30) dashed withdots; draw (0,20)--(120,20) dashed evenly; draw (0,10)--(120,10) dashed evenly shifted (3,3); draw (0, 0)--(120, 0) dashed evenly scaled 1.5; endfig; beginfig(4); pickup pencircle scaled 5 yscaled 0.2 rotated 20; draw fullcircle scaled 40 xscaled 0.7; endfig; beginfig(5); save front, back, v, c; % Axes and labels z3 = (100,100); drawarrow origin--(x3,0); label.bot(btex $x$ etex, (x3,0)); drawarrow origin--(0,y3+10); label.lft(btex $t$ etex, (0,y3+10)); % Constants front = 60; back = 20; v = 0.4; c = 1; z0 = (back,0); % Front and back of train draw (front,0)--(front+v*y3,y3); label.rt("front", (front+v*y3,y3)); draw z0--(back+v*y3,y3); label.rt("back", (back+v*y3,y3)); % Find light path and draw it x1 = v * y1 + front; x1 = c * y1 + back; x2 = v * y2 + back; x2 = c*(y1 - y2) + x1; draw z0--z1--z2 dashed evenly; % Label points on path label.bot(btex $P_0$ etex, z0); label.lrt(btex $P_1$ etex, z1); label.ulft(btex $P_2$ etex, z2); endfig; beginfig(6); save front, back, v, c; % Axes and labels z3 = (100,100); drawarrow origin--(x3,0); label.bot(btex $x$ etex, (x3,0)); drawarrow origin--(0,y3+10); label.lft(btex $t$ etex, (0,y3+10)); % Constants front = 60; back = 20; v = 0; c = 1; z0 = (back,0); % Front and back of train draw (front,0)--(front+v*y3,y3); label.rt("front", (front+v*y3,y3)); draw z0--(back+v*y3,y3); label.rt("back", (back+v*y3,y3)); % Find light path and draw it x1 = v * y1 + front; x1 = c * y1 + back; x2 = v * y2 + back; x2 = c*(y1 - y2) + x1; draw z0--z1--z2 dashed evenly; % Label points on path label.bot(btex $P_0$ etex, z0); label.lrt(btex $P_1$ etex, z1); label.ulft(btex $P_2$ etex, z2); endfig; beginfig(7); dotlabel.bot(btex $(0,0)$ etex, origin); draw unitsquare scaled 10 shifted (0,36); draw unitsquare scaled 10 xscaled 1.6 shifted (0,24); draw unitsquare scaled 10 slanted 0.5 shifted (0,12); draw unitsquare scaled 10 rotated 30; endfig; beginfig(8); dotlabel.bot(btex $(0,0)$ etex, origin); path bx; bx = unitsquare scaled 10; draw bx shifted (0,36); draw bx xscaled 1.6 shifted (0,24); draw bx slanted 0.5 shifted (0,12); draw bx rotated 30; endfig; beginfig(9); for i = 2 upto 5: draw (0,0){dir 135} .. tension i .. {dir 225}(100,0); endfor; endfig; beginfig(10); for i = 1 upto 5: draw (0,0){curl i} .. {dir 250}(100,0); endfor; endfig; beginfig(11); draw (0,0){dir 170} .. {dir 140}(50,0); endfig; beginfig(12); for i = 0 step 30 until 120: draw (0,0){dir i} .. (100,0); endfor; endfig; beginfig(13); sr = 30; br = 40; for a = 0 step 30 until 330: s := sind a; c := cosd a; drawarrow origin--(sr*c, sr*s); label(decimal a, (br*c, br*s)); endfor; endfig; beginfig(14); draw fullcircle scaled 50; draw halfcircle scaled 40; draw quartercircle scaled 30; filldraw fullcircle scaled 20 withcolor 0.3white; endfig; beginfig(15); draw unitsquare rotated 45 scaled 25; endfig; beginfig(16); dotlabel.top(btex $(0,0)$ etex, (0,0)); dotlabel.lrt(btex $(20,10)$ etex, (20,10)); endfig; beginfig(17); draw btex $\sqrt{x^2+y^2}$ etex; endfig; beginfig(18); z.alpha = (0,0); z.beta = (20,20); z.gamma = (40,0); dotlabels.top(alpha, beta, gamma); endfig; beginfig(19); picture p; p = btex $\spadesuit \heartsuit \diamondsuit \clubsuit$ etex; draw p; draw bbox p; endfig; beginfig(20); u = 1cm; draw (0u,0u) -- (1.5u,0u) -- (1.5u,1.5u) -- (0u,1.5u) -- cycle; z1 = (0u,-0.2u); z2 = (1.5u,-0.2u); drawdblarrow z1 -- z2; label.bot("1.5cm", 0.5[z1, z2]); endfig; beginfig(21); save p, t; path p; p := (0,0) .. (30,-10) .. (30,20) .. (0,10); draw p; for t = 0 upto 3: dotlabel.rt(decimal t, point t of p); endfor; endfig; beginfig(22); drawarrow (0,0)--(0,30); drawarrow (0,0)--(30,0); dotlabel.llft(btex $(0,0)$ etex, (0,0)); label.rt(btex $X$ etex, (30,0)); label.top(btex $Y$ etex, (0,30)); endfig; beginfig(23); z1 = (0,0); z2 = (0,50); draw z1--z2; dotlabel.rt(btex $1 \over 3$ etex, 1/3[z1,z2]); dotlabel.rt(btex $2 \over 3$ etex, 2/3[z1,z2]); dotlabel.rt(btex $4 \over 3$ etex, 4/3[z1,z2]); endfig; beginfig(24); z1 = (10,25); z2 = (90,25); dotlabel("", z1); dotlabel("", z2); draw (0,0) .. controls z1 and z2 .. (100,0); endfig; beginfig(25); drawarrow (0,70) -- (60,70); ahl := ahlength; aha := ahangle; ahlength := 10; ahangle := 30; drawarrow reverse ((0,0) -- (60,0)); ahlength := ahl; ahangle := aha; endfig; beginfig(26); drawoptions( withcolor 0.8 green withpen pensquare scaled 4 ); d = 10; draw unitsquare scaled 2d shifted (-d,-d); draw fullcircle scaled 4d; drawoptions(); endfig; beginfig(27); transform reflect; reflect = identity xscaled -1; draw btex Mirror, mirror, on the wall etex transformed reflect; endfig; beginfig(28); save t; z1 = (-20,0); z2 = (-40,15); z3 = (0,20); z4 = (0,30); z5 = (20,0); z6 = (35,-20); draw fullcircle scaled 40; drawarrow z1--z2; drawarrow z3--z4; drawarrow z5--z6; transform t; z1 transformed t = z2; z3 transformed t = z4; z5 transformed t = z6; draw fullcircle scaled 40 transformed t; endfig; beginfig(29); bw = 100; bh = 75; cw = 0.7 * bw; ch = 0.7 * bh; ah = 0.5 * bh; aw = 0.5 * bw; draw (-bw,-bh)--(bw,-bh)--(bw,bh)--(-bw,bh)--cycle; filldraw (-cw,-ch)--(cw,-ch)--(cw,ch)--(-cw,ch)--cycle withcolor 0.9white; dotlabel.llft("sw", (-bw,-bh)); dotlabel.bot("s", (0,-bh)); dotlabel.lrt("se", (bw,-bh)); dotlabel.rt("e", (bw,0)); dotlabel.urt("ne", (bw,bh)); dotlabel.top("n", (0,bh)); dotlabel.ulft("nw", (-bw,bh)); dotlabel.lft("w", (-bw,0)); dotlabel.top("c", (0,0)); drawdblarrow (-bw,ah)--(-cw,ah); label.top("dx", (-0.5*(bw+cw),ah)); drawdblarrow (bw,ah)--(cw,ah); label.top("dx", (0.5*(bw+cw),ah)); drawdblarrow (-aw,-bh)--(-aw,-ch); label.lft("dy", (-aw,-0.5*(bh+ch))); drawdblarrow (-aw,bh)--(-aw,ch); label.lft("dy", (-aw,0.5*(bh+ch))); endfig; input rboxes; beginfig(30); boxit.bl("left"); boxit.bm("middle"); boxit.br("right"); bm.sw - bl.ne = (20,0); br.nw - bm.se = (20,0); drawboxed(bl,bm,br); endfig; beginfig(31); boxjoin(a.sw = b.nw; a.se = b.ne); boxit.bt("top"); bt.ne - bt.nw = (50,0); boxit.bm("middle"); boxit.bb("bottom"); drawboxed(bt,bm,bb); endfig; beginfig(32); boxjoin(a.sw = b.nw; a.se = b.ne); boxit.bt("top"); boxit.bm("middle"); boxit.bb("bottom"); drawboxed(bt,bm,bb); endfig; beginfig(33); boxjoin(a.e = b.w - (20,30)); boxit.scan("scan"); boxit.parse("parse"); drawboxed(scan, parse); drawarrow scan.c{dir 0} .. {dir 90}parse.c cutbefore bpath scan cutafter bpath parse; endfig; beginfig(34); filldraw (-cw,-ch)--(cw,-ch)--(cw,ch)--(-cw,ch)--cycle withcolor 0.9white; dotlabel.bot("s", (0,-bh)); dotlabel.rt("e", (bw,0)); dotlabel.top("n", (0,bh)); dotlabel.lft("w", (-bw,0)); dotlabel.top("c", (0,0)); draw fullcircle xscaled (2*bw) yscaled (2*bh); drawdblarrow (-bw,0)--(-cw,0); label.top("dx", (-0.5*(bw+cw),0)); drawdblarrow (bw,0)--(cw,0); label.top("dx", (0.5*(bw+cw),0)); drawdblarrow (0,-bh)--(0,-ch); label.lft("dy", (0,-0.5*(bh+ch))); drawdblarrow (0,bh)--(0,ch); label.lft("dy", (0,0.5*(bh+ch))); endfig; beginfig(35); circleit.wd("establishment"); wd.dy = 20; drawboxed(wd); endfig; beginfig(36); boxjoin(a.e = b.w); boxit.b1(btex $b_1$ etex); boxit.b2(btex $b_2$ etex); boxit.b3(btex $b_3$ etex); boxit.b4(btex $b_4$ etex); boxit.b5(btex $b_5$ etex); boxjoin(); boxit.b6(btex $b_6$ etex); b6.n = b1.s - (whatever,10); drawboxed(b1,b2,b3,b4,b5,b6); endfig; beginfig(37); z1 = (0,20); z2 = (0,-20); draw z1--z2; draw fullcircle scaled 20 shifted z1; filldraw fullcircle scaled 20 shifted z2 withcolor white; draw fullcircle scaled 20 shifted z2; endfig; beginfig(38); draw subpath (0, 3) of fullcircle scaled 20; draw subpath (0, 5) of fullcircle scaled 30; draw subpath (0, 7) of fullcircle scaled 40; endfig; beginfig(39); save b, g, d, s, t; b = 0.5; g = sqrt(1 - b * b); transform t; xpart t = 200; ypart t = 0; xxpart t = g; yxpart t = g * b; xypart t = g * b; yypart t = g; s = 10; d = 80; x1 = x2 = x3 = 0; x4 = x5 = x6 = x7 = x1 + d; x8 = x9 = x10 = x4 + d; x11 = x8 + s; y1 = y4 = y8 = y11 = 0; y5 = s; y2 = y9 = y5 + d; y6 = y2 + d; y3 = y7 = y10 = y6 + s; drawarrow z1 -- z11; drawarrow z1 -- z3; draw z1 -- z3; draw z4 -- z7; draw z8 -- z10; draw z5 -- z2 dashed evenly; draw z2 -- z6 dashed evenly; draw z5 -- z9 dashed evenly; draw z9 -- z6 dashed evenly; picture p; p := currentpicture; currentpicture := nullpicture; draw p; draw p transformed t; label.llft(btex $O$ etex, z1); label.rt(btex $X$ etex, z11); label.top(btex $T$ etex, z3); label.rt(btex $a$ etex, z5); label.lft(btex $b$ etex, z2); label.rt(btex $b'$ etex, z9); label.rt(btex $a'$ etex, z6); label.llft(btex $O$ etex, z1 transformed t); label.rt(btex $X$ etex, z11 transformed t); label.top(btex $T$ etex, z3 transformed t); label.rt(btex $a$ etex, z5 transformed t); label.lft(btex $b$ etex, z2 transformed t); label.rt(btex $b'$ etex, z9 transformed t); label.rt(btex $a'$ etex, z6 transformed t); endfig; beginfig(40); path p[]; p[1] = (0,100){dir 0} .. (300,20); label.lft(btex $T_1$ etex, (0,100)); p[2] = (0,30){dir 10} .. (290,0); label.lft(btex $T_2$ etex, (0,30)); drawarrow p[1]; drawarrow p[2]; path k[]; k[1] = (50,0) -- (60,110); k[2] = (70,0) -- (80,110); k[3] = (230,0) -- (268,110); k[4] = (250,0) -- (283,110); label(btex $\Delta t$ etex, (70,105)); label(btex $\Delta t$ etex, (258,55)); path a[]; a[1] = buildcycle(k[1], p[1], k[2], p[2]); fill a[1] withcolor 0.4white; a[2] = buildcycle(k[3], p[1], k[4], p[2]); fill a[2] withcolor 0.4white; endfig; beginfig(41); path p[]; p1 = (10,-5) -- (10,50); p2 = (-5,0) -- (90,0); p3 = (80,-5) -- (80,10); p4 = (10,40) for i = 2 upto 9: .. (10*i, 40/i) endfor; p5 = buildcycle(p1, p2, p3, p4); filldraw p5 withcolor 0.7 white; draw p1; draw p2; draw p3; draw p4; endfig; primarydef p mp q = 0.5[p,q] enddef; beginfig(42); z1 = (0,0); z2 = (0,40); draw z1 -- z2; label.rt("mp", z1 mp z2); endfig; beginfig(43); for i = 1 upto 5: draw (0,0){dir 90} .. tension i .. {dir 270}(100,0); endfor; endfig; beginfig(44); draw (0,0){curl 1} .. (50,30) .. {curl 1}(100,0); draw (0,0){curl 5} .. (50,-30) .. {curl 5}(100,0); endfig; %def vx(expr a, b, c, d) = % a + c = (0,0); % b + d = (0,0); % xpart a = xpart d; % ypart a = ypart b; %enddef; %vx(z1,z2,z3,z4); %z1 = (1,1); %show z1; show z2; show z3; show z4; beginfig(45); path p[]; z1 = (0,100); z2 = (160,0); z3 = (0,60); z4 = (150,0); p1 = z1{dir 0} .. {dir 270}z2; p2 = z3{dir 0} .. {dir 270}z4; for i = 0 step 2 until 11: p3 := point i/11 of p1 -- point i/11 of p2; p4 := point (i+1)/11 of p1 -- point (i+1)/11 of p2; filldraw buildcycle(p3, p1, p4, p2) withcolor 0.7 white; endfor; draw p1; draw p2; draw z1 -- z3; draw z2 -- z4; endfig; def shadow(expr p) = filldraw p shifted (3,-3) withcolor 0.7 white; filldraw p withcolor white; draw p; enddef; beginfig(46); shadow(unitsquare scaled 20); shadow(fullcircle scaled 20 shifted (40,10)); path p; p = (0,0)--(0,20)--(20,40)--(50,40)--(30,20)--(30,0)--cycle; shadow(p shifted (0,-50)); endfig; beginfig(47); save i, p, t; path p; p := fullcircle xscaled 100 yscaled 40; draw p; for i = 0 upto 40: t := i/5; draw ((0,0)--(3,0)) rotated (angle direction t of p - 90) shifted (point t of p); endfor; endfig; beginfig(48); save c, P, s, t; path c; c = (0,0){dir 0} .. (150,100); draw c; t := 0.4; pair P[]; P1 = point t of c; dx := 60; (dx, dy) = whatever * direction t of c; P4 = P1 + (dx, 0); P3 = P4 + (0, dy); P2 = c intersectionpoint (P4--P4+(0,100)); draw P1--P4--P2; draw P1--P3; dotlabel.ulft(btex $P_1$ etex, P1); dotlabel.ulft(btex $P_2$ etex, P2); dotlabel.rt(btex $P_3$ etex, P3); label.bot(btex $\Delta x$ etex, 0.5[P1,P4]); label.rt(btex $\Delta y$ etex, 0.5[P4,P3]); label.rt(btex $e$ etex, 0.5[P3,P2]); endfig; beginfig(49); save d, s; s = 10; d = 40; x1 = x2 = x3 = 0; x4 = x5 = x6 = x7 = x1 + d; x8 = x9 = x10 = x4 + d; x11 = x8 + s; y1 = y4 = y8 = y11 = 0; y5 = s; y2 = y9 = y5 + d; y6 = y2 + d; y3 = y7 = y10 = y6 + s; for i = 1 upto 11: label.rt(decimal i, z[i]); endfor; endfig; beginfig(50); z1 = (0,0); dotlabel.bot(btex $z_1$ etex, z1); z2 = (75,75); dotlabel.top(btex $z_2$ etex, z2); z3 = (150,0); dotlabel.bot(btex $z_3$ etex, z3); z4 = (225,75); dotlabel.top(btex $z_4$ etex, z4); path a; a = z1 .. z2 .. z3 .. z4; draw a; show "length a"; show length a; z5 = point 2.5 of a; dotlabel.lrt(btex $z_5$ etex, z5); show "direction 0 of a"; show direction 0 of a; numeric t[]; lena = arclength a; show "lena"; show lena; t1 = arctime lena/5 of a; show "t1"; show t1; z6 = point t1 of a; dotlabel.top(btex $z_6$ etex, z6); draw subpath (0,t1) of a shifted (-10,0); t2 = directiontime (1,-1) of a; show "directiontime (1,-1) of a"; show t2; z7 = point t2 of a; dotlabel.top(btex $z_7$ etex, z7); z8 = (25,0); dotlabel.bot(btex $z_8$ etex, z8); z9 = (200,75); dotlabel.bot(btex $z_9$ etex, z9); path b; b = z8 -- z9; draw b; z10 = a intersectionpoint b; dotlabel.lrt(btex $z_{10}$ etex, z10); show "a intersectiontimes b"; show a intersectiontimes b; endfig; beginfig(51); draw (0,0) -- (25,0) .. (50,25); endfig; beginfig(52); draw (0,0) --- (25,0) .. (50,25); endfig; beginfig(53); z0 = (0,0); z1 = (50,25); z2 = (100,50); draw z0{dir -20} .. z1 .. {dir 30}z2; draw (z0{dir -20} ... z1 ... {dir 30}z2) shifted (0,-10); endfig; beginfig(54); for i = -50 step 5 until 50: draw (i,-50) -- (i+100,50); endfor; path c; c = fullcircle scaled 70 shifted (50,0); clip currentpicture to c; draw c; endfig; verbatimtex \font\kw = cmtex10 scaled 1000 etex def port(expr p, s) = save edge; path edge; edge := p+(5,0)..p+(0,5)..p-(5,0)..p-(0,5)..cycle; fill edge withcolor white; draw edge; draw p-(2,0)--p+(2,0); if s = "+": draw p-(0,2)--p+(0,2); fi; enddef; def cell(suffix name)(expr title, width, height, corner, centre) = begingroup; save p; boxit.name(); name.ne = name.sw + (width, height); name.c = centre; drawunboxed(name); label.bot(title, name.s); pair p[]; p1 = name.n + (corner - width/2, 0); p2 = p1 + (width - 2 * corner, 0); p3 = p2 + (corner, -corner); p4 = p3 + (0, 2 * corner - height); p5 = p4 + (-corner, -corner); p6 = p5 + (2 * corner - width, 0); p7 = p6 + (-corner, corner); p8 = p7 + (0, height - 2 * corner); pickup pencircle scaled 1.5bp; draw p1 -- p2{dir 0} .. {dir 270}p3 -- p4{dir 270} .. {dir 180}p5 -- p6{dir 180} .. {dir 90}p7 -- p8{dir 90} .. {dir 0}cycle withcolor blue; pickup defaultpen; endgroup; enddef; def clos(suffix name)(expr title, width, height, centre) = boxit.name(); name.ne = name.sw + (width, height); name.c = centre; drawoptions(withcolor red); drawboxed(name); drawoptions(); label.bot(title, name.s); enddef; beginfig(55); save pw, cw, ph, ch, hsep; pw = 75; cw = pw + 60; ph = 50; ch = ph + 40; hsep = 120; z1 = (-hsep, 0); z2 = ( hsep, 0); clos(svp, btex\kw serverProcess etex, pw, ph, z1); cell(svc, btex\kw serverCell etex, cw, ch, 10, z1); clos(clp, btex\kw clientprocess etex, pw, ph, z2); cell(clc, btex\kw clientCell etex, cw, ch, 10, z2); cell(main, btex\kw mainCell etex, cw + 2 * hsep + 40, ch + 40, 10, (0,0)); draw svp.e -- clp.w; label.lft(btex\kw serverPort etex, svp.e - (5,0)); label.rt(btex\kw clientPort etex, clp.w + (5,0)); label.bot(btex\kw protocol etex, 0.5[svc.e, clc.w]); label.ulft(btex\kw p etex, svc.e + (-3,3)); label.urt(btex\kw p etex, clc.w + (3,3)); port(svp.e, "+"); port(svc.e, "+"); port(clc.w, "-"); port(clp.w, "-"); endfig; def pendemo(expr cap, join) = begingroup; save w, h; interim linecap := cap; interim linejoin := join; drawoptions(withcolor 0.8 white withpen pensquare scaled 8); w = 40; h = 20; z1 = (-w,h); z2 = (0,0); z3 = (w,h); draw z1--z2--z3; drawoptions(); dotlabel("", z1); dotlabel("", z2); dotlabel("", z3); endgroup; enddef; beginfig(56); pendemo(rounded, rounded); endfig; beginfig(57); pendemo(rounded, squared); endfig; beginfig(58); pendemo(rounded, butt); endfig; beginfig(59); pendemo(beveled, rounded); endfig; beginfig(60); pendemo(beveled, squared); endfig; beginfig(61); pendemo(beveled, butt); endfig; beginfig(62); pendemo(mitered, rounded); endfig; beginfig(63); pendemo(mitered, squared); endfig; beginfig(64); pendemo(mitered, butt); endfig; beginfig(65); begingroup; drawarrow (0,30) -- (60,30); interim ahlength := 10; interim ahangle := 30; drawarrow reverse ((0,0) -- (60,0)); endgroup; endfig; beginfig(66); begingroup; interim ahlength := 15; drawarrow (0,0) -- (40,40); endgroup; endfig; beginfig(67); picture p; p = btex $\displaystyle\sum_{n=1}^{\infty} {1 \over n} $ etex; path q; q = bbox p shifted (20,20); setbounds p to q; draw p; draw q; endfig; beginfig(68); path p; drawoptions(withpen pencircle xscaled 2bp yscaled 0.1bp); p = (0,0) for i = 1 upto 100: .. (0.6i*cosd(36i),0.6i*sind(36i)) endfor; draw p; drawoptions(); endfig; input graph; beginfig(69); draw begingraph(4in,3in); gdraw("hist.txt"); endgraph; endfig; beginfig(70); picture smiley; smiley := image( draw fullcircle scaled 40; draw halfcircle scaled 20 rotated 180; filldraw fullcircle scaled 3 shifted (-10,10); filldraw fullcircle scaled 3 shifted (10,10); ); draw smiley; endfig; vardef pp(expr c) = t := dist/(bluepart c + dist); (t * redpart c, t * greenpart c) enddef; beginfig(71); color tp[]; tp0 = (-1,-1,-1); tp4 = tp0 + (0,0,2); tp1 = ( 1,-1,-1); tp5 = tp1 + (0,0,2); tp2 = ( 1, 1,-1); tp6 = tp2 + (0,0,2); tp3 = (-1, 1,-1); tp7 = tp3 + (0,0,2); dist := 200; pair p[]; for i = 0 upto 7: p[i] := pp(40*tp[i]+(80,-70,30)); endfor; draw p0--p1--p2--p3--cycle; draw p4--p5--p6--p7--cycle; draw p0--p4; draw p1--p5; draw p2--p6; draw p3--p7; endfig; defaultfont := "cmtex10"; beginfig(72); boxjoin(a.sw = b.nw; a.se = b.ne); picture b[]; i = 0; x = 99; forever: string line; line := readfrom "data.txt"; exitif line = EOF; string token, desc; for token = scantokens line: if numeric token: desc := "Numeric: " & decimal token; elseif string token: desc := "String: " & token; fi; boxit.b[i](desc); b[i].e = b[i].w + (100,0); drawboxed(b[i]); i := i + 1; endfor; endfor; endfig; beginfig(73); draw (0,0) -- (100,0); filldraw fullcircle scaled 50; label.bot("line", (50,0)); picture p; p = currentpicture; show "p has " & decimal(length(p)) & " components."; n = 0; string msg; for i within p: n := n + 1; msg := "Component " & decimal n & " is"; if stroked i: msg := msg & " stroked"; fi; if filled i: msg := msg & " filled"; fi; if textual i: msg := msg & " textual"; fi; show msg; endfor; endfig; beginfig(74); draw "MetaPost" infont "cmsl12" scaled 2 rotated 30; endfig; input rboxes; vardef cuta(suffix a, b) = drawarrow a.c -- b.c cutbefore bpath.a cutafter bpath.b; enddef; beginfig(75); boxit.sb("box with square corners"); rboxit.rb("box with rounded corners"); rb.c = sb.c + (20,-40); drawboxed(sb, rb); cuta(sb,rb); endfig; % Desargues' Theorem beginfig(76); pair a[],b[],c[],p[], o; o = (300,0); a1 = (0,0); b1 = (60,135); c1 = (95,20); draw a1 -- b1 -- c1 -- cycle withcolor red; draw a1 -- o withcolor blue; draw b1 -- o withcolor blue; draw c1 -- o withcolor blue; a2 = 0.35[a1,o]; b2 = 0.2[b1,o]; c2 = 0.5[c1,o]; draw a2 -- b2 -- c2 -- cycle withcolor green; p1 = whatever[b1,c1] = whatever[b2,c2]; draw b1 -- p1 -- b2; p2 = whatever[c1,a1] = whatever[c2,a2]; draw a1 -- p2 -- a2; p3 = whatever[a1,b1] = whatever[a2,b2]; draw b1 -- p3 -- b2; draw p1 -- p2 -- p3 dashed evenly; dotlabel.rt(btex $O$ etex, o); dotlabel.ulft(btex $A_1$ etex, a1); dotlabel.lft(btex $B_1$ etex, b1); dotlabel.bot(btex $C_1$ etex, c1); dotlabel.bot(btex $A_2$ etex, a2); dotlabel.llft(btex $B_2$ etex, b2); dotlabel.urt(btex $C_2$ etex, c2); dotlabel.lft(btex $P_1$ etex, p1); dotlabel.bot(btex $P_2$ etex, p2); dotlabel.top(btex $P_3$ etex, p3); endfig; beginfig(77); save diam, rad, circ; diam =100; rad = 0.5*diam+8; path circ; circ = fullcircle scaled diam; draw circ; for i = 0 upto 7: dotlabel("", point i of circ); ang := 45 * i; label(decimal i, (rad*cosd(ang), rad*sind(ang))); endfor; endfig; vardef twist(expr start, stop, width, turns) = save delta; pair delta; delta = (stop - start) / 100; for n = 0 upto 100: drawoptions( withpen pencircle xscaled (width * cosd(3.6 * turns * n)) yscaled 0.2bp withcolor 0.7 white); draw (start + n*delta) -- (start + (n+1)*delta); endfor; drawoptions(); enddef; beginfig(78); twist((0,0), (0,100), 20, 1.5); endfig; beginfig(79); draw (1,0) for i := 0 upto 180: .. (mexp(5i)*cosd(10i), mexp(5i)*sind(10i)) endfor; endfig; beginfig(80); save scale, k, seed, xmax; scale = 200; k = 3.70; seed = 0.3; iters = 100; label.rt(btex $k=3.70$ (chaos) etex, (10, scale)); draw (0,0) -- (scale,0); draw (0,0) -- (0,scale); draw (0,0) -- (scale, scale); draw (0,0) for x := 0.0 step 1/iters until 1.0: .. (scale * x, scale * k * x * (1-x)) endfor; x0 = seed; y0 = 0; for i := 1 step 2 until iters: x[i] := x[i-1]; y[i] := k * x[i] * (1 - x[i]); y[i+1] := y[i]; x[i+1] := y[i+1]; endfor; draw scale * z0 for i := 1 upto iters: -- scale * z[i] endfor; endfig; beginfig(81); drawarrow subpath (0, 4) of fullcircle scaled 20; drawarrow reverse (subpath (2, 6) of fullcircle scaled 40); endfig; input metauml; input TEX; beginfig(82); save art,cow,ifa; Class.art("Artist")()("+draw()", "+paint()"); Class.cow("Cowboy")()("+draw()", "+shoot()"); Class.ifa("Draw")()("+draw()"); classStereotype.ifa("<>"); cow.w = art.e + (100,0); z0 = 0.5[art.e,cow.w]; ifa.s = z0 + (0,40); drawObjects(art,cow,ifa); draw art.e -- cow.w dashed evenly; z1 = ifa.s - (0,10); draw z0 -- z1 dashed evenly; link(inheritance)(z1--ifa.s); endfig; vardef area(expr a, b, c) = save s; s := 0.5*(a+b+c); sqrt(s*(s-a)*(s-b)*(s-c)) enddef; show area(3,4,5); def hyp(expr a, b) = sqrt(a*a + b*b) enddef; show hyp(3,4); end