我想使用一个\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}