当我想从未平移的原点到当前点绘制一条径向线时,如何取消 \translate 的效果?

当我想从未平移的原点到当前点绘制一条径向线时,如何取消 \translate 的效果?

首先考虑以下 MWE。

\documentclass[pstricks,border=12pt]{standalone}
\SpecialCoor
\usepackage{multido}
\begin{document}

% draw the tangential lines
\begin{pspicture}[showgrid](-5,-5)(5,5)
\pscustom[linecolor=red]
{
    \psline(1,0)
    \code{0 /Angle ED}
    \multido{\i=1+1}{15}
    {
        \translate(!!CP)
        \lineto(!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
    }       
}
\end{pspicture}

% draw the radial lines
\begin{pspicture}[showgrid](-5,-5)(5,5)
\pscustom[linecolor=blue]
{
    \psline(1,0)
    \code{0 /Angle ED}
    \multido{\i=1+1}{15}
    {
        \translate(!!CP)
        \moveto(!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
        \psline[liftpen=2](0,0)(!!CP)% draw from the UNTRANSLATED origin to the current point
    }       
}
\end{pspicture}

\end{document}

它产生如下两个输出。

在此处输入图片描述在此处输入图片描述

客观的

红色曲线由单位切向量连接而成

\pscustom[linecolor=red]
{
    \psline(1,0)
    \code{0 /Angle ED}
    \multido{\i=1+1}{15}
    {
        \translate(!!CP)
        \lineto(!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
    }       
}

而蓝色曲线不是我想要得到的。

\pscustom[linecolor=blue]
{
    \psline(1,0)
    \code{0 /Angle ED}
    \multido{\i=1+1}{15}
    {
        \translate(!!CP)
        \moveto(!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
        \psline[liftpen=2](0,0)(!!CP)% draw from the UNTRANSLATED origin to the current point
    }       
}

蓝色图表应表示从原点到单位切向量尖端出现的一组径向线。

问题

如何从未平移原点到当前点画一条线?换句话说,如何从绝对原点到当前点画一条线?

笔记

请在下面给定的占位符中添加代码。

\pscustom[linecolor=blue]
{
    \psline(1,0)
    \code{0 /Angle ED}
    \multido{\i=1+1}{15}
    {
        % you can add code here
        \translate(!!CP)
        \moveto(!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
        %\psline[liftpen=2](0,0)(!!CP)% draw from the UNTRANSLATED origin to the current point
        % or you can add code here
    }       
}

答案1

使用\translate(!!CP)移动整个坐标系,这样 就(0,0)不再指向同一原点。您可以不使用 来编写整个部分\translate,但可以使用相对线和移动操作(\rlineto\rmoveto):

\documentclass[pstricks,border=12pt]{standalone}
\SpecialCoor
\usepackage{multido}
\begin{document}
\makeatletter
% draw the tangential lines
\begin{pspicture}[showgrid](-5,-5)(5,5)
\pscustom[linecolor=red]
{
    \psline(1,0)
    \code{0 /Angle ED}
    \multido{\i=1+1}{15}
    {
        \rlineto(!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
    }       
}
\end{pspicture}

% draw the radial lines
\begin{pspicture}[showgrid](-5,-5)(5,5)
\pscustom[linecolor=blue]
{
    \psline(1,0)
    \code{0 /Angle ED}
    \multido{\i=1+1}{15}
    {
        \rmoveto(!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
        \psline[liftpen=2](0,0)(!!CP)
    }       
}
\end{pspicture}
\makeatother
\end{document}

在此处输入图片描述在此处输入图片描述

如果只是忽略平移,那么您可以将原点定义为节点。节点保存当前矩阵,并恢复相同的点,而不管在此期间进行了哪些平移和缩放:

\documentclass[pstricks,border=12pt]{standalone}
\SpecialCoor
\usepackage{multido}
\usepackage{pst-node}
\begin{document}
% draw the radial lines
\begin{pspicture}[showgrid](-5,-5)(5,5)
\pnode(0,0){Origin}
\pscustom[linecolor=blue]
{
    \psline(1,0)
    \code{0 /Angle ED}
    \multido{\i=1+1}{15}
    {
        \translate(!!CP)
        \moveto(!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
        \psline[liftpen=2](Origin)(!!CP)
    }       
}
\end{pspicture}
\end{document}

相关内容