% mathematical symbols by Anthony Phan. % file: mathastr.mf (mathematical astronomical symbols) % last modification: April 29, 2002. % Only known charcodes will be generated. % stem_corr had been added (darkness). % also vair_corr and slab. boolean serifs; if astro>0.75: serifs:=true; else: serifs:=false; fi % from cmbase.mf % super_arc.r(suffix $,$$) and super_arc.l(suffix $,$$) % have the same effect as a right_to_down vardef pulled_super_arc.r(suffix $,$$)(expr superpull) = pair center,corner; if y$=y$r: center=(x$$r,y$r); corner=(x$r,y$$r); else: center=(x$r,y$$r); corner=(x$$r,y$r); fi z$r{corner-z$r}...superness[center,corner]{z$$r-z$r} ...{z$$r-corner}z$$r enddef; vardef pulled_super_arc.l(suffix $,$$)(expr superpull) = pair center,corner,outer_point; if y$=y$r: center=(x$$l,y$l); corner=(x$l,y$$l); outer_point=superness[(x$$r,y$r),(x$r,y$$r)]; else: center=(x$l,y$$l); corner=(x$$l,y$l); outer_point=superness[(x$r,y$$r),(x$$r,y$r)]; fi z$l{corner-z$l} ...superpull[superness[center,corner],outer_point]{z$$l-z$l} ...{z$$l-corner}z$$l enddef; vardef pulled_arc@#(suffix $,$$) = pulled_super_arc@#($,$$)(superpull) enddef; % let's go use_rule4; superpull := astro*1/6; arrow_breadth := astro[0,vair]; arrow_stress := astro[1,0.7]; arrow_tense1 := astro[1,0.75]; arrow_tense2 := astro[1,0.875]; % absolutely okay beginchar(astro_sun,13u#+2appr#,cap_height#,0); "Sun"; italcorr 0.6cap_height#*slant-.5u#; autorounded; pickup null.nib; % circle penpos1(vround astro[rth,vair'],90); penpos2(hround astro[rth,cap_curve-stem_corr],180); penpos3(vround astro[rth,vair+1.5vair_corr],-90); penpos4(hround astro[rth,cap_curve-stem_corr],0); y1r=h+o; y3r=-o; y2=y4=0.5h; x2r=appr; x4r=w-appr; x1=x3=0.5[x2,x4]; y2l:=y4l:=astro[y2,0.52h]; penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3) & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle; % dot adjust_dot5((x1,y2),astro[2.7rth,1.3dtsz],true,true); dot(5,5'); penlabels(1,2,3,4); endchar; % okay beginchar(astro_left_moon,10u#+2appr#,cap_height#,0); "Left moon (Moon)"; italcorr cap_height#*slant-.5u#; save tmp_path; path tmp_path[]; numeric a,b,t[]; % % Two solutions may be considered for % this construction. The first (and the % one which is done here) is to put the % two centers of circles at a predeterminated % distance $a$ from each others (namely $a=4u$) % and do the construction hoping that edges % will fit the right bound. % The second one consists in calculating that % distance $a$ to make sure that edges will lie % on the right bound (the calculations are shown % commentated). The problem with this method % is that there is no control of the clear part's % width of the drawing. Moreover, when the inner % radius become too small there is no more solution % to that problem (see below). % %% The actual width of the drawing must be 10u. %% The problem is to calculate the distance %% between the two centers to make it work. %% Alas when the two radius are too far from %% each over, this problem has no solution. %% %% 6.5u=radius of great circle. %% 3.5u=10u-6.5u=(inner width)-radius. %% 6.5u-rth=radius of small circle. %% % b=(3.5u)**2+(rth**2)-2*6.5u*rth; % if b>=0: a=hround(3.5u+sqrt b); % else: a=hround(3.5u); fi a=hround(4u-rth+astro[rth,rth]); penpos2(vround astro[rth,rth],90); penpos3(hround astro[rth,rth],180); penpos4(vround astro[rth,rth],-90); penpos1(hround astro[rth,rth],0); x3r=appr; x1r-x3r=13u; y2r=h+o; y4r=-o; y1=y3=0.5[y2,y4]; x2=x4=0.5[x1,x3]; tmp_path1=z1r up_to_left z2r left_to_down z3r down_to_right z4r right_to_up z1r..cycle; tmp_path2=z1l up_to_left z2l left_to_down z3l down_to_right z4l right_to_up z1l..cycle; tmp_path3=tmp_path1 shifted (a,0); tmp_path4=tmp_path2 shifted (a,0); % % The presence of epsilons makes almost certain % that paths won't have double points causing % trouble with filling commands. % (t1-eps,t4-eps)=(subpath (0,4) of tmp_path1) intersectiontimes (subpath (0,4) of tmp_path4); (t2-4+eps,t3-4+eps)=(subpath (4,8) of tmp_path1) intersectiontimes (subpath (4,8) of tmp_path4); (t5-eps,t8-eps)=(subpath (0,4) of tmp_path2) intersectiontimes (subpath (0,4) of tmp_path3); (t6-4+eps,t7-4+eps)=(subpath (4,8) of tmp_path2) intersectiontimes (subpath (4,8) of tmp_path3); fill subpath (t1,t2) of tmp_path1 ..reverse subpath(t4,t3) of tmp_path4..cycle; unfill subpath (t5,t6) of tmp_path2 ..reverse subpath(t8,t7) of tmp_path3..cycle; penlabels(1,2,3,4); endchar; beginchar(astro_right_moon,10u#+2appr#,cap_height#,0); "Right moon"; italcorr cap_height#*slant-.5u#; save tmp_path; path tmp_path[]; numeric a,b,t[]; a=-hround(4u-rth+astro[rth,rth]); penpos2(vround astro[rth,rth],90); penpos3(hround astro[rth,rth],0); penpos4(vround astro[rth,rth],-90); penpos1(hround astro[rth,rth],180); x3=w-appr-0.5rth; x1r-x3r=-13u; y2r=h+o; y4r=-o; y1=y3=0.5[y2,y4]; x2=x4=0.5[x1,x3]; tmp_path1=z1r up_to_left z2r left_to_down z3r down_to_right z4r right_to_up z1r..cycle; tmp_path2=z1l up_to_left z2l left_to_down z3l down_to_right z4l right_to_up z1l..cycle; tmp_path3=tmp_path1 shifted (a,0); tmp_path4=tmp_path2 shifted (a,0); (t1-eps,t4-eps)=(subpath (0,4) of tmp_path1) intersectiontimes (subpath (0,4) of tmp_path4); (t2-4+eps,t3-4+eps)=(subpath (4,8) of tmp_path1) intersectiontimes (subpath (4,8) of tmp_path4); (t5-eps,t8-eps)=(subpath (0,4) of tmp_path2) intersectiontimes (subpath (0,4) of tmp_path3); (t6-4+eps,t7-4+eps)=(subpath (4,8) of tmp_path2) intersectiontimes (subpath (4,8) of tmp_path3); fill subpath (t1,t2) of tmp_path1 ..reverse subpath(t4,t3) of tmp_path4..cycle; unfill subpath (t5,t6) of tmp_path2 ..reverse subpath(t8,t7) of tmp_path3..cycle; penlabels(1,2,3,4); endchar; beginchar(astro_full_moon,13u#+2appr#,cap_height#,0); "Full moon"; italcorr 0.6cap_height#*slant-.5u#; autorounded; % circle penpos1(vround astro[rth,rth],90); penpos2(hround astro[rth,rth],180); penpos3(vround astro[rth,rth],-90); penpos4(hround astro[rth,rth],0); y1r=h+o; y3r=-o; y2=y4=0.5h; x2r=appr; x4r=w-appr; x1=x3=0.5[x2,x4]; y2l:=y4l:=astro[y2,y2]; penstroke z1e left_to_down z2e down_to_right z3e right_to_up z4e up_to_left z1e; penlabels(1,2,3,4); endchar; beginchar(astro_new_moon,13u#+2appr#,cap_height#,0); "New moon"; italcorr cap_height#*slant-.5u#; autorounded; x4=w-appr; x2=appr; y1=h+o; y3=-o; y2=y4=0.5h; x1=x3=0.5[x2,x4]; fill z1 left_to_down z2 down_to_right z3 right_to_up z4 up_to_left z1..cycle; labels(1,2,3,4); endchar; % okay beginchar(astro_mercury,9u#+2appr#,cap_height#,0); "Mercury"; italcorr cap_height#*slant-.5u#; numeric a,b; a=astro[rth,0.9[vair,0.85stem]]; b=vround astro[rth,vair]; ensure_centering_of(a); % circle penpos1(b,90); penpos2(hround astro[rth,curve],180); penpos3(b,-90); penpos4(hround astro[rth,curve],0); y1r=cap_height+oo; y3r=vround astro[0.30cap_height,cap_height-x_height]-oo; y2=y4=0.5[y1,y3]; x2r=appr; x4r=w-appr; x1=x3=0.5[x2,x4]; y2l:=y4l:=astro[y2,0.52[y3,y1]]; penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3) & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle; % queue tmp_path:=pulled_arc.r(1,2) & pulled_arc.r(2,3) & pulled_arc.r(3,4) & pulled_arc.r(4,1) & cycle; pickup crisp.nib; bot y5=-o; bot y6l=bot y7l=vround(0.5[-d,y3r]-0.5a);% a little higher pos5(hround a,0); pos6(vround a,90); pos7(vround a,90); x5=x3; x5l-x6=x7-x5r=hround 0.5(x1-x2l); save t; forsuffixes $=,r,l: t$=xpart(tmp_path intersectiontimes (z5$..(x5$,y2))); endfor filldraw subpath (t.r,t.l) of tmp_path--z5l--z5r--cycle; filldraw stroke z6e..z7e; % horns tmp_path:=reverse tmp_path; save p; path p.r,p.l; a:=astro[rth,stem]; pos8(a,90); pos9(hround 0.5[a,b],180); pos10(b,-90); pos11(hround 0.5[a,b],0); lft x9r=appr; x8=x10=x1; rt x11r=w-appr; y9=y11=0.5[y8,y10]=y1; top y8=vround max(1.22cap_height,y1r+a); p.r=z8r left_to_down z9r down_to_right z10r right_to_up z11r up_to_left z8r; p.l=z8l right_to_down z11l down_to_left z10l left_to_up z9l up_to_right z8l; t1=xpart(p.r intersectiontimes (z8..(x9r,y8))); (t2,t3-4)=p.r intersectiontimes subpath (4,8) of tmp_path; (t5,t4-4)=p.l intersectiontimes subpath (4,8) of tmp_path; t6-6=xpart(subpath (6,8) of p.l intersectiontimes ((point t1 of p.r)..(x1,y2))); t7=xpart(p.r intersectiontimes (z8..(x11r,y8))); (t8,t9)=p.r intersectiontimes subpath (0,4) of tmp_path; (t11,t10)=p.l intersectiontimes subpath (0,4) of tmp_path; t12=xpart(subpath (0,2) of p.l intersectiontimes ((point t7 of p.r)..(x1,y2))); interim turningcheck:=0;% I hate turning numbers filldraw subpath (t1,t2) of p.r --subpath (t3,t4) of tmp_path --subpath (t5,t6) of p.l -- cycle; filldraw subpath (t12,t11) of p.l --subpath (t10,t9) of tmp_path --subpath (t8,t7) of p.r -- cycle; penlabels(1,2,3,4,5,6,7,8,9,10,11); endchar; % okay beginchar(astro_venus,9u#+2appr#,cap_height#,0); "Venus"; italcorr cap_height#*slant-.5u#; numeric a; a=astro[rth,0.9[vair,0.85stem]]; ensure_centering_of(a); % circle penpos1(vround astro[rth,vair],90); penpos2(hround astro[rth,curve],180); penpos3(vround astro[rth,vair'],-90); penpos4(hround astro[rth,curve],0); y1r=cap_height+oo; y3r=vround astro[0.30cap_height,cap_height-x_height]-oo; y2=y4=0.5[y1,y3]; x2r=appr; x4r=w-appr; x1=x3=0.5[x2,x4]; y2l:=y4l:=astro[y2,0.52[y3,y1]]; penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3) & pulled_arc.e(3,4) & pulled_arc.e(4,1)& cycle; % queue tmp_path:=pulled_arc.r(1,2) & pulled_arc.r(2,3) & pulled_arc.r(3,4) & pulled_arc.r(4,1) & cycle; pickup crisp.nib; bot y5=-o; bot y6l=bot y7l=vround(0.5[-d,y3r]-0.5a);% a little higher pos5(hround a,0); pos6(vround a,90); pos7(vround a,90); x5=x3; x5l-x6=x7-x5r=hround 0.5(x1-x2l); save t; forsuffixes $=,r,l: t$=xpart(tmp_path intersectiontimes (z5$..(x5$,y2))); endfor filldraw subpath (t.r,t.l) of tmp_path--z5l--z5r--cycle; filldraw stroke z6e..z7e; penlabels(1,2,3,4,5,6,7); endchar; % absolutely okay beginchar(astro_earth,13u#+2appr#,cap_height#,0); "Earth"; italcorr 0.6cap_height#*slant-.5u#; numeric a; a=astro[rth,0.9[vair,0.85stem]]; ensure_centering_of(a); pickup null.nib; autorounded; % circle penpos1(vround astro[rth,vair'],90); penpos2(hround astro[rth,cap_curve-2stem_corr],180); penpos3(vround astro[rth,vair+1.5vair_corr],-90); penpos4(hround astro[rth,cap_curve-2stem_corr],0); y1r=h+o; y3r=-o; y2=y4=0.5h; x2r=appr; x4r=w-appr; x1=x3=0.5[x2,x4]; y2l:=y4l:=astro[y2,0.52h]; penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3) & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle; % cross tmp_path:=z1 left_to_down z2 down_to_right z3 right_to_up z4 up_to_right z1; penpos5(hround a,0); penpos6(vround a,90); x5=x6=0.5w; y5=y6=vround(y2-0.5vround a)+0.5vround a; forsuffixes $=,r,l: z7$=tmp_path intersectionpoint (z5$..(x5$,y1r)); z8$=tmp_path intersectionpoint (z5$..(x5$,y3r)); z9$=tmp_path intersectionpoint (z6$..(x2r,y6$)); z10$=tmp_path intersectionpoint (z6$..(x4r,y6$)); endfor fill z7r..z7..z7l--z8l..z8..z8r--cycle; fill z9r..z9..z9l--z10l..z10..z10r--cycle; penlabels(1,2,3,4,5,6,7,8,9,10); endchar; % almost okay (see arrows dimensions) beginchar(astro_mars,9u#+2appr#,body_height#,0); "Mars"; italcorr body_height#*slant-.5u#; numeric a; a=astro[rth,0.9[vair,0.85stem]]; % ensure_centering_of(a);% just for homogeneity % circle penpos1(vround astro[rth,vair],90); penpos2(hround astro[rth,curve],180); penpos3(vround astro[rth,vair'],-90); penpos4(hround astro[rth,curve],0); y1r=vround astro[0.70cap_height,x_height]+oo; y3r=-oo; y2=y4=0.5[y1,y3]; x2r=appr; x4r=w-appr; x1=x3=0.5[x2,x4]; y2l:=y4l:=astro[y2,0.52[y3,y1]]; penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3) & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle; % arrow tmp_path:=pulled_arc.r(1,2) & pulled_arc.r(2,3) & pulled_arc.r(3,4) & pulled_arc.r(4,1) & cycle; z6=(x1,y2); top y7=body_height+o; rt x7=w-appr; arrow_height:=vround astro[0.2cap_height,0.3cap_height]; arrow_width:=max(4.9rth,rth+3u); save rth; rth=a; arrow_head5(z6..z7,both); z6r-z6=z5r-z5; z6-z6l=z5-z5l; save t; forsuffixes $=r,l: t$=xpart(tmp_path intersectiontimes (z6$..z5$)); endfor filldraw if t.l>t.r: subpath (t.r,t.l) of tmp_path else: subpath (t.r,8) of tmp_path & subpath (0,t.l) of tmp_path fi --z5l--z5r--cycle; penlabels(1,2,3,4,6,7); endchar; % humm beginchar(astro_jupiter,10u#+2appr#,asc_height#,desc_depth#); "Jupiter"; italcorr body_height#*slant-.5u#; a:=vround astro[rth,cap_hair]; b:=vround astro[rth,slab]; save beak,beak_jut,bracket,cap_jut; beak=vround astro[0,0.38h-a]; cap_jut=hround astro[0,1.8u]; bracket=0.5cap_jut; pickup crisp.nib; % top y1r=h; bot y2l=-d; rt x1r=w-appr-.5u; lft x2l=appr+3u; adjust_slanted_bar(1r,2l,1l,2r)(astro[rth,cap_stem]-crisp,-1); z1r-z1=z1-z1l; z2r-z2=z2-z2l; filldraw stroke z1e..z2e; % top y3r-bot y3l=top y4r-bot y4l=a; z3r-z3l=whatever*(z1-z2); bot y3l=bot y4l=bot y5l=vround 0.0h; lft x5l=appr-0.5u; adjust_slanted_bar(1l,5l,0,5)(0.5(a-crisp),-1); z5r-z5=z5-z5l; top y8=h-0.5rth; lft x8=appr; z0'=0.72[z5,z1l]; z6=0.25[z5,z1l]; pos6(a,angle(z1l-z5)-90); pos8(astro[rth,cap_curve],angle(z8-z0')-90); x4l=x5; z4r-z4l=whatever*(z6-z5); z3=0.5[z3l,z3r]; filldraw stroke z5e---z6e{z0'-z6}...{z8-z0'}z8e; % if serifs: serif(1,2,bracket,cap_jut,b,true,dish,cap_jut,b,true,dish); serif(2,1,bracket,cap_jut,b,true,dish,cap_jut,b,true,dish); z3l=whatever[z1r,z2r]; beak_jut=(beak+b)*(x1-x2)/(y1-y2); arm3(beak,beak_jut,b,1/3,up,w-appr+0.75u); else: x3l=0.8[x2,x1]; fi filldraw stroke z3e..z4e; labels(0,0'); penlabels(1,2,3,4,5,6,7,8); endchar; % humm beginchar(astro_saturn,9.5u#+2appr#,body_height#,0); "Saturn"; italcorr body_height#*slant-.5u#; % curve pickup crisp.nib; a:=hround astro[rth,cap_stem]; b:=vround astro[rth,cap_hair]; c:=hround astro[rth,cap_stem]; pos1(b,180); pos2(b,90); pos3(hround 0.43[b,c],0); pos5(hround 0.44[b,c],0); pos6(b,90); pos7(hround 0.44[b,c],180); pos10(a,0); lft x10l=appr+hround 1.5u; x10r=x1l; rt x3r=rt x7l=w-appr; x2=0.5[x1l,x3l]; rt x5r+eps=hround astro[x2,x10r+0.5[b,a]]; x6=0.5[x5,x7]; % % Construction par cercles tangents % numeric d,k,k',R; k=(x7-x5)/(x3-x1); k'=(1+k-2sqrt k)/((1-k)**2); bot y6l=-o; top y2r=vround 0.8h+o; R=k'*(y2-y6); y3=y2-R; bot y1=bot y10=vround y3; y5=y7=y6+k*R; z4=(1/(1+k))[(x2,y1),(x6,y5)]; d=R/(x2-x1); pos4(c,angle((y1-y5)/d,(x6-x2)*d)-90); % stem save rth; rth=a; arrow_height:=vround astro[h-cap_height,0.2cap_height]+o; arrow_width:=a+hround 2(2.25u)+0.5; arrow_head9(z10..(x10,h+o-pen_top),left); filldraw stroke z9e..z10e; % x7:=x7r+1; tmp_path:=z6l right_to_up z7l; t:=xpart(tmp_path intersectiontimes (z7..(x7,y6l))); autorounded; filldraw subpath (0,t) of tmp_path --z7--z7r down_to_left z6r--cycle; filldraw stroke z1e up_to_right z2e right_to_down z3e...z4e{((y5-y1)/d,(x2-x6)*d)} ...z5e down_to_right z6e; penlabels(0,1,2,3,4,5,6,7,8,9,10); endchar; % almost okay (see arrows dimensions) beginchar(astro_uranus,9u#+2appr#,body_height#,0); "Uranus"; italcorr body_height#*slant-.5u#; numeric a; a=astro[rth,0.9[vair,0.85stem]]; ensure_centering_of(a);% just for homogeneity % circle penpos1(vround astro[rth,vair],90); penpos2(hround astro[rth,curve-stem_corr],180); penpos3(vround astro[rth,vair'],-90); penpos4(hround astro[rth,curve-stem_corr],0); y1r=vround astro[0.70cap_height,x_height]+oo; y3r=-oo; y2=y4=0.5[y1,y3]; x2r=appr; x4r=w-appr; x1=x3=0.5[x2,x4]; y2l:=y4l:=astro[y2,0.52[y3,y1]]; penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3) & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle; % dot adjust_dot5((x1,y2),astro[1.6rth,dtsz],true,true); dot(5,5'); % arrow tmp_path:=pulled_arc.r(1,2) & pulled_arc.r(2,3) & pulled_arc.r(3,4) & pulled_arc.r(4,1) & cycle; arrow_height:=vround astro[0.2cap_height,0.3cap_height]+eps; arrow_width:=max(4.9rth,rth+3u); save rth; rth=hround a; arrow_head6(z1..(x1,body_height+o-pen_top),both); save t; forsuffixes $=,r,l: t$=xpart(tmp_path intersectiontimes (z6$..(x6$,y2))); endfor filldraw subpath (t.r,8) of tmp_path & subpath (0,t.l) of tmp_path --z6l--z6r--cycle; penlabels(1,2,3,4,6,7); endchar; % almost okay (see arrows dimensions) beginchar(astro_neptune,10.5u#+2Appr#,cap_height#,0); "Neptune"; italcorr cap_height#*slant-.5u#; numeric a,b,c; a=hround astro[rth,cap_stem-2stem_corr]; b=vround astro[rth,vair];% breadth c=vround astro[rth,0.9[vair,0.85stem]];% cross bar ensure_centering_of(a); % stems x1-0.5a=hround astro[Appr,appr]; x3=x7=0.5w; x1=x2; x4-x3=x3-x1; pickup crisp.nib; % arrows save rth; rth=a; arrow_height:=vround astro[0.125cap_height,0.25cap_height]+eps; arrow_width:=min(3a,x3-x1-0.5u,2.5u+a); arrow_head0((x1,0)..(x1,h+o-pen_top),both); arrow_head5((x4,0)..(x4,h+o-pen_top),both); arrow_head6((x3,0)..(x3,h+o-pen_top),both); % cup and queue pos1(a,180); pos2(a,180); pos3(b,-90); pos4(a,0); pos7(a,0); pos8(c,90); pos9(c,90); bot y3r=vround 0.2cap_height; y1=y0; y2=y4=0.5[y1,y3]; bot y7=-o; top y8r=top y9r=vround 0.2cap_height-1; x7l-x8=x9-x7r=hround 0.5(x3-x1-a); filldraw stroke z1e..z2e down_to_right z3e right_to_up z4e..z5e; filldraw stroke z6e..z7e; filldraw stroke z8e..z9e; penlabels(1,2,3,4,7,8,9); endchar; % The serifs are not cm compatible beginchar(astro_pluto,7.75u#+Appr#+appr#,cap_height#,0); "Pluto"; italcorr 0.75cap_height#*slant-.5u#; pickup crisp.nib; a:=vround astro[rth,cap_hair]; b:=vround astro[rth,slab]; save beak,beak_jut,bracket,cap_jut; beak=vround astro[0,0.38h-a]; beak_jut=hround astro[0,0.75u]; cap_jut=hround astro[0,1.8u]; bracket=0.5cap_jut; % % stem % pos1(hround astro[rth,cap_stem],0); pos2(hround astro[rth,cap_stem],0); top y1=h; bot y2=0; lft x1l=lft x2l=Appr; filldraw stroke z1e..z2e; % % curve % penpos3(a,90); penpos4(a,90); penpos5(hround astro[rth,cap_curve],0); penpos6(vround astro[rth,vair],-90); penpos7(vround astro[rth,vair],-90); y3r=y4r=y1r; y5=0.5[y4,y6]; y6r=y7r=vround astro[0.275h,0.5h-astro[rth,vair]]; x3=x7=x1; x5r=w-appr; x4=x6=0.4[x3,x5]; penstroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % % arm or beak % pos9(b,90); pos10(b,90); y9l=y10l=y2; x9=x2r; if serifs: x10=0.5w; arm10(beak,beak_jut,b,1/3,up,w-appr); else: rt x10=w-appr; fi filldraw stroke z9e..z10e; % % serifs % if serifs: serif(1,2,bracket,cap_jut,b,true,0,0.5cap_jut,b,true,0); serif(2,1,bracket,cap_jut,b,true,0,0.5cap_jut,b,true,0); fi % penlabels(1,2,3,4,5,6,7,8,9,10,11); endchar; % okay beginchar(astro_varearth,9u#+2appr#,cap_height#,0); "Variant Earth"; italcorr x_height#*slant-.5u#; numeric a; a=astro[rth,0.9[vair,0.85stem]]; ensure_centering_of(a); % circle penpos1(vround astro[rth,vair],90); penpos2(hround astro[rth,curve],180); penpos3(vround astro[rth,vair'],-90); penpos4(hround astro[rth,curve],0); y1r=vround astro[0.70cap_height,x_height]+oo; y3r=-oo; y2=y4=0.5[y1,y3]; x2r=appr; x4r=w-appr; x1=x3=0.5[x2,x4]; y2l:=y4l:=astro[y2,0.52[y3,y1]]; penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3) & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle; % head tmp_path:=pulled_arc.r(1,2) & pulled_arc.r(2,3) & pulled_arc.r(3,4) & pulled_arc.r(4,1) & cycle; pickup crisp.nib; top y5=h+o; top y6r=top y7r=vround(0.5[h+o,y1r+o]+0.5a);% a little higher pos5(hround a,0); pos6(vround a,90); pos7(vround a,90); x5=x1; x5l-x6=x7-x5r=hround 0.5(x1-x2l); save t; forsuffixes $=,r,l: t$=xpart(tmp_path intersectiontimes (z5$..(x5$,y2))); endfor filldraw subpath (t.r,8) of tmp_path & subpath (0,t.l) of tmp_path --z5l--z5r--cycle; filldraw stroke z6e..z7e; penlabels(1,2,3,4,5,6,7); endchar; % The next symbol is intended to figure ``cemetery'' % in the theory of Markov processes. % Usualy, this concept is represented by a partial derivative % symbol or a Greek lowercase delta. It seems that % no specific symbol has been designed before. use_rule1; beginchar(cemetery,10u#+2appr#,cap_height#,0); "Cemetery symbol"; pickup rule.nib; ensure_centering_of(rth); x1=x2=0.5w; lft x5=appr; rt x8=w-appr; bot y5=bot y8=0; y1=h; x3=w-x4=appr+hround 1.5u; y2=good.y 0.2[y5,y1]; y3=y4=good.y 2/3[top y2,y1]; z6=0.5[z5,z2]; z7=0.5[z8,z2]; tmp_path:=z5{right}...z6{0.5(x2-x6),y2-y6}...z2{right} ...z7{0.5(x7-x2),y7-y2}...z8{right}; draw tmp_path; penpos1(rth,0); penpos2(rth,0); penpos3(rth,90); penpos4(rth,90); penstroke z1e..z2e; penstroke z3e..z4e; numeric a,b,c,number_of_slashes; a=max(h,w); pickup crisp.nib; x5'=good.x appr; x8'=good.x w-appr; y5=y5'; y8=y8'; pos5(rth,90); pos5'(rth,90); pos8(rth,90); pos8'(rth,90); filldraw stroke z5e..z5'e; filldraw stroke z8e..z8'e; pickup fine.nib; number_of_slashes=6; c=hround((x8-x5)/(number_of_slashes+1)); number_of_slashes:=round((x8-x5)/max(c,1))-1; for i=1 upto number_of_slashes: bot y[i+8]l=0; x[i+8]l=x5+i*c; z[i+8]r=tmp_path intersectionpoint (z[i+8]l..z[i+8]l+(a,a)); draw z[i+8]l..z[i+8]r; penlabels([i+8]); endfor; penlabels(1,2,3,4,5,8,5',8'); labels(6,7); endchar; use_rule4; beginchar(astro_aries,13u#+2appr#,cap_height#,0); "Aries"; italcorr 0.7x_height#*slant-.5u#; numeric a,b; a=10; b=hround 1.2rth; ensure_centering_of(b); pickup tiny.nib; pos1(max(0.75b,tiny+eps),0); pos2(b,0); pos3(b,0); pos3a(rth,0); pos4a(rth,90); pos5a(rth,180); pos6a(rth,270-a); pos3b(rth,0); pos4b(rth,-90); pos5b(rth,-180); pos6b(rth,-270+a); bot y1=-d-o; y2-y1=o; y3=y3a=y3b=y6a.r; top y4a.r=top y4b.l=h+o; y5a=y5b=0.6[y6a,y4a]; bot y6a.r=bot y6b.l=vround 0.5h; x1=x2=x3=0.5w; x3a.l=x3l; x3b.r=x3r; x4a=0.6[x3a,x5a]; x4b=0.6[x3b,x5b]; lft x5a.r=appr; rt x5b.l=w-appr; x6a.r=good.x 0.5[x5a.r,x3a.l]; x3a.l-x6a.r=x6b.l-x3b.r; filldraw stroke z1e--z2e--z3e; filldraw stroke z3a.e up_to_left z4a.e left_to_down z5a.e...z6a.e{dir -a}; filldraw stroke z3b.e up_to_right z4b.e right_to_down z5b.e...z6b.e{dir(180+a)}; penlabels(1,2,3,3a,4a,5a,6a,3b,4b,5b,6b); endchar; % okay beginchar(astro_taurus,9u#+2appr#,cap_height#,0); "Taurus"; italcorr x_height#*slant-.5u#; % circle penpos1(vround astro[rth,vair],90); penpos2(hround astro[rth,curve],180); penpos3(vround astro[rth,vair'],-90); penpos4(hround astro[rth,curve],0); y1r=vround astro[0.70cap_height,x_height]+oo; y3r=-oo; y2=y4=0.5[y1,y3]; x2r=appr; x4r=w-appr; x1=x3=0.5[x2,x4]; y2l:=y4l:=astro[y2,0.52[y3,y1]]; penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3) & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle; % head pickup crisp.nib; pos5(hround astro[rth,hair],180); pos6(vround astro[rth,0.9[vair,0.85stem]],-90); penpos7(hround astro[rth,hair],0); top y5=top y7=h+o; bot y6r=y1l; lft x5r=appr; rt x7r=w-appr; x6=x1; filldraw stroke z5e down_to_right z6e right_to_up z7e; penlabels(1,2,3,4,5,6,7); endchar; beginchar(astro_gemini,11u#+2appr#,cap_height#,0); "Gemini"; italcorr asc_height#*slant-.5u#; pickup crisp.nib; save bracket; bracket=0.5hround astro[0,1.8u]; numeric a,b,c; a=hround astro[rth,cap_stem]; b:=vround astro[rth1,slab]; c=hround 0.25(w-2appr-2a); % stems pos1(a,0); pos2(a,0); pos3(a,0); pos4(a,0); top y1=top y3=h; bot y2=bot y4=0; lft x1l=lft x2l=appr+c; rt x3r=rt x4r=w-appr-c; filldraw stroke z1e..z2e; filldraw stroke z3e..z4e; % bars pos5(b,90); pos6(b,90); pos7(b,90); pos8(b,90); lft x5r=lft x7l=appr; rt x6r=rt x8l=w-appr; y5r=y6r=y1; y7l=y8l=y2; filldraw stroke z5e..z6e; filldraw stroke z7e..z8e; % serifs if serifs: serif(1,2,bracket,c,b,true,dish,0.5c,b,true,0); serif(2,1,bracket,c,b,true,dish,0.5c,b,true,0); serif(3,4,bracket,0.5c,b,true,0,c,b,true,dish); serif(4,3,bracket,0.5c,b,true,0,c,b,true,dish); fi penlabels(1,2,3,4,5,6,7,8); endchar; beginchar(astro_cancer,13u#+2appr#,cap_height#,0); "Cancer"; italcorr 0.7x_height#*slant-.5u#; labels(1,2,3,4); endchar; beginchar(astro_leo,13u#+2appr#,cap_height#,0); "Leo"; italcorr 0.7x_height#*slant-.5u#; labels(1,2,3,4); endchar; beginchar(astro_virgo,13u#+2appr#,cap_height#,0); "Virgo"; italcorr 0.7x_height#*slant-.5u#; labels(1,2,3,4); endchar; beginchar(astro_libra,13u#+2appr#,cap_height#,0); "Libra"; italcorr 0.7x_height#*slant-.5u#; labels(1,2,3,4); endchar; beginchar(astro_scorpio,13u#+2appr#,cap_height#,0); "Scorpio"; italcorr 0.7x_height#*slant-.5u#; labels(1,2,3,4); endchar; beginchar(astro_sagittarius,13u#+2appr#,cap_height#,0); "Sagittarius"; italcorr 0.7x_height#*slant-.5u#; labels(1,2,3,4); endchar; beginchar(astro_capricorn,13u#+2appr#,cap_height#,0); "Capricorn"; italcorr 0.7x_height#*slant-.5u#; labels(1,2,3,4); endchar; beginchar(astro_aquarius,13u#+2appr#,cap_height#,0); "Aquarius"; italcorr 0.7x_height#*slant-.5u#; labels(1,2,3,4); endchar; beginchar(astro_pisces,13u#+2appr#,cap_height#,0); "Pisces"; italcorr 0.7x_height#*slant-.5u#; labels(1,2,3,4); endchar;