![Tikz:跨网格图块的下降渐变](https://linux22.com/image/411478/Tikz%EF%BC%9A%E8%B7%A8%E7%BD%91%E6%A0%BC%E5%9B%BE%E5%9D%97%E7%9A%84%E4%B8%8B%E9%99%8D%E6%B8%90%E5%8F%98.png)
我怎样才能 tikz 以下内容?
有一个任意大小的网格。(但它的宽度和高度始终相同。)一开始选择一个位置。我们开始为与该位置相邻的瓷砖着色。之后,我们为之前未着色且与已着色瓷砖相邻的瓷砖着色。我们重复此过程,直到所有瓷砖都着色。一开始颜色应该非常透明,随着重复,颜色变得不那么透明。
以下是两个示例:
这是网格的代码:
\documentclass{standalone}
\usepackage{tikz}
\def\size{3}
\begin{document}
\begin{tikzpicture}
% Draw the grid
\draw[thick,step=1cm,color=black!50] (0,0) grid (\size,\size);
% Draw border
\draw[ultra thick] (0,0) -- (\size,0) -- (\size,\size) -- (0,\size) -- (0,0) -- (\size,0);
\end{tikzpicture}
\end{document}
我猜如果起点像第一张图片中那样位于角落,那么事情就会容易得多。所以如果你能在这个限制下想出解决方案,我仍然会对此感兴趣。
答案1
像这样?最亮的方块的位置有键x
和y
,大小size
和颜色color
。
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[pics/descending grid/.style={code={
\tikzset{descending grid/.cd,#1}
\def\pv##1{\pgfkeysvalueof{/tikz/descending grid/##1}}%
\pgfmathtruncatemacro{\maxdist}{max(\pv{size}-\pv{x},\pv{x}-1)+max(\pv{size}-\pv{y},\pv{y}-1)}%
\colorlet{gcolor}{\pv{color}}
\foreach \XX in {1,...,\pv{size}}
{\foreach \YY in {1,...,\pv{size}}
{\pgfmathsetmacro{\myopa}{(abs(\XX-\pv{x})+abs(\YY-\pv{y}))/\maxdist}
\draw[fill=gcolor,fill opacity=\myopa] (\XX-1-\pv{size}/2,\YY-1-\pv{size}/2)
rectangle ++ (1,1);
}
}
\draw[thick] (-\pv{size}/2,-\pv{size}/2) rectangle (\pv{size}/2,\pv{size}/2);
}},descending grid/.cd,
size/.initial=3,x/.initial=1,y/.initial=1,color/.initial=blue]
\path (0,0) pic{descending grid}
(7,0) pic{descending grid={size=4,x=3,y=2}}
(0,-5) pic{descending grid={size=4,x=2,y=4,color=red}} ;
\end{tikzpicture}
\end{document}