\usetikzlibrary{3d} 和 \usepackage{tikz-3dplot} 之间的区别

\usetikzlibrary{3d} 和 \usepackage{tikz-3dplot} 之间的区别

这两个 tikz 库对于 3D 图有什么区别吗?

我找到tikz-3dplot加拿大运输安全局,但是 \usetikzlibrary{3d} 没有任何内容。

可能与tikz 3d 库的文档

答案1

tikz-3dplots(末尾没有)会自动加载3d库(以及calc)。因此,它具有库的所有功能,3d因为它会加载它。此外,它还具有允许安装 3d 视图的命令,如\tdplotsetmaincoords\tdplotsetrotatedcoords,以及用于绘制真实 3d 图的命令(因此得名)。在 Ti 中安装 3d 视图的其他方法Z 是使用perspective库(键名为3d view)或pgfplots(键为view和类似键)。遗憾的是,这些包/库之间的视角约定不同。

该库的主要目的3d是切换到坐标平面(例如canvas is xy plane at z=<z>),当然,一旦建立了适当的 3D 视图,这便是最有意义的。

Ti 支持 3d 坐标Z 无需多言。但是,预定义视图不是正交的。您可以通过仔细选择和 来纠正这个问题x,但使用上述工具会更方便。yz

这个例子旨在说明其中的一些说法。

\documentclass[tikz,border=3mm]{standalone}
\usepackage{tikz-3dplot}
\usetikzlibrary{perspective}
\begin{document}
\begin{tikzpicture}[cube/.style={insert path={
  (-1,-1,-1) edge ++(0,0,2) -- (1,-1,-1) edge ++(0,0,2)
  -- (1,1,-1) edge ++(0,0,2) -- (-1,1,-1) edge ++(0,0,2) -- cycle
  (-1,-1,1) -- (1,-1,1) -- (1,1,1) -- (-1,1,1) -- cycle
  }}]
 \def\LabelPlanes{  
  \node[canvas is xy plane at z=1,transform shape]{xy plane};
  \node[canvas is xz plane at y=1,transform shape]{xz plane};
  \node[canvas is yz plane at x=1,transform shape]{yz plane};} 
 \begin{scope}[local bounding box=A]
  \draw[cube];
  \LabelPlanes
 \end{scope}
 \path (A.south) node[below]{plain Ti\emph{k}Z};
 %
 \tdplotsetmaincoords{70}{110}% theta,phi     
 \begin{scope}[xshift=4cm,tdplot_main_coords,local bounding box=B]
  \draw[cube];
  \LabelPlanes
 \end{scope}
 \path (B.south) node[below]{\texttt{tikz-3dplot}};
 %
 \begin{scope}[xshift=8cm,3d view={110}{20},% phi,90-theta of tikz-3dplot
    local bounding box=C]
  \draw[cube];
  \LabelPlanes
 \end{scope}
 \path (C.south) node[below]{\texttt{perspective}};
\end{tikzpicture}
\end{document}

在此处输入图片描述

最左边的图片不是立方体的正交投影,但显示了你可以在 Ti 中使用 3d 坐标Z 马上。接下来的图片显示了立方体在相同投影tikz-3dplot和透视中的情形,可以看出纬度角(通常称为 theta)的约定不同。该示例还说明了3d库的一个(也许是主要)应用:在坐标平面上投影某物。这适用于节点,如图所示,但当然也适用于绘图和外部图形。

请注意,透视库的主要目的不是安装 3D 视图。相反,正如其名称所暗示的那样,它允许安装三点透视视图,但这个讨论超出了本答案的范围。

相关内容