首先考虑以下 MWE。
\documentclass[pstricks,border=12pt]{standalone}
\SpecialCoor
\usepackage{multido}
\begin{document}
% draw the tangential lines
\begin{pspicture}[showgrid](-5,-5)(5,5)
\pscustom[linecolor=red]
{
\psline(1,0)
\code{0 /Angle ED}
\multido{\i=1+1}{15}
{
\translate(!!CP)
\lineto(!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
}
}
\end{pspicture}
% draw the radial lines
\begin{pspicture}[showgrid](-5,-5)(5,5)
\pscustom[linecolor=blue]
{
\psline(1,0)
\code{0 /Angle ED}
\multido{\i=1+1}{15}
{
\translate(!!CP)
\moveto(!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
\psline[liftpen=2](0,0)(!!CP)% draw from the UNTRANSLATED origin to the current point
}
}
\end{pspicture}
\end{document}
它产生如下两个输出。
客观的
红色曲线由单位切向量连接而成
\pscustom[linecolor=red]
{
\psline(1,0)
\code{0 /Angle ED}
\multido{\i=1+1}{15}
{
\translate(!!CP)
\lineto(!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
}
}
而蓝色曲线不是我想要得到的。
\pscustom[linecolor=blue]
{
\psline(1,0)
\code{0 /Angle ED}
\multido{\i=1+1}{15}
{
\translate(!!CP)
\moveto(!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
\psline[liftpen=2](0,0)(!!CP)% draw from the UNTRANSLATED origin to the current point
}
}
蓝色图表应表示从原点到单位切向量尖端出现的一组径向线。
问题
如何从未平移原点到当前点画一条线?换句话说,如何从绝对原点到当前点画一条线?
笔记
请在下面给定的占位符中添加代码。
\pscustom[linecolor=blue]
{
\psline(1,0)
\code{0 /Angle ED}
\multido{\i=1+1}{15}
{
% you can add code here
\translate(!!CP)
\moveto(!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
%\psline[liftpen=2](0,0)(!!CP)% draw from the UNTRANSLATED origin to the current point
% or you can add code here
}
}
答案1
使用\translate(!!CP)
移动整个坐标系,这样 就(0,0)
不再指向同一原点。您可以不使用 来编写整个部分\translate
,但可以使用相对线和移动操作(\rlineto
和\rmoveto
):
\documentclass[pstricks,border=12pt]{standalone}
\SpecialCoor
\usepackage{multido}
\begin{document}
\makeatletter
% draw the tangential lines
\begin{pspicture}[showgrid](-5,-5)(5,5)
\pscustom[linecolor=red]
{
\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)
}
}
\end{pspicture}
% draw the radial lines
\begin{pspicture}[showgrid](-5,-5)(5,5)
\pscustom[linecolor=blue]
{
\psline(1,0)
\code{0 /Angle ED}
\multido{\i=1+1}{15}
{
\rmoveto(!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
\psline[liftpen=2](0,0)(!!CP)
}
}
\end{pspicture}
\makeatother
\end{document}
如果只是忽略平移,那么您可以将原点定义为节点。节点保存当前矩阵,并恢复相同的点,而不管在此期间进行了哪些平移和缩放:
\documentclass[pstricks,border=12pt]{standalone}
\SpecialCoor
\usepackage{multido}
\usepackage{pst-node}
\begin{document}
% draw the radial lines
\begin{pspicture}[showgrid](-5,-5)(5,5)
\pnode(0,0){Origin}
\pscustom[linecolor=blue]
{
\psline(1,0)
\code{0 /Angle ED}
\multido{\i=1+1}{15}
{
\translate(!!CP)
\moveto(!1 Angle 1 \i\space 1 sub sqrt Atan add dup /Angle ED PtoC)
\psline[liftpen=2](Origin)(!!CP)
}
}
\end{pspicture}
\end{document}