在 tikz 和 animate 包中创建二维卷积的动画

在 tikz 和 animate 包中创建二维卷积的动画

我尝试使用 tikz 和 animate 包创建一个动画来演示一个简单的 2D 卷积。我尝试了下面的代码,但出现了以下错误:

  • 包动画错误:第一帧的内容不能有零宽度。
  • 包动画错误:第一帧的内容不能有零高度。
  • pdfTeX 错误(ext1):\pdfxform 不能与空白框一起使用。

我查看了软件包手册、StackExchange 和其他一些在线网站,但找不到导致这些错误的解释。这与 \foreach 循环有关吗?我设法使用 \multiframe 创建了动画,但我无法独立控制 2 个变量,动画遵循对角线方向,而不是所需的卷积序列。根据我以前的经验,我怀疑我的方法有些愚蠢,我指望这个优秀的社区能帮助我!在此先感谢大家的帮助。

\documentclass{article}
\usepackage{tikz}
\usepackage{animate}

\begin{document}

\begin{animateinline}[poster=first, controls] {20}
\foreach \Ry in {9,8,...,0}
{
    \foreach \Rx in {0,1,...,9}
    {
    \begin{tikzpicture} [scale=1]
        \useasboundingbox (0,0) rectangle (10,10);
        \fill [gray!60] (0,0) rectangle (10,10);
        \fill [red!50] (\Rx,\Ry) rectangle ++(1,1);
    \end{tikzpicture}
    \newframe%
    }
}
\end{animateinline}

\end{document}

答案1

在此处输入图片描述

这利用了 TikZ 的modfloor运算符:

%\documentclass[export]{standalone} % for multipage PDF/animated GIF
\documentclass{article}

\usepackage{tikz}
\usepackage{animate}

\begin{document}

\begin{animateinline}[poster=first, controls] {20}
\multiframe{100}{ii=0+1,rj=9.9+-0.1}{% ii=0,1,...99 ; rj=9.9,9.8,...,0.0
  %
  \pgfmathsetmacro{\Rx}{mod(\ii,10)}%  Rx = [0,1,...,9,] x 10
  \pgfmathsetmacro{\Ry}{floor(\rj)}%   Ry = 9 x 10 , 8 x 10 , ... , 0 x 10
  %
  \begin{tikzpicture} [scale=1]
      \useasboundingbox (0,0) rectangle (10,10);
      \fill [gray!60] (0,0) rectangle (10,10);
      \fill [red!50] (\Rx,\Ry) rectangle ++(1,1);
  \end{tikzpicture}
}
\end{animateinline}

\end{document}

相关内容