summaryrefslogtreecommitdiff
path: root/usergrps/uktug/baskervi/4_4/homer.mf
blob: 31557a6a79635da7ed254413ef475c89c05a85b6 (plain)
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;