使用 '\foreach' 循环绘制 tikz 图形

使用 '\foreach' 循环绘制 tikz 图形

我使用坐标\usepackage{tikz}来绘制一些东西xyz。我有一堆坐标,(xyt)例如 (000) (001) (020)...(001)(011) 等,它们由以下方式创建:

\coordinate (ijk) at (i,k,j);

例如

\coordinate (001) at (0,1,0);

我想写一个循环来绘制类似的东西:

\draw (110)--(000)--(011)--(020);
\draw (111)--(001)--(012)--(021);
\draw (112)--(002)--(013)--(022);
etc.

本质上我想要做的是(用python语言):

for i in range(9):
    j=i+1
    \draw (11i) -- (00i) -- (01j) -- (02i);

我尝试过:

\foreach \time in {0,1,2,3,4,5,6,7,8,9}{
\draw (11\time) -- (00\time) -- (01{\time+1}) -- (02\time);
}

但是,Tikz 识别{\time+1}{1+1},{2+1},...而不是2,3,...,而(00\time)不会造成任何问题。

任何帮助都值得感激,谢谢!

答案1

foreach 循环的语法隐式地增加 1,因此没有必要列出从0到 的所有整数9,只需写入{0,...,9}

\foreach \x in {0,...,9}{  };

在循环中计算下一个整数\time+1,由于坐标从(000)到 ,(999)因此必须限制列表,列表必须从 到08因为否则我们会得到9+1=10,从而产生不存在的坐标(0110)

\foreach \time [evaluate=\time as \suivant using int(\time+1)]in {0,...,8}
    \draw (11\time) -- (00\time) -- (01\suivant) -- (02\time);

我不知道这是否是您想要实现的结果。我尝试通过粘贴您问题中的小段代码来理解。我希望这对您来说很方便,否则请说明您的问题。

截屏

\documentclass[tikz,border=5mm]{standalone}

\begin{document}

\begin{tikzpicture}[]
\foreach \x in {0,...,9}
    \foreach \y in {0,...,9}
        \foreach \z in {0,...,9}
            \coordinate (\x\y\z) at (\x,\y,\z);

\foreach \time [evaluate=\time as \suivant using int(\time+1)]in {0,...,8}
    \draw (11\time) -- (00\time) -- (01\suivant) -- (02\time);
\end{tikzpicture}

\end{document}

使用 www.DeepL.com/Translator 翻译

答案2

好的,找到了一个简单的解决方法;

事实证明我只需要使用

\foreach \time in {0,1,2,3,4,5,6,7,8,9}{
\draw (1,\time,1) -- (0,\time,0) -- (0,\time+1,1) -- (0,\time,2);
}

反而...

相关内容