ヒルベルト曲線
レンダリング結果



先頭3ページのみプレビューしています。
PDFを開くTeXソース
TeXソース
入力コード
\documentclass[dvipdfmx]{article}
\usepackage{tikz}
\pagestyle{empty}
\usepackage[dvipdfmx,active,tightpage]{preview}
\PreviewEnvironment{center}
\setlength\PreviewBorder{5mm}
\makeatletter
\newcount\@maxDepth
\newcount\@nest
\newcount\@@nest
\newcount\@nextdeg
\def\@prefix{Hilbert}
\def\@relax{\relax}
\def\A{-BF+AFA+FB-}
\def\B{+AF-BFB-FA+}
\def\build#1{%
\@maxDepth=#1
\advance\@maxDepth-1
%%% expand the L-system string ( -> \@lsystem )
\@nest=0
\@namedef{\@prefix0}{}%
\expandafter\@expandLsystem\A\relax
\edef\@lsystem{\@nameuse{\@prefix0}}%
%%% build the TikZ source ( -> \HilbertPoints )
\def\HilbertPoints{(0,0)}%
\expandafter\@buildPoints\@lsystem\relax
}
%%% expand the L-system string recursively up to \@maxDepth and set \@lsystem to the result
\def\@expandLsystem#1{%
\def\@target{#1}%
\ifx\@target\@relax
\let\@next\relax
\else
\ifnum0\if\@target A1\fi\if\@target B1\fi>0
\ifnum\@nest<\@maxDepth\relax
\advance\@nest1
\@namedef{\@prefix\the\@nest}{}%
\expandafter\expandafter\expandafter\@expandLsystem\csname\@target\endcsname\relax
\@@nest=\@nest
\advance\@nest-1
\expandafter\edef\csname\@prefix\the\@nest\endcsname{\csname\@prefix\the\@nest\endcsname\csname\@prefix\the\@@nest\endcsname}%
\fi
\else
\expandafter\edef\csname\@prefix\the\@nest\endcsname{\csname\@prefix\the\@nest\endcsname\@target}%
\fi
\let\@next\@expandLsystem
\fi
\@next
}
%%% translate L-system \@lsystem into TikZ source \HilbertPoints
\def\@buildPoints#1{%
\def\@target{#1}%
\ifx\@target\@relax
\let\@next\relax
\else
\if\@target+
\advance\@nextdeg90
\fi
\if\@target-
\advance\@nextdeg-90
\fi
\if\@target F
\edef\HilbertPoints{\HilbertPoints--++(\the\@nextdeg:1)}%
\fi
\let\@next\@buildPoints
\fi
\@next
}
\begin{document}
\newdimen\scale
\newcount\size
\foreach \i in {1,...,6}{%
\begin{center}
\build{\i}%
\scale=10cm
\size=1
\foreach \j in {1,...,\i}{%
\global\divide\scale2
\global\multiply\size2
}%
\begin{tikzpicture}[x=\scale,y=\scale]
\draw[thick](-0.5,0.5) rectangle (\size-0.5, -\size+0.5);
\draw[line width=2pt,color=red!60!white]\HilbertPoints;
\end{tikzpicture}%
\par\vspace{3mm}{\Huge $n=\i$}%
\newpage
\end{center}
}
\end{document}