summaryrefslogtreecommitdiff
path: root/usergrps/uktug/baskervi/4_4/homer.mf
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /usergrps/uktug/baskervi/4_4/homer.mf
Initial commit
Diffstat (limited to 'usergrps/uktug/baskervi/4_4/homer.mf')
-rw-r--r--usergrps/uktug/baskervi/4_4/homer.mf130
1 files changed, 130 insertions, 0 deletions
diff --git a/usergrps/uktug/baskervi/4_4/homer.mf b/usergrps/uktug/baskervi/4_4/homer.mf
new file mode 100644
index 0000000000..31557a6a79
--- /dev/null
+++ b/usergrps/uktug/baskervi/4_4/homer.mf
@@ -0,0 +1,130 @@
+% homer.mf by Raymond Chen (rjc@math.princeton.edu)
+
+% Homer Simpson.
+
+pictureof(Homer, 24u#, 24u#, 0);
+ pickup thinpen;
+
+ localpath eye_left, eye_right;
+ eye_right = superellipse( (14.2u, 14.5u), (12.2u, 16.3u),
+ (10u, 14u), (12u, 12u), .7);
+ draw eye_right;
+
+ localpath nose; % extends down and around to chin
+ nose = preclip((12u, 13u)..
+ (16u, 13.2u)..
+ (17.7u, 12.5u){down} ..
+ (16u, 11.5u)..
+ (10u, 7u){down}..
+ (12.5u, 4u){right}..tension 1 and 6..
+ (14.7u, 6.5u)..
+ (15.7u, 6.8u)..
+ {up}(15.7u, 8u), eye_right);
+ localpath dimple;
+ z1d = (11.3u, 8.1u);
+ z2d = (10.9u, 6.8u);
+ dimple = z1d{(z2d-z1d) rotated dimple_depth}..
+ {(z2d-z1d) rotated -dimple_depth}z2d;
+ draw dimple;
+
+ localpath mouth;
+ mouth = prepostclip(
+ (16u, 12u).. tension infinity and 3..
+ (17.7u, 8u){down} .. tension 2 and 1 ..
+ (15.7u, 7.2u){left}..
+ (12.2u, 7.7u){left}..
+ (0u, 7u), nose, dimple);
+ draw mouth;
+
+ nose := postclip(nose, mouth);
+ draw nose;
+
+ eye_left = prepostclip(
+ (15u, 12.6u){right}..
+ (17.2u, 14.5u){up}..
+ (15.5u, 16.4u){left}..
+ {down}(13.1u, 14.2u), nose, eye_right);
+ draw eye_left;
+
+ localpath scalp;
+ scalp = preclip(
+ (16u, 15.3u) .. tension 1.5 ..
+ (12u, 20u) ..
+ (9.5u, 20.8u){left}.. tension 1 ..
+ (4u, 16.4u){down} .. tension 1 ..
+ (7.4u, 7u) ..
+ (5.4u, 0u), eye_left);
+
+ % scalp and collar interact
+ localpath collar;
+ collar = (11.4u, 2.3u) .. tension infinity and 1 ..
+ (7u, 4.2u) .. (6.7u, 4.7u) ..
+ (9u, 6u) .. tension 1 and infinity .. (15.2u, 2.5u);
+ z0c = point 0 of collar;
+ draw postclip(scalp, collar);
+ draw postclip(collar, scalp);
+
+ % the rest of the collar is also tricky
+ numeric t;
+ t = directiontime dir (90-starch) of collar;
+ z1c = point t of collar;
+ x2c = 5u; z1c - z2c = whatever * dir (90-starch);
+ draw z1c -- z2c & reverse subpath (0,t) of collar shifted (z2c-z1c) -- z0c;
+ y.bottom = ypart (z0c + (z2c-z1c));
+ numeric t;
+
+ % while I'm here, I may as well finish the right collar
+ draw postclip (z0c .. (z0c + 100u * dir -machismo),
+ (0u,y.bottom)..(100u,y.bottom));
+
+ localpath ear;
+ ear = (7.5u, 11.5u) .. % (6.8u, 11.6u) ..
+ (6u, 11.3u) ..
+ (5.7u, 10u) .. (6.6u, 8.5u) .. (7.5u, 9u);
+ erase fill ear .. cycle;
+ draw ear;
+
+ drawtau( (6.2u, 10.5u), (7.4u, 11u), (6.8u, 9.3u), (6.8u, 11.1u) );
+
+ % tufts on top
+ draw postclip (
+ (5.2u, 17.7u){dir 100} ... (6u, 22u) ... {dir -60}(9.3u, 19.5u), scalp);
+ localpath tuft;
+ tuft = (6.2u, 18.7u){dir 100} ... (8u, 22.3u) ... {dir -70}(10.8u, 19.5u);
+ draw subpath (0,1) of tuft &
+ postclip(subpath (1,2) of tuft, scalp);
+ numeric tuft;
+
+ % the tuft by the ear
+ draw (4.5u, 11.5u) --- (4.6u, 14u) --- (6.1u, 12.2u)
+ --- (6.4u, 14.4u) --- (7.7u, 12.5u);
+
+ % The interaction between the left collar and the front of the neck
+ % is also messy.
+
+ % shift part of left collar
+ localpath lcollar;
+ z2cr = point infinity of collar;
+ y1cr = y.bottom; z2cr - z1cr = whatever * dir machismo;
+ lcollar = z2cr .. z1cr;
+ draw lcollar;
+
+ % now the front of the neck
+ localpath neck;
+ neck = prepostclip(
+ (13u, 7u){down} .. (14.7u, 0u), nose, lcollar);
+ draw neck;
+
+ % now the top of the left collar
+ draw preclip(collar, neck);
+
+ % and the other side of the left collar.
+ z2cr - z3cr = 1.5u * dir machismo;
+ z4cr - z3cr = whatever * dir (270+starch+30);
+ z4cr - z2cr = whatever * dir (270+starch);
+ draw z2cr -- z4cr -- z3cr;
+ labels(1cr, 2cr, 3cr, 4cr);
+
+ eyepos(Homer, 11.5u#, 14u#, 15.2u#, 14.5u#);
+
+endpicture;