TikZ 中的迭代嵌套绘制

TikZ 中的迭代嵌套绘制

我想绘制一个迭代彩色正方形,这样正方形就会被分成四个子正方形,右上角的子正方形被着色,其余三个子正方形重复此过程。我想使用 TikZ 来实现这一点,但我不想“手工”绘制所有内容。

我已经发现了和关于nested picsl-systems但我无法将它们转化为正确的代码,特别是因为我不了解的理论l-systems

我确信我可以用一些嵌套的和来做到这一点foreach,并且 nested pics总是缩放以适应,但如果有另一种更简单的方法,我会很高兴 - 四到五次迭代就好了。

以下是第一次迭代的示例:

在此处输入图片描述

答案1

你可以用 l 系统来做这件事,但经典的宏也可以。这是其中一种方法。

\documentclass[tikz,border=7pt]{standalone}
% #1 is a countdown parameter
\newcommand{\fillsquare}[1]{
  % last step is 1, after that do nothing
  \ifnum #1 > 0\relax
    % fill and draw
    \fill[orange] (0,0) rectangle (1,1);
    \draw  (-1,-1) grid (1,1);
    % recursive call to \fillsquare after scale and translate
    \begin{scope}[scale=.5]
      \foreach \p in {(-1,1),(-1,-1),(1,-1)}{
        \begin{scope}[shift={(\p)}]
          \fillsquare{\numexpr #1-1}
        \end{scope}
      }
    \end{scope}
  \fi
}
\begin{document}
  \begin{tikzpicture}
    \fillsquare{4}
  \end{tikzpicture}
\end{document}

在此处输入图片描述

我的系统最高可以达到 7 个级别。

  \begin{tikzpicture}[line width=0.05pt]
    \fillsquare{7}
  \end{tikzpicture}

在此处输入图片描述

答案2

我可以建议通过添加另一个参数让用户选择原始正方形的长度吗?

请不要接受我的答案,因为这只是 Kpym 上面做得非常好的一个小升级。
他值得所有的爱^^。

\documentclass[tikz,border=7pt]{standalone}
% #1 is a countdown parameter
\newcommand{\fillsquare}[2]{
  % last step is 1, after that do nothing
  \ifnum #1 > 0\relax
    % fill and draw
    \fill[orange] (0,0) rectangle (#2,#2);
    \draw  (-#2,-#2) grid[step=#2] (#2,#2);
    % recursive call to \fillsquare after scale and translate
    \begin{scope}[scale=.5]
      \foreach \p in {(-#2,#2),(-#2,-#2),(#2,-#2)}{
        \begin{scope}[shift={(\p)}]
          \fillsquare{\numexpr #1-1}{#2}
        \end{scope}
      }
    \end{scope}
  \fi
}
\begin{document}
  \begin{tikzpicture}[line width=0.05pt]
    % First parameter is the number of steps
    % Second parameter is the length of the initial square
    \fillsquare{6}{4} 
  \end{tikzpicture}
\end{document}

相关内容