summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/metafont/roex/roexsamp/ro-06.mf
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/metafont/roex/roexsamp/ro-06.mf')
-rw-r--r--Master/texmf-dist/source/metafont/roex/roexsamp/ro-06.mf150
1 files changed, 150 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/metafont/roex/roexsamp/ro-06.mf b/Master/texmf-dist/source/metafont/roex/roexsamp/ro-06.mf
new file mode 100644
index 00000000000..7007cd233b2
--- /dev/null
+++ b/Master/texmf-dist/source/metafont/roex/roexsamp/ro-06.mf
@@ -0,0 +1,150 @@
+%%%%
+%%%% This file belongs to the ROEX package.
+%%%%
+%%% draw write_preamble write_postamble find_BB set_BB fill_C draw_C
+%%% draw fix_fill_cmyk fix_draw_cmyk
+%%% draw fix_line_join fix_line_cap fix_line_width
+% RO-06.MF, ``EL PALO ALTO TREE'':
+% A tough example (see remarks below) excerpted from The \MF{}book, pages
+% 124 thru 126.
+%% % an innocent formatting trick: the underscore character ending a name
+%% % will be typeset as an superscript asterisk
+%% \let\oriunderscore\_
+%% \newif\ifbgroupopen \bgroupopenfalse
+%% \def\altdblbackslash#1{\bgroup\bgroupopentrue\it#1}
+%% \def\optegroup{\ifbgroupopen\egroup\fi}
+%% \def\underscoreasasterisk#1{%
+%% \ifx#1\relax\optegroup^*\else\oriunderscore#1\fi}
+%% \def\\#1{%
+%% \let\_\underscoreasasterisk
+%% \altdblbackslash{#1\relax}\optegroup
+%% \let\_\oriunderscore}
+% ---
+input mftoeps; eps_mode_setup; input roex; tracingremoving:=1;
+% ---
+% REMARKS:
+% 1. There arise very close points during the intersecting process,
+% hence |epsil.dist| is adjusted (see also point 2).
+% 2. Note that:
+% a) |turningnumber(branch1)=1| but |turningnumber(reverse branch1)=0|
+% (sic!);
+% b) for the second resulting path, |R2| (the tree), |turningnumber(R2)=1|
+% while |check_turn(R2)=-1|, which is the desired value as the tree
+% is unfilled (oh, these tiny loops!);
+% c) the minimal resulting interval, i.e., the time distance
+% between two neighbouring points of intersection is dangerously
+% small, namely, |0.00032|; usually the value smaller than the bound,
+% by default equal to |0.01|, portends a collaps of the algorithm,
+% fortunately not in this case (set |tracingremoving:=2| for more
+% information on intervals and secants).
+epsil.dist:=1/50pt;
+% show_turningnumbers_and_turn_checks:=1;
+% mark_trunk_close_points:=1;
+% ---
+beginchar ("0",1/2in#,5/4in#,0);
+ path branch[\\], oval;
+%
+% prepare data:
+ branch0 = % i.e., trunk
+ (0,660)---(-12,70)..{curl 5}(-28,-8)
+ & flex((-28,-8),(-16,-4),(-10,-11))
+ & flex((-10,-11),(0,-5),(14,-10))
+ & flex((14,-10),(20,-6),(29,-11))
+ & (29,-11){curl 4}..(10,100)---cycle;
+ branch1= flex((0,660),(-9,633),(-22,610))
+ & flex((-22,610),(-3,622),(17,617))
+ & flex((17,617),(7,637),(0,660)) & cycle;
+ branch2=flex((30,570),(10,590),(-1,616))
+ & flex((-1,616),(-11,592),(-29,576),(-32,562))
+ & flex((-32,562),(-10,577),(30,570)) & cycle;
+ branch3=flex((-1,570),(-17,550),(-40,535))
+ & flex((-40,535),(-45,510),(-60,477))
+ & flex((-60,477),(-20,510),(40,512))
+ & flex((40,512),(31,532),(8,550),(-1,570)) & cycle;
+ branch4=flex((0,509),(-14,492),(-32,481))
+ & flex((-32,481),(-42,455),(-62,430))
+ & flex((-62,430),(-20,450),(42,448))
+ & flex((42,448),(38,465),(4,493),(0,509)) & cycle;
+ branch5=flex((-22,470),(-23,435),(-44,410))
+ & flex((-44,410),(-10,421),(35,420))
+ & flex((35,420),(15,455),(-22,470)) & cycle;
+ branch6=flex((18,375),(9,396),(5,420))
+ & flex((5,420),(-5,410),(-50,375),(-50,350))
+ & flex((-50,350),(-25,375),(18,375)) & cycle;
+ branch7=flex((0,400),(-13,373),(-30,350))
+ & flex((-30,350),(0,358),(30,350))
+ & flex((30,350),(13,373),(0,400)) & cycle;
+ branch8=flex((50,275),(45,310),(3,360))
+ & flex((3,360),(-20,330),(-70,300),(-100,266))
+ & flex((-100,266),(-75,278),(-60,266))
+ & flex((-60,266),(0,310),(50,275)) & cycle;
+ branch9=flex((10,333),(-15,290),(-43,256))
+ & flex((-43,256),(8,262),(58,245))
+ & flex((58,245),(34,275),(10,333)) & cycle;
+ branch10=flex((8,262),(-21,249),(-55,240))
+ & flex((-55,240),(-51,232),(-53,220))
+ & flex((-53,220),(-28,229),(27,235))
+ & flex((27,235),(16,246),(8,262)) & cycle;
+ branch11=flex((0,250),(-25,220),(-70,195))
+ & flex((-70,195),(-78,180),(-90,170))
+ & flex((-90,170),(-5,188),(74,183))
+ & flex((74,183),(34,214),(0,250)) & cycle;
+ branch12=flex((8,215),(-35,175),(-72,155))
+ & flex((-72,155),(-75,130),(-92,110),(-95,88))
+ & flex((-95,88),(-65,117),(-54,104))
+ & flex((-54,104),(10,151),(35,142))
+ ..flex((42,130),(60,123),(76,124))
+ & flex((76,124),(62,146),(26,180),(8,215)) & cycle;
+%
+ for i:=0 upto 12:
+ branch[i]:=neg_turn branch[i] shifted (150,50) scaled (w/300);
+ endfor
+ oval=superellipse((w,1/2h),(1/2w,h),(0,1/2h),(1/2w,0),4/5);
+%
+% remove overlaps and (optionally) show |turningnumber|s and |turn_check|s:
+ remove_overlap (make_list(0,12)branch,oval)() R;
+ if known show_turningnumbers_and_turn_checks:
+ begingroup
+ interim autorounding:=0;
+ show (turningnumber(branch1), turningnumber(reverse branch1));
+ for i:=1 upto R.num: show i,(turningnumber R[i],check_turn R[i]); endfor;
+ endgroup;
+ fi
+%
+% begin export to EPS:
+ find_BB oval;
+ write_preamble jobname;
+ fix_line_join 1; fix_line_cap 1;
+ fix_line_width 1/50pt;
+% paint the picture:
+ fix_fill_cmyk 0,0,0,1/6;
+ fill_C make_list(1,R.num)R;
+ for i:=1 upto R.num:
+ if proofing=0:
+ fix_draw_cmyk if check_turn(R[i])>0: 0,1,1,0 else: 1,1,0,0 fi;
+ draw_C R[i];
+ else:
+ for j:=0 upto length(R[i])-1:
+ makelabel(decimal(j) & "/" & decimal(i),point j of R[i]);
+ endfor
+ fi
+ endfor
+%
+% mark (optionally) dangerously close points:
+ if known mark_trunk_close_points:
+ fix_fill_cmyk 0,0,0,1; fix_draw_cmyk 0,0,0,1;
+ for j:=13,14,17,18:
+ z[j]=point TIME_1tim[j] of PATH_1;
+ fill_C fullcircle scaled 1/50pt shifted z[j];
+ endfor
+ z.a=(1pt,0); z.b=(1/20pt,0); z.c=(1/5pt,1/10pt); z.d=(1/5pt,-1/10pt);
+ for zz:=1/2[z13,z14],1/2[z17,z18]:
+ draw_C (zz-z.a)--(zz-z.b), (zz-z.c)--(zz-z.b)--(zz-z.d);
+ endfor
+ fi
+% end export to EPS:
+ write_postamble;
+endchar;
+end.
+%%\end
+