在将节点作为方向角传递给 \uput 之前,我必须对节点应用什么转换?

在将节点作为方向角传递给 \uput 之前,我必须对节点应用什么转换?

考虑以下代码

\documentclass[pstricks,12pt]{standalone}
\usepackage{pst-node}
\usepackage{pgfmath}% don't forget this line!
\psset{saveNodeCoors}
\degrees[13]
\begin{document}
\makeatletter
\begin{pspicture}(-4,-4)(4,4)
\foreach \i [count=\j from 0] in {A,2,3,4,5,6,7,8,9,T,J,Q,K}
{
    \pnodes(!3 \j\space neg \pst@angleunit 90 add PtoC){X\i}
    \qdisk(X\i){2pt}
    \uput[!N-X\i.y N-X\i.x atan 1 \pst@angleunit div](X\i){\i}
    %\uput[(X\i)](X\i){\i}
    %\uput[!\psGetNodeCenter{X\i} X\i.y X\i.x atan 1 \pst@angleunit div](X\i){\i}
}
\end{pspicture}
\makeatother
\end{document}

输出如下。

在此处输入图片描述

但如果我使用

\uput[(X\i)](X\i){\i}
\uput[!\psGetNodeCenter{X\i} X\i.y X\i.x atan 1 \pst@angleunit div](X\i){\i}

我得到了以下错误的输出。

在此处输入图片描述

根据赫伯特几十年前的回应(我不知道在这个网站的具体位置),对(N-<node>.xN-<node>.y)和(<node>.x<node>.y)具有不同的变换矩阵。

问题是,在将节点作为方向角X\i传递之前,我必须对节点应用什么变换矩阵才能得到相同的正确结果?\uput

更新

当圆心不在原点时,遗憾的是\uput[(NODE)](>NODE){contents}它不再起作用。

\documentclass[pstricks,border=20pt]{standalone}
\usepackage{pst-node,pst-plot}  
\pstVerb{/XX 3 def /YY 4 def}

\degrees[12]

\makeatletter
\def\object#1{%
\begin{pspicture}[saveNodeCoors,showgrid](0,1)(6,7)
    \pnode(!XX YY){P}
    \pscircle(!XX YY){2}
    \curvepnodes[plotpoints=13]{0}{12}{2 t \pst@angleunit PtoC YY add exch XX add exch}{R}
    \multido{\i=0+1}{\Rnodecount}
    {%
        \pstVerb
        {
            /ALPHA {\i\space} def
            %/ALPHA {N-R\i.y N-P.y sub N-R\i.x N-P.x sub atan 1 \pst@angleunit div} def
            %/ALPHA {\psGetNodeCenter{R\i}\psGetNodeCenter{P} R\i.y P.y sub R\i.x P.x sub atan 1 \pst@angleunit div} def % IT CANNOT BE USED!
            %/BETA {ALPHA 90 1 \pst@angleunit div sub} def
            /BETA {\i\space 90 1 \pst@angleunit div sub} def
        }%
        \ifcase#1
            \psset{linecolor=red}
            \uput[\i]{!BETA}(R\i){$R_{\i}$}
        \or
            \psset{linecolor=green}
            \uput[!ALPHA]{!BETA}(R\i){$R_{\i}$}
        \or
            \psset{linecolor=blue}
            \uput[(R\i)]{!BETA}(>R\i){$R_{\i}$}
        \fi
        \psline(!XX YY)(R\i)
    }
\end{pspicture}}
\makeatother

\begin{document}
\foreach \x in {0,...,2}{\object{\x}}
\end{document}

案例 0

在此处输入图片描述

情况1

在此处输入图片描述

案例 2

在此处输入图片描述

答案1

>使用位置节点的前缀可以实现所需的行为,即使用\uput[(X\x)](>X\x){\x}

\documentclass[pstricks,margin=12pt]{standalone}
\usepackage{pst-node}
\usepackage{pgfmath}
\degrees[13]
\begin{document}
\makeatletter
\begin{pspicture}(-4,-4)(4,4)
\foreach \x [count=\xi from 0] in {A,2,3,4,5,6,7,8,9,T,J,Q,K}
{
    \pnodes(!3 \xi\space neg \pst@angleunit 90 add PtoC){X\x}
    \qdisk(X\x){2pt}
    \uput[(X\x)](>X\x){\x}
}
\end{pspicture}
\makeatother
\end{document}

在此处输入图片描述

这相当于第三个版本

\uput[!\psGetNodeCenter{X\x} X\x.y X\x.x Atan 1 \pst@angleunit div](>X\x){\x}

似乎这种语法正是为这种\uput行为而引入的,请参阅texdoc pst-news10

答案2

\documentclass[pstricks,margin=12pt]{standalone}
\usepackage{pst-node}
\degrees[13]
\begin{document}

\begin{pspicture}(-4,-4)(4,4)
\psforeach{\x}{A,2,3,4,5,6,7,8,9,T,J,Q,K}{%
    \pnode(3;\the\psLoopIndex){X\x}
    \qdisk(X\x){2pt}
    \nput[labelsep=12pt]{(X\x)}{X\x}{\red\x}
    \pcline[linestyle=none](0,0)(X\x)\ncput[npos=0.7,nrot=:R]{\x}
    \nput[labelsep=-15pt,rot=\the\psLoopIndex]{\the\psLoopIndex}{X\x}{\green\x}
    \uput{20pt}[\the\psLoopIndex](X\x){\blue\x}
    \psline[linestyle=dotted](3;\the\psLoopIndex)
}

\end{pspicture}
\end{document}

在此处输入图片描述

相关内容