Como obter uma linha em zigue-zague consistente?

Como obter uma linha em zigue-zague consistente?

Quero obter uma linha em zigue-zague consistente que será usada para imitar uma mola física.

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-coil,multido}
\usepackage[nomessages]{fp}

\FPset\CoilArm{.2}
\FPset\Windings{7}

\psset
{
    coilarm=\CoilArm,
    linejoin=1,
}

\def\System#1#2{% #1: total length includes the arms, #2: coil width
    \FPeval\CoilWidth{trunc(#2,9)}%
    \FPeval\CoilHeight{trunc((#1-2*CoilArm)/(CoilWidth*Windings),9)}%
    \pszigzag[coilwidth=\CoilWidth,coilheight=\CoilHeight](1,0)(1,-#1)%
    \ignorespaces
}

\begin{document}

\begin{pspicture}(13,-7)
\multido{\nx=0+1.25,\nl=2.50+.50,\nw=1.00+-0.10}{10}{\rput(\nx,0){\System{\nl}{\nw}}}
\end{pspicture}
\end{document}

Na figura abaixo, a cruz vermelha representa linhas em zigue-zague inconsistentes, pois sua extremidade superior começa com uma orientação de segmento diferente.

insira a descrição da imagem aqui

Aumentei a precisão truncescolhendo um grande número de dígitos. Mas não parece funcionar. Como resolver este problema?

Fatos

Um método para se livrar dessa inconsistência é escolher uma constante coilwidth. No entanto, com constante, coilwidtha animação não parecerá mais realista. Esse é o problema.

Responder1

O último recurso: não confie em pst-coil!

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node,pst-plot}
\usepackage[nomessages]{fp}

\FPset\CoilArm{.6}
\FPset\Windings{7}

\def\System#1#2{% #1: total length includes the arms, #2: coil width
    \FPeval\CoilWidth{#2}%
    \FPeval\Lambda{(#1-2*CoilArm)/Windings}%
    \FPeval\PlotPoints{trunc(4*Windings+1,0)}%
    \curvepnodes[plotpoints=\PlotPoints,algebraic]{0}{\Lambda\space \Windings\space mul}{\CoilWidth*sin(2*Pi*t/\Lambda)|-t-\CoilArm}{P}%
    \pscustom[linejoin=1]
    {
        \psline(0,0)
        \psnline(0,\Pnodecount){P}
        \psline(0,-#1)
    }%
    \ignorespaces
}

\begin{document}

\begin{pspicture}(13,-7)
\multido{\nx=1.00+1.25,\nl=2.50+.50,\nw=.50+-.05}{10}{\rput(\nx,0){\System{\nl}{\nw}}}
\end{pspicture}
\end{document}

insira a descrição da imagem aqui

informação relacionada