将 Tikz 节点隐藏在彼此后面

将 Tikz 节点隐藏在彼此后面

我想创建一个由特定颜色图案的小立方体组成的立方体。在我看来,循环在这里非常有用,但我得到的节点是相互绘制的。有没有办法告诉 tikz 不要绘制被位于它们前面的节点隐藏的节点?我正在尝试实现这样的目标

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}

\tikzset{
  redCube/.pic={
    \draw[fill=red!20] (0,1,0) -- (0,1,1) -- (1,1,1) -- (1,1,0);
    \draw[fill=red!50] (1,0,0) -- (1,0,1) -- (1,1,1) -- (1,1,0);
    \draw[fill=red] (0,0,0) rectangle (1,1,0);
  }
}
\tikzset{
  yellowCube/.pic={
    \draw[fill=yellow!20] (0,1,0) -- (0,1,1) -- (1,1,1) -- (1,1,0);
    \draw[fill=yellow!50] (1,0,0) -- (1,0,1) -- (1,1,1) -- (1,1,0);
    \draw[fill=yellow] (0,0,0) rectangle (1,1,0);
  }
}

\begin{document}
\newcommand{\sizea}{2}
\newcommand{\sizeb}{2}
\newcommand{\sizec}{2}


\tikz[z={(0.4, 0.4)}]
\path
\foreach \a in {0, ..., \sizea} {
    \foreach \b in {0, ..., \sizeb} {
        \foreach \c in {0, ..., \sizec} {
            (2*\a,\b,\c)pic{redCube}
            (2*\a + 1, \b, \c)pic{yellowCube}
        }
    }
};

\end{document}

答案1

描述

不幸的是,Tikz 没有提供以下方法隐藏表面测定,因此您必须在此处进行手动调整。

\c在你的情况下,你可以通过重新排列 for 循环并使用 反转 (z 坐标)的顺序来按正确的顺序绘制立方体{\sizec, ..., 0}。因此,它是从后往前绘制的,彼此叠在一起。

对于更复杂的示例,您还可以使用层,请参见:

代码

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}

\tikzset{
  redCube/.pic={
    \draw[fill=red!20] (0,1,0) -- (0,1,1) -- (1,1,1) -- (1,1,0);
    \draw[fill=red!50] (1,0,0) -- (1,0,1) -- (1,1,1) -- (1,1,0);
    \draw[fill=red] (0,0,0) rectangle (1,1,0);
  }
}
\tikzset{
  yellowCube/.pic={
    \draw[fill=yellow!20] (0,1,0) -- (0,1,1) -- (1,1,1) -- (1,1,0);
    \draw[fill=yellow!50] (1,0,0) -- (1,0,1) -- (1,1,1) -- (1,1,0);
    \draw[fill=yellow] (0,0,0) rectangle (1,1,0);
  }
}

\begin{document}
\newcommand{\sizea}{2}
\newcommand{\sizeb}{2}
\newcommand{\sizec}{2}


\tikz[z={(0.4, 0.4)}]
\path
\foreach \c in {\sizec, ..., 0} {
    \foreach \a in {0, ..., \sizea} {
        \foreach \b in {0, ..., \sizeb} {
            (2*\a,\b,\c)pic{redCube}
            (2*\a + 1, \b, \c)pic{yellowCube}
        }
    }
};

\end{document}

结果

在此处输入图片描述

相关内容