为什么在之前的循环中给出的绘图命令完全相同的重复

为什么在之前的循环中给出的绘图命令完全相同的重复

问题。为什么下面的代码会生成一条从顶点 0 到顶点 1 的线不是是否与之前绘制的类似线(通过 foreach 循环)完全重合?

  \begin{tikzpicture}
    \foreach \n/\a/\r in {0/0/100,1/72/100,2/144/100,3/216/100,4/288/100}{
      \node (v\n) at (\a:\r pt) []{};
    }
    \foreach \n in {0,1,2,3,4}{
      \pgfmathsetmacro\auxone{Mod(\n,5)};
      \pgfmathsetmacro\auxtwo{Mod(add(\n,1),5)};
      \pgfmathsetmacro\auxthree{Mod(add(\n,2),5)};          
      \draw[opacity=0.5] (v\auxone)--(v\auxtwo);
      \draw[opacity=0.5] (v\auxthree)--(v\auxone);          
    }
    \draw[opacity=0.5] (v0)--(v1);
  \end{tikzpicture}

有问题的输出如下:

在此处输入图片描述

评论。

  • 我希望第二条线从 0 到 1 与之前绘制的线完全重合(并因此由于两条不透明度为 0.5 的线的叠加而产生更深的色调)。

  • 我看不出这两条线不一致的任何原因。(如果在心里代入变量 \auxone 和 \auxtwo,那么这两个绘图命令在我看来完全相同,因此可以预期会产生完全相同的效果。)

  • 我尝试换线

    \draw[opacity=0.5] (v0)--(v1);
    

与线

    \draw[opacity=0.5] (v0.center)--(v1.center);

产生了一个略有不同但仍然无法解释且不受欢迎的结果,我允许自己重现这个结果(希望这可以帮助某人理解这个问题):

在此处输入图片描述

答案1

因为您使用的是\pgfmathsetmacro,它会.0在数字末尾添加,这些数字会被解释为锚点(在本例中.0相当于)。如果您改用,线条将完美匹配,正如它们应该的那样。.east\pgfmathtruncatemacro

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
 \begin{tikzpicture}
    \foreach \n/\a/\r in {0/0/100,1/72/100,2/144/100,3/216/100,4/288/100}{
      \node (v\n) at (\a:\r pt) []{};
    }
    \foreach \n in {0,1,2,3,4}{
      \pgfmathtruncatemacro\auxone{Mod(\n,5)};
      \pgfmathtruncatemacro\auxtwo{Mod(add(\n,1),5)};
      \pgfmathtruncatemacro\auxthree{Mod(add(\n,2),5)};
      \draw[opacity=0.5] (v\auxtwo)--(v\auxone);
      \draw[opacity=0.5] (v\auxthree)--(v\auxone);          
    }
    \draw[opacity=0.5] (v0)--(v1);
  \end{tikzpicture}
\end{document}

在此处输入图片描述

如果您想缩小差距,您可能需要使用coordinates 而不是nodes。

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
 \begin{tikzpicture}
    \foreach \n/\a/\r in {0/0/100,1/72/100,2/144/100,3/216/100,4/288/100}{
      \coordinate (v\n) at (\a:\r pt);
    }
    \foreach \n in {0,1,2,3,4}{
      \pgfmathtruncatemacro\auxone{Mod(\n,5)};
      \pgfmathtruncatemacro\auxtwo{Mod(add(\n,1),5)};
      \pgfmathtruncatemacro\auxthree{Mod(add(\n,2),5)};
      \draw[opacity=0.5] (v\auxtwo)--(v\auxone);
      \draw[opacity=0.5] (v\auxthree)--(v\auxone);          
    }
    \draw[opacity=0.5] (v0)--(v1);
  \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容