TikZ-PGF – How to Create a Sierpinski Triangle in LaTeX

pstrickstikz-pgf

I have been trying to recreate the following image in LaTeX

http://i.imgur.com/Ht9Gaow.jpg

and for me personally it has to be done with pdflatex. Although answers using pst-fractals
From Jake I got a good start which led to the following code

\documentclass{standalone}
\usepackage{tikz}
\def\level{5}
\usetikzlibrary{lindenmayersystems}

\begin{document}
\begin{tikzpicture}[l-system={step=5pt, order=\level, angle=120},rotate=180]
    \pgfdeclarelindenmayersystem{Sierpinski triangle}{
    \symbol{X}{\pgflsystemdrawforward}
    \symbol{Y}{\pgflsystemdrawforward}
    \rule{X -> X-Y+X+Y-X}
    \rule{Y -> YY}
    }
    \draw [black] (3,2) l-system
    [l-system={Sierpinski triangle, axiom=X, anchor=north east},fill=white];
\end{tikzpicture}

\end{document}

There are however two problems with the code.

  • I layer a black triangle behind the lindenmayersystem?

  • How do I keep the size of the triangle consistent with different number of recursion levels.

Best Answer

The width of the background triangles is 2^order*stepsize, so you can calculate the step size as a function of the desired overall width:

\documentclass[border=5mm]{standalone}
\usepackage{tikz}

\usetikzlibrary{lindenmayersystems}

\begin{document}%
\def\trianglewidth{2cm}%
\pgfdeclarelindenmayersystem{Sierpinski triangle}{
    \symbol{X}{\pgflsystemdrawforward}
    \symbol{Y}{\pgflsystemdrawforward}
    \rule{X -> X-Y+X+Y-X}
    \rule{Y -> YY}
}%
\foreach \level in {0,...,3}{%
\tikzset{
    l-system={step=\trianglewidth/(2^\level), order=\level, angle=-120}
}%
\begin{tikzpicture}
    \fill [black] (0,0) -- ++(0:\trianglewidth) -- ++(120:\trianglewidth) -- cycle;
    \draw [draw=none] (0,0) l-system
    [l-system={Sierpinski triangle, axiom=X},fill=white];
\end{tikzpicture}
}%
\end{document}