%!ps
% PostScript prologue for pst-coil.tex.
% Version 1.07, 2015/05/13
% For distribution, see pstricks.tex.
%
/tx@CoilDict 40 dict def tx@CoilDict begin
/CoilLoop {
 /t ED
 t sin AspectSin mul t 180 div AspectCos mul add t cos lineto } def
/Coil {
 /Inc ED
 dup sin /AspectSin ED
 cos /AspectCos ED
 /ArmB ED
 /ArmA ED
 /h ED /w ED /y1 ED /x1 ED /y0 ED /x0 ED
 x0 y0 translate y1 y0 sub x1 x0 sub 2 copy Pyth
 /TotalLength ED
 Atan rotate
 /BeginAngle ArmA AspectCos Div w h mul Div 360 mul def
 /EndAngle TotalLength ArmB sub AspectCos Div
   w h mul Div 360 mul def
 1 0 0 0 ArrowA ArmA 0 lineto
 /mtrx CM def
 w h mul 2 Div w 2 Div scale BeginAngle Inc
 EndAngle { CoilLoop } for
 EndAngle CoilLoop mtrx setmatrix TotalLength ArmB sub 0 lineto CP
% DG/SR modification begin - Jun.  2, 1998 - Patch 1 (from Michael Vulis)
% TotalLength 0 ArrowB lineto } def
 TotalLength 0 ArrowB lineto
 pop pop pop pop } def
% DG/SR modification end
%
/Sin {
 25 dict begin
 /Func ED
 /PointsPerPeriod ED
 /ArmB ED
 /ArmA ED
 /Amplitude ED
 /roundValue ED
 /relativePeriod ED
 /Periods ED
 /y_1 ED /x_1 ED /y_0 ED /x_0 ED
 y_1 y_0 sub x_1 x_0 sub 2 copy Pyth
 dup /TotalLength ED
 ArmA sub ArmB sub /SinLength ED
 Atan /RotAngle ED
 relativePeriod
   {}
   { SinLength Periods div
     roundValue dup 0 eq { pop cvi } { 1 eq { round } if } ifelse
     /Periods ED } ifelse
 /dxStep SinLength 360 div def         % the default step for x pos
 /xStep 360 PointsPerPeriod div def    % the step for the for loop
 /mtrx CM def
 x_0 y_0 translate
 RotAngle rotate
 1 0 0 0 ArrowA ArmA 0 lineto
 1 xStep 360 {                         % PointsPerPeriod times
   dup dxStep mul ArmA add exch        % x pos and value for the func
   Periods mul Func Amplitude mul lineto
 } for
 TotalLength ArmB sub 0 lineto CP
 TotalLength 0 ArrowB lineto
 mtrx setmatrix
 pop pop pop pop
 end
} def
%
/AltCoil {
 /Inc ED
 dup sin /AspectSin ED
 cos /AspectCos ED /h ED /w ED /EndAngle ED /BeginAngle ED
 /mtrx CM def
 w h mul 2 Div w 2 Div scale BeginAngle sin AspectSin mul
 BeginAngle 180 div AspectCos mul add BeginAngle cos
 /lineto load stopped { moveto } if
 BeginAngle Inc EndAngle { CoilLoop } for
 EndAngle CoilLoop mtrx setmatrix
} def
%
/ZigZag { 15 dict begin
 /ArmB ED /ArmA ED
 2 div /w ED
 w mul /h ED /y1 ED /x1 ED /y0 ED /x0 ED
 x1 y1 translate y0 y1 sub x0 x1 sub 2 copy Pyth
 /TotalLength ED
 Atan rotate TotalLength ArmA sub ArmB sub dup h div cvi /n ED n h mul
 sub 2 div dup ArmA add
 /ArmA ED ArmB add
 /ArmB ED
 /x ArmB h 2 div add def
 mark 0 0 ArmB 0
 n { x w /w w neg def /x x h add def } repeat
 TotalLength ArmA sub 0 TotalLength 0
 end } def
%
/ZigZagCirc { % x0 y0 x1 y1 bow h w ArmA ArmB on stack
 /bow ED
 /ArmB ED /ArmA ED
 2 div /w ED
 w mul /h ED /y1 ED /x1 ED /y0 ED /x0 ED
 x1 y1 translate %
 y0 y1 sub x0 x1 sub 2 copy Pyth 2 div
 /HalfLength ED
 Atan /ang ED %angle of A relative to B
 %rotate % so end B is origin and BA is horizontal, A to right
 /theta bow abs HalfLength Atan 2 mul def %halfangular sector for arc
 /theta2 theta 2 mul def % full arc
 %/psi ang 90 sub theta sub def % angle of B from center if bow>0
 /rho HalfLength theta sin div def % radius of circle
 bow 0 gt { /direc 1 def /thetaB ang 90 sub theta sub def } % travel B to A in pos drn
          { /direc -1 def /thetaB ang 90 add theta add def } ifelse % travel B to A in neg drn
 %thetaB=angle from center to B
 rho thetaB 180 add PtoC translate % origin now at center
 /h h rho div RadtoDeg def
 /ArmA ArmA rho div RadtoDeg def /ArmB ArmB rho div RadtoDeg def
 theta2 ArmA sub ArmB sub dup h div cvi /n ED n h mul
 %HalfLength 2 mul ArmA sub ArmB sub dup h div cvi /n ED n h mul
 sub 2 div dup ArmA add
 /ArmA ED ArmB add /ArmB ED
 /h h direc mul def % h is now angle increment for half-period
 /rhoo rho w add def /rhoi rho w sub def % outer and inner radii
 /arg thetaB ArmB direc mul add def % argument for 2nd point
%  thetaB = direc = bow = HalfLength = theta = rho = arg = h = n =
 mark rho thetaB  PtoC  rho arg PtoC /arg arg h 2 div add def
 n {
   w 0 gt { rhoo }{ rhoi } ifelse
   arg PtoC
   /w w neg def
   /arg arg h add def
 } repeat
 rho thetaB theta2 ArmA sub direc mul add  PtoC rho thetaB theta2 direc mul add PtoC
} def
%
end
% END pst-coil.pro