如何在 foreach 循环中使用 let 连接定义的节点的中心?

如何在 foreach 循环中使用 let 连接定义的节点的中心?

我想使用一个\foreach循环来创建一个星形多边形,为顶点创建节点,并\foreach使用另一个循环连接每个第 4 个节点。

\documentclass[12pt]{amsart}

\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{shapes.symbols}
\usetikzlibrary{positioning}
\usetikzlibrary{decorations.shapes}

\begin{document}

\begin{tikzpicture}
\foreach \i in {0,1,2,...,9}
{
\node[draw, circle, fill=red, inner sep = 20 pt] (a\i) at (360*\i/10:4) {};
\draw[fill=black] (a\i.center) circle (.5 mm);
}
\foreach \j in {0,1,...,9}
{
\draw[blue, align=center] let \n1={mod(\j+4,10)} in (a\n1)--(a\j.center);
}
\end{tikzpicture}

\end{document}

当我这样做时,到节点的连接(a\n1)不到节点的中心。如果我尝试,(a\n1.center)它会给我一个 PGF 数学错误。但使用时({a\n1}.center)说没有名为 a4.0 的形状是已知的。

需要做什么秘密逃脱才能实现这一点?有没有更好的方法?

coordinate(如果我使用而不是,一切都很好node,但是我必须在坐标上运行最后的循环才能绘制节点,这有点烦人。)

答案1

我认为问题在于 PGF 数学函数默认返回带有小数点的结果,即使结果为整数。因此,您得到的是 ,4.0而不是4模数运算的结果。

math库提供了一种避免这种情况的方法。但是,请注意,我以前从未使用过该库,也从未真正使用过 PGF 数学。买者自负...

\documentclass[12pt]{amsart}

\usepackage{tikz}
\usetikzlibrary{calc, math}
\usetikzlibrary{shapes.symbols}
\usetikzlibrary{positioning}
\usetikzlibrary{decorations.shapes}

\begin{document}

\begin{tikzpicture}
\foreach \i in {0,1,2,...,9}
{
\node[draw, circle, fill=red, inner sep = 20 pt] (a\i) at (360*\i/10:4) {};
\draw[fill=black] (a\i.center) circle (.5 mm);
}
\foreach \j in {0,1,...,9}
{
  \tikzmath{
    integer \x;
    \x = mod(\j+4,10);
  }
  \draw[blue, align=center] (a\x.center)--(a\j.center);
}
\end{tikzpicture}

\end{document}

中心脊柱

相关内容