我尝试使用 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 的mod
和floor
运算符:
%\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}