Tikz Fractal - Cantor Dust

Tikz Fractal - Cantor Dust

Kann mir jemand helfen, das folgende Fraktal in Tikz zu zeichnen? Bildbeschreibung hier eingeben

Hier beginnen wir mit dem Einheitsquadrat, teilen es in 16 gleich große Quadrate auf und entfernen 12 davon, so dass 4 in der angezeigten Anordnung übrig bleiben. Der Vorgang wird mit den verbleibenden Quadraten wiederholt und so weiter.

Ich bin ziemlich sicher, dass ich etwas Ähnliches verwenden muss wieVerschachtelte fraktale Tikz-Dekorationenaber ich bin in TeX nicht gut genug, um den Code selbst zu kompilieren.

Vielen Dank im Voraus.

Mein Code bisher:

 \newcommand{\dust}[1]{
     \foreach \i in {1,...,#1}{decorate\{}
     (0,0)--(1,1)
     \foreach \i in {1,...,#1}{\}};

      SOMETHING IN HERE (DON'T KNOW)
 }

 \begin{tikzpicture}
     \path (0,0) pic {dust=5};
 \end{tikzpicture}

Antwort1

Es ist eine schöne Übung nach dem Lindenmayer-System.

\documentclass[border=9,tikz]{standalone}
\usetikzlibrary{lindenmayersystems}
\begin{document}
\pgfdeclarelindenmayersystem{Cantor dust}{
    \symbol{S}{\pgfpathrectangle{\pgfpointorigin}{\pgfpoint{\pgflsystemcurrentstep}{\pgflsystemcurrentstep}}}
    \symbol{U}{\pgftransformyshift{\pgflsystemcurrentstep}}
    \symbol{R}{\pgftransformxshift{\pgflsystemcurrentstep}}
    \rule{S -> [UUSURRS][RSRRUS]}
    \rule{U -> UUUU}
    \rule{R -> RRRR}
}
\tikz;
\tikz\fill[lindenmayer system={Cantor dust,axiom=S,step=320pt,order=1}]lindenmayer system;
\tikz\fill[lindenmayer system={Cantor dust,axiom=S,step= 80pt,order=2}]lindenmayer system;
\tikz\fill[lindenmayer system={Cantor dust,axiom=S,step= 20pt,order=3}]lindenmayer system;
\tikz\fill[lindenmayer system={Cantor dust,axiom=S,step=  5pt,order=4}]lindenmayer system;
\end{document}

Antwort2

Ich habe dieses Thema gerade entdeckt, das mit einem anderen, aktuelleren Thema verwandt war. Es kann als Anwendung der rekursiven Programmierung betrachtet werden, für dieMetaPostist in der Regel gut geeignet. Hier also eine MetaPost-Lösung, für wen es interessant sein könnte.

def cantor_dust(expr x, y, d, n) = 
    if n > 0:
        cantor_dust(x+.25d, y, .25d, n-1);
        cantor_dust(x+.75d, y+.25d, .25d, n-1);
        cantor_dust(x+.5d, y+.75d, .25d, n-1);
        cantor_dust(x, y+.5d, .25d,  n-1);
    else: fill (x, y) -- (x+d, y) -- (x+d, y+d) -- (x, y+d) -- cycle; fi
enddef;
beginfig(1);
    for i = 0 upto 4:
        draw image(cantor_dust(0, 0, 4cm, i)) shifted (4.25cm*i, 0);
    endfor;
endfig;
end.

Bildbeschreibung hier eingeben

verwandte Informationen