
Tikz에서 다음 프랙탈을 그리는 데 도움을 줄 수 있는 사람이 있나요?
여기서는 단위 정사각형으로 시작하여 16개의 동일한 정사각형으로 나누고 그 중 12개를 제거하고 4개는 표시된 대로 배열합니다. 이 과정은 나머지 사각형에서도 반복됩니다.
나는 비슷한 것을 사용해야한다고 확신합니다.프랙탈 tikz 장식 중첩하지만 나는 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.