その他一覧へ戻る

コッホ雪片

鉄TeX機能紹介/TikZサンプル/コッホ雪片.tex鉄TeX機能紹介 / TikZhybrid

レンダリング結果

7ページ / 同名PDFあり
コッホ雪片 preview
コッホ雪片 preview
コッホ雪片 preview

先頭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{Koch}
\def\@relax{\relax}
\def\F{F-F++F-F}

\def\build#1{%
  \@maxDepth=#1
  \advance\@maxDepth-1
  %%% expand the L-system string ( -> \@lsystem )
  \@nest=0
  \@namedef{\@prefix0}{}%
  \@expandLsystem F++F++F\relax
  \edef\@lsystem{\@nameuse{\@prefix0}}%
  %%% build the TikZ source ( -> \Points )
  \def\Points{(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
    \if\@target F
       \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}%
       \else
         \expandafter\edef\csname\@prefix\the\@nest\endcsname{\csname\@prefix\the\@nest\endcsname F}%
       \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 \Points
\def\@buildPoints#1{%
  \def\@target{#1}%
  \ifx\@target\@relax
    \let\@next\relax
  \else
    \if\@target+
      \advance\@nextdeg60
    \fi
    \if\@target-
      \advance\@nextdeg-60
    \fi
    \if\@target F
      \edef\Points{\Points--++(\the\@nextdeg:1)}%
    \fi
    \let\@next\@buildPoints
  \fi
  \@next
}

\begin{document}

\newdimen\scale
\newcount\size
\foreach \i in {1,...,7}{%
  \begin{center}
    \build{\i}%
    \scale=20cm
    \size=1
    \foreach \j in {1,...,\i}{%
      \global\divide\scale3
      \global\multiply\size3
    }%
    \begin{tikzpicture}[x=\scale,y=\scale,thick]
      \fill[color=red!60!white]\Points;
    \end{tikzpicture}%
    \par\vspace{3mm}{\Huge$n=\i$}%
    \newpage
  \end{center}
}

\end{document}