\nodexn と savedNodeCoors がうまく連携しない

\nodexn と savedNodeCoors がうまく連携しない

この質問は、@StiffJokes (別名ユーザー:19356) が以前投稿した別の質問 (現在は削除されています) に回答しようとして発生しました。

次の各 MWE は、 に対して異なる結果を生成しますが、これはpspictureまったく直感に反すると思います。最初の 2 つの例は、クラスborderの のstandalone設定方法のみが異なります。3 番目の例では、articleクラスを使用します。

MWE #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}

その結果

ここに画像の説明を入力してください

MWE #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}

その結果:

ここに画像の説明を入力してください

MWE #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劇的に変化します。

MWE #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}

ここに画像の説明を入力してください

関連情報