这是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 展示了如何描绘螺旋路径:
这使用极坐标。语法上的差异很小:
\coordinate(A) at (0,0); % cartesian coordinates
\coordinate(A) at (360:0); % polar coordinates, angle=360, radius=0
如果有人感兴趣的话,我在这里发布了代码的改编版: