为什么使用剪辑时对象会向左移动?

为什么使用剪辑时对象会向左移动?

如果不进行裁剪,输出位置是正确的:

在此处输入图片描述

经过剪辑后,输出位置是错误的,因为它向左移动:

在此处输入图片描述

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-eucl}


\psset
{
    unit=0.8cm,
    runit=\psunit,
    fillstyle=solid,
    PointName=none,
    PointSymbol=none,
}

\pstVerb
{
    true setglobal
    globaldict begin
    /theta 76 def
    /Major 6.0 def
    /Minor 3.3 def
    /p2c {dup 3 1 roll cos mul 3 1 roll sin mul} bind def
    end
    false setglobal
}

\def\DeclareNodes
{%
    \pstGeonode
        (0,-8){Bottom}%
        (0,8){Top}%
        (0,0){center}%
        (0,2.7){A}%
        (0.5,2.7){B}%
        (1,3.25){C}%
        (1.2,1.3){D}%
        (1.3,1.0){E}%
        (2.0,1.0){F}%
        (3.0,1.0){G}%
        (3.0,2.2){H}%
        (!Minor Major theta p2c){I}%
        (!Minor Major theta neg p2c){J}%
        (4,-2){K}%
        (4,0){L}%
        (2.2,-1.8){M}%
        (1.5,-1){N}%
        (1,-1){O}%
        (0,-3.2){P}%
    \pstOrtSym{Bottom}{Top}{B,C,D,E,F,G,H,I,J,K,L,M,N,O}%
}

\def\RightPart
{%
    \psline(A)(B)(C)%
    \psbezier(D)(E)(F)%
    \psbezier(G)(H)(I)%
    \psellipticarcn[dimen=middle](center)(!Major Minor){(I)}{(J)}%middle must be set!
    \psbezier(K)(L)(M)%
    \psbezier(N)(O)(P)%
}


\def\LeftPart
{%
    \psbezier(O')(N')(M')%
    \psbezier(L')(K')(J')%
    \psellipticarcn[dimen=middle](center)(!Major Minor){(J')}{(I')}%middle must be set!
    \psbezier(H')(G')(F')%
    \psbezier(E')(D')(C')%
    \psline(B')%
}%


\begin{document}


\begin{pspicture}[showgrid=top](-7,-4)(7,4)
    \DeclareNodes
    \pscustom*{\RightPart\LeftPart\closepath}
\end{pspicture}


\begin{pspicture}[showgrid=top](-7,-4)(7,4)
    \DeclareNodes
    \begin{psclip}{\pscustom[linestyle=none]{\RightPart\LeftPart\closepath}}
            \psframe*(-7.5,-5)(7.5,5)
    \end{psclip}
\end{pspicture}


\end{document}

答案1

免责声明:我不使用pstricks也无法理解您用来绘制蝙蝠侠形象的 PostScript 代码,但尽管如此,我认为我可以提供一些有关您的示例中的问题的线索。

正如评论中所说,移位并不是第二幅图中的唯一区别,还引入了不对称性。我认为这可能是由于在剪辑之前声明了节点,所以我尝试移动内部节点的声明psclip,如下所示:

\begin{pspicture}[showgrid=top](-7,-4)(7,4)
 \begin{psclip}{\DeclareNodes\pscustom[linestyle=none]{\RightPart\LeftPart\closepath}}
   \psframe*(-7.5,-5)(7.5,5)
 \end{psclip}
\end{pspicture}

这样,不对称性就消失了,但向左的偏移变成了向右的微小偏移。我对此不太确定,因为出于某种未知原因,我没有将网格叠加在数字上,因此很难进行比较。

这是我得到的(我把它放在\fbox网格周围以帮助自己):

结果

请注意,在我的输出中,第一个图中已经存在不对称,但第二个图中的不对称是相同的(之前\DeclareNodes第二psclip个图中的不对称更加明显)。

相关内容