summaryrefslogtreecommitdiff
path: root/usergrps/uktug/baskervi/4_4/snpp.mf
blob: 2b03af17ae9135b43a242937b04bbd6d7280248f (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
% snpp.mf by Raymond Chen (rjc@math.princeton.edu) 
 
% The SNPP logo. 
 
beginchar(1, 8u#, 8u#, 0); "Springfield Nuclear Power Plant"; 
 
    % We will need 8 symmetrically paired points 
    forsuffixes $=range 1 thru 8: x$ = w - x$'; y$ = y$'; endfor 
 
    pickup thinpen; 
    save u; u = w/8;                    % IMPORTANT! 
    save v; v = h/8;                    % IMPORTANT! 
 
    z0 = (4u, 4v);                      % = 1/2(w,h), the center. 
 
    % The circular seal 
    numeric r; r = y0; 
    draw fullcircle scaled 2r shifted z0; 
 
    % The cooling tower 
 
    localpath tower; 
 
    z1 = (2.2u, 4v); 
    z2 = (2.5u, 3.5v); 
    z3 = (1.7u, 0); 
 
    tower = z3 .. tension 3 .. z2 .. 
        z1{up} .. tension 3 .. z1'{down} .. 
            z2'.. tension 3 .. z3'; 
    draw prepostclip(tower, quartercircle scaled 2r rotated 180 shifted z0, 
                            quartercircle scaled 2r rotated -90 shifted z0); 
 
    % The atom logo 
    % The ellipse is 2u by .5u. 
    x4 = .5w; 
    y4 + u * sind 60 = y2; 
 
    pickup finepen; 
    draw fullcircle xscaled 2u yscaled .5v shifted z4; 
    draw fullcircle xscaled 2u yscaled .5v rotated 60 shifted z4; 
    draw fullcircle xscaled 2u yscaled .5v rotated-60 shifted z4; 
    pickup thinpen; 
 
    % The rising fumes 
    z5 = (.5w - .8u, 6v); 
    z5 - z5a = z5a - z5b = z5b - z5';       % equally spaced 
    y5a := y5a + .3v; 
    y5b := y5b - .3v; 
 
    forsuffixes $=,a,b,': draw preclip( (x5$,0) .. z5$, tower); endfor 
 
    % The outer cloud 
    localpath cloud; 
    y6 = y5; 
    x6 = xpart z0 - (r +-+ (y6-y0));        % length(z0 - z6) = r 
 
    cloud = bend(-30, z6, z6'); 
 
    localpath puffcloud; 
    numeric n; n = 13; 
    puffcloud = 
            point 0 of cloud 
    for k = 1 upto n: 
            {direction (k+.5)/n of cloud rotated -80} .. 
            {direction (k+.5)/n of cloud rotated  80} point k/n of cloud 
        endfor; 
 
    draw postclip(puffcloud, (x5, 0) .. z5); 
    draw preclip(puffcloud, (x5', 0) .. z5'); 
 
    % the inner cloud 
    y7 = h - v; 
    x7 = 1/3[x5, x6]; 
 
    cloud := bend(-20, z7, z7'); 
    n := 5; 
    draw 
            point 0 of cloud 
    for k = 1 upto n: 
            {direction (k+.5)/n of cloud rotated -80} .. 
            {direction (k+.5)/n of cloud rotated  80} point k/n of cloud 
        endfor; 
 
    labels(1', 2', 3', 4', 5', 6', 7'); 
    labels(range 0 thru 7); 
endchar; 
 
endinput