平均能量损失

平均能量损失

\pstTranslation在以下 MWE 中,只有通过计算的和角度的组合N-P.y N-P.x atan 90 sub会产生误差。

如何解决?

平均能量损失

\documentclass[pstricks,margin=1cm]{standalone}
\usepackage{pst-eucl}
\psset{saveNodeCoors,PointName=none,PointSymbol=none}

\def\Pic#1#2#3{%
\begin{pspicture}[showgrid](4,5)
% node type switch
\ifnum#1=0\relax
    \pnode(0,0){O}
    \pnode(2,1){A}
    \pnode(1,4){B}
\else
    \pstGeonode
        (0,0){O}
        (2,1){A}
        (1,4){B}
\fi
% transformation switch
\ifnum#2=0\relax
    \nodexn{(B)-(A)}{P}
\else   
    \pstTranslation{A}{B}{O}[P]
\fi
%
    \pcline(A)(B)
    \pscircle(A){1}
% angle calculation switch
\ifnum#3=0\relax
    \uput{1}[(P)]{!\psGetNodeCenter{P}P.y P.x atan 90 sub}(>A){\psline[linecolor=red]{->}(0,1)}
\else
    \uput{1}[(P)]{!N-P.y N-P.x atan 90 sub}(>A){\psline[linecolor=red]{->}(0,1)}
\fi
\end{pspicture}}


\begin{document}
\Pic{1}{0}{1}
\Pic{1}{0}{0}
%\Pic{1}{1}{1}
\Pic{1}{1}{0}
\Pic{0}{0}{1}
\Pic{0}{0}{0}
%\Pic{0}{1}{1}
\Pic{0}{1}{0}
\end{document}

答案1

{!\psGetNodeCenter{P}P.y P.x atan 90 sub ... 只能与默认的 PSTricks 节点一起使用,而不能与 定义的节点一起使用\pstGeonode。使用类似

[...]
\pnode(P){P1}
\uput{1}[(P)]{!\psGetNodeCenter{P1} P1.y P1.x atan 90 sub}(>A){%
  \psline[linecolor=red]{->}(0,1)}
[...]

答案2

基于Christoph 的解释,我可以总结如下:

如果是由转换宏( 或其他)内部的节点创建宏(或)B创建的节点,则提供的点将\pnode\pstGeonode\rput\uput(!N-B.y N-B.x)saveNodeCoors=true不是(!\psGetNodeCenter{B} B.y B.x)与或相同(B)B通过\pnode(B){C}或进行缓冲\pstGeonode(B){C}是一种使它们表现相同的方法。

在以下示例中,

  • 红点代表用 创建的点(!N-B.x N-B.y)
  • 绿点代表用 创建的点(!N-C.x N-C.y)
  • 蓝点表示用(B)或创建的点(!\psGetNodeCenter{B} B.y B.x)。由于 的(B)行为与 相同 ,因此仅给出了(!\psGetNodeCenter{B} B.y B.x)的用法。(B)

绿点(!N-C.x N-C.y)和蓝(B)点位于同一位置,但红(!N-B.x N-B.y)点则不然。

案例 1:使用文字创建节点(x,y)

\documentclass[pstricks,border=1cm]{standalone}
\usepackage{pst-node}

\begin{document}

\begin{pspicture}[saveNodeCoors,showgrid](4,6)
    \rput(1,2){\pnode(3,4){B}}
    \pnode(B){C}
    \pscircle*[linecolor=red](!N-B.x N-B.y){4pt}
    \pscircle*[linecolor=green](!N-C.x N-C.y){3pt}
    \pscircle*[linecolor=blue](B){2pt}
\end{pspicture}    
\end{document}

在此处输入图片描述

评论:

\rput(1,2){\pnode(3,4){B}}
\pnode(B){C}

产生以下结果。

  • (B)=(1+3,2+4)<--- 翻译效果
  • N-B.y=4并且N-B.x=3<--- 没有翻译效果
  • (C)=(B)=(1+3,2+4)

案例 2:使用另一个节点创建节点

\documentclass[pstricks,border=1cm]{standalone}
\usepackage{pst-node}

\begin{document}    
\begin{pspicture}[saveNodeCoors,showgrid](4,6)
    \pnode(3,4){A}
    \rput(1,2){\pnode(A){B}}
    \pnode(B){C}
    \pscircle*[linecolor=red](!N-B.x N-B.y){4pt}
    \pscircle*[linecolor=green](!N-C.x N-C.y){3pt}
    \pscircle*[linecolor=blue](B){2pt}
\end{pspicture}    
\end{document}

在此处输入图片描述

评论:

\pnode(3,4){A}
\rput(1,2){\pnode(A){B}}
\pnode(B){C}

产生以下结果。

  • (B)=(A)=(3,4)<--- 翻译无效果
  • N-B.y=4-2并且N-B.x=3-1<--- 翻译的效果是一样的,但是却是相反的。很奇怪吗?
  • (C)=(B)=(3,4)

推荐

N-B.y由于and的行为与orN-B.x不同,最好避免使用and 。它们容易让人混淆!B(!\psGetNodeCenter{B} B.y B.x)N-B.yN-B.x

相关内容