我在画图时遇到问题弦与 TikZ 联网。
这是我目前的代码:
\begin{tikzpicture}
\xdef\N{16}
\xdef\deltadegree{360/\N}
\draw[thick] (0,0) circle (6);
\foreach \i in {0,...,15} {
% predecessor
\pgfmathparse{mod(\i-1,\N)}
\draw[color=red] (-\i*\deltadegree+90:6) -- (-1*\pgfmathresult*\deltadegree+90:6);
% successor
\pgfmathparse{mod(\i+1,\N)}
\draw (-\i*\deltadegree+90:6) -- (-1*\pgfmathresult*\deltadegree+90:6);
% fingers
\foreach \j in {0,...,4}{
\pgfmathparse{mod(\i+2^\j,\N)}
\draw (-\i*\deltadegree+90:6) -- (-1*\pgfmathresult*\deltadegree+90:6);
}
}
\foreach \i in {0,...,15}
\node[circle,fill=white,draw=black,thick] at (-\i*\deltadegree+90:6) {\i};
\end{tikzpicture}
这段代码的问题是,TikZ 只从节点 6 到其他每个节点绘制线条,但我认为它会遍历所有节点,计算每个手指的目的地,并绘制该线条。
我究竟做错了什么?
答案1
\pgfmathresult
TikZ 会很快覆盖宏。您应该始终立即将结果分配给不同的宏,您可以使用以下命令执行此操作\pgfmathsetmacro{<macro name>}{<math expression>}
(另请参阅这个问题)。
这是经过调整的代码。请注意,“后继”循环中的线条刚好覆盖了“前继”循环。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\xdef\N{16}
\xdef\deltadegree{360/\N}
\draw[thick] (0,0) circle (6);
\foreach \i in {0,...,15} {
% predecessor
\pgfmathsetmacro{\result}{mod(\i-1,\N)}
\draw[color=red] (-\i*\deltadegree+90:6) -- (-1*\result*\deltadegree+90:6);
% successor
\pgfmathsetmacro{\result}{mod(\i+1,\N)}
\draw (-\i*\deltadegree+90:6) -- (-1*\result*\deltadegree+90:6);
% fingers
\foreach \j in {0,...,4}{
\pgfmathsetmacro{\result}{mod(\i+2^\j,\N)}
\draw (-\i*\deltadegree+90:6) -- (-1*\result*\deltadegree+90:6);
}
}
\foreach \i in {0,...,15}
\node[circle,fill=white,draw=black,thick] at (-\i*\deltadegree+90:6) {\i};
\end{tikzpicture}
\end{document}