TikZ 中二维和三维坐标的不同解释

TikZ 中二维和三维坐标的不同解释

考虑以下 MWE:

\documentclass[border=5pt]{standalone}

\usepackage{tikz}

\begin{document}

\tikzset{
  pics/aline/.style={
    code= {\draw (0,0) -- (#1,0); }
  },
  pics/bline/.style={
    code= {\draw (0,0,0) -- (#1,0,0); }
  }
}

\begin{tikzpicture}
   \pic at (0,0) {aline=1};
   \pic at (0,1) {aline=1cm};
   \pic at (0,2) {aline=1pt};

   \pic at (0,-1) {bline=1};
   \pic at (0,-2) {bline=1cm};
   \pic at (0,-3) {bline=1pt};
\end{tikzpicture}

\end{document}

我希望两个输出看起来相同。但是,对于aline1 似乎对应于 1cm,而对于 1bline似乎对应于 1pt:

在此处输入图片描述

我猜这是由于解释造成的,但我不太明白发生了什么以及为什么。

答案1

据我所知(手册上似乎没有明确说明),任何用三个逗号分隔元素的坐标X, 和传递给\pgfpointxyz。每个都转换为点,并且然后使用 x、y 和 z 向量进行转换。

所以1cm转换为28.46274然后使用 x、y 和 z 向量进行变换,如下所示。

\documentclass[tikz, border=5pt]{standalone}
\begin{document}
\begin{tikzpicture}
\draw [blue] (0,0,0) -- (1cm,0,0);
\draw [red]  (0,1,0) -- (28.46274, 1,0);
\end{tikzpicture}
\end{document} 

在此处输入图片描述

我猜这意味着在实践中只有无量纲数字才应该与xyz坐标系一起使用。

可以如果有人觉得大胆,可以重新定义\pgfpointxyz以检查单位是否已给出,然后除以适当的向量。这可能会对其他代码产生意想不到的副作用。

\documentclass[tikz, border=5pt]{standalone}
\makeatletter
\def\pgfpointxyz#1#2#3{%
  \pgfmathparse{#1}%
  \ifpgfmathunitsdeclared\pgfmathparse{\pgfmathresult/\pgf@xx}\fi%
  \let\pgftemp@x=\pgfmathresult%
  \pgfmathparse{#2}%
  \ifpgfmathunitsdeclared\pgfmathparse{\pgfmathresult/\pgf@yy}\fi%
  \let\pgftemp@y=\pgfmathresult%
  \pgfmathparse{#3}%
  \ifpgfmathunitsdeclared\pgfmathparse{\pgfmathresult/\pgf@zz}\fi%
  \let\pgftemp@z=\pgfmathresult%
  \pgf@x=\pgftemp@x\pgf@xx%
  \advance\pgf@x by \pgftemp@y\pgf@yx%
  \advance\pgf@x by \pgftemp@z\pgf@zx%
  \pgf@y=\pgftemp@x\pgf@xy%
  \advance\pgf@y by \pgftemp@y\pgf@yy%
  \advance\pgf@y by \pgftemp@z\pgf@zy}
\begin{document}
\begin{tikzpicture}
\draw [blue] (0,0,0) -- (1cm,0,0);
\draw [red]  (0,1,0) -- (28.46274, 1,0);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容