我们如何解释 \rput、\psGetNodeCenter 和 saveNodeCoors 的行为?

我们如何解释 \rput、\psGetNodeCenter 和 saveNodeCoors 的行为?

介绍

我正在为新手写一篇关于 PSTricks 的简短介绍教程。我很难解释节点A(例如)、\rput(!\psGetNodeCenter{A} A.x A.y)(!N-A.x N-A.y)设计工作原理。

我已阅读pst-node如下所示的文档。

在此处输入图片描述

在此处输入图片描述

以下内容摘自第 35-36 页:

在此处输入图片描述

手册上说:

  • 变换矩阵将被重置\psGetNodeCenter
  • (!N-A.x N-A.y)不受影响\rput

我读了很多遍,还是有些困惑。语句太短了。

问题

请考虑下图以进行剩余的讨论。

在此处输入图片描述

  • 情况1

    A在外面定义一个节点\rput,并用 翻译一个点\rput

    • (!\psGetNodeCenter{A} A.x A.y)

      \pnode(2,2){A}
      \rput(1,1){\psdots(!\psGetNodeCenter{A} A.x A.y)}
      
    • (!N-A.x N-A.y)

      \pnode(2,2){A}
      \rput(1,1){\psdots(!N-A.x N-A.y)}
      

    结果不同。\rput只影响(!N-A.x N-A.y)

  • 案例 2

    A里面定义了一个节点\rput,并用 翻译了一个点\rput

    • (!\psGetNodeCenter{A} A.x A.y)

      \rput(1,1){\pnode(2,2){A}\psdots(!\psGetNodeCenter{A} A.x A.y)}
      
    • (!N-A.x N-A.y)

      \rput(1,1){\pnode(2,2){A}\psdots(!N-A.x N-A.y)}
      

    结果相同。\rput影响两者。

  • 案例 3

    A里面定义一个节点\rput,外面定义一个点\rput

    • (!\psGetNodeCenter{A} A.x A.y)

       \rput(1,1){\pnode(2,2){A}}
       \psdots(!\psGetNodeCenter{A} A.x A.y)
      
    • (!N-A.x N-A.y)

       \rput(1,1){\pnode(2,2){A}}
       \psdots(!N-A.x N-A.y)
      

    结果不同。\rput只影响(!\psGetNodeCenter{A} A.x A.y)

MWE 如下。

\documentclass[margin=12pt]{standalone}
\usepackage{pst-node}
\addtopsstyle{gridstyle}{gridlabels=5pt}
\psset{saveNodeCoors,linecolor=red}
\everypsbox{\color{blue}}
\begin{document}

\begin{psmatrix}
\begin{pspicture}[showgrid=bottom](3,3)
    \rput(1,1){Case 1-A}
    \pnode(2,2){A}
    \rput(1,1){\psdots(!\psGetNodeCenter{A} A.x A.y)}
\end{pspicture}
&
\begin{pspicture}[showgrid=bottom](3,3)
    \rput(1,1){Case 1-B}
    \pnode(2,2){A}
    \rput(1,1){\psdots(!N-A.x N-A.y)}
\end{pspicture}
\\
% case 2
\begin{pspicture}[showgrid=bottom](3,3)
    \rput(1,1){Case 2-A}
    \rput(1,1){\pnode(2,2){A}\psdots(!\psGetNodeCenter{A} A.x A.y)}
\end{pspicture}
&
\begin{pspicture}[showgrid=bottom](3,3)
    \rput(1,1){Case 2-B}
    \rput(1,1){\pnode(2,2){A}\psdots(!N-A.x N-A.y)}
\end{pspicture}
\\
% case 3
\begin{pspicture}[showgrid=bottom](3,3)
    \rput(1,1){Case 3-A}
    \rput(1,1){\pnode(2,2){A}}
    \psdots(!\psGetNodeCenter{A} A.x A.y)
\end{pspicture}
&
\begin{pspicture}[showgrid=bottom](3,3)
    \rput(1,1){Case 3-B}
    \rput(1,1){\pnode(2,2){A}}
    \psdots(!N-A.x N-A.y)
\end{pspicture}
\end{psmatrix}
\end{document}

问题

由于文档中的陈述似乎不清楚,我该如何向新手解释他们的行为?

注:由于(!\psGetNodeCenter{A} A.x A.y)与相同(A),因此(A)这里不再讨论。

如果你是一名老师,你会怎样向你的学生解释呢?

答案1

(A)关键点在于理解由 创建的节点\pnode与一对坐标之间的区别(x,y)

  • 坐标对,例如(1,1)指定一个相对的点。其位置取决于当前环境,无论是surrounded by \psdot(1,1) text,还是 ,或者 随 而移位\rput(2,2){\psdot(1,1)}等。

  • 节点(A)是指页面上的绝对固定点。它与环境无关。

下面的例子继续这一过程。

\documentclass[pstricks, margin=12pt]{standalone}
\usepackage{pst-node}
\begin{document}
\begin{pspicture}[showgrid](2,2)
    \rput(1,1){%
        \pnode(1,1){A}}
    \psdot(A)
    \pnode(1,1){B}
    \rput(1,1){%
        \psdot[linecolor=red](B)}
    \end{pspicture}
  \end{document}

黑点位于 处(2,2,因为移动了用于定义节点 的\rput坐标对。红点保留在 处,因为定义后对 没有任何影响:(1,1A(1,1)\rput(B)

在此处输入图片描述

这就是所有节点的本质。

关于\psGetNodeCenter,你是对的:在这方面使用(!\psGetNodeCenter{A} A.x A.y)相当于(A)

该参数saveNodeCoors保存相对的节点定义时的坐标。例如,在上面的例子中,在(!N-A.x N-A.y)和处添加点会在 处放置两个点,它们是用于定义两个节点和 的坐标对:(!N-B.x N-B.y)(1,1)AB

\documentclass[pstricks, margin=12pt]{standalone}
\usepackage{pst-node}\SpecialCoor
\begin{document}
\begin{pspicture}[showgrid, saveNodeCoors](2,2)
    \rput(1,1){%
        \pnode(1,1){A}}
    \psdot(A)
    \pnode(1,1){B}
    \rput(1,1){%
        \psdot[linecolor=red](B)}
    %
    \psdot[dotstyle=+, dotscale=2](!N-A.x N-A.y)
    \psdot[dotstyle=x, dotscale=2](!N-B.x N-B.y)
    \end{pspicture}
  \end{document}

在此处输入图片描述

继续说:

  • 像 或 这样的坐标(1, 1)对节点表达式是相对的,并且可以像、等! N-A.x N-A.y一样进行缩放和平移。\rput\scale\translate

  • 节点(A)和节点表达式\psGetNodeCenter是固定的、“不可变的”点。

相关内容