考虑以下最小工作示例。
\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.X
和cp.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}