将每幅图画(线条、路径等)指定为矢量的元素,以便可以循环调用、使用和编辑

将每幅图画(线条、路径等)指定为矢量的元素,以便可以循环调用、使用和编辑

我想知道如何将绘图元素设置为变量(向量/数组的元素),以便可以调用和修改它(在每个循环中)。例如,我有一条线(\draw (start) -- (end))并想将其指定为第一个序列 L(1),第二个序列将是 L(2) = 长度为 L(1) 0.5 的线,对于 L(n) 也是如此。

在下面的代码中,变量L是线的长度,N是迭代次数。

这是通过算法创建图像

代码:

\documentclass[border=10pt,tikz]{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage{graphicx}
\usepackage{ifthen}
\usepackage{verbatim}
\usetikzlibrary{calc}
\begin{document}
\begin{center}
\begin{tikzpicture}
\def\N{2};
\def\L{10};
\draw [line width = 1.5pt,magenta] (0,0) -- ({\L},0);
foreach \i in {1,...,\N}{
\draw [line width = 1.5pt,magenta] (0,0) -- ({\L},0);
}
\end{tikzpicture}
\end{center}
\end{document}

答案1

我不太确定我是否理解了这个问题。

\documentclass[tikz,border=10pt,multi]{standalone}
\begin{document}
\begin{tikzpicture}
  \def\N{5};
  \def\L{10};
  \foreach \i [evaluate=\i as \j using 100*(\N-\i)/(\N-1)] in {1,...,\N}{
    \draw [line width = 1.5pt, magenta!\j!blue] (0,0) -- ({\L/(2^(\i-1))},0);
  }
\end{tikzpicture}
\end{document}

将绘制一条长度为 10 的线,然后是长度为 5 的线,然后是长度为 2.5 的线,然后是长度为 1.25 的线,然后是长度为 0.625 的线。我还逐步更改了颜色,因为您的代码显然将它们一个接一个地绘制,所以它们看起来就像一条长度为 10 的线。

增量线

您还可以创建pics 来存储可能有用的代码。例如

\begin{tikzpicture}
  \def\N{5};
  \def\L{10};
  \tikzset{%
    L/.pic={%
      \pgfmathsetmacro\j{100*(\N-#1)/(\N-1)}
      \draw [line width = 1.5pt, magenta!\j!blue, pic actions] (0,0) -- ({\L/(2^(#1-1))},0);
    }
  }
  \foreach \i in {1,...,\N}
  {%
    \pic [rotate={\i*360/\N}] at (0,0) {L=\i};
    \pic [rotate={(\N-\i+1)*360/\N}] at ({\N-\i},\i) {L=\i};
  }
\end{tikzpicture}

生产

10 <code>图片</code>

各种元素并未存储。而是存储了创建元素的指令,然后在调用时和调用时使用给定的变量执行这些指令。(0,0)存储指令中的 被理解为 所在的点pic。因此pic at (3,2)将绘制为原点为 的小图片(3,2)pic如果您要绘制的元素更复杂,则 s 可能最有用。如果它们只是线条,就像这里一样,它们就太过分了。

你看过lindenmayersystemsTikZ 库吗?根据我目前在评论中的讨论,这个库似乎非常适合你想要做的事情。

下面是一个与手册中的示例略有不同的例子:

\documentclass[tikz,border=10pt,multi]{standalone}
\usetikzlibrary{lindenmayersystems}
\begin{document}
\begin{tikzpicture}% based on example from manual 647
  [l-system={step=1.75pt, order=5, angle=80}]
  \pgfdeclarelindenmayersystem{my algorithm}{
    \symbol{X}{\pgflsystemdrawforward}
    \symbol{Y}{\pgflsystemdrawforward}
    \rule{X -> Y-X+Y}
    \rule{Y -> X+Y-X}
  }
  \draw [magenta] (0,0) l-system
  [l-system={my algorithm, axiom=+++X, anchor=south west}];
  \draw [blue] (3,2) l-system
  [l-system={my algorithm, axiom=X, anchor=north east}];
  \draw [blue!50!magenta] (0,0) l-system
  [l-system={my algorithm, axiom=+Y, anchor=south east}];
  \draw [blue!25!magenta] (1,3) l-system
  [l-system={my algorithm, axiom=--Y, anchor=north east}];
  \draw [blue!75!magenta] (2,0) l-system
  [l-system={my algorithm, axiom=--X, anchor=north east}];
\end{tikzpicture}
\end{document}

自定义算法

可以看出,该库支持编写新规则集以及通过将这些规则应用于公理来创建路径。除了一组默认符号外,还可以定义自定义符号以其他方式绘制/移动和/或控制路径“增长”的方式。

相关内容