如何从原点到 \psrline 的最后一个点画一条线?

如何从原点到 \psrline 的最后一个点画一条线?

考虑以下代码来绘制狄奥多罗斯螺旋。

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

\begin{document}

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


\begin{pspicture}[showgrid](-5,-5)(5,5)
  \psset{linecolor=red}
  \def\points{(0,0)(1,0)}%
  \pstVerb{/Angles 0 def}
  \multido{\i=1+1}{15}
  {
      \xdef\points{\points(!1 Angles 1 \i\space 1 sub sqrt atan add dup /Angles exch def PtoC)}
  }
  \expandafter\psrline\points
\end{pspicture}
\end{document}

解释

第一种方法是使用psStartPoint\psVector

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

生产

在此处输入图片描述

第二种方法\psrline

\begin{pspicture}[showgrid](-5,-5)(5,5)
  \psset{linecolor=red}
  \def\points{(0,0)(1,0)}%
  \pstVerb{/Angles 0 def}
  \multido{\i=1+1}{15}
  {
      \xdef\points{\points(!1 Angles 1 \i\space 1 sub sqrt atan add dup /Angles exch def PtoC)}
  }
  \expandafter\psrline\points
\end{pspicture}

产生如下的不完整输出。

在此处输入图片描述

问题

我如何才能从原点到\psrline每次迭代调用的最后一个点画一条线?

我尝试了以下但(!cp.X cp.Y)不存在。

  \begin{pspicture}[showgrid](-5,-5)(5,5)
  \psset{linecolor=red}
  \def\points{(0,0)(1,0)}%
  \pstVerb{/Angles 0 def}
  \multido{\i=1+1}{15}
  {
      \xdef\points{\points(!1 Angles 1 \i\space 1 sub sqrt atan add dup /Angles exch def PtoC)}
      \expandafter\psrline\points
      \psline(! cp.X cp.Y)
  }
  \end{pspicture}

答案1

\psrline列出相对的笔的移动,而不是添加顶点的绝对坐标。

但你需要知道他们的绝对坐标,以便能够画出回到原点的线。

因此,您需要跟踪当前的笔位置。这在下面的代码中完成。不幸的是,到原点的线段被绘制了两次,因为无法插入纯“movetos”。

\documentclass{article}
\usepackage{pstricks-add}
\SpecialCoor

\begin{document}
\begin{pspicture}[showgrid](-5,-5)(5,5)
  \psset{linecolor=red}
  \def\points{(0,0)(1,0)}%
  \pstVerb{/Angles 0 def /CPX 1 def /CPY 0 def}
  \multido{\i=1+1}{15}
  {
      \xdef\points{\points(!1 Angles 1 \i\space 1 sub sqrt atan add dup /Angles exch def PtoC %
        dup CPY add /CPY exch def exch dup CPX add /CPX exch def exch)(!CPX neg CPY neg)(!CPX CPY)}
  }
  \expandafter\psrline\points
\end{pspicture}
\end{document}

相关内容