1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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;
|