我正在研究一个图论问题,需要绘制一个节点/顶点网格,表示它们的度数并说明它们的路径。我需要的图表基本上是一个 7 x 7 网格,显示棋盘上骑士占据某个位置时可以移动的次数。我希望颜色随着度数的增加而变暗。
我需要的网格与第三个答案中的蓝色 7 x 7 图像相同这一页,或如下所示。
我尝试修改在线找到的一堆示例,但无法创建类似的东西。
答案1
这里我使用 TeX 计数器进行一些基本计算,但pgfmath
也可以使用它。代码使用两个嵌套foreach
循环遍历所有单元格。在每个单元格上,(\x,\y)
内部foreach
循环遍历所有可能的马匹跳跃(\px,\py)
。如果跳跃在棋盘外,则不计算在内。有效移动的次数在中累积\n
(记得使用分配给它\global
,否则值会在循环体之外丢失)。然后我们绘制边缘(在背景上,以避免边缘越过稍后绘制的节点);我通过仅绘制“向前”跳跃来避免两次绘制相同的线。填充颜色是通过将跳跃次数乘以 10 来获得合理的混合百分比blue
。
\documentclass[tikz]{standalone}
\pgfdeclarelayer{background}
\pgfsetlayers{background,main}
\begin{document}
\begin{tikzpicture}
\newcount\n
\newcount\px
\newcount\py
\newcount\ncolor
\foreach \x in {1,...,8}{
\foreach \y in {1,...,8}{
\n=0
\foreach \dx/\dy in {-2/-1,-1/-2,1/-2,2/-1,2/1,1/2,-1/2,-2/1}{
\px=\x
\py=\y
\advance\px by \dx\relax
\advance\py by \dy\relax
\ifnum\px>0
\ifnum\px<9
\ifnum\py>0
\ifnum\py<9
\global\advance\n by 1\relax
\begin{pgfonlayer}{background}
\ifnum\dx=2
\draw (\x,\y) -- (\px,\py);
\fi
\ifnum\dy=2
\draw (\x,\y) -- (\px,\py);
\fi
\end{pgfonlayer}
\fi\fi\fi\fi
}
\ncolor=\n
\multiply\ncolor by 10
\node[draw,circle,fill={blue!\the\ncolor}] at (\x,\y) {\the\n};
}
}
\end{tikzpicture}
\end{document}
结果如下:
\ncolor
如果您对颜色的 10 个因素感到满意,那么避免计数器的技巧如下:
\node[draw,circle,fill={blue!\the\n0}] at (\x,\y) {\the\n};