Tikz 分形 - 谢尔宾斯基六边形

Tikz 分形 - 谢尔宾斯基六边形

又一次尝试分形构造。这次我尝试绘制谢尔宾斯基六边形:

enter image description here

我认为使用 l-system 应该很容易做到这一点。我想我的问题比如何绘制这个要广泛一些。

如何定义 l 系统以使用六边形而不是正方形或三角形?

答案1

我只是改编了杰克的谢尔宾斯基三角:如何在 LaTeX 中创建谢尔宾斯基三角形?

输出

enter image description here

代码

\documentclass{standalone}
\usepackage{tikz}

\usetikzlibrary{lindenmayersystems}

\begin{document}%
\def\hexagwidth{2cm}%
\pgfdeclarelindenmayersystem{Sierpinski hexagon}{
  \symbol{X}{\pgflsystemdrawforward}
    \symbol{Y}{\pgflsystemmoveforward\pgflsystemmoveforward\pgflsystemmoveforward}
    \rule{X -> X+X+X+X+X+X+Y}
    \rule{Y -> YYY}
}%
\foreach \level in {1,...,4}{%
\tikzset{
    l-system={step=\hexagwidth/3^\level, order=\level, angle=60}
}%
\begin{tikzpicture}
  \fill (0,0) l-system [l-system={Sierpinski hexagon, axiom=X}] ;
\end{tikzpicture}
}%
\end{document}

答案2

只是为了好玩,我利用 MetaPost 重现了这个分形图形,这要归功于递归宏。

vardef Sierpinski(expr A, B, n) =
    save P; pair P[]; P0 = A; P1 = B;
    for i = 1 upto 5:
        P[i+1] = P[i-1] rotatedaround (P[i], 120);
    endfor;
    if n = 0: fill P0 for i = 1 upto 5: -- P[i] endfor -- cycle;
    else:
    for i = 0 step 2 until 4:
        Sierpinski(P[i], 1/3[P[i],P[i+1]], n-1);
        Sierpinski(2/3[P[i],P[i+1]], P[i+1], n-1);
    endfor; fi
enddef;

beginfig(1);
    for n = 0 upto 4:
        draw image(Sierpinski(origin, (2cm, 0), n)) shifted (n*4.5cm, 0);
    endfor;
endfig;

end.

enter image description here

相关内容