如何在指向节点中心但在节点边缘停止的节点之间画线

如何在指向节点中心但在节点边缘停止的节点之间画线

我在一个圆圈上绘制节点,并从基于坐标绘制线条切换到基于命名节点绘制线条。

现在的问题是,使用以下代码,线条会停止在节点的边缘,但不指向中心。

我该如何解决?

\begin{tikzpicture}
    \xdef\nodes{16}
    \pgfmathsetmacro{\nodesminusone}{\nodes-1}
    \pgfmathsetmacro{\N}{log2(\nodes)}
    \xdef\deltadegree{360/\nodes}
    \draw (0,0) circle (6);

    \foreach \i in {0,...,\nodesminusone}
        \node[circle,fill=white,draw=black,thick] (node\i) at (-\i*\deltadegree+90:6) {\i};

    \foreach \i in {0,...,\nodesminusone}{
        \foreach \j in {0,...,\N}{
            \pgfmathsetmacro{\result}{mod(\i+2^\j,\nodes)}
            \draw[->,thick,color=black!10] (node\i) -- (node\result);

        }
    }

    \foreach \i in {2} {
        % predecessor
        \pgfmathsetmacro{\result}{mod(\i-1,\nodes)}
        \draw (node\i) -- (node\result);


        % successor
        \pgfmathsetmacro{\result}{mod(\i+1,\nodes)}
        \draw (node\i) -- (node\result);

        % fingers
        \foreach \j in {0,...,\N}{
            \pgfmathsetmacro{\result}{mod(\i+2^\j,\nodes)}
        \draw[->,color=blue,thick] (node\i) -- (node\result);
        }
    }
\end{tikzpicture}

答案1

\pgfmathsetmacro用。。。来代替\pgfmathtruncatemacro

发生这种情况的原因是\pgfmathsetmacro返回的是浮点数(或定点数?),而不是整数。例如:

    \foreach \j in {0,...,\N}{
        \pgfmathsetmacro{\result}{mod(\i+2^\j,\nodes)}
    \draw[->,color=blue,thick] (node\i) -- (node\result);
    }

这里\result将是0.01.0等(无论 的结果是什么mod)。然而(node1.0)表示“节点‘node1’在角度 0 度处”,它将箭头绘制到该点。\pgfmathtruncatemacro.0被截断,并且仅 (node1)使用等,这将给出想要的结果。

相关内容