\begin{tikzpicture}[] \newcommand{\DrawFrame} { \draw[fill=TikZColorFill,fill opacity=1, thick] (0,0) rectangle (9+1,8); % Opacity } \def\TikzFrameScale{.28} \tikzstyle{FrameLabels} =[text centered, anchor=center] \tikzstyle{labels} =[text centered, font=\footnotesize] \tikzstyle{arrow} =[draw,-latex, thick] \tikzstyle{errorBlock}=[draw, fill=TikZColorBlock0] \tikzstyle{errorPropagation}=[draw=TikZColorBlock1, fill=TikZColorBlock1] \tikzstyle{refresh}=[fill=TikZColorFillDark,draw] \def\xfshift{5.5cm} \def\yfshift{.2cm} \def\errorPosX{3} \def\errorPosY{5} \begin{scope} \node[labels, text width=3cm] (ErrorPropLabel) at (4.5,10.5*\TikzFrameScale) {Error propagation}; \node[labels, text width=2.1cm] (Error) at (4.3,2*\TikzFrameScale) {Lost block}; \begin{scope}[scale=\TikzFrameScale,xshift=-1cm] \draw[fill=TikZColorFill,fill opacity=1] (0,-1) rectangle ++(10,9); \draw[errorBlock,draw] (\errorPosX,\errorPosY) rectangle ++(1cm,1cm); \foreach \x in {\errorPosX,...,8} \draw[errorPropagation] (\x+1,\errorPosY) rectangle ++(1 cm,1 cm); \foreach \x in {2,3,4,5,6,7,8,9} \draw[errorPropagation] (\x,4) rectangle ++(1 cm,1 cm); \foreach \x in {1,2,3,4,5,6,7,8,9} \draw[errorPropagation] (\x,3) rectangle ++(1 cm,1 cm); \foreach \y in {-1,0,1,2} \foreach \x in {0,1,2,3,4,5,6,7,8,9} \draw[errorPropagation] (\x,\y) rectangle ++(1 cm,1 cm); % \draw (0,\errorPosY) -- ++(\errorPosX + 1,0) -- ++(0,1) -- ++(8-\errorPosX,0); \path[arrow,-] (ErrorPropLabel.180) edge[-latex, bend right] (7,5); \path[arrow] (Error) -- (\errorPosX +.5, \errorPosY +.5); \draw[thick] (0,-1) rectangle ++(10,9); \node[labels,text width=3.5cm] at (4.5,-3) {\textbf{Error propagation \\ within a frame}}; \end{scope} \begin{scope}[yshift=.5cm, xshift=5.5cm] \begin{scope}[scale=\TikzFrameScale, yshift=3*\yfshift, xshift=3*\xfshift, yslant=\TikZyslant,xscale=\TikZxscale] \DrawFrame \coordinate (Center) at (5,3.5); \node[FrameLabels] (FrameLabel) at (12cm/2,-1.8cm) { $f_{t+3}$ }; \draw[errorPropagation] (\errorPosX ,\errorPosY) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +1,\errorPosY) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +2,\errorPosY) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX ,\errorPosY -1) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +1,\errorPosY -1) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +2,\errorPosY -1) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +0,\errorPosY -2) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +1,\errorPosY -2) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +0,\errorPosY -3) rectangle ++(1cm,1cm); \coordinate (endPoint) at (9,0); \end{scope} \begin{scope}[scale=\TikzFrameScale, yshift=2*\yfshift, xshift=2*\xfshift, yslant=\TikZyslant,xscale=\TikZxscale] \DrawFrame \coordinate (Center) at (5,3.5); \draw[errorPropagation] (\errorPosX,\errorPosY) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +1,\errorPosY) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +2,\errorPosY) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX,\errorPosY -1) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX+1,\errorPosY -1) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX+1,\errorPosY -2) rectangle ++(1cm,1cm); \end{scope} \node[FrameLabels] at (Center |- FrameLabel) { $f_{t+2}$ }; \begin{scope}[scale=\TikzFrameScale, yshift=1*\yfshift, xshift=1*\xfshift, yslant=\TikZyslant,xscale=\TikZxscale] \DrawFrame \coordinate (Center) at (5,3.5); \draw[errorPropagation] (\errorPosX,\errorPosY) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX,\errorPosY -1) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +1,\errorPosY) rectangle ++(1cm,1cm); \coordinate (tempErrorPropPoint) at (\errorPosX +1+.5,\errorPosY +.5); \end{scope} \node[FrameLabels] at (Center |- FrameLabel) { $f_{t+1}$ }; \begin{scope}[scale=\TikzFrameScale, yshift=0*\yfshift, xshift=0*\xfshift, yslant=\TikZyslant,xscale=\TikZxscale] \DrawFrame \coordinate (Center) at (5,3.5); \draw[errorBlock] (\errorPosX,\errorPosY) rectangle ++(1cm,1cm); \coordinate (startPoint) at (0,0); \path[arrow] (Error) -- (\errorPosX +.5, \errorPosY +.5); \end{scope} \node[FrameLabels] at (Center |- FrameLabel) { $f_{t}$ }; \path[arrow,-] (ErrorPropLabel.0) edge[-latex, bend left] (tempErrorPropPoint); \path[draw, -latex] ($(FrameLabel)+(-6,-.4)$) -- ($(FrameLabel)+(1.2,-.4)$) node[below] {t}; \path (startPoint) -- (endPoint) node[labels, pos=.5, yshift=-1.3cm] {\textbf{Error propagation over time}}; \end{scope} \end{scope} \begin{scope}[yshift=-3.8cm] \node[labels, text width=1.2cm] (Refresh) at (4.3,1*\TikzFrameScale) {Refresh blocks}; \begin{scope}[scale=\TikzFrameScale,xshift=-1cm] \draw[fill=TikZColorFill,fill opacity=1] (0,-1) rectangle ++(10,9); \foreach \y in {2} \foreach \x in {0,1,2,3,4,5,6,7,8,9} \draw[refresh] (\x,\y) rectangle ++(1 cm,1 cm); \draw[errorBlock,draw] (\errorPosX,\errorPosY) rectangle ++(1cm,1cm); \foreach \x in {2,3,4,5,6,7,8,9} \draw[errorPropagation] (\x,4) rectangle ++(1 cm,1 cm); \foreach \x in {1,2,3,4,5,6,7,8,9} \draw[errorPropagation] (\x,3) rectangle ++(1 cm,1 cm); \draw[thick] (0,-1) rectangle ++(10,9); \path[arrow] (Refresh) -- (7.5,2.5); \node[labels,text width=3.5cm] at (4.5,-3) {\textbf{Spatial localisation \\ example}}; \end{scope} \begin{scope}[xshift=5.5cm] \begin{scope}[scale=\TikzFrameScale, yshift=3*\yfshift, xshift=3*\xfshift, yslant=\TikZyslant,xscale=\TikZxscale] \DrawFrame \coordinate (Center) at (5,3.5); \node[FrameLabels] (FrameLabel) at (12cm/2,-1.8cm) { $f_{t+3}$ }; \draw[errorPropagation] (\errorPosX ,\errorPosY) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +1,\errorPosY) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +2,\errorPosY) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX ,\errorPosY -1) rectangle ++(1cm,1cm); % \draw[errorPropagation] (\errorPosX +1,\errorPosY -1) rectangle ++(1cm,1cm); % \draw[errorPropagation] (\errorPosX +2,\errorPosY -1) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +0,\errorPosY -2) rectangle ++(1cm,1cm); % \draw[errorPropagation] (\errorPosX +1,\errorPosY -2) rectangle ++(1cm,1cm); % \draw[errorPropagation] (\errorPosX +0,\errorPosY -3) rectangle ++(1cm,1cm); \draw[refresh] (8,4) rectangle ++(1cm,1cm); \draw[refresh] (4,4) rectangle ++(1cm,1cm); \draw[refresh] (7,6) rectangle ++(1cm,1cm); \draw[refresh] (7,1) rectangle ++(1cm,1cm); \draw[refresh] (3,3) rectangle ++(1cm,1cm); \coordinate (endPoint) at (9,0); \end{scope} \begin{scope}[scale=\TikzFrameScale, yshift=2*\yfshift, xshift=2*\xfshift, yslant=\TikZyslant,xscale=\TikZxscale] \DrawFrame \coordinate (Center) at (5,3.5); \draw[errorPropagation] (\errorPosX,\errorPosY) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +1,\errorPosY) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +2,\errorPosY) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX,\errorPosY -1) rectangle ++(1cm,1cm); % \draw[errorPropagation] (\errorPosX+1,\errorPosY -1) rectangle ++(1cm,1cm); % \draw[errorPropagation] (\errorPosX+1,\errorPosY -2) rectangle ++(1cm,1cm); \draw[refresh] (8,4) rectangle ++(1cm,1cm); \draw[refresh] (4,4) rectangle ++(1cm,1cm); \draw[refresh] (7,6) rectangle ++(1cm,1cm); \draw[refresh] (7,1) rectangle ++(1cm,1cm); \draw[refresh] (3,2) rectangle ++(1cm,1cm); \end{scope} \node[FrameLabels] at (Center |- FrameLabel) { $f_{t+2}$ }; \begin{scope}[scale=\TikzFrameScale, yshift=1*\yfshift, xshift=1*\xfshift, yslant=\TikZyslant,xscale=\TikZxscale] \DrawFrame \coordinate (Center) at (5,3.5); \draw[errorPropagation] (\errorPosX,\errorPosY) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX,\errorPosY -1) rectangle ++(1cm,1cm); \draw[errorPropagation] (\errorPosX +1,\errorPosY) rectangle ++(1cm,1cm); \draw[refresh] (1,2) rectangle ++(1cm,1cm); \draw[refresh] (2,4) rectangle ++(1cm,1cm); \draw[refresh] (5,3) rectangle ++(1cm,1cm); \draw[refresh] (7,6) rectangle ++(1cm,1cm); \draw[refresh] (7,1) rectangle ++(1cm,1cm); \end{scope} \node[FrameLabels] at (Center |- FrameLabel) { $f_{t+1}$ }; \begin{scope}[scale=\TikzFrameScale, yshift=0*\yfshift, xshift=0*\xfshift, yslant=\TikZyslant,xscale=\TikZxscale] \DrawFrame{colorBackground} \coordinate (Center) at (5,3.5); \draw[errorBlock] (\errorPosX,\errorPosY) rectangle ++(1cm,1cm); \coordinate (startPoint) at (0,0); \draw[refresh] (1,2) rectangle ++(1cm,1cm); \draw[refresh] (2,4) rectangle ++(1cm,1cm); \draw[refresh] (5,3) rectangle ++(1cm,1cm); \draw[refresh] (7,6) rectangle ++(1cm,1cm); \draw[refresh] (7,1) rectangle ++(1cm,1cm); \path[arrow] (Refresh) -- (2.5,4.5); \end{scope} \node[FrameLabels] at (Center |- FrameLabel) { $f_{t}$ }; \path[draw, -latex] ($(FrameLabel)+(-6,-.4)$) -- ($(FrameLabel)+(1.2,-.4)$) node[below] {t}; \path (startPoint) -- (endPoint) node[labels, pos=.5, yshift=-1.3cm] {\textbf{Temporal localisation example}}; \end{scope} \end{scope} \end{tikzpicture}