diff options
author | Karl Berry <karl@freefriends.org> | 2014-08-20 20:04:25 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2014-08-20 20:04:25 +0000 |
commit | 1dd6e5bec91358ff6bcd1964121979187a676cb4 (patch) | |
tree | 6ca5c7d1f77af1098886ff908660fa6279e1e31d /Master/texmf-dist/tex/generic/pst-spirograph | |
parent | ad409dcf2ee3052e025ecf5cca832ae5147ad253 (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.tex | 266 |
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 |