307 lines
7.8 KiB
Text
307 lines
7.8 KiB
Text
% METAFONT program to draw Oxford University crest.
|
|
|
|
mode_setup;
|
|
|
|
def crown(suffix $) =
|
|
|
|
def spear (suffix i) =
|
|
z.i.c = z.i + (0, 2.5u);
|
|
z.i.a = z.i + (-0.25u, 0); z.i.e = z.i.a reflectedabout (z.i, z.i.c);
|
|
z.i.b = z.i + (-0.6u, u); z.i.d = z.i.b reflectedabout (z.i, z.i.c);
|
|
enddef;
|
|
|
|
def spearpath (suffix i)(expr theta) =
|
|
(z.i.a{up}...{left}z.i.b--z.i.c--z.i.d{left}...{down}z.i.e)
|
|
rotatedaround (z.i,theta)
|
|
enddef;
|
|
|
|
def axis =
|
|
(z1$, z9$)
|
|
enddef;
|
|
|
|
z1$ = (7.5u, 0);
|
|
z2$ = (3.5u, u);
|
|
z3$ = (0, 7.5u);
|
|
z4$ = (1.75u, 6.5u);
|
|
z5$ = (2.5u, 5.5u);
|
|
z5$.a = (2u, 5.5u);
|
|
z6$ = (4.25u, 5.5u); spear(6$);
|
|
z7$ = (5.5u, 6u);
|
|
z7$.a = (6u, 6.5u);
|
|
z8$ = (7u, 7u);
|
|
z9$ = (7.5u, 9.5u);
|
|
|
|
path p;
|
|
p = z1${left}..z2${dir 135}..{dir 135}z3$ &
|
|
z3${dir 20}..{down}z4$ &
|
|
z4${dir 45}..{-dir 45}z5$ &
|
|
z5${up}..z5$.a{down}..spearpath(6$,15)..{left}z7$.a..{down}z7$ &
|
|
z7${dir 135}..{-dir 135}z8$ &
|
|
z8${dir 120}..z9$;
|
|
pickup pencircle scaled .01pt;
|
|
fill (p -- (reverse p reflectedabout axis) -- cycle);
|
|
|
|
penpos10$(.5u, -70); z10$l = (3u, 3.5u);
|
|
z11$l = z10$l reflectedabout axis;
|
|
z11$r = z10$r reflectedabout axis;
|
|
unfill z10$l{dir 20}..{dir -20}z11$l--z11$r{dir 160}..{dir 200}z10$r--cycle;
|
|
|
|
unfill unitsquare shifted (-.5,-.5) rotated -45 xscaled .75u yscaled u
|
|
shifted (7.5u, 3u);
|
|
|
|
path ellipticaljewel;
|
|
ellipticaljewel = fullcircle xscaled .75u yscaled u rotated 15
|
|
shifted (5.5u, 2.75u);
|
|
unfill ellipticaljewel;
|
|
unfill ellipticaljewel reflectedabout axis;
|
|
|
|
path diamondjewel;
|
|
diamondjewel = unitsquare shifted (-.5,-.5) rotated -45
|
|
xscaled .5u yscaled .75u rotated 20 shifted (4u, 2.4u);
|
|
unfill diamondjewel;
|
|
unfill diamondjewel reflectedabout axis;
|
|
|
|
unfill fullcircle xscaled 6u yscaled 1.5u shifted (7.5u, u);
|
|
fill fullcircle xscaled 4.5u yscaled u shifted (7.5u, .85u);
|
|
enddef;
|
|
|
|
def shield(suffix $) =
|
|
z1$ = (.5w, 0);
|
|
|
|
def axis = (z1$, z1$ + (0,1)) enddef;
|
|
|
|
z2$ = (0, 40u);
|
|
z3$ = z2$ reflectedabout axis;
|
|
|
|
pickup pencircle scaled u;
|
|
draw z1${dir 160}..{dir 80}z2$---z3${dir -80}..{dir -160}z1$;
|
|
|
|
enddef;
|
|
|
|
def book(suffix $) =
|
|
z1$ = (12.5u, 0);
|
|
|
|
roundness := u;
|
|
thick := .4u;
|
|
thin := .25u;
|
|
|
|
def axis = (z1$, z1$ + (0,1)) enddef;
|
|
|
|
z2$ = z1$ + (-2u, 2u);
|
|
z3$ = z2$ + 2u*down; z3$a = z3$+roundness*up; z3$b = z3$+roundness*left;
|
|
z4$ = (0,0); z4$a = z4$+roundness*right; z4$b = z4$+roundness*up;
|
|
z5$ = (0, 13u); z5$a = z5$+roundness*down; z5$b = z5$+roundness*right;
|
|
z6$ = (2u, 12u);
|
|
|
|
path p;
|
|
p = z1${left}..z2${up} &
|
|
z2${down}..z3$a..z3$b---z4$a..z4$b---z5$a..z5$b..{dir -45}z6$;
|
|
|
|
pickup pencircle scaled thick;
|
|
draw p;
|
|
draw (p reflectedabout axis);
|
|
|
|
z7$ = z1$ + 2u*up;
|
|
z8$ = (3u, 3u);
|
|
|
|
path pageedge;
|
|
pageedge = z7${dir 135}..z8${dir 150};
|
|
|
|
path page;
|
|
page = pageedge --- (reverse pageedge shifted (10u*up)) --- cycle;
|
|
|
|
pickup pencircle scaled thin;
|
|
draw page;
|
|
draw page reflectedabout axis;
|
|
|
|
z9$ = z1$ + (-3u, 1.5u);
|
|
z10$ = (1.5u, 1.5u);
|
|
z11$ = z10$ + 10u*up;
|
|
|
|
draw z10$--z8$;
|
|
draw z11$--(z8$ shifted (10u*up));
|
|
draw z10$--(z10$ + .5u*up);
|
|
|
|
draw (z8$--z10$--z11$--(z8$ shifted (10u*up))) reflectedabout axis;
|
|
draw ((z10$+(.5u, .5u))--(z11$+(.5u, .5u))) reflectedabout axis;
|
|
draw ((z10$+(u, u))--(z11$+(u, u))) reflectedabout axis;
|
|
|
|
path pages;
|
|
pages=(z9$..(z9$+.8u*up){left}..(z10$+(.8u, .8u)){dir 150}---z10$--- cycle)
|
|
shifted (.5thin * down);
|
|
fill pages;
|
|
fill pages reflectedabout axis;
|
|
|
|
fill (halfcircle--cycle) xscaled 2u yscaled u shifted z7$;
|
|
fill (halfcircle--cycle) rotated 180 xscaled 2u yscaled 1.5u shifted z7$;
|
|
|
|
def blob(expr z) =
|
|
fill fullcircle scaled 1.5u shifted z;
|
|
enddef;
|
|
|
|
def dangle(suffix i) =
|
|
draw (z.i + .5u*right)--(z.i + 1.5u*left);
|
|
blob (z.i + 1.5u*left)
|
|
enddef;
|
|
|
|
z12$ = z10$ + (0, u); dangle (12$);
|
|
blob (z12$ +1.5u*up);
|
|
|
|
z13$ = z12$ + (0, 3u); dangle (13$);
|
|
blob (z13$ +1.5u*up);
|
|
|
|
z14$ = z13$ + (0, 3u); dangle (14$);
|
|
blob (z14$ +1.5u*up);
|
|
|
|
z15$ = z14$ + (0, 3u); dangle (15$);
|
|
|
|
lht := 2u;
|
|
|
|
def letterD ( expr p ) =
|
|
pair d.a, d.b;
|
|
d.a = p + lht*up;
|
|
d.b = p + (5/8lht, 1/2lht);
|
|
draw p--d.a{right}..d.b..{left}p;
|
|
enddef;
|
|
|
|
def letterO ( expr p) =
|
|
draw fullcircle xscaled 3/4lht yscaled lht shifted (p + (3/8lht,1/2lht));
|
|
enddef;
|
|
|
|
def letterM ( expr p ) =
|
|
pair m.a, m.b, m.c, m.d;
|
|
m.a = p + lht*up;
|
|
m.c = m.a + lht*right;
|
|
m.d = p + lht*right;
|
|
m.b = .5[p, m.d];
|
|
draw p--m.a--m.b--m.c--m.d;
|
|
enddef;
|
|
|
|
def letterI ( expr p ) =
|
|
draw p--(p+lht*up);
|
|
enddef;
|
|
|
|
def letterN ( expr p ) =
|
|
pair m.a, m.b, m.c;
|
|
m.a = p + lht*up;
|
|
m.b = p + 3/4lht*right;
|
|
m.c = m.b + lht*up;
|
|
draw p--m.a--m.b--m.c;
|
|
enddef;
|
|
|
|
def letterU ( expr p ) =
|
|
pair u.a, u.b, u.c;
|
|
u.a = p + lht*up;
|
|
u.c = u.a + 3/4lht*right;
|
|
u.b = p + 3/8lht*right;
|
|
draw u.a--u.b--u.c;
|
|
enddef;
|
|
|
|
def letterS ( expr p ) =
|
|
pair s.a, s.b, s.c, s.d, s.e, s.f, s.g;
|
|
s.a = p + 1/4lht*up;
|
|
ypart s.b = ypart p; xpart s.b = .5[xpart s.a, xpart s.d];
|
|
ypart s.c = ypart p + lht; xpart s.c = xpart s.b;
|
|
s.d = p + 3/4lht*up + 3/4lht*right;
|
|
xpart s.f = xpart s.a; ypart s.f = ypart s.d;
|
|
s.e = .5[s.b, s.c];
|
|
s.g = s.f rotatedabout(s.e,180);
|
|
draw s.a..{right}s.b..s.g..{dir 160}s.e..s.f..{right}s.c..s.d;
|
|
enddef;
|
|
|
|
def letterL ( expr p ) =
|
|
pair l.a, l.b;
|
|
l.a = p + lht*up;
|
|
l.b = p + 5/8lht*right;
|
|
draw l.a--p--l.b;
|
|
enddef;
|
|
|
|
def letterA ( expr p ) =
|
|
pair a.b, a.c;
|
|
a.c = p + 7/8lht*right;
|
|
xpart a.b = .5[xpart p, xpart a.c]; ypart a.b = ypart p + lht;
|
|
draw p--a.b--a.c;
|
|
draw .4[p,a.b]--.4[a.c,a.b];
|
|
enddef;
|
|
|
|
def letterT ( expr p ) =
|
|
pair t.a, t.b, t.c;
|
|
t.a = p + lht*up;
|
|
t.b = t.a + 3/4lht*right;
|
|
t.c = p + 3/8lht*right;
|
|
draw t.a--t.b;
|
|
draw (.5[t.a,t.b])--t.c;
|
|
enddef;
|
|
|
|
def letterE ( expr p ) =
|
|
pair e.a, e.b, e.c, e.d;
|
|
e.a = p + lht*up;
|
|
e.b = e.a+3/4lht*right;
|
|
e.d = p +3/4lht*right;
|
|
e.c = .5[p,e.a] + 1/2lht*right;
|
|
draw e.b--e.a--p--e.d;
|
|
draw .5[p,e.a]--e.c;
|
|
enddef;
|
|
|
|
z16$ = (4.5u, 9.5u);
|
|
letterD ( z16$ );
|
|
letterO ( z16$ + 7/8lht*right);
|
|
letterM ( z16$ + 15/8lht*right);
|
|
letterI ( z16$ + 26/8lht*right);
|
|
|
|
z17$ = z16$ + 1.4lht*down+1/4lht*left;
|
|
letterN ( z17$ + 1/2lht*right);
|
|
letterU ( z17$ + 3/2lht*right);
|
|
letterS ( z17$ + 21/8lht*right);
|
|
|
|
z18$ = z16$ + 2.8lht*down;
|
|
letterI ( z18$ + 1/4lht*right);
|
|
letterL ( z18$ + 5/8lht*right);
|
|
letterL ( z18$ + 12/8lht*right);
|
|
letterU ( z18$ + 19/8lht*right);
|
|
|
|
z19$ = z16$ + 9.5u*right;
|
|
letterM ( z19$ - 1/8lht*right);
|
|
letterI ( z19$ + 10/8lht*right);
|
|
letterN ( z19$ + 13/8lht*right);
|
|
letterA ( z19$ + 21/8lht*right);
|
|
|
|
z20$ = z19$ + 1.4lht*down + 1/4lht*right;
|
|
letterT ( z20$ + 1/4lht*right);
|
|
letterI ( z20$ + 11/8lht*right);
|
|
letterO ( z20$ + 14/8lht*right);
|
|
|
|
z21$ = z19$ + 2.8lht*down;
|
|
letterM ( z21$);
|
|
letterE ( z21$ + 11/8lht*right);
|
|
letterA ( z21$ + 19/8lht*right);
|
|
|
|
enddef;
|
|
|
|
beginchar(1, 35pt#, 40pt#, 0); "Crown";
|
|
|
|
u := pt;
|
|
|
|
transform tfm;
|
|
tfm := currenttransform;
|
|
|
|
currenttransform := tfm shifted (round 2u, round 29u);
|
|
crown(a);
|
|
|
|
currenttransform := tfm shifted (round 18u, round 29u);
|
|
crown(b);
|
|
|
|
currenttransform := tfm shifted (round 10u, round 4u);
|
|
crown(c);
|
|
|
|
currenttransform := tfm shifted (5u, 15u);
|
|
book(d);
|
|
|
|
currenttransform := tfm;
|
|
shield(e);
|
|
|
|
endchar;
|
|
|
|
end
|
|
|
|
|