diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-09 23:38:21 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-09 23:38:21 +0000 |
commit | 215012a8d684889983ec2c0629e1c704e6853d9c (patch) | |
tree | ebf1271bd71869069824935ae8a5678745bf8bce /Master/texmf-dist/fonts/source/public/simpsons/burns.mf | |
parent | 1af3d19d6dbcbf309667d9cb4aa3cdda914914a9 (diff) |
trunk/Master/texmf-dist/fonts/source
git-svn-id: svn://tug.org/texlive/trunk@101 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/simpsons/burns.mf')
-rw-r--r-- | Master/texmf-dist/fonts/source/public/simpsons/burns.mf | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/public/simpsons/burns.mf b/Master/texmf-dist/fonts/source/public/simpsons/burns.mf new file mode 100644 index 00000000000..e60d2309bfe --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/simpsons/burns.mf @@ -0,0 +1,171 @@ +% burns.mf by Raymond Chen (rjc@math.princeton.edu) + +% Monty Burns. + +pictureof(Burns, 24u#, 24u#, 0); + pickup thinpen; + + localpath ear; + ear = (8u, 15u) .. (6u, 15.9u) .. (4.4u, 14.5u) .. (5.5u, 12.4u) .. + (6.7u, 12.8u); + % We don't draw the ear until it's been clipped by Burns' sideburns. + + localpath head; + z1h = (9u, 20.6u); % join point for Burns' hair + z2h = (7u, 13u); % terminal join point for interpathing + z1e = (12u, 15u); % beginning of Burns' eye + z2e = (16u, 12u); % end of Burns' eye + z3e = (20u, 14u); % where Burns' eyebrow might be + z4e = (20.5u, 17u); % the forward lobe of his forehead + labels(1h, 2h, 1e, 2e, 3e, 4e); + head = postclip( + z1e .. tension 3 and 1 .. + z2e{dir -5} .. + z3e .. + z4e{up} .. + (16 u, 21.8u) .. + (12 u, 21.6u) .. + z1h .. tension 1 and 2 .. + ( 5.7u, 19 u) .. % inflection upwards slightly + ( 3.7u, 16.5u){down} .. +% ( 5 u, 14 u) + z2h + , ear); + +% Now split the head at z1h into the forehead and the hair. +% Although the intersectiontimes should give us an integer, we round just +% in case something got lost in translation. + + numeric t; t = round xpart(head intersectiontimes z1h); + if t < 0: errmessage("Unable to find Burns' hairline"); fi + + localpath outerhair; + outerhair = subpath(t, infinity) of head; + head := subpath(0, t) of head; + + localpath innerhair; % the inner boundary of Burns' hair, + % and his sideburns. + innerhair = + z1h{direction 0 of outerhair} .. + (8.8u, 16u){down} .. + (8.3u, 12.5u) .. + (8u, 12.3u) .. tension 2 .. + z2h .. tension 2 .. + (8u, 16u) .. + (8.5u, 18u) .. + {up} z1h; + + draw preclip(ear, innerhair); % now the ear can be drawn + drawtau( (5.2u, 14.5u), (6.7u, 15u), (6.1u, 13.4u), (6.3u, 15.5u) ); + +% Now split innerhair at z2h. + + numeric t; t = round xpart(innerhair intersectiontimes z2h); + if t < 0: errmessage("Unable to find Burns' sideburns"); fi + + localpath interhair; + interhair = reverse subpath(t, length innerhair - .5) of innerhair; + innerhair := subpath(0,t) of innerhair; + +% Now we can clip the innerhair so his sideburns stop at the hairline + draw innerhair; + draw preclip(interhair, innerhair); + +% Now what's left of Burns' hair can be drawn + for i= 0 step .3 until .8: + draw prepostclip(interpath(i, outerhair, interhair), innerhair, ear); + endfor + + localpath beak; + z1b = (17 u, 12.5u); % first two beak points + z2b = (20.3u, 8.5u); + % Beak contains an inflection point + beak = z1b{(z2b-z1b) rotated -5} .. z2b .. + (21.6u, 6 u) .. tension 1 and 3 .. + (21.7u, 3.8u) .. tension 3 and 3 .. + (20.3u, 5.3u) .. + (18 u, 7 u) .. + (17 u, 8 u){up} .. + {right}(18.4u, 9 u); + + draw (reverse beak) hardjoin head; + +% Now Burns' right eye. + draw subpath(0,1) of head; + localpath eye_bottom; + eye_bottom = z1e {direction 0 of head} .. + (14.5u, 10.9u) .. {dir 40} z2e; + draw eye_bottom; +% The bag under Burns' eye. + draw (subpath(.4, 1) of eye_bottom) shifted (-.3u, -.5u); + +% Burns' left eye. + draw prepostclip( + (18u, 10.5u) .. (19.8u, 12u) .. (19u, 13u), + beak, head); + + localpath mouth; + mouth = preclip( + (18.5u, 7u) .. tension 1 and 2 .. + (18u, 4.5u) .. tension 2 and 1 .. + (10u, 7.8u) .. + (8.2u, 7.5u), beak); + draw mouth; + +if false: + % back of neck + localpath neck; + neck = preclip( + (9u, 7u){down} .. %tension .9 and 3 .. + {-(1,1.5)}(7.2u, 0u), ear); + draw neck; + +fi + + % Burns' fangs, err, teeth. Must be drawn after the chin. + numeric n; n = 5; % number of teeth, minus 1 + % n points equally spaced. + numeric t[]; + + % The following wild macro makes t0 ... t[n] equally spaced. + + for i = 1 upto n: t[i] - t[i-1] = endfor whatever; + t0 = 1.1; t[n] = 2; + + localpath teeth; + teeth = + for i = 1 upto n: + hide( makelabel.top(decimal(i-1), point t[i-1] of mouth); ) + bend(60, point t[i-1] of mouth, point t[i] of mouth) & + endfor + bend(60, point 2 of mouth, point 3 of mouth); + draw teeth; + + z1c = (13.3u, 5.5u); % the inner cavity of the chin + z2c = (9.5u, 0u); % the bottom tip of the neck + z3c = (5.5u, 4u); % the bottom of the back of the neck + labels(1c, 2c, 3c); + + localpath neck; + neck = prepostclip( (15u, 7u) .. z1c .. tension 2 .. z2c & + bend(20, z2c, z3c) & + z3c{dir 80}.. (6.4u, 13u), teeth, ear); + draw neck; + + % Draw Burns' suit jacket + draw z3c .. {curl5} (2.5u, 0u); + draw z3c .. (6u, 0u); + + z1j = neck intersectionpoint ((0u, 3u) .. (24u, 3u)); + draw z1j .. (14.3u, 0u); + draw z1j .. (11.4u, 0u); + +% Burns' age spots. + localpath agespot; + agespot = fullcircle xscaled 1.5 scaled .4u rotated -15; + draw agespot shifted (12u, 19.5u); + draw agespot shifted (10.4u, 17.4u); + draw agespot shifted (12.8u, 15.8u); + + eyepos(Burns, 14.2u#, 12.1u#, 18.6u#, 12.0u#); +endpicture; |