%% %% Ein Beispiel der DANTE-Edition %% %% 7. Auflage %% %% Beispiel 05-05-2 auf Seite 81. %% %% Copyright (C) 2016 Herbert Voss %% %% It may be distributed and/or modified under the conditions %% of the LaTeX Project Public License, either version 1.3 %% of this license or (at your option) any later version. %% %% See http://www.latex-project.org/lppl.txt for details. %% %% %% ==== % Show page(s) 1 %% %% \documentclass[]{exaarticle} \pagestyle{empty} \setlength\textwidth{352.81416pt} \setlength\parindent{0pt} %StartShownPreambleCommands \usepackage{pst-plot,pst-xkey,multido} \makeatletter \pst@addfams{demo}% add family demo to the list \define@boolkey[psset]{demo}[Pst@]{showcircles}[true]{}% prefix is \Pst@ \define@boolkey[psset]{demo}[Pst@]{hypocycloid}[true]{}% " " " \define@key[psset]{demo}{nAngle}{\pst@getint{#1}\psk@nAngle} \define@key[psset]{demo}{dAngle}{\pst@getangle{#1}\psk@dAngle} % \psset[demo]{showcircles=false,nAngle=6,dAngle=60,hypocycloid=false} \newpsstyle{cycloid}{linecolor=black,linewidth=0.2\pslinewidth} % \def\psCycloid{\pst@object{psCycloid}} % A pstricks object reads a star and the optional arguments % and then cintinues with @i % we use (#1), but will test, if we have another (#2,#3), % otherwise we use the default (0,720) \def\psCycloid@i(#1){% \@ifnextchar({\psCycloid@ii(#1)}{\psCycloid@ii(#1)(0,360)}} % (#1) : origin % (#2,#3): start and end angle for the parametrix plot % #4 : radius R of the big circle % #5 : radius r of the small circle % #6 : radius A of the rotatetd point \def\psCycloid@ii(#1)(#2,#3)#4#5#6{% \pst@killglue % no whitespace \begingroup% % hold all local \addbefore@par{plotpoints=500}% can be overwritten by a following user set \use@par% % set the optional arguments \pst@getlength{#4}\pst@tempB% get the radius in pt (screen coors) \pst@getlength{#5}\pst@tempC% get the 2nd radius in pt \pst@getlength{#6}\pst@tempD% get the distance for a in pt \pstVerb{ % define it only once (in user coors!!!) /R \pst@tempB \pst@number\psunit div def /r \pst@tempC \pst@number\psunit div def /A \pst@tempD \pst@number\psunit div def /Rr R r \ifPst@hypocycloid sub \else add \fi def % R +- r /RDivr R r div def % R/r /RrDivr RDivr 1 \ifPst@hypocycloid sub \else add \fi def % (R+-r)/r }% \if@star\psset{fillstyle=eofill,fillcolor=\pslinecolor}\fi% \parametricplot{#2}{#3}{% Rr t cos mul t RrDivr mul cos A mul sub % x(t) Rr t sin mul t RrDivr mul sin A mul \ifPst@hypocycloid add \else sub \fi }% y(t) \ifPst@showcircles% \psset{style=cycloid}% \pscircle(#1){#4}% \multido{\rA=0.0+\psk@dAngle}{\psk@nAngle}{% \rput(!#4 #5 \ifPst@hypocycloid sub \else add \fi dup \rA\space cos mul exch \rA\space sin mul){% user coors!! \pscircle{#5}\psline[linecolor=blue]{*-o}(!% \rA\space RrDivr mul dup % the angle cos A mul neg exch sin A mul \ifPst@hypocycloid\else neg \fi)% }}% \psarc[arrowscale=2]{->}(#1){0.5cm}{0}{270} \fi% \endgroup% end of local macro \ignorespacesafterend% no whitespace at the end } \makeatother \def\oneShot#1{% \begin{pspicture}(-3,-3)(3,3) \psCycloid[linecolor=red,linewidth=1.5pt,showcircles, dAngle=10,nAngle=1][#1](0,0){2}{0.5}{0.6} \end{pspicture}} %StopShownPreambleCommands \begin{document} \begin{pspicture}(-3,-3)(3,3) \psCycloid[hypocycloid,linecolor=red,linewidth=1.5pt](0,0){2}{0.25}{0.6} \end{pspicture} % \begin{pspicture}(-4,-3)(4,3) \psCycloid[hypocycloid,linecolor=red,linewidth=1.5pt,showcircles, dAngle=20,nAngle=18](0,0){2}{0.25}{0.6} \end{pspicture} \end{document}