根据 3D 位置绘制 TikZ 项目,而不是代码中的出现顺序

根据 3D 位置绘制 TikZ 项目,而不是代码中的出现顺序

我使用 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 绘图指令添加图顶部的注释。

相关内容