% von Koch, Version -1. Anthony Phan, janvier 1998.
% von Koch, Version 0.0. Anthony Phan, octobre 1999.
%
% Ce fichier \TeX est un exercice sur la manipulation
% des bo\^\i tes et l'usage de la recursivit\'e de \TeX.
% Avertissement. --- \c Ca mange pas mal de m\'emoire.
%
\newcount\recursionlevel
\newcount\recursionlimit
\recursionlimit=5
\newdimen\xbase
\newdimen\ybase
\newdimen\xvect
\newdimen\yvect
\newdimen\xtemp
\newdimen\ytemp
%
% $26/15$ est une approximation de $\sqrt 3$
%
\def\rotate{\xtemp=\yvect
        \multiply\xtemp by -26
        \divide\xtemp by 15
        \advance\xtemp by \xvect
        \divide\xtemp by 2
        \ytemp=\xvect
        \multiply\ytemp by 26
        \divide\ytemp by 15
        \advance\ytemp by \yvect
        \divide\ytemp by 2
        \xvect=\xtemp
        \yvect=\ytemp}
%
\def\snowflake{{\advance\recursionlevel by 1
	\divide\xvect by 3
        \divide\yvect by 3
        \ifnum\recursionlevel<\recursionlimit{\snowflake}\fi
        \advance\xbase by \xvect
        \advance\ybase by \yvect
        \hskip\xbase\raise\ybase\copy0\hskip-\xbase
        \rotate
        \ifnum\recursionlevel<\recursionlimit{\snowflake}\fi
        \advance\xbase by \xvect
        \advance\ybase by \yvect
        \hskip\xbase\raise\ybase\copy0\hskip-\xbase
        \rotate\rotate\rotate\rotate
        \ifnum\recursionlevel<\recursionlimit{\snowflake}\fi
        \advance\xbase by \xvect
        \advance\ybase by \yvect
        \hskip\xbase\raise\ybase\copy0\hskip-\xbase
        \rotate
        \ifnum\recursionlevel<\recursionlimit{\snowflake}\fi
        \advance\xbase by \xvect
        \advance\ybase by \yvect
        \hskip\xbase\raise\ybase\copy0\hskip-\xbase}}
%
\def\vonKoch(#1,#2)(#3,#4){%
        \xbase=#1\ybase=#2
        \xvect=#3\yvect=#4
        \setbox0=\hbox to0pt{\hss.\hss}% dot for drawings
        \recursionlevel=0{\snowflake}}
%
% $173/200$ est une bonne approximation de $\sqrt 3/2$.
%
% Le premier param\`etre est la largeur, le second,
% la profondeur de r\'ecursion.
%
\def\vonKochbox#1#2{{\dimen0=#1\dimen1=#1%
	\divide\dimen1 by 2
	\divide\dimen0 by 200
	\multiply\dimen0 by 173
	\recursionlimit=#2
	\hbox to #1{\vonKoch(0pt,0pt)(#1,0pt)%
	\vonKoch(#1,0pt)(-\dimen1,-\dimen0)%
	\vonKoch(\dimen1,-\dimen0)(-\dimen1,\dimen0)\hfil}}}
%
% L'assemblage des trois parties du flocon
% n'est pas tr\`es plaisant, mais puisque \c ca marche...
% (Une difficult\'e provient du d\'eplacement du point
% courant. De sorte qu'\`a la fin, sa position n'est pas li\'ee
% \`a la largeur effective de la bo\^\i te. Il faut donc
% donner des mesures \`a celle-ci et s'assurer par un \hfil
% qu'on en sort par son extr\^emit\'e \`a la fin.)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% ESSAI :
%
\nopagenumbers

$$
\vcenter{\vonKochbox{30pt}{2}}
\qquad
\vcenter{\vonKochbox{60pt}{3}}
\qquad
\vcenter{\vonKochbox{120pt}{4}}
\qquad
\vcenter{\vonKochbox{60pt}{3}}
\qquad
\vcenter{\vonKochbox{30pt}{2}}
\qquad
$$

\bigbreak

\centerline{\rm Voici les premiers flocons\thinspace!}

$$
\vcenter{\vonKochbox{200pt}{5}}
$$
\bye









