Tikz 节点顺序和具有一般节点数的形状

Tikz 节点顺序和具有一般节点数的形状

这是Tikz 节点位置和形状以及一般数量的节点,一个我被要求拆分的问题。请参考下面的代码。

在下表中我想:

控制数字运行的方向

此时,数字大致如下:

81 82 83 84 85

86 87 88 89 90

但我有兴趣尝试:

81 82 83 84 85

90 89 88 87 86

一个已经存在的例子或者草图就足够了。

最终,设计蜿蜒曲折的路径会很有趣,就像孩子们的棋盘游戏一样。棋盘游戏实际上是我正在努力实现的目标,速度很慢。

\RequirePackage[svgnames,x11names]{xcolor}
\documentclass[tikz,convert=false,margin=0pt]{standalone}%
\usepackage{rotating}% sideways environment

\begin{document}%
\begin{tikzpicture}[%
  every node/.style = {
    align = center
    , scale = 2
    , anchor = base
    , font = \fontfamily{pzc}\selectfont% common font
    , text = black
  }
]%
%
  % Set Grid Dimensions 
  \newcommand{\xa}{1}
  \newcommand{\xb}{5}
  \newcommand{\ya}{1}
  \newcommand{\yb}{5}
  \pgfmathsetmacro{\yc}{\yb-1}% \yb minus one
% 
  % Change styles of numbers according to set membership
  \foreach \x in {\xa,...,\xb}
    \foreach \y in {\ya,...,\yb} 
       {\pgfmathtruncatemacro{\label}{\x - \xb * (\y - \yb) }
         \node (\x\y) at (1.5*\x, -1.5*\y) {\label};} 
  \foreach \x in {\xa,...,\xb}
    \foreach \y [count = \yi] in {\ya,...,\yc}
      \draw (\x\y)(\x\yi) (\y\x)(\yi\x) ;
\end{tikzpicture}%
\end{document}%

在此处输入图片描述

答案1

首先,我让你的代码更简单一些,这样实际的数字顺序TikZ就是 1、2、3……这样我就可以更轻松地思考,也更容易修改(希望将来更容易调整)。以下是更改后的部分(结果保持不变):

\foreach \y in {\ya,...,\yb}
    \foreach \x in {\xa,...,\xb} 
       {\pgfmathtruncatemacro{\label}{\x + (\y-1) * \xb }
         \node (\x\y) at (1.5*\x, 1.5*\y) {\label};}

现在开始牛耕式(哦,这是一个有趣的词)编号。这需要一点时间,但我使用的主要想法是 (-1)^x 是一个很好的阶跃函数,它将每个整数从 -1 变为 1 并变回 -1。这对于每行的变化性质来说是完美的,其中(从左边开始)数字在一行中增加,在下一行中减少。所以这里是代码:

\foreach \y in {\ya,...,\yb} 
    \foreach \x in {\xa,...,\xb}
       {\pgfmathtruncatemacro{\label}
          {(-1)^(\y-1)*\x + (\y-1)*\xb + (1-(-1)^(\y-1))*(\xb+1)/2}
       \node (\x\y) at (1.5*\x, 1.5*\y) {\label};}

生成图像

在此处输入图片描述

现在,第一个函数\x每行改变一次符号,最后一个函数(1-(-1)^(\y-1))*(\xb+1)/2每行从0切换到1*\xb+1 = 6再从 切换回 。我希望索引\xa\ya为 0,这样代码可能会短一点,但最终这并不重要,总会有一个函数可以完成必要的操作。

答案2

为了说明我上面的评论,这里有一个简单的版本,展示了如何做到这一点。它可以轻松地与给出的答案结合起来这里以提供更精美的输出。

\documentclass[tikz,border=0.125cm]{standalone}

\begin{document}

\begin{tikzpicture}[x=1cm, y=1cm]
\foreach \n [evaluate={% 
    \y=-floor((\n-1)/10);
    \k=mod(-\y,2);
    \x=9*\k-(\k*2-1)*mod(\n-1,10);}] in {1,...,100}
  \node [rectangle, minimum size=1cm, draw]
     at (\x,\y) {\n};
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案3

在我的问题中,我几乎是事后才想到的,我写道:“最终设计蜿蜒的路径会很有趣”。我想在这里指出,在我提出问题后才看到的一个早期帖子中,Paul Gaborit 展示了如何描绘螺旋路径:

tikz 中的埃拉托斯特尼筛法

这使用极坐标。语法上的差异很小:

\coordinate(A) at (0,0); % cartesian coordinates
\coordinate(A) at (360:0); % polar coordinates, angle=360, radius=0

如果有人感兴趣的话,我在这里发布了代码的改编版:

Tikz 节点位置和形状以及一般数量的节点

相关内容