summaryrefslogtreecommitdiff
path: root/graphics
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-03-15 03:01:24 +0000
committerNorbert Preining <norbert@preining.info>2020-03-15 03:01:24 +0000
commit87cddce361c3b477029d13b27bdaa57190b2d74b (patch)
tree0b8f15ef416645c1438cdc4228a1ddb44691b17c /graphics
parent942e56ba7d147d18d379305e76f064cec0aade7d (diff)
CTAN sync 202003150301
Diffstat (limited to 'graphics')
-rw-r--r--graphics/pstricks/contrib/pst-spirograph/Changes4
-rw-r--r--graphics/pstricks/contrib/pst-spirograph/doc/animation/README.anim2
-rw-r--r--graphics/pstricks/contrib/pst-spirograph/doc/animation/anim9.tex24
-rw-r--r--graphics/pstricks/contrib/pst-spirograph/doc/animation/animA.tex23
-rw-r--r--graphics/pstricks/contrib/pst-spirograph/doc/animation/animB.tex22
-rw-r--r--graphics/pstricks/contrib/pst-spirograph/doc/animation/animC.tex17
-rw-r--r--graphics/pstricks/contrib/pst-spirograph/doc/pst-spirograph-doc.pdfbin75598078 -> 57216485 bytes
-rw-r--r--graphics/pstricks/contrib/pst-spirograph/doc/pst-spirograph-doc.tex50
-rw-r--r--graphics/pstricks/contrib/pst-spirograph/dvips/pst-spirograph.pro39
-rw-r--r--graphics/pstricks/contrib/pst-spirograph/latex/pst-spirograph.sty7
-rw-r--r--graphics/pstricks/contrib/pst-spirograph/tex/pst-spirograph.tex256
11 files changed, 418 insertions, 26 deletions
diff --git a/graphics/pstricks/contrib/pst-spirograph/Changes b/graphics/pstricks/contrib/pst-spirograph/Changes
index 23eeed9eb4..124518d431 100644
--- a/graphics/pstricks/contrib/pst-spirograph/Changes
+++ b/graphics/pstricks/contrib/pst-spirograph/Changes
@@ -1,4 +1,6 @@
----- pst-spirograph.tex
+0.51 2020-03-14 - added new optional argument for a rubber band connection
+ of two gears
0.50 2020-03-11 - added new optional argument TypeA for special graphs
0.41 2014-08-23 - updated documentation
- move some more PS functions into the pro file
@@ -6,12 +8,14 @@
----- pst-spirograph.pro
+0.51 2020-03-14 - added some more functions
0.50 2020-03-11 - added some more functions
0.41 2014-08-23 - added some more functions
0.40 2014-08-18 - first CTAN version (hv)
----- pst-spirograph.sty
+0.51 2020-03-14 - load more required files
0.50 2020-03-11 - updated file dates
0.41 2014-08-23 - updated file dates
0.40 2014-08-18 - first CTAN version (hv)
diff --git a/graphics/pstricks/contrib/pst-spirograph/doc/animation/README.anim b/graphics/pstricks/contrib/pst-spirograph/doc/animation/README.anim
index 333ea8a91d..36b2f23bde 100644
--- a/graphics/pstricks/contrib/pst-spirograph/doc/animation/README.anim
+++ b/graphics/pstricks/contrib/pst-spirograph/doc/animation/README.anim
@@ -2,7 +2,7 @@ run all files with
latex <file>
dvips <file>
-ps2pdf <file>.ps
+ps2pdf -dNOSAFER <file>.ps
and then view the pdf with the acrobat reader, available from Adobe
if not already installed on your current system. \ No newline at end of file
diff --git a/graphics/pstricks/contrib/pst-spirograph/doc/animation/anim9.tex b/graphics/pstricks/contrib/pst-spirograph/doc/animation/anim9.tex
new file mode 100644
index 0000000000..9199971860
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-spirograph/doc/animation/anim9.tex
@@ -0,0 +1,24 @@
+\documentclass[border=5mm]{standalone}
+\usepackage{animate}
+\usepackage{pst-spirograph}
+\addtopsstyle{gridstyle}{gridlabels=0pt}
+
+\begin{document}
+
+\psset{unit=0.25cm}
+\begin{animateinline}[
+ width=0.9\linewidth,begin={\begin{pspicture}(-20,-20)(20,20)},end={\end{pspicture}},palindrome,controls]{5}
+\multiframe{325}{i=0+10}{%
+\psgrid[subgriddiv=0,gridcolor=black!20,unit=2](-10,-10)(10,10)%
+\ifnum\i=325 \psset{gearwheels=false}\fi
+\psSpirograph[Z1=72,Z2=16,m=0.2,ap=10,TypeA=false,linewidth=0.02,linecolor={[rgb]{0.5 0 0 }},fillstyle=solid,
+ opacity=0.75,polarangle=\i,circles=false,thetamax=\i,curvecolor=blue,curvewidth=2pt,
+ HolePos=0.5,color1=cyan!10,color2=cyan!10,strokeopacity=0.5]%
+\psSpirograph[Z1=72,Z2=16,m=0.2,ap=10,TypeA=false,linewidth=0.02,linecolor={[rgb]{0.5 0 0 }},fillstyle=solid,
+ opacity=0.75,polarangle=\i,circles=false,thetamax=\i,curvecolor=green,curvewidth=2pt,
+ HolePos=1.5,color1=cyan!10,color2=cyan!10,strokeopacity=0.5,gearwheels=false]
+}
+\end{animateinline}
+
+\end{document}
+
diff --git a/graphics/pstricks/contrib/pst-spirograph/doc/animation/animA.tex b/graphics/pstricks/contrib/pst-spirograph/doc/animation/animA.tex
new file mode 100644
index 0000000000..cadac1cd1a
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-spirograph/doc/animation/animA.tex
@@ -0,0 +1,23 @@
+\documentclass[border=5mm]{standalone}
+\usepackage{geometry}
+\geometry{paperwidth=18cm,paperheight=21cm,margin=1cm}
+\usepackage{animate}
+\usepackage{pst-spirograph}
+\addtopsstyle{gridstyle}{gridlabels=0pt}
+
+\begin{document}
+
+\psset{unit=0.5cm}
+\begin{animateinline}[
+ width=0.9\linewidth,begin={\begin{pspicture}(-18,-18)(18,18)},end={\end{pspicture}},palindrome,controls]{5}
+\multiframe{181}{i=0+10}{%
+\psgrid[style=gridstyleA]%
+\ifnum\i=181 \psset{gearwheels=false}\fi
+\psSpirograph[Z1=60,Z2=24,m=0.2,linewidth=0.025,TypeA=false,
+ linecolor=blue,fillstyle=solid,opacity=0.75,polarangle=\i,circles=false,thetamax=\i,curvecolor=red,curvewidth=2pt,HolePos=1.7,
+ gearwheels=false,
+ circles]}
+\end{animateinline}
+
+\end{document}
+
diff --git a/graphics/pstricks/contrib/pst-spirograph/doc/animation/animB.tex b/graphics/pstricks/contrib/pst-spirograph/doc/animation/animB.tex
new file mode 100644
index 0000000000..e568a03965
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-spirograph/doc/animation/animB.tex
@@ -0,0 +1,22 @@
+\errorcontextlines=100
+\documentclass{article}
+\usepackage{geometry}
+\geometry{paperwidth=16.5cm,paperheight=12cm,margin=1cm}
+\pagestyle{empty}
+\usepackage{pst-spirograph,animate}
+\begin{document}
+
+\noindent
+\begin{animateinline}[
+ begin={\begin{pspicture}(-6,-3)(8,6)\psframe*[linecolor=yellow,opacity=0.4](-6,-3)(8,6)},
+ end={\end{pspicture}},
+ palindrome,controls,
+% autoplay
+]{5}
+\multiframe{361}{iA=0+2}{%
+\psSpirograph[RubberBand,Z1=20,Z2=40,m=0.2,viewpoint=2 -5 3,arrowinset=0,arrowsize=0.2,wheelrotation=\iA,
+ linewidth=0.025,color1=yellow,color2=blue!50]}
+\end{animateinline}
+
+
+\end{document}
diff --git a/graphics/pstricks/contrib/pst-spirograph/doc/animation/animC.tex b/graphics/pstricks/contrib/pst-spirograph/doc/animation/animC.tex
new file mode 100644
index 0000000000..f9ccfdd2e8
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-spirograph/doc/animation/animC.tex
@@ -0,0 +1,17 @@
+\documentclass{standalone}
+\usepackage{geometry}
+\geometry{paperwidth=20cm,paperheight=16cm,margin=1cm}
+\usepackage{pst-spirograph,animate}
+
+\begin{document}
+\begin{animateinline}[
+ begin={\begin{pspicture}(-10,-5)(7,8)},
+ end={\end{pspicture}},
+ palindrome,controls,
+% autoplay
+]{5}
+\multiframe{181}{iA=0+2}{%
+ \psSpirograph[RubberBand,Z1=40,Z2=10,m=0.2,viewpoint=-1 -5 5,arrowinset=0,arrowsize=0.2,wheelrotation=\iA,linewidth=0.025,color1=yellow,color2=cyan]}
+\end{animateinline}
+
+\end{document}
diff --git a/graphics/pstricks/contrib/pst-spirograph/doc/pst-spirograph-doc.pdf b/graphics/pstricks/contrib/pst-spirograph/doc/pst-spirograph-doc.pdf
index 8f855e7883..95c0731945 100644
--- a/graphics/pstricks/contrib/pst-spirograph/doc/pst-spirograph-doc.pdf
+++ b/graphics/pstricks/contrib/pst-spirograph/doc/pst-spirograph-doc.pdf
Binary files differ
diff --git a/graphics/pstricks/contrib/pst-spirograph/doc/pst-spirograph-doc.tex b/graphics/pstricks/contrib/pst-spirograph/doc/pst-spirograph-doc.tex
index b61131c97a..9af23c3350 100644
--- a/graphics/pstricks/contrib/pst-spirograph/doc/pst-spirograph-doc.tex
+++ b/graphics/pstricks/contrib/pst-spirograph/doc/pst-spirograph-doc.tex
@@ -63,7 +63,8 @@ The wheel can also turn off a first fixed gear, it is thus possible to draw epic
\begin{BDef}
-\Lcs{psSpirograph}\OptArgs\Largr{\CAny}
+\Lcs{psSpirograph}\OptArgs\Largr{\CAny}\\
+\Lcs{psSpirographB}\OptArgs\Largr{\CAny}
\end{BDef}
@@ -125,15 +126,18 @@ which can take every possible value.
\begin{LTXexample}[pos=t]
\psset{unit=0.75}
-\begin{pspicture}[showgrid=top,opacity=0.5](-7,-7)(7,7)
-\psframe*[linecolor=yellow!30](-7,-7)(7,7)
+\begin{pspicture}[showgrid=top,opacity=0.5](-11,-11)(11,11)
+\psframe*[linecolor=yellow!30](-11,-11)(11,11)
\psset{thetamax=720,Z1=120,Z2=48,ap=10,linewidth=0.025,fillstyle=solid}
+\psSpirograph[inner=false,m=0.1,polarangle=200,holenumber=0,linecolor=blue,curvecolor=blue]
\psSpirograph[m=0.1,polarangle=200,holenumber=0,linecolor=red]
-\psSpirograph[m=0.05,polarangle=340,holenumber=3,curvecolor=blue,linecolor=blue]
-\psSpirograph[m=0.075,polarangle=90,holenumber=6,curvecolor=green,linecolor=green]
\end{pspicture}
\end{LTXexample}
+
+
+
+
\subsection{Pencil position}
\noindent\begin{tabularx}{\linewidth}{@{} XX @{}}
@@ -267,15 +271,15 @@ examples use a bigger angle step than useful for a single animation.
palindrome,controls,
% autoplay
]{5}
-\multiframe{100}{iA=0+8}{%
+\multiframe{80}{iA=0+10}{%
\psSpirograph[thetamax=\iA,Z1=59,Z2=24,m=0.1,ap=10,curvewidth=1.1pt,
linewidth=0.025,fillstyle=solid,polarangle=\iA,holenumber=5,opacity=0.5](0,0)}
\end{animateinline}
\end{LTXexample}
+\iffalse
\psset{linewidth=0.1pt}
-
\begin{LTXexample}[pos=t]
\psset{unit=0.3cm}
\begin{animateinline}[
@@ -289,7 +293,6 @@ examples use a bigger angle step than useful for a single animation.
\end{LTXexample}
-\iffalse
\begin{LTXexample}[pos=t]
\psset{unit=0.5cm}
\begin{animateinline}[
@@ -313,7 +316,7 @@ examples use a bigger angle step than useful for a single animation.
\psgrid[style=gridstyleA,unit=1.4](-10,-10)(10,10)%
\ifnum\i=181 \psset{gearwheels=false}\fi
\psSpirograph[Z1=50,Z2=20,m=0.2,linewidth=0.025,fillstyle=solid,opacity=0.75,polarangle=\i,circles,TypeA=false,
- thetamax=\i,curvecolor=red,curvewidth=2pt,HolePos=1.05]}
+ thetamax=\i,curvecolor=red,curvewidth=2pt,HolePos=1.5]}
\end{animateinline}
\end{LTXexample}
@@ -330,7 +333,6 @@ examples use a bigger angle step than useful for a single animation.
linecolor=blue,fillstyle=solid,opacity=0.75,polarangle=\i,circles=false,thetamax=\i,curvecolor=red,curvewidth=2pt,HolePos=1.7]}
\end{animateinline}
\end{LTXexample}
-\fi
@@ -350,6 +352,34 @@ examples use a bigger angle step than useful for a single animation.
}
\end{animateinline}
\end{LTXexample}
+\fi
+
+
+\clearpage
+
+\section{Connect the two gears with a rubberband}
+
+This is an adaptation with PSTricks of an idea of Alejandro Teutli which he realized with Mathematica:
+\url{https://demonstrations.wolfram.com/ParametricMovementOfARubberBand/} which is a variation of a spirograph.
+A rubber band is fixed by its ends on two gears. A pencil tied in the middle of the elastic rubberband draws the curve obtained when the gears are
+rotating. The optional argument \Lkeyword{RubberBand} must be used, if you want such a spirograph. It is only available
+in 3D.
+
+
+\begin{LTXexample}[pos=t]
+\begin{animateinline}[
+ width=0.9\linewidth,
+ begin={\begin{pspicture}(-6,-3)(8,6)\psframe*[linecolor=yellow,opacity=0.4](-6,-3)(8,6)},
+ end={\end{pspicture}},
+ palindrome,controls,
+% autoplay
+]{5}
+\multiframe{181}{iA=0+4}{%
+\psSpirograph[RubberBand,Z1=20,Z2=40,m=0.2,viewpoint=2 -5 3,arrowinset=0,arrowsize=0.2,wheelrotation=\iA,
+ linewidth=0.025,color1=yellow,color2=blue!50]}
+\end{animateinline}
+\end{LTXexample}
+
diff --git a/graphics/pstricks/contrib/pst-spirograph/dvips/pst-spirograph.pro b/graphics/pstricks/contrib/pst-spirograph/dvips/pst-spirograph.pro
index 588345b42e..59f31ba302 100644
--- a/graphics/pstricks/contrib/pst-spirograph/dvips/pst-spirograph.pro
+++ b/graphics/pstricks/contrib/pst-spirograph/dvips/pst-spirograph.pro
@@ -1,8 +1,8 @@
-%% $Id: pst-spirograph.pro 1159 2020-03-12 15:13:17Z herbert $
+%% $Id: pst-spirograph.pro 1160 2020-03-14 14:08:31Z herbert $
%%
% PostScript prologue for pst-spirograph.tex.
%
-% Version 0.50, 2020/03/11
+% Version 0.51, 2020/03/14
%
/tx@spirographDict 50 dict def
tx@spirographDict begin
@@ -288,7 +288,7 @@ tx@spirographDict begin
positionAngular rotate
a@ THETA DegtoRad mul THETA cos mul neg
a@ THETA DegtoRad mul THETA sin mul
- 0.06 cm 0 360 arc
+ 0.12 cm 0 360 arc
}{
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
@@ -297,7 +297,7 @@ tx@spirographDict begin
positionAngular rotate
a@ THETA DegtoRad mul THETA cos mul neg
a@ THETA DegtoRad mul THETA sin mul
- 0.06 cm 0 360 arc
+ 0.12 cm 0 360 arc
} ifelse
closepath
curvecolor
@@ -332,7 +332,6 @@ tx@spirographDict begin
} for
} def
%%%% fin de la definition de la roue dentee %%%
- /COURONNE { 0 0 Rt 1.25 mul cm 360 0 arcn } def
/plaquette {
Beta_ neg rotate
/alpha1 1 R1 2 mul atan 2 div def
@@ -360,6 +359,8 @@ tx@spirographDict begin
closepath
linecolor
stroke
+ } def
+ /drawHole {
R1 cm HolePos mul 0 GetCurveWidth 1.5 mul 0 360 arc
curvecolor
fill
@@ -380,6 +381,34 @@ tx@spirographDict begin
R1 HolePos mul beta sin mul yC add cm
end
} def
+ /AXE {
+ %newpath
+ Raxe 4 div cm
+ A@0 cos Raxe mul cm moveto
+ 0 0 Raxe cm 90 A@0 sub 90 A@0 add arcn
+ Raxe 4 div cm neg
+ A@0 cos Raxe mul cm
+ lineto
+ Raxe 4 div cm neg
+ Raxe A@0 cos 0.2 add mul cm
+ lineto
+ Raxe 4 div cm
+ Raxe A@0 cos 0.2 add mul cm
+ lineto
+ } def
+ %%% clavette %%%
+ /CLAVETTE {
+ newpath
+ Raxe 4 div cm
+ A@0 cos 0.2 sub Raxe mul cm moveto
+ Raxe 4 div cm
+ Raxe A@0 cos 0.2 add mul cm lineto
+ Raxe 4 div cm neg
+ Raxe A@0 cos 0.2 add mul cm lineto
+ Raxe 4 div cm neg
+ A@0 cos 0.2 sub Raxe mul cm lineto
+ closepath
+ } def
%
end
%% \ No newline at end of file
diff --git a/graphics/pstricks/contrib/pst-spirograph/latex/pst-spirograph.sty b/graphics/pstricks/contrib/pst-spirograph/latex/pst-spirograph.sty
index 5ee1f43f9f..bb2633416c 100644
--- a/graphics/pstricks/contrib/pst-spirograph/latex/pst-spirograph.sty
+++ b/graphics/pstricks/contrib/pst-spirograph/latex/pst-spirograph.sty
@@ -15,15 +15,16 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{pst-spirograph}
- [2014/08/23 v0.41 LaTeX wrapper for `pst-spirograph' (hv)]
+ [2020/03/14 v0.51 LaTeX wrapper for `pst-spirograph' (hv)]
%
-\RequirePackage{pstricks}
+\RequirePackage{pstricks,pst-plot,pst-3d,pst-node,pst-calculate}
+\let\psCalc\pscalculate
\ProvidesPackage{pst-spirograph}[2020/03/11 package wrapper for pst-spirograph.tex]
\input{pst-spirograph.tex}
\ProvidesFile{pst-spirograph.tex}
[\filedate\space \fileversion\space `pst-spirograph' (ml,hv)]
\IfFileExists{pst-spirograph.pro}{%
\ProvidesFile{pst-spirograph.pro}
- [2020/03/11 v. 0.50, PostScript prologue file (hv)]
+ [2020/03/14 v. 0.51, PostScript prologue file (hv)]
\@addtofilelist{pst-spirograph.pro}}{}%
\endinput
diff --git a/graphics/pstricks/contrib/pst-spirograph/tex/pst-spirograph.tex b/graphics/pstricks/contrib/pst-spirograph/tex/pst-spirograph.tex
index 02cfbcd4cf..cb946557bf 100644
--- a/graphics/pstricks/contrib/pst-spirograph/tex/pst-spirograph.tex
+++ b/graphics/pstricks/contrib/pst-spirograph/tex/pst-spirograph.tex
@@ -21,10 +21,14 @@
\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.50}
-\def\filedate{2020/03/11}
+\ifx\PSTricksLoaded\endinput \else \input pstricks \fi
+\ifx\PSTXKeyLoaded\endinput \else \input pst-xkey \fi
+\ifx\PSTthreeDLoaded\endinput\else \input pst-3d \fi
+\ifx\PSTnodesLoaded\endinput \else \input pst-node \fi
+\ifx\PSTplotLoaded\endinput \else \input pst-plot \fi
+
+\def\fileversion{0.51}
+\def\filedate{2020/03/14}
\message{`PSTSPIROGRAPH' v\fileversion, \filedate\ (ml,hv)}
\edef\PstAtCode{\the\catcode`\@}
@@ -45,6 +49,18 @@
\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}{Rarct}{\def\psk@Rarct{#1 }}
+\psset[pst-spirograph]{Rarct=0.1}
+\define@key[psset]{pst-spirograph}{wheelrotation}{\def\psk@wheelrotation{#1 }}
+\psset[pst-spirograph]{wheelrotation=0}
+
+\define@boolkey[psset]{pst-spirograph}[Pst@spirograph@]{int}[true]{}
+\psset[pst-spirograph]{int=false}
+
+\define@boolkey[psset]{pst-spirograph}[Pst@spirograph@]{notdrawWheel}[true]{}
+\psset[pst-spirograph]{notdrawWheel=false}
+
%
\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}}}
@@ -65,7 +81,6 @@
\define@boolkey[psset]{pst-spirograph}[Pst@spirograph@]{circles}[true]{}
\psset[pst-spirograph]{circles=false}
-
%% hole position
\define@key[psset]{pst-spirograph}{HolePos}{\def\psk@HolePos{#1 }}
\psset[pst-spirograph]{HolePos=1.5} % 1<HolePos<2
@@ -76,11 +91,20 @@
\define@boolkey[psset]{pst-spirograph}[Pst@spirograph@]{TypeA}[true]{}
\psset[pst-spirograph]{TypeA}
+\define@boolkey[psset]{pst-spirograph}[Pst@spirograph@]{RubberBand}[true]{}
+\psset[pst-spirograph]{RubberBand=false}
+
+\define@key[psset]{pst-spirograph}{theta1}{\def\psk@thetaA{#1}}
+\define@key[psset]{pst-spirograph}{theta2}{\def\psk@thetaB{#1}}
+\psset[pst-spirograph]{theta1=-90,theta2=90}
\def\psSpirograph{\def\pst@par{}\pst@object{psSpirograph}}
\def\psSpirograph@i{\@ifnextchar({\psSpirograph@ii}{\psSpirograph@ii(0,0)}}
\def\psSpirograph@ii(#1){%
- \begin@ClosedObj
+ \begin@SpecialObj
+ \ifPst@spirograph@RubberBand \psSpirograph@iv(#1)\else\psSpirograph@iii(#1)\fi
+}
+\def\psSpirograph@iii(#1){%
\pst@@getcoor{#1}%
\addto@pscode{
tx@spirographDict begin
@@ -209,15 +233,233 @@
linecolor
stroke
plaquette
+ drawHole
\ifPst@spirograph@circles Circles \fi
grestore
+ \else
+ 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@in polarAngle cos mul a@in polarAngle sin mul translate
+ polarAngle Z1 Z2 sub Z1 div mul rotate
+ m1 Z1
+ Datas2
+ Calculs
+ Beta_ rotate
+ Beta_ neg rotate
+ drawHole
+ grestore
\fi
\fi
end
}%
- \end@ClosedObj
+ \end@SpecialObj
\ignorespaces}
%
+\def\psSpirograph@iv(#1){%
+ \def\RA{\psCalc{\psk@ZA*\psk@m/2}}%
+ \def\RB{\psCalc{\psk@ZB*\psk@m/2}}% les rayons
+ \def\OB{\psCalc{\RA+\RB}}%
+ \def\RAp{\psCalc{(\RA*2-2.5*0.2)/2}}% cercles de pied
+ \def\RBp{\psCalc{(\RB*2-2.5*0.2)/2}}%
+ % la vitesse de rotation
+ \def\OMEGAA{-1}%
+ \def\OMEGAB{\psCalc{(-\OMEGAA)*\psk@ZA/\psk@ZB}}%
+ \def\ANGLE{\psCalc{\psk@wheelrotation}}% degrees
+ \def\ANGLErad{\psCalc{\ANGLE*3.14/180}}% radians
+ \def\nombrePoints{\psCalc{trunc(2*\ANGLE+5,0)}}%
+ % positionnement angulaire des 2 points de fixation de l'élastique
+ \def\thetaA{\psCalc{(\psk@thetaA)*3.14/180}}%
+ \def\thetaB{\psCalc{(\psk@thetaB)*3.14/180}}%
+ % les coordonnées des 2 points
+ \def\xA{\psCalc{0.9*\RAp*cos(\thetaA+\OMEGAA*\ANGLErad)}}%
+ \def\yA{\psCalc{sin(\thetaA+\OMEGAA*\ANGLErad)*\RAp*0.9}}%
+ \def\xB{\psCalc{cos(\thetaB+\OMEGAB*\ANGLErad)*\RBp*0.9}}%
+ \def\yB{\psCalc{sin(\thetaB+\OMEGAB*\ANGLErad)*\RBp*0.9+\OB}}%
+ % le milieu
+ \def\xM{\psCalc{(\xA+\xB)/2}}\def\yM{\psCalc{(\yA+\yB)/2}}%
+ \ThreeDput[normal=0 0 1](0,0,0){%
+ \psgrid[subgriddiv=0,gridlabels=0pt]%\psframe(-5,-5)(5,7)
+ \rput(0.05,-0.05){\psSpirographB[circles=false,polarangle=90,fillstyle=solid,color1=black,color2=black]}%
+ \psSpirographB[circles=false,polarangle=90,fillstyle=solid]%
+ \parametricplot[linecolor=red,plotpoints=\nombrePoints,algebraic,linewidth=0.1]{0}{\ANGLErad}{
+ (\RAp*0.9*cos(\thetaA+\OMEGAA*t)+\RBp*0.9*cos(\thetaB+\OMEGAB*t))/2|
+ (\RAp*0.9*sin(\thetaA+\OMEGAA*t)+\RBp*0.9*sin(\thetaB+\OMEGAB*t)+\OB)/2}%
+ \psline{->}(0,0)(0,1)\psline{->}(0,0)(1,0)%
+ % les cercles de contact
+ \pscircle[linestyle=dotted](0,0){\RA}\pscircle[linestyle=dotted](0,\OB){\RB}%
+ % les cercles de pied
+ %\pscircle[linestyle=dotted](0,0){\RAp}
+ %\pscircle[linestyle=dotted](0,\OB){\RBp}
+ }%
+ % les tiges de fixation des extrémités de l'élastique
+ \ThreeDput[normal=0 1 0](\xA,\yA,0){\psline[linewidth=0.1]{-*}(0,0)(0,1)\pnode(0,1){P1}}%
+ \ThreeDput[normal=0 1 0](\xB,\yB,0){\psline[linewidth=0.1]{-*}(0,0)(0,1)\pnode(0,1){P2}}%
+ % le milieu
+ \ThreeDput[normal=0 1 0](\xM,\yM,0){\pnodes(0,1){P3}(0,0){P4}}%
+ \psline[linecolor=blue](P1)(P2)%
+ \psline[linecolor=red]{->}(P3)(P4)%
+ \psdot[linecolor=blue](P3)%
+ \end@SpecialObj
+ \ignorespaces}
+%
+\def\psSpirographB{\def\pst@par{}\pst@object{psSpirographB}}
+\def\psSpirographB@i{\@ifnextchar({\psSpirographB@ii}{\psSpirographB@ii(0,0)}}
+\def\psSpirographB@ii(#1){%
+ \begin@SpecialObj
+ \pst@@getcoor{#1}%
+ \addto@pscode{%
+ \pst@coor /t@@y ED /t@@x ED
+ /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
+ /facteurRayonRaccord {\psk@Rarct mul} def
+ /polarAngle \psk@polarangle def
+ /color1 {\pst@usecolor\pscolora } def
+ /color2 {\pst@usecolor\pscolorb } def
+ /colorcircles {\pst@usecolor\pscolorc } def
+ /curvecolor {\pst@usecolor\pscolord} def
+ /linecolor {\pst@usecolor\pslinecolor} def
+ /ni \psk@holenumber def ni 8 gt { /ni 8 def } if
+ /thetamax \psk@thetamax def
+ Z1 2 mod 1 eq { /Z1 Z1 1 sub def } if
+ Z2 2 mod 1 eq { /Z2 Z2 1 sub def } if
+ /HolePos \psk@HolePos def
+ HolePos 0 lt HolePos 2 ge or { /HolePos 1.5 def } if
+ /Fill { \psk@opacityalpha .setopacityalpha fill } def
+ /R1 Z1 m1 mul 2 div def
+ /R2 Z2 m1 mul 2 div 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
+ %
+ tx@spirographDict begin
+ %%%% definition de la roue dentee %%%%%%
+ /Roue3d {
+ % arc de développante
+ /tabArcDev [ 0 1 ThetaTdeg { /i@ exch def [i@ devCercle] } for ] def
+ /n@ tabArcDev length def
+ /tabDent [
+ % l'arc de developpante initial
+ tabArcDev aload pop
+ % l'arc ce cercle de tete
+ DeltaT 0.1 2Beta DeltaT sub {/i@ exch def [Rt cm i@ cos mul Rt cm i@ sin mul] } for
+ % le symetrique de l'arc de developpante par rapport a l'axe de la dent
+ n@ 1 sub -1 0 { /compteur exch def [tabArcDev compteur get aload pop symAxe] } for
+ ] def
+ % tracé de la dent
+ /n2@ tabDent length def
+ newpath
+ ptC moveto
+ 0 1 Z@ 1 sub
+ { /i@ exch AngleDent mul def
+ \ifPst@spirograph@int
+ wheel 2 eq { ptA RotDent ptB RotDent Rarct arct ptB RotDent lineto }
+ { ptA RotDent lineto ptB RotDent lineto } ifelse
+ \else
+ Rp Rb eq { ptA RotDent lineto ptB RotDent lineto }
+ { ptA RotDent ptB RotDent Rarct arct ptB RotDent lineto } ifelse
+ \fi
+ 0 1 n2@ 1 sub { /compteur exch def tabDent compteur get aload pop RotDent lineto } for
+ \ifPst@spirograph@int
+ wheel 2 eq { Rp Rb eq { ptA' RotDent lineto ptC' RotDent lineto }
+ { ptA' RotDent ptC' RotDent Rarct arct ptC' RotDent lineto } ifelse }
+ { ptA' RotDent lineto ptC' RotDent lineto } ifelse
+ \else
+ Rp Rb eq { ptA' RotDent lineto ptC' RotDent lineto }
+ { ptA' RotDent ptC' RotDent Rarct arct ptC' RotDent lineto } ifelse
+ \fi
+ } for
+ } def % Roue3d
+ %
+%%%%%%%%%%%%%%%%%5
+ thetamax 0 le { /pas -1 def }{ /pas 1 def } ifelse
+ /tabSpirograph [ 0 pas thetamax {/i_ exch def [ i_ coorPen3 ] } for ] def
+% gsave
+% tabSpirograph 0 get aload pop moveto
+% 1 1 tabSpirograph length 1 sub {/nP exch def tabSpirograph nP get aload pop lineto } for
+% curvecolor
+% \pst@number\pscurvewidth SLW
+% stroke
+% grestore
+%%%%%%%%%%%%%%%
+ /AngleRotation \psk@wheelrotation def
+ %%% Les dessins de l'engrenage %%%%%%
+ %%%%%%%%%% Roue N°1 %%%%%%%%%%%%%%%%%
+ \ifPst@spirograph@notdrawWheel
+ \else
+ /wheel 1 def
+ gsave
+ t@@x t@@y translate
+ m1 Z1
+ \ifPst@spirograph@int
+ Datas2 Calculs Beta_ AngleRotation sub rotate Roue3d COURONNE closepath
+ \ifx\psk@fillstyle\relax\else color1 fill \fi
+ Roue3d closepath linecolor stroke
+ COURONNE closepath linecolor stroke
+ \ifPst@spirograph@circles Circles \fi
+ \else
+ Datas1 Calculs Beta_ AngleRotation sub rotate Roue3d AXE closepath
+ \ifx\psk@fillstyle\relax\else color1 fill \fi
+ Roue3d closepath linecolor stroke
+ AXE closepath
+ \ifx\psk@fillstyle\relax\else 0.8 setgray fill \fi
+ AXE closepath linecolor stroke
+ CLAVETTE
+ \ifx\psk@fillstyle\relax\else 0 0.125 0.25 0.25 setcmykcolor fill \fi
+ CLAVETTE linecolor stroke
+ \ifPst@spirograph@circles Circles \fi
+ \fi
+ grestore
+ \fi
+ %%%%%%%%%% Roue N°2 %%%%%%%%%%%%%%%%%
+ /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
+ \ifPst@spirograph@int
+ a@in polarAngle cos mul t@@x add a@in polarAngle sin mul t@@y add translate
+ Beta_ Z1 Z2 div AngleRotation mul sub polarAngle Z1 Z2 sub Z2 div mul sub rotate
+ \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 Z1 Z2 div AngleRotation mul add polarAngle Z1 Z2 add Z2 div mul add rotate
+ \fi
+ Roue3d
+ AXE
+ closepath
+ \ifx\psk@fillstyle\relax\else color2 fill \fi
+ Roue3d
+ closepath
+ linecolor
+ stroke
+ AXE
+ closepath
+ \ifx\psk@fillstyle\relax\else 0.8 setgray fill \fi
+ AXE
+ closepath
+ linecolor
+ stroke
+ CLAVETTE
+ \ifx\psk@fillstyle\relax\else 0 0.125 0.25 0.25 setcmykcolor fill \fi
+ CLAVETTE
+ linecolor
+ stroke
+ \ifPst@spirograph@circles Circles \fi
+ grestore
+ end
+ }%
+ \end@SpecialObj
+ \ignorespaces
+}% % fin de la commande PSTricks
+%
\catcode`\@=\PstAtCode\relax
%
\endinput \ No newline at end of file