![一貫したジグザグ線を得るにはどうすればいいですか?](https://rvso.com/image/281493/%E4%B8%80%E8%B2%AB%E3%81%97%E3%81%9F%E3%82%B8%E3%82%B0%E3%82%B6%E3%82%B0%E7%B7%9A%E3%82%92%E5%BE%97%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%81%84%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
物理的なバネを模倣するために使用される一貫したジグザグ線を取得したいと考えています。
\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}
下の図では、赤い十字は、上端が異なる方向のセグメントで始まるため、一貫性のないジグザグ線を表しています。
大きな桁数を選択して精度を上げましたがtrunc
、うまくいかないようです。この問題を解決するにはどうすればよいですか?
事実
この不一致を解消する方法の 1 つは、定数を選択することですcoilwidth
。ただし、定数を使用すると、coilwidth
アニメーションはリアルに見えなくなります。これが問題です。
答え1
最後の手段: に頼らないでください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}