Фрактал Tikz - Пыль Кантора

Фрактал Tikz - Пыль Кантора

Кто-нибудь может помочь мне нарисовать следующий фрактал в Tikz? введите описание изображения здесь

Здесь мы начинаем с единичного квадрата, разбиваем его на 16 равных квадратов и удаляем 12 из них, оставляя 4, расположенными так, как показано. Процесс повторяется для оставшихся квадратов и так далее.

Я почти уверен, что мне нужно использовать что-то похожее наВложенные фрактальные украшения тикзно я недостаточно хорош в TeX, чтобы скомпилировать код самостоятельно.

Заранее спасибо.

Мой код на данный момент:

 \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}

решение1

Это хорошее упражнение по системе Линденмайера.

\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}

решение2

Я только что открыл эту тему, которая была связана с другой, более недавней. Ее можно рассматривать как приложение рекурсивного программирования, для которогоМетаПостобычно хорошо подходит. Итак, вот решение MetaPost, для кого оно может быть интересно.

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.

введите описание изображения здесь

Связанный контент