我们可以使用\curvepnodes
和\psnline
来获得与以下代码相同的结果吗?
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{multido,pst-node}
\begin{document}
\begin{pspicture}[showgrid](-5,-5)(5,5)
\def\points{}%
\multido{\r=0.0+0.1}{90}{\xdef\points{\points(!1 \r\space sqrt 700 mul PtoC)}}
\psset{showpoints,dotstyle=o,dotscale=2}
\rput(-1,0){\expandafter\psrline\points}
\end{pspicture}
\end{document}
注意:各段的长度相等。
答案1
您可以按照以下方式进行操作:
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{multido,pst-node,pst-plot}
\begin{document}
\begin{pspicture}[showgrid](-5,-5)(5,5)
\curvepnodes[plotpoints=90]{0}{89}{%
-1 0 % starting point
0 1 t {% start increment end
0.1 mul sqrt 700 mul 1 exch PtoC % the coordinates of the relative vector
3 -1 roll add 3 1 roll add exch % add the coordinates to the intermediate result on the stack
} for }{P}
\psnline[showpoints,dotstyle=o,dotscale=2](0,89){P}
\end{pspicture}
\end{document}
主要区别在于,需要对所有节点使用绝对坐标。这是通过在 的 Postscript 表达式中进行迭代来实现的\curvepnodes
。
plotpoints
、tmin
和tmax
(的前两个参数)的值\curvepnodes
是这样选择的,即为t
整数。
0
因此,Postscript 部分将从到 的所有相对向量相加t
。-1 0
给出了起点。
结果和你的一样:)
这是一个变体,将中间结果保存为和,/myX
效率更高:/myY
tx@NodeDict
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{multido,pst-node,pst-plot}
\begin{document}
\begin{pspicture}[showgrid](-5,-5)(5,5)
\pstVerb{tx@NodeDict begin /myX -1 def /myY 0 def end }%
\curvepnodes[plotpoints=90]{0}{89}{%
myX myY
t 0.1 mul sqrt 700 mul 1 exch PtoC
3 -1 roll add 3 1 roll add exch
2 copy /myY ED /myX ED
}{P}
\psnline[showpoints,dotstyle=o,dotscale=2](0,89){P}
\end{pspicture}
\end{document}
答案2
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pstricks-add}
\begin{document}
\begin{pspicture}[showgrid](-5,-5)(5,5)
\psset{showpoints,dotstyle=o,dotscale=2}
\psStartPoint[P](0,0)
\multido{\r=0.1+0.1}{90}{\psVector[arrows=-](!1 \r\space sqrt 700 mul PtoC)}
\uput[0](P50){P50}
\end{pspicture}
\end{document}