summaryrefslogtreecommitdiff
path: root/graphics/pstricks/contrib/pst-coil/dvips/pst-coil.pro
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/pstricks/contrib/pst-coil/dvips/pst-coil.pro
Initial commit
Diffstat (limited to 'graphics/pstricks/contrib/pst-coil/dvips/pst-coil.pro')
-rw-r--r--graphics/pstricks/contrib/pst-coil/dvips/pst-coil.pro131
1 files changed, 131 insertions, 0 deletions
diff --git a/graphics/pstricks/contrib/pst-coil/dvips/pst-coil.pro b/graphics/pstricks/contrib/pst-coil/dvips/pst-coil.pro
new file mode 100644
index 0000000000..9513e99194
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-coil/dvips/pst-coil.pro
@@ -0,0 +1,131 @@
+%!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
+ /y1 ED /x1 ED /y0 ED /x0 ED
+ y1 y0 sub x1 x0 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
+ x0 y0 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