diff options
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/simpsons/bart.mf')
-rw-r--r-- | Master/texmf-dist/fonts/source/public/simpsons/bart.mf | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/public/simpsons/bart.mf b/Master/texmf-dist/fonts/source/public/simpsons/bart.mf new file mode 100644 index 00000000000..f37d35cd3fe --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/simpsons/bart.mf @@ -0,0 +1,123 @@ +% bart.mf by Raymond Chen (rjc@math.princeton.edu) + +% Bart Simpson. + +pictureof(Bart, 24u#, 24u#, 0); + pickup thinpen; + + localpath eye_left, eye_right; + eye_right = superellipse( (16.6u, 11.5u), (14u, 13.7u), (11.5u, 11u), + (13.5u, 9u), .7); + draw eye_right; + + localpath nose; + nose = preclip((15u, 10u).. (17.5u, 10.8u){right} ... + (20u, 9.7u){down} ... (16.7u, 8.2u){left}, eye_right); + draw nose; + + localpath dimple; + z1d = (12.8u, 6.3u); + z2d = (12.2u, 5.2u); + dimple = z1d{(z2d-z1d) rotated dimple_depth}.. + {(z2d-z1d) rotated -dimple_depth}z2d; + draw dimple; + labels(1d, 2d); + + localpath mouth; + mouth = prepostclip( + (18u, 9u).. tension infinity and 3.. + (19.6u, 5.3u) .. + (19u, 5u){left} .. + (14.3u, 5u) .. + (12u, 6.2u), nose, dimple); + draw mouth; + + eye_left = prepostclip( + (18u, 9.7u){right}.. + (20u, 12.2u){up}.. + (18u, 14.2u){left}.. + {down}(15.5u, 12u), nose, eye_right); + draw eye_left; + + % The spikes of the hair are equally spaced along a path. + % (Which means they really aren't equally spaced, since speed + % along a path is nonconstant. But that's good, because + % that introduces variability.) + % + % n is two less than the number of spikes atop Bart's head. Although + % you can choose any value you want, the official Bart has 9 spikes, + % so you should set n to 7. + % + + localpath hair_top, hair_bot; + local(numeric)(bumpiness, n); + bumpiness = 5; n = 7; + + z0h = (18.3u, 13u); z3h = (8.8u, 5.5u); + z1h = (15.5u, 22u); z2h = (4u, 18.6u); + z4h = (8.5u, 3.8u); + + hair_top = z1h{(z2h-z1h) rotated -bumpiness} .. + {(z2h-z1h) rotated bumpiness}z2h; + z1h' = z1h - 2u * (z1h-z0h) / length(z1h-z0h); + z2h' = z2h - (2u * (z2h-z3h) / length(z2h-z3h)) rotated 10; + hair_bot = z1h'{(z2h-z1h) rotated -bumpiness} .. + {(z2h-z1h) rotated bumpiness}z2h'; + + % What we want is for the valleys to be equally spaced, but 50% + % further from the ends. + numeric t[]; + + % The following wild macro makes t0 ... t[n] equally spaced. + + for i = 1 upto 2n: t[i] - t[i-1] = endfor + + % and we make them 50% further from the far endpoints 0 and 1. + + .6(t0 - 0) = .6(1 - t[2n]); + + % But we allow the points to vary randomly, so it doesn't look + % too computerized. + + localpath hair; + hair = preclip(z0h --- z1h --- + for i = 0 upto n-1: + point t[2i] of hair_bot + shifted (kemptness*(normaldeviate, normaldeviate)) --- + point t[2i+1] of hair_top + shifted (kemptness*(normaldeviate, normaldeviate)) --- + endfor + point t[2n] of hair_bot --- + z2h .. tension infinity and 1 .. z3h{down} .. z4h, eye_left); + draw hair; + + numeric t; + + localpath ear; + ear = (9.5u, 8.9u) .. (8u, 7.5u) ..(9.3u, 6.5u); + erase fill ear .. cycle; + draw ear; + + drawtau( (8.5u, 7.8u), (9.5u, 8.2u), (9.1u, 7u), (9.1u, 8.3u) ); + + % chin and neck + z.chin = (14.4u, 2u); + draw preclip( + (17u, 5u){down} .. (16u, 4u){left} .. {(-1/2, -2)}z.chin, + mouth); + + % Bart's shirt + z1s = (x4h - 1.2u, 0u); + z2s = z4h + (-.5u, -.8u); + z3s = z.chin + (.2u, -.2u); + z4s = (x.chin + .3u, 0u); + draw z1s + .. {z2s-z1s}z2s + .. {dir -45}z4h + .. (12u, 1.8u){right} + ... z.chin & + flex(z.chin, z3s, z4s); + labels(1s, 2s, 4h); + + eyepos(Bart, 13.5u#, 11.2u#, 17.5u#, 12u#); +endpicture; |