tikz:帮助完成这个 foreach 循环

tikz:帮助完成这个 foreach 循环

我的代码出现错误,有人能帮我吗?我试图创建两个同心圆,但似乎不起作用。

\def\n{10}
\defn\radio{3.00cm}
\begin{tikzpicture}
\foreach \x in {1,...,\n}
    {
    \coordinate (cn\x) at ({(1+2*\x)*180/\n-90}:\radio);
    \node (n\x) at (cn\x) {$n_\x$};
    \coordinate (cm\x) at ({(1+2*\x)*180/\n-45}:(\radio+1));
    \node (m\x) at (cm\x) {$m_\x$};
    }
\end{tickzpicture}

答案1

注意拼写错误,你写了\end{tickzpicture}。此外,你可以指定\radio\def\radio{3}。tikzpicture 默认为 1 = 1cm,因此无需指定它。

最后,错误出现的原因是:...:(\radio+1));如果您想括住一个计算,那么您需要使用花括号,否则 Tikz 会将它们与其他计算混淆。

此外,由于您的\x数字达到 10,您还需要将其括在花括号中,例如$n_{\x}$,否则,您将只能正确显示第一个数字,如下图所示:

在此处输入图片描述

更新

如果要添加连接节点的弧,有两种方法。第一种方法是添加以下代码:

\foreach \x [remember=\x as \lastx (initially 1)] in {1,...,\n,1}{%
    \draw (n\lastx) to [bend right=10] (n\x);
    \draw (m\lastx) to [bend right=10] (m\x);
}

曲线与圆形非常相似,但不是 100%。这时第二种方法就派上用场了。基本上,你在背景中画两个圆圈,然后用白色填充节点。现在你有一个完美的圆形链接,可以链接到所有节点。我建议使用这种方法。

输出

图1

代码

\documentclass[tikz, margin=10pt]{standalone}
\begin{document}
\def\n{10}
\def\radio{3}
\begin{tikzpicture}
\draw (0,0) circle (\radio);
\draw (0,0) circle (\radio+1);
\foreach \x in {1,...,\n}{
    \coordinate (cn\x) at ({(1+2*\x)*180/\n-90}:\radio);
    \node[fill=white] (n\x) at (cn\x) {$n_{\x}$};
    \coordinate (cm\x) at ({(1+2*\x)*180/\n-45}:{\radio+1});
    \node[fill=white] (m\x) at (cm\x) {$m_{\x}$};
}

\node at (0,5) {Using circles};
\begin{scope}[xshift=10cm]
\node at (0,5) {Using a $\backslash$foreach statement};
\foreach \x in {1,...,\n}{
    \coordinate (cn\x) at ({(1+2*\x)*180/\n-90}:\radio);
    \node[fill=white] (n\x) at (cn\x) {$n_{\x}$};
    \coordinate (cm\x) at ({(1+2*\x)*180/\n-45}:{\radio+1});
    \node[fill=white] (m\x) at (cm\x) {$m_{\x}$};
}
\foreach \x [remember=\x as \lastx (initially 1)] in {1,...,\n,1}{%
    \draw (n\lastx) to [bend right=10] (n\x);
    \draw (m\lastx) to [bend right=10] (m\x);
}
\end{scope}
\end{tikzpicture}
\end{document}

相关内容