% ---------------------------------------------------------------------------- %
%% \file noeuds.mf
%% \author Sebastien Beaugrand
%% \sa http://beaugrand.chez.com/
%% \copyright CeCILL 2.1 Free Software license
% ---------------------------------------------------------------------------- %
font_identifier "noeuds";
font_size 36pt#;
font_normal_space 18pt#;
ht#:=36pt#;
bs#:=0.4pt#;
mode_setup;
define_pixels(ht);
define_blacker_pixels(bs);
def trb(expr a, u, v, aul, adl, aup, adp, lu, ld, aur, adr) =
z1=u rotatedaround((0.5w, 0.5ht), a);
z2=v rotatedaround((0.5w, 0.5ht), a);
penpos1(lu, aup+a);
penpos2(ld, adp+a);
unfill z1r{dir (aur+a+90)}..{dir (adr+a+90)}z2r--
z2l{dir (adl+a-90)}..{dir (aul+a-90)}z1l--cycle;
cullit;
draw z1r{dir (aur+a+90)}..{dir (adr+a+90)}z2r;
draw z2l{dir (adl+a-90)}..{dir (aul+a-90)}z1l;
clearxy;
enddef;
def tra(expr a, u, v, aul, adl, aup, adp, lu, ld) =
trb( a, u, v, aul, adl, aup, adp, lu, ld, aul, adl);
enddef;
def noeud(expr angle) =
pickup pencircle scaled bs;
p01x:=5h/6+h/72; p01y:=h-h/18; a01p:=195; a01t:=120;
p02x:=h/2; p02y:=h-(h/4+h/90); a02p:=100; a02t:=100;
p03x:=h/3; p03y:=h-(h/4+h/60); a03p:=90; a03t:=90;
p04x:=h/6; p04y:=h-h/4; a04p:=70; a04t:=70;
p05x:=h/24; p05y:=h-h/12; a05p:=0; a05t:=0;
p06x:=h/24; p06y:=h-h/24; a06p:=-45; a06t:=0;
p11x:=h-p06y; p11y:=h-p06x; a11p:=-a06p-90; a11t:=-a06t-90;
p12x:=h-p05y; p12y:=h-p05x; a12p:=-a05p-90; a12t:=-a05t-90;
p13x:=h-p04y; p13y:=h-p04x; a13p:=-a04p-90; a13t:=-a04t-90;
p14x:=h-p03y; p14y:=h-p03x; a14p:=-a03p-90; a14t:=-a03t-90;
p15x:=h-p02y; p15y:=h-p02x; a15p:=-a02p-90; a15t:=-a02t-90;
p16x:=h-p01y; p16y:=h-p01x; a16p:=-a01p-90; a16t:=-a01t-90;
p21x:=h/24; p21y:=5h/12; a21p:=-5; a21t:=a21p;
p22x:=h/6+h/36; p22y:=7h/12; a22p:=-80; a22t:=a22p;
p23x:=h/3+h/72; p23y:=7h/12-h/144; a23p:=-100; a23t:=a23p;
p24x:=7h/12; p24y:=2h/3; a24p:=-20; a24t:=a24p;
p25x:=7h/12-h/36; p25y:=h-h/6+h/72; a25p:=35; a25t:=a25p;
p26x:=h/3; p26y:=h-h/12+h/72; a26p:=95; a26t:=a26p;
p27x:=h/6-h/60; p27y:=h-(h/6-h/54); a27p:=135; a27t:=a27p;
p31x:=h-p27y; p31y:=h-p27x; a31p:=-a27p-90; a31t:=-a27t-90;
p32x:=h-p26y; p32y:=h-p26x; a32p:=-a26p-90; a32t:=-a26t-90;
p33x:=h-p25y; p33y:=h-p25x; a33p:=-a25p-90; a33t:=-a25t-90;
p34x:=h-p24y; p34y:=h-p24x; a34p:=-a24p-90; a34t:=-a24t-90;
p35x:=h-p23y; p35y:=h-p23x; a35p:=-a23p-90; a35t:=-a23t-90;
p36x:=h-p22y; p36y:=h-p22x; a36p:=-a22p-90; a36t:=-a22t-90;
p37x:=h-p21y; p37y:=h-p21x; a37p:=-a21p-90; a37t:=-a21t-90;
a:=angle;
trb(a, (p01x,p01y), (p02x,p02y), a01t, a02t, a01p, a02p, h/3, h/12, 150, a02t);
tra(a, (p24x,p24y), (p25x,p25y), a24t, a25t, a24p, a25p, h/12, h/12);
tra(a, (p35x,p35y), (p36x,p36y), a35t, a36t, a35p, a36p, h/12, h/12);
tra(a, (p02x,p02y), (p03x,p03y), a02t, a03t, a02p, a03p, h/12, h/12);
tra(a, (p03x,p03y), (p04x,p04y), a03t, a04t, a03p, a04p, h/12, h/12);
tra(a, (p13x,p13y), (p14x,p14y), a13t, a14t, a13p, a14p, h/12, h/12);
tra(a, (p31x,p31y), (p32x,p32y), a31t, a32t, a31p, a32p, h/12, h/12);
tra(a, (p04x,p04y), (p05x,p05y), a04t, a05t, a04p, a05p, h/12, h/12);
tra(a, (p05x,p05y), (p06x,p06y), a05t, a06t, a05p, a06p, h/12, h/12*sqrt(2));
tra(a, (p11x,p11y), (p12x,p12y), a11t, a12t, a11p, a12p, h/12*sqrt(2), h/12);
tra(a, (p12x,p12y), (p13x,p13y), a12t, a13t, a12p, a13p, h/12, h/12);
tra(a, (p26x,p26y), (p27x,p27y), a26t, a27t, a26p, a27p, h/12, h/12);
tra(a, (p14x,p14y), (p15x,p15y), a14t, a15t, a14p, a15p, h/12, h/12);
tra(a, (p22x,p22y), (p23x,p23y), a22t, a23t, a22p, a23p, h/12, h/12);
tra(a, (p33x,p33y), (p34x,p34y), a33t, a34t, a33p, a34p, h/12, h/12);
trb(a, (p15x,p15y), (p16x,p16y), a15t, a16t, a15p, a16p, h/12, h/3, a15t, -240);
trb(a, (p16x,p16y), (p21x,p21y), -13, a21t, a16p, a21p, h/3, h/12, 20, a21t);
tra(a, (p21x,p21y), (p22x,p22y), a21t, a22t, a21p, a22p, h/12, h/12);
tra(a, (p32x,p32y), (p33x,p33y), a32t, a33t, a32p, a33p, h/12, h/12);
tra(a, (p23x,p23y), (p24x,p24y), a23t, a24t, a23p, a24p, h/12, h/12);
tra(a, (p34x,p34y), (p35x,p35y), a34t, a35t, a34p, a35p, h/12, h/12);
tra(a, (p25x,p25y), (p26x,p26y), a25t, a26t, a25p, a26p, h/12, h/12);
tra(a, (p36x,p36y), (p37x,p37y), a36t, a37t, a36p, a37p, h/12, h/12);
trb(a, (p37x,p37y), (p01x,p01y), a37t, -77, a37p, a01p, h/12, h/3, a37t, -110);
enddef;
beginchar("A", ht#, ht#, 0pt#);
noeud(0);
endchar;
beginchar("B", ht#, ht#, 0pt#);
noeud(45);
endchar;
beginchar("C", ht#, ht#, 0pt#);
noeud(90);
endchar;
beginchar("D", ht#, ht#, 0pt#);
noeud(135);
endchar;
beginchar("E", ht#, ht#, 0pt#);
noeud(180);
endchar;
beginchar("F", ht#, ht#, 0pt#);
noeud(225);
endchar;
beginchar("G", ht#, ht#, 0pt#);
noeud(270);
endchar;
beginchar("H", ht#, ht#, 0pt#);
noeud(315);
endchar;
k#:=10pt#;
for i=65 upto 72:
ligtable i:
65 kern k#, 66 kern k#, 67 kern k#, 68 kern k#,
69 kern k#, 70 kern k#, 71 kern k#, 72 kern k#;
endfor;
end