再帰的フラクタル、非常にシンプル – L-システム

リンデンマイヤーシステム、通称L-システムは、「置換システム」です:ある(グラフィック)オブジェクトの部分が、最も単純な場合にはその縮小されたオブジェクト自体に置き換えられます。これが繰り返され、例えば再帰的に行われます。これにより、非常に複雑なフラクタル構造が生まれ、同時に非常にシンプルに定義されることがあります。

最も単純な例はコッホ曲線で、スノーフレーク曲線とも呼ばれます。知らない人は、Wikipediaのリンクをフォローしてください。:-) ここでは説明するつもりはありませんが、TikZを使って最も簡単に生成する方法を簡単に示します。

基本となるのは、線を引いたり角度を変えるなどの単純なグラフィック操作のためのシンボルです。これらのシンボルは文字列に指定され、この文字列の一部は「生産ルール」によって段階的に置換されます。文字列はどんどん長くなり、最後にこの図が描かれます。

TikZマニュアルでは、第55章でこれらのルールが説明されており、それはリンデンマイヤーシステム図書館を記述しています。これは、そのようなオブジェクトとルールを簡単に宣言するための構文を提供し、描画を行います。

動機づけとして、以前TeXample.netに書いたいくつかの例が含まれるドキュメントがあります。見るとわかるように、4つの例のそれぞれがシンプルに定義されています。私はさらに、TikZでさらに加工できることを示すために、派手な色やグラデーションを加えました。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{lindenmayersystems}
\usetikzlibrary[shadings]
\pgfdeclarelindenmayersystem{Koch curve}{
  \rule{F -> F-F++F-F}}
\pgfdeclarelindenmayersystem{Sierpinski triangle}{
  \rule{F -> G-F-G}
  \rule{G -> F+G+F}}
\pgfdeclarelindenmayersystem{Fractal plant}{
  \rule{X -> F-[[X]+X]+F[+FX]-X}
  \rule{F -> FF}}
\pgfdeclarelindenmayersystem{Hilbert curve}{
  \rule{L -> +RF-LFL-FR+}
  \rule{R -> -LF+RFR+FL-}}
  \begin{document}
\noindent\centering
\begin{tabular}{cc}
\begin{tikzpicture}[scale=0.6]
\shadedraw[shading=color wheel] 
[l-system={Koch curve, step=2pt, angle=60, axiom=F++F++F, order=4}]
lindenmayer system -- cycle;
\end{tikzpicture}
&
\begin{tikzpicture}[scale=0.6]
\shadedraw [top color=white, bottom color=blue!80, draw=blue!80!black]
[l-system={Sierpinski triangle, step=2pt, angle=60, axiom=F, order=8}]
lindenmayer system -- cycle;
\end{tikzpicture}
\\
\begin{tikzpicture}[scale=0.6]
    \shadedraw [bottom color=white, top color=red!80, draw=red!80!black]
    [l-system={Hilbert curve, axiom=L, order=5, step=8pt, angle=90}]
    lindenmayer system; 
\end{tikzpicture}
&
\begin{tikzpicture}[scale=0.6]
    \draw [green!50!black, rotate=90]
    [l-system={Fractal plant, axiom=X, order=6, step=2pt, angle=25}]
    lindenmayer system; 
\end{tikzpicture}
\end{tabular}
\end{document}

今では自分で木を作ったり、ピアノ曲線のような有名な曲線を再現したり、ドラゴンカーブを作ったり、あるいは自分で新しいものを発明したりすることができます — 実験を楽しんでください!

Leave a Reply

Your email address will not be published. Required fields are marked *