\nodexn 和 savedNodeCoors 不能很好地相互配合

\nodexn 和 savedNodeCoors 不能很好地相互配合

该问题源于尝试回答@StiffJokes(又名用户:19356)之前发布但现已被删除的另一个问题。

以下每个 MWE 都会以pspicture我认为完全违反直觉的方式产生不同的结果。前两个示例仅在类的设置方式上有所不同borderstandalone第三个示例使用article类。

最大能量损失 #1:

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node}
%% using pgffor just to see what happens at different values
\usepackage{pgffor}
\begin{document}
\begin{pspicture}[showgrid](-1,-1)(3,3)
    \psset{saveNodeCoors=true}
    \pnode (0,0){A}
    \pnode (2,3){B}
    \foreach \myp in {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.00}
    {
      \pgfmathparse{1-\myp}
      \edef\myq{\pgfmathresult}
      \nodexn{\myp(A)+\myq(B)}{V}
      \qdisk(V){2pt}
      \pnode(!  N-V.x N-V.y ){D}
      \psline(A)(D)
    }
\end{pspicture}
\end{document}

导致

在此处输入图片描述

最大能量损失 #2:

\documentclass[pstricks,border=1in]{standalone}
\usepackage{pst-node}
%% using pgffor just to see what happens at different values
\usepackage{pgffor}
\begin{document}
\begin{pspicture}[showgrid](-1,-1)(3,3)
    \psset{saveNodeCoors=true}
    \pnode (0,0){A}
    \pnode (2,3){B}
    \foreach \myp in {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.00}
    {
      \pgfmathparse{1-\myp}
      \edef\myq{\pgfmathresult}
      \nodexn{\myp(A)+\myq(B)}{V}
      \qdisk(V){2pt}
      \pnode(!  N-V.x N-V.y ){D}
      \psline(A)(D)
    }
\end{pspicture}
\end{document}

导致:

在此处输入图片描述

最大能量损失 #3:

\documentclass{article}
\usepackage{pstricks,pst-node}
%% using pgffor just to see what happens at different values
\usepackage{pgffor}
\begin{document}
\begin{pspicture}[showgrid](-1,-1)(3,3)
    \psset{saveNodeCoors=true}
    \pnode (0,0){A}
    \pnode (2,3){B}
    \foreach \myp in {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.00}
    {
      \pgfmathparse{1-\myp}
      \edef\myq{\pgfmathresult}
      \nodexn{\myp(A)+\myq(B)}{V}
      \qdisk(V){2pt}
      \pnode(!  N-V.x N-V.y ){D}
      \psline(A)(D)
    }
\end{pspicture}
\end{document}

导致:

在此处输入图片描述

有人能解释一下这是怎么回事吗?为什么会有差异?从某种程度上讲,的坐标V是正确的,因为这些点被绘制在它们所属的位置。但是,一旦你尝试使用! N-V.x N-V.y来获取中心的坐标,事情就会变得混乱。

通过改变点的坐标AB新的坐标D可能会发生巨大变化:

重金属污染指数#4

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node}
%% using pgffor just to see what happens at different values
\usepackage{pgffor}
\begin{document}
\begin{pspicture}[showgrid](-1,-1)(3,3)
    \psset{saveNodeCoors=true}
    \pnode (0,0){A}
    \pnode (2,0){B}
    \foreach \myp in {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.00}
    {
      \pgfmathparse{1-\myp}
      \edef\myq{\pgfmathresult}
      \nodexn{\myp(A)+\myq(B)}{V}
      \qdisk(V){2pt}
      \pnode(!  N-V.x N-V.y ){D}
      \psline(A)(D)
    }
\end{pspicture}
\end{document}

在此处输入图片描述

答案1

\nodexn在内部使用辅助节点。当节点由节点设置时,您将获得相对坐标。根据表达式,\nodexn它仅适用于\psGetNodeCenter{Node}。“简单”表达式类似于\nodexn{1,1}{A}(没有()),则节点值相同。

顺便说一句:将这些问题写到 PSTricks 邮件列表更有意义。

答案2

我坚信,通过检查,不尊重变量\nodexn的存在并且未初始化。saveNodeCoorsN-<node_name>.xN-<node_name>.y

以下代码创建 5 个相同pspictureN-<node_name>.xN-<node_name>.y的值各自不同的值。

\documentclass[preview,border=1cm]{standalone}
\usepackage{pst-tools}
\usepackage{pst-node}
\psset{saveNodeCoors}


\begin{document}
\psLoop{5}{%
\begin{pspicture}(3,3)
    \pnode(1,1){A}
    \rput(0,2){\psPrintValue{N-A.x}}
    \rput(0,1){\psPrintValue{N-A.y}}
    %
    \nodexn{(1,1)}{B}
    \rput(2,2){\psPrintValue{N-B.x}}
    \rput(2,1){\psPrintValue{N-B.y}}
\end{pspicture}
\qquad}
\end{document}

在此处输入图片描述

相关内容