![\nodexn и savedNodeCoors плохо взаимодействуют друг с другом](https://rvso.com/image/281606/%5Cnodexn%20%D0%B8%20savedNodeCoors%20%D0%BF%D0%BB%D0%BE%D1%85%D0%BE%20%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D1%83%D1%8E%D1%82%20%D0%B4%D1%80%D1%83%D0%B3%20%D1%81%20%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%BC.png)
Этот вопрос возник в результате попытки ответить на другой вопрос, ранее опубликованный @StiffJokes (он же user:19356), но теперь удаленный.
Каждый из следующих MWE выдает разные результаты для pspicture
способом, который я нахожу совершенно контринтуитивным. Первые два примера отличаются только тем, как был установлен border
для standalone
класса. Третий пример использует 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
чтобы получить координаты для центра, все идет наперекосяк.
Изменяя координаты точек A
, можно получить кардинальные изменения B
новых координат :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
не учитывается существование saveNodeCoors
такой переменной N-<node_name>.x
и N-<node_name>.y
она остается неинициализированной.
Следующий код создает 5 одинаковых pspicture
«но» N-<node_name>.x
и N-<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}