¿Cómo conseguir una línea en zigzag consistente?

¿Cómo conseguir una línea en zigzag consistente?

Quiero obtener una línea en zigzag consistente que se usará para imitar un resorte físico.

\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}

En la siguiente figura, la cruz roja representa líneas en zigzag inconsistentes ya que su extremo superior comienza con una orientación de segmento diferente.

ingrese la descripción de la imagen aquí

He aumentado la precisión trunceligiendo una gran cantidad de dígitos. pero no parece funcionar. ¿Cómo solucionar este problema?

Hechos

Un método para deshacerse de esta inconsistencia es elegir una constante coilwidth. Sin embargo, con constante coilwidthla animación ya no parecerá realista. Ese es el problema.

Respuesta1

El último recurso: ¡no te fíes 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}

ingrese la descripción de la imagen aquí

información relacionada