我想创建一个由特定颜色图案的小立方体组成的立方体。在我看来,循环在这里非常有用,但我得到的节点是相互绘制的。有没有办法告诉 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}
。因此,它是从后往前绘制的,彼此叠在一起。
对于更复杂的示例,您还可以使用层,请参见:
- CTAN: 包 pgf, 3.13 “使用图层:背景矩形”
- CTAN: 软件包 tikz-layers
代码
\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}