summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pst-spirograph
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2014-08-20 20:04:25 +0000
committerKarl Berry <karl@freefriends.org>2014-08-20 20:04:25 +0000
commit1dd6e5bec91358ff6bcd1964121979187a676cb4 (patch)
tree6ca5c7d1f77af1098886ff908660fa6279e1e31d /Master/texmf-dist/tex/generic/pst-spirograph
parentad409dcf2ee3052e025ecf5cca832ae5147ad253 (diff)
pst-spirograph (20aug14)
git-svn-id: svn://tug.org/texlive/trunk@34995 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/pst-spirograph')
-rw-r--r--Master/texmf-dist/tex/generic/pst-spirograph/pst-spirograph.tex266
1 files changed, 266 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pst-spirograph/pst-spirograph.tex b/Master/texmf-dist/tex/generic/pst-spirograph/pst-spirograph.tex
new file mode 100644
index 00000000000..57b941240e6
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/pst-spirograph/pst-spirograph.tex
@@ -0,0 +1,266 @@
+%% $Id: pst-spirograph.tex 75 2014-08-19 18:38:05Z herbert $
+%%
+%% This is file `pst-spirograph.tex',
+%%
+%% IMPORTANT NOTICE:
+%%
+%% Package `pst-spirograph.tex'
+%%
+%% COPYRIGHT 2015 by
+%% Manuel Luque
+%% Herbert Voss <hvoss@tug.org>
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory CTAN:/macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%% `pst-spirograph' is a PSTricks package to show sprograph curves
+%%
+%%
+\csname PSTSPIROGRAPHLoaded\endcsname
+\let\PSTSPIROGRAPHLoaded\endinput
+% Requires some packages
+\ifx\PSTricksLoaded\endinput\else \input pstricks \fi
+\ifx\PSTXKeyLoaded\endinput\else \input pst-xkey \fi
+\def\fileversion{0.40}
+\def\filedate{2014/08/18}
+\message{`PSTSPIROGRAPH' v\fileversion, \filedate}
+
+\edef\PstAtCode{\the\catcode`\@}
+\catcode`\@=11\relax
+\pst@addfams{pst-spirograph}
+\pstheader{pst-spirograph.pro}
+\define@key[psset]{pst-spirograph}{Z1}[20]{\def\psk@ZA{#1 }}
+\psset[pst-spirograph]{Z1=20}
+\define@key[psset]{pst-spirograph}{Z2}[10]{\def\psk@ZB{#1 }}
+\psset[pst-spirograph]{Z2=10}
+\define@key[psset]{pst-spirograph}{m}[0.5]{\def\psk@m{#1 }}
+\psset[pst-spirograph]{m=0.5}
+\define@key[psset]{pst-spirograph}{ap}[20]{\def\psk@ap{#1 }}
+\psset[pst-spirograph]{ap=20}
+\define@key[psset]{pst-spirograph}{polarangle}[0]{\def\psk@polarangle{#1 }}
+\psset[pst-spirograph]{polarangle=0}
+\define@key[psset]{pst-spirograph}{holenumber}[1]{\def\psk@holenumber{#1 }}
+\psset[pst-spirograph]{holenumber=1}
+\define@key[psset]{pst-spirograph}{thetamax}[360]{\def\psk@thetamax{#1 }}
+\psset[pst-spirograph]{thetamax=360}
+%
+\define@key[psset]{pst-spirograph}{color1}[{[rgb]{0.625 0.75 1}}]{\pst@getcolor{#1}\pscolora}
+\psset[pst-spirograph]{color1={[rgb]{0.625 0.75 1}}}
+\define@key[psset]{pst-spirograph}{color2}[{[rgb]{0.75 1 0.75}}]{\pst@getcolor{#1}\pscolorb}
+\psset[pst-spirograph]{color2={[rgb]{0.75 1 0.75}}}
+\define@key[psset]{pst-spirograph}{circlescolor}[red]{\pst@getcolor{#1}\pscolorc}
+\psset[pst-spirograph]{circlescolor=red}
+\define@key[psset]{pst-spirograph}{curvecolor}[red]{\pst@getcolor{#1}\pscolord}
+\psset[pst-spirograph]{curvecolor=red}
+%
+\newdimen\pscurvewidth
+\define@key[psset]{pst-spirograph}{curvewidth}[1pt]{\pssetlength\pscurvewidth{#1}}
+\psset[pst-spirograph]{curvewidth=1pt}
+%% === Option pour dessiner le type d'engrenage ---------------------
+\define@boolkey[psset]{pst-spirograph}[Pst@spirograph@]{inner}[true]{}
+\psset[pst-spirograph]{inner}
+%% === pour dessiner cercle de base et cercle primitif
+\define@boolkey[psset]{pst-spirograph}[Pst@spirograph@]{circles}[true]{}
+\psset[pst-spirograph]{circles=false}
+%
+\def\psSpirograph{\def\pst@par{}\pst@object{psSpirograph}}
+\def\psSpirograph@i{\@ifnextchar({\psSpirograph@ii}{\psSpirograph@ii(0,0)}}
+\def\psSpirograph@ii(#1){%
+\begin@SpecialObj
+\pst@@getcoor{#1}%
+\addto@pscode{
+tx@spirographDict begin
+\pst@coor /t@@y ED /t@@x ED
+1 setlinejoin
+/cm {\pst@number\psunit mul } bind def
+/Z1 \psk@ZA def
+/m1 \psk@m def
+/Z2 \psk@ZB def
+/m2 \psk@m def
+/ap \psk@ap def
+/polarAngle \psk@polarangle def
+/ni \psk@holenumber def % numero du trou
+ni 8 ge {/ni 8 def} if
+/thetamax \psk@thetamax def
+/ifinner \ifPst@spirograph@inner true \else false \fi def
+/ki 1 ni 9 div sub def
+/r2 m1 Z2 mul 2 div def
+/qi Z1 Z2 div 1 sub def
+/qi2 Z1 Z2 div 1 add def
+thetamax 0 le {/pas -1 def}{/pas 1 def} ifelse
+/tabSpirograph [ % tableau des points de l'hypocycloide
+0 pas thetamax {/i_ exch def [i_ coorPen]} for
+ ] def
+/tabSpirograph2 [ % tableau des points de l'epicycloide
+0 pas thetamax {/i_ exch def [i_ coorPen2]} for
+ ] def
+/nPts tabSpirograph length 1 sub def
+/nPts2 tabSpirograph2 length 1 sub def
+/color1 {\pst@usecolor\pscolora } def
+/color2 {\pst@usecolor\pscolorb } def
+/circlescolor {\pst@usecolor\pscolorc } def
+/curvecolor {\pst@usecolor\pscolord } def
+/linecolor {\pst@usecolor\pslinecolor} def
+/fillopacity \psk@opacityalpha def
+%
+/Circles {
+gsave
+[ \psk@dash\space ] 0 setdash
+newpath
+0 0 R@ cm 0 360 arc
+closepath
+circlescolor
+stroke
+% on ne dessine pas le cercle de base
+%newpath
+%0 0 Rb cm 0 360 arc
+%closepath
+%stroke
+grestore
+} def
+/trous {
+1 dict begin
+ /a@ {R@ cm 3 div 3.14159 div} bind def
+ gsave
+ positionAngular rotate
+ 0 60 540 {/THETA exch def
+ untrou
+ 1 setgray
+/fill \tx@setTransparency /fill load def
+ fill
+ untrou
+ linecolor
+ stroke
+ } for
+ grestore
+ end
+}def
+%%% Les dessins de l'engrenage %%%%%%
+%%%%%%%%%% Roue N°1 %%%%%%%%%%%%%%%%%
+/Roue1{
+1 dict begin
+/wheel 1 def
+gsave
+t@@x t@@y translate
+m1 Z1
+ifinner {
+ Datas2
+ Calculs
+ Beta_ rotate
+ Roue
+ COURONNE
+ closepath
+ \ifx\psk@fillstyle\relax\else color1 /fill \tx@setTransparency /fill load def fill \fi
+Roue
+closepath
+linecolor
+stroke
+COURONNE
+closepath
+linecolor
+stroke
+\ifPst@spirograph@circles Circles \fi
+}{
+ Datas1
+ Calculs
+ Beta_ rotate
+ Roue
+ closepath
+ \ifx\psk@fillstyle\relax\else color1 /fill \tx@setTransparency /fill load def fill \fi
+Roue
+closepath
+linecolor
+stroke
+\ifPst@spirograph@circles Circles \fi
+} ifelse
+grestore
+% dessin de l'hypocycloide ou de l'epicycloide
+gsave
+t@@x t@@y translate
+\ifPst@spirograph@inner
+tabSpirograph 0 get aload pop moveto
+1 1 nPts {/nP exch def
+ tabSpirograph nP get aload pop lineto
+ } for
+\else
+tabSpirograph2 0 get aload pop moveto
+1 1 nPts2 {/nP exch def
+ tabSpirograph2 nP get aload pop lineto
+ } for
+\fi
+curvecolor
+\pst@number\pscurvewidth SLW
+stroke
+grestore
+end
+} def
+Roue1
+%%%%%%%%%% Roue N°2 %%%%%%%%%%%%%%%%%
+/Roue2 {
+5 dict begin
+/wheel 2 def
+gsave
+m2 Z2 Datas1
+Calculs
+/a@ex m2 Z1 Z2 add mul 2 div cm def % entraxe engrenage exterieur
+/a@in m2 Z1 Z2 sub mul 2 div cm def % entraxe engrenage interieur
+/a@ {R@ cm 3 div 3.14159 div} bind def
+\ifPst@spirograph@inner
+ a@in polarAngle cos mul t@@x add a@in polarAngle sin mul t@@y add translate
+ Beta_ polarAngle Z1 Z2 sub Z2 div mul sub rotate
+ /positionAngular 2Beta 2 div def
+\else
+ a@ex polarAngle cos mul t@@x add a@ex polarAngle sin mul t@@y add translate
+ DeltaSdeg DeltaP add neg 180 Z2 div add 180 add polarAngle Z1 Z2 add Z2 div mul add rotate
+ /positionAngular Beta_ neg def
+\fi
+Roue
+closepath
+\ifx\psk@fillstyle\relax\else
+ color2
+/fill \tx@setTransparency /fill load def
+ fill
+\fi
+Roue
+closepath
+linecolor
+stroke
+trous
+\ifPst@spirograph@circles Circles \fi
+grestore
+gsave
+newpath
+\ifPst@spirograph@inner
+ a@in polarAngle cos mul t@@x add a@in polarAngle sin mul t@@y add translate
+ Beta_ polarAngle Z1 Z2 sub Z2 div mul sub rotate
+ /THETA 540 ni 60 mul sub def
+ positionAngular rotate
+ a@ THETA DegtoRad mul THETA cos mul neg
+ a@ THETA DegtoRad mul THETA sin mul
+ 0.06 cm 0 360 arc
+ \else
+ a@ex polarAngle cos mul t@@x add a@ex polarAngle sin mul t@@y add translate
+ DeltaSdeg DeltaP add neg 180 Z2 div add 180 add polarAngle Z1 Z2 add Z2 div mul add rotate
+ /a@ {R@ cm 3 div 3.14159 div} bind def
+ /THETA 540 ni 60 mul sub def
+ positionAngular rotate
+ a@ THETA DegtoRad mul THETA cos mul neg
+ a@ THETA DegtoRad mul THETA sin mul
+ 0.06 cm 0 360 arc
+\fi
+closepath
+curvecolor
+fill
+grestore
+ end
+ } def
+Roue2
+end
+}%
+\end@SpecialObj}% % fin de la commande PSTricks
+%
+\catcode`\@=\PstAtCode\relax
+%
+\endinput \ No newline at end of file