TikZ 中用 3D 坐标绘制的线条的默认长度单位是什么?

TikZ 中用 3D 坐标绘制的线条的默认长度单位是什么?

LaTeX 代码:

\documentclass{article}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
\draw (0, 0) -- (1, 0) node [midway,below] {2D (1)};
\draw (0, -1) -- (1cm, -1) node [midway,below] {2D (1 cm)};
\draw (0, -2, 0) -- (1, -2, 0) node [midway,below] {3D (1)};
\draw (0, -3, 0) -- (1cm, -3, 0) node [midway,below] {3D (1cm)};
\end{tikzpicture}

\end{document}

输出:

在此处输入图片描述

我希望第三行和第四行的长度相等,因为我认为\draw命令中长度的默认单位是cm

为什么第 4 行比第 3 行长?事实上,第 4 行一直延伸到生成的 PDF 输出的右边缘。

答案1

请参阅手册第 13.2.1 节画布、XYZ 和极坐标系

当您执行 时(1,0)xyz将使用坐标系。在此坐标系中,给出的数字是乘以默认单位向量的因子,对于 x、y 和 z 分别为 (1cm, 0)、(0, 1cm) 和 (-3.85mm, -3.85mm)。这些数字通过数学解析器传递,因此您可以执行(1+2,0),这与 相同(3,0)

执行 时(1cm,0)canvas将使用坐标系,其中提供了特定维度。因此,此处的值不会乘以单位向量。(如果混合维度和标量,则pt标量的单位为单位,(1+2cm,0)因此不是与 相同(1+2,0),因为它变成了1pt+2cm。)

但是,当您指定三个分量时(x,y,z),您始终会得到xyz坐标系。因此,在与单位向量相乘之前,数学解析器会解析数字。如果您这样做\pgfmathparse{1cm}\pgfmathresult,您将得到28.45274,因为pt是“基本”单位,其他长度将转换为pt。您的第四条线长约 28.453 厘米,因为当您这样做时(1cm,0,0),x 分量最终会变成28.45274 × (1cm,0)

下面是一个更简单的例子来说明这种行为,其中给出了两条相同长度的线。

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0,0)    -- (2pt,0,0);
\draw (0,-0.5,0) -- (2,-0.5,0);
\end{tikzpicture}
\end{document}

下面是计算线长(以厘米为单位)的示例。请注意,我在 xyz 坐标中使用了 1mm 而不是 1cm:

代码输出

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

\begin{tikzpicture}
\coordinate (a) at (0,0,0);
\coordinate (b) at (1mm,0,0);
\draw
let
\p1=(a),\p2=(b),
% length of line in centimetres
% \x1,\x2 in pt, 72.27pt per inch, 2.54cm per inch
\n1={scalar((\x2-\x1)*2.54/72.27)}
in
(a) -- node [above] {\n1\,cm} (b);
\end{tikzpicture}
\end{document}

相关内容