如何使用 \psVector 替代 \rlineto 来绘制狄奥多罗斯螺旋?

如何使用 \psVector 替代 \rlineto 来绘制狄奥多罗斯螺旋?

考虑以下最小工作示例。

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

\begin{document}
\begin{pspicture}[showgrid](-5,-5)(5,5)
\pscustom[linecolor=green]
{
    \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)
        \psline(0,0)(!!CP)
    }   
}
\end{pspicture}

\begin{pspicture}[showgrid](-5,-5)(5,5) 
    \psset{linecolor=blue}
    \psline(1,0)    
    \pstVerb{/Angle 0 def}%
    \psStartPoint(1,0)
    \multido{\i=1+1}{15}
    {
        \psVector[arrows=-](!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
        %\psline(0,0)(!!CP)
    }
\end{pspicture}

\end{document}

解释

有两种方法:

\begin{pspicture}[showgrid](-5,-5)(5,5)
\pscustom[linecolor=green]
{
    \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)
        \psline(0,0)(!!CP)
    }   
}
\end{pspicture}

生产

在此处输入图片描述

\begin{pspicture}[showgrid](-5,-5)(5,5) 
    \psset{linecolor=blue}
    \psline(1,0)    
    \pstVerb{/Angle 0 def}%
    \psStartPoint(1,0)
    \multido{\i=1+1}{15}
    {
        \psVector[arrows=-](!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
        %\psline(0,0)(!!CP)
    }
\end{pspicture}

生产

在此处输入图片描述

问题

第二种方法有什么问题?如何修复?我仍然想使用,psVector所以请不要把它扔进你的答案中。

答案1

\psVector宏中,坐标被评估两到三次,Angle每次都用不同的值重新定义。如果您想坚持使用\psVector,则必须将此定义移至单独的宏调用。此外,\psVector没有定义当前点,因此CP未定义。为此,您可以使用坐标cp.Xcp.Y,它们被定义为:

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

\begin{document}
\begin{pspicture}[showgrid](-5,-5)(5,5) 
    \psset{linecolor=blue}
    \psline(1,0)    
    \pstVerb{/Angle 0 def}%
    \psStartPoint(1,0)
    \multido{\i=1+1}{15}
    {
        \psVector[arrows=-](! 1 Angle 1 \i\space 1 sub sqrt atan add PtoC)
        \pstVerb{Angle 1 \i\space 1 sub sqrt atan add dup /Angle exch def }%
        \psline(0,0)(! cp.X cp.Y)
    }
\end{pspicture}
\end{document}

在此处输入图片描述

简化

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

\begin{document}
\begin{pspicture}[showgrid](-5,-5)(5,5) 
    \psset{linecolor=blue}
    \psline(1,0)  
    \pstVerb{/Angle 0 def}
    \psStartPoint(1,0)% <--- why is % needed? 
    \multido{\i=1+1}{15}
    {% <--- why is % needed?
        \pstVerb{Angle 1 \i\space 1 sub sqrt atan add  /Angle exch def }
        \psVector[arrows=-](! 1 Angle PtoC)
        \psline(0,0)(! cp.X cp.Y)
    }
\end{pspicture}
\end{document}

相关内容