我使用 TikZ 绘制了大量 3D 多边形。代码是由程序生成的,因此我很难最后打印“前景”多边形,以便它们在空间中很好地打印出来。
换句话说,如果我的 TikZ 代码的最后一行是相对于我在 TikZ 中使用的投影位于其他多边形“后面”的多边形,我希望这个最后的多边形被前景多边形“隐藏”,即使\fill
之前使用过该命令。
有办法这样做吗?
答案1
我不认为仅使用 TikZ 就能做到这一点,但你可以看看草图,并且向 TikZ 用户介绍。
一个例子,也出现在TeXample.net:
如果这个例子对于入门来说太难了,TikZ 用户的介绍会一步步指导你。我也可以推荐Sketch 手册,内容相当广泛并且易读。
答案2
Pgfplots 1.5.1 带有patch type=polygon
:其想法是提供顶点和连接矩阵,一些 3d 视角,然后 pgfplots 完成其余工作 - 包括 z 缓冲区排序。
Pgfplots 将一个多边形的“深度”定义为其顶点深度的平均值,并根据多边形深度对多边形进行排序(“画家算法”)。
以下是取自pgfplots 1.5.1 手册,“5.6 Patch plots 库”一节,第 311 页:
\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[view/h=120,xlabel=$x$,ylabel=$y$]
\addplot3[
opacity=0.5,
table/row sep=\\,
patch,
patch type=polygon,
vertex count=5,
patch table with point meta={%
% pt1 pt2 pt3 pt4 pt5 cdata
0 1 7 2 2 0\\
1 6 5 5 5 1\\
1 5 4 2 7 2\\
2 4 3 3 3 3\\
}
]
table {
x y z\\
0 2 0\\% 0
2 2 0\\% 1
0 1 3\\% 2
0 0 3\\% 3
1 0 3\\% 4
2 0 2\\% 5
2 0 0\\% 6
1 1 2\\% 7
};
% replicate the vertex list to show \coordindex:
\addplot3[only marks,nodes near coords=\coordindex]
table[row sep=\\] {
0 2 0\\ 2 2 0\\ 0 1 3\\ 0 0 3\\
1 0 3\\ 2 0 2\\ 2 0 0\\ 1 1 2\\
};
\end{axis}
\end{tikzpicture}
\end{document}
第一个\addplot
命令(直到分号;
)提供了两个表: 的参数patch table with point meta
包含连接信息,即另一个表中从零开始的整数索引。该连接表中的每一行组成一个多边形。每个多边形的顶点数由 固定vertex count=5
,但允许多边形有多个相同的顶点。此处连接表的最后一列是颜色数据;它被线性映射到当前colormap
以控制使用哪种颜色来填充面片。外面的表是顶点表(此处为 8)。
第二条命令只是在其余命令之上\addplot3
添加一个图(即显示每个顶点的标签)。nodes near coords
该patch plots
库具有通过 z 缓冲z buffer=sort
、颜色映射和 3d 轴支持的功能。
请注意,可以通过 TikZ 绘图指令添加图顶部的注释。