如何使用 tikz 绘制三维矩阵

如何使用 tikz 绘制三维矩阵

我想画一个像下图这样的矩阵,但我不知道该怎么做 在此处输入图片描述

答案1

只是为了好玩:自动创建其条目的矩阵。

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[auto matrix/.style={matrix of nodes,
  draw,thick,inner sep=0pt,
  nodes in empty cells,column sep=-0.2pt,row sep=-0.2pt,
  cells={nodes={minimum width=1.9em,minimum height=1.9em,
   draw,very thin,anchor=center,fill=white,
   execute at begin node={%
   $\vphantom{x_|}\ifnum\the\pgfmatrixcurrentrow<4
     \ifnum\the\pgfmatrixcurrentcolumn<4
      {#1}^{\the\pgfmatrixcurrentrow}_{\the\pgfmatrixcurrentcolumn}
     \else 
      \ifnum\the\pgfmatrixcurrentcolumn=5
       {#1}^{\the\pgfmatrixcurrentrow}_{N}
      \fi
     \fi
    \else
     \ifnum\the\pgfmatrixcurrentrow=5
      \ifnum\the\pgfmatrixcurrentcolumn<4
       {#1}^{T}_{\the\pgfmatrixcurrentcolumn}
      \else
       \ifnum\the\pgfmatrixcurrentcolumn=5
        {#1}^{T}_{N}
       \fi 
      \fi
     \fi
    \fi  
    \ifnum\the\pgfmatrixcurrentrow\the\pgfmatrixcurrentcolumn=14
     \cdots
    \fi
    \ifnum\the\pgfmatrixcurrentrow\the\pgfmatrixcurrentcolumn=41
     \vdots
    \fi
    \ifnum\the\pgfmatrixcurrentrow\the\pgfmatrixcurrentcolumn=44
     \ddots
    \fi$
    }
  }}}]
 \matrix[auto matrix=z,xshift=3em,yshift=3em](matz){
  & & & & \\
  & & & & \\
  & & & & \\
  & & & & \\
  & & & & \\
 };
 \matrix[auto matrix=y,xshift=1.5em,yshift=1.5em](maty){
  & & & & \\
  & & & & \\
  & & & & \\
  & & & & \\
  & & & & \\
 };
 \matrix[auto matrix=x](matx){
  & & & & \\
  & & & & \\
  & & & & \\
  & & & & \\
  & & & & \\
 };
 \draw[thick,-stealth] ([xshift=1ex]matx.south east) -- ([xshift=1ex]matz.south east)
  node[midway,below] {$D$};
 \draw[thick,-stealth] ([yshift=-1ex]matx.south west) -- 
  ([yshift=-1ex]matx.south east) node[midway,below] {joints};
 \draw[thick,-stealth] ([xshift=-1ex]matx.north west)
   -- ([xshift=-1ex]matx.south west) node[midway,above,rotate=90] {time};
\end{tikzpicture}
\end{document}

在此处输入图片描述

对案例进行更加线性化的处理(当然不是最佳的)。

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[auto matrix/.style={matrix of nodes,
  draw,thick,inner sep=0pt,
  nodes in empty cells,column sep=-0.2pt,row sep=-0.2pt,
  cells={nodes={minimum width=1.9em,minimum height=1.9em,
   draw,very thin,anchor=center,fill=white,
   execute at begin node={%
   $\vphantom{x_1^1}
    \pgfmathtruncatemacro{\itest}{sign(4-\the\pgfmatrixcurrentcolumn)*sign(4-\the\pgfmatrixcurrentrow)}
    \unless\ifnum\itest=0
    {#1}^{\myrowindex{\the\pgfmatrixcurrentrow}}_{\mycolindex{\the\pgfmatrixcurrentcolumn}}
    \fi
    \ifnum\the\pgfmatrixcurrentrow\the\pgfmatrixcurrentcolumn=14
    \cdots
    \fi
    \ifnum\the\pgfmatrixcurrentrow\the\pgfmatrixcurrentcolumn=41
    \vdots
    \fi
    \ifnum\the\pgfmatrixcurrentrow\the\pgfmatrixcurrentcolumn=44
    \ddots
    \fi
   $}
  }}}]
 \newcommand{\mycolindex}[1]{\ifnum#1=5 N\else #1\fi}
 \newcommand{\myrowindex}[1]{\ifnum#1=5 T\else #1\fi}
 \matrix[auto matrix=z,xshift=3em,yshift=3em](matz){
  & & & & \\
  & & & & \\
  & & & & \\
  & & & & \\
  & & & & \\
 };
 \matrix[auto matrix=y,xshift=1.5em,yshift=1.5em](maty){
  & & & & \\
  & & & & \\
  & & & & \\
  & & & & \\
  & & & & \\
 };
 \matrix[auto matrix=x](matx){
  & & & & \\
  & & & & \\
  & & & & \\
  & & & & \\
  & & & & \\
 };
 \draw[thick,-stealth] ([xshift=1ex]matx.south east) -- ([xshift=1ex]matz.south east)
  node[midway,below] {$D$};
 \draw[thick,-stealth] ([yshift=-1ex]matx.south west) -- 
  ([yshift=-1ex]matx.south east) node[midway,below] {joints};
 \draw[thick,-stealth] ([xshift=-1ex]matx.north west)
   -- ([xshift=-1ex]matx.south west) node[midway,above,rotate=90] {time};
\end{tikzpicture}
\end{document}

相关内容