考虑以下代码来绘制狄奥多罗斯螺旋。
\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}