坐标和变换

坐标和变换

当对应用某些坐标变换时,该\pgfgetlastxy语法似乎没有产生正确的结果。coordinatestikzpicture

然而对于 s 来说一切都是正确的node,或者当我们drawcoordinate

这是否与在 TikZ 中变换定义的坐标

平均能量损失

\documentclass[tikz, border=20pt]{standalone}
\begin{document}
\begin{tikzpicture}
  [
    scale=.5,
    %cm={.5,0,0,.5,(0,0)}, %also changes the measurement
    %xslant=2, 
    %transform canvas= %fixes the measurement discrepancy
    %{
    %  scale=.5,
    %},
  ]

  \coordinate 
  [
    label=a,
    %circle, draw, %fixes the measurement discrepancy
  ]
  (a) at (1,1);
  \path (a);
  \pgfgetlastxy{\lastX}{\lastY}
  \node [anchor=north]at (0,0) {\verb|\lastX| for the coordinate : \lastX};

  \node 
  [
    label=b, 
    inner sep=0pt, 
    outer sep=0pt, 
    minimum height=0pt,
  ] (b) at (1,1){};
  \path (b);
  \pgfgetlastxy{\lastX}{\lastY}
  \node [anchor=south]at (0,0) {\verb|\lastX| for the node : \lastX};

\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

答案1

\pgf@x这样的PGF命令只是内部维度寄存器的捷径\pgf@y。定义比你想象的要简单

\def\pgfgetlastxy#1#2{%
  \edef#1{\the\pgf@x}%
  \edef#2{\the\pgf@y}%
}%

也就是说,由于所有高级计算都是由\pgf@x/ \pgf@y/ \pgf@xa/etc 完成的,因此不能保证这\pgf@x确实是你想要的,特别是在 TiZ. 对于 TiZ,有\tikz@lastx\tikz@lastxsaved

顺便说一句,正如@Salim Bou 提到的,(b.center)是一个坐标,但(b)不是。

当你写的时候\path(b)circle(0);,TiZ 会认真对待该节点,因为它想知道在哪里画圆。在本例中,结果是14...pt(0.5cm)。在本例中,实际发生的情况类似于\path(b.center)circle(0);。但是当你只写 时\path(b);,TiZ 根本就无事可做,\pgf@x可以做任何事情。

(当你写\path(5,5)--(b);,TiZ 将在 (c) 的边界上找到一个点(b),并在 (c) 的边界上找到一个点。我预计结果是边界上点的 x 坐标。但是,此计算可能是在组中完成的,因此您看不到\pgf@x变化。)

相关内容