Tikz:跨网格图块的下降渐变

Tikz:跨网格图块的下降渐变

我怎样才能 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

像这样?最亮的方块的位置有键xy,大小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}

在此处输入图片描述

相关内容