diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/pstricks/contrib/pst-fractal |
Initial commit
Diffstat (limited to 'graphics/pstricks/contrib/pst-fractal')
-rw-r--r-- | graphics/pstricks/contrib/pst-fractal/Changes | 33 | ||||
-rw-r--r-- | graphics/pstricks/contrib/pst-fractal/README | 17 | ||||
-rw-r--r-- | graphics/pstricks/contrib/pst-fractal/doc/pst-fractal-doc.bib | 132 | ||||
-rw-r--r-- | graphics/pstricks/contrib/pst-fractal/doc/pst-fractal-doc.pdf | bin | 0 -> 31954522 bytes | |||
-rw-r--r-- | graphics/pstricks/contrib/pst-fractal/doc/pst-fractal-doc.tex | 1589 | ||||
-rw-r--r-- | graphics/pstricks/contrib/pst-fractal/dvips/pst-fractal.pro | 953 | ||||
-rw-r--r-- | graphics/pstricks/contrib/pst-fractal/latex/pst-fractal.sty | 12 | ||||
-rw-r--r-- | graphics/pstricks/contrib/pst-fractal/tex/pst-fractal.tex | 738 |
8 files changed, 3474 insertions, 0 deletions
diff --git a/graphics/pstricks/contrib/pst-fractal/Changes b/graphics/pstricks/contrib/pst-fractal/Changes new file mode 100644 index 0000000000..a6f08b3fac --- /dev/null +++ b/graphics/pstricks/contrib/pst-fractal/Changes @@ -0,0 +1,33 @@ +pst-fractal.pro -------- +0.06 2017-12-04 added Hilbert fractal +0.05 2017-12-02 added fibinacci curves +0.04 2017-11-26 add sierpinski curve +0.03 2011-02-10 cometic changes +0.02 2010-02-10 fix bug in tx@fern +0.01 2007-04-05 first CTAN version + + +pst-fractal.tex -------- +0.10 2018-11-10 - added Cantor set +0.09 2017-12-02 - added fibinacci curves +0.08 2017-11-26 - added sierpinski curve +0.07 2013-06-17 - allow level 0 for sierpinski +0.06 2010-02-10 - add another type of a Sierpinski triangle +0.05 2007-09-25 - allow unbalanced trees with option 0<c<1 + - use option c for unballanced trees + - new option minWidth +0.04 2007-05-16 added the new macros + \psPhyllotaxis + \psFern + \psKochflake + \psAppolonius + \psPTree + \psFArrow + all with several new options +0.03 2007-04-05 first CTAN version + + +pst-fractal.sty -------- +2007-09-25 add message for pst-fractal.pro +2007-04-05 first CTAN version + diff --git a/graphics/pstricks/contrib/pst-fractal/README b/graphics/pstricks/contrib/pst-fractal/README new file mode 100644 index 0000000000..9bbab9f8cd --- /dev/null +++ b/graphics/pstricks/contrib/pst-fractal/README @@ -0,0 +1,17 @@ +pst-fractal: plotting fractals + +Save the files pst-fractal.sty|tex in a directory, which is part of your +local TeX tree. The pro file should go into $TEXMF/dvips/pstricks/ +Then do not forget to run texhash to update this tree. +For more information see the documentation of your LATEX distribution +on installing packages into your local TeX system. + +PSTricks is PostScript Tricks, the documentation cannot be run +with pdftex, use the sequence latex->dvips->ps2pdf. + +To gett he documentation of this document you have to run +pst2pdf pst-fractal-doc --Iext=.jpg + +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. diff --git a/graphics/pstricks/contrib/pst-fractal/doc/pst-fractal-doc.bib b/graphics/pstricks/contrib/pst-fractal/doc/pst-fractal-doc.bib new file mode 100644 index 0000000000..a140094051 --- /dev/null +++ b/graphics/pstricks/contrib/pst-fractal/doc/pst-fractal-doc.bib @@ -0,0 +1,132 @@ +@STRING{tugboat = {TUGboat} } +@STRING{beiprogramm = {{\TeX}-Beiprogramm} } +@STRING{bretter = {Bretter, die die Welt bedeuten} } +@STRING{dtk = {{D}ie {\TeX}nische {K}om{\"o}die} } +@STRING{editorial = {Editorial} } +@STRING{fremdebuehne = {Von fremden B{\"u}hnen} } +@STRING{fundus = {Aus dem Fundus} } +@STRING{hinterbuehne = {Hinter der B{\"u}hne} } +@STRING{leserbrief = {Leserbrief(e)} } +@STRING{magazin = {Magazin} } +@STRING{rezension = {Rezensionen} } +@STRING{schonimmer = {Was Sie schon immer {\"u}ber {\TeX} wissen wollten \dots} } +@STRING{theaterkasse = {Von der Theaterkasse} } +@STRING{theatertage = {{\TeX}-Theatertage} } + + +@Article{ dtk02.1:voss:mathematischen, + author = {Herbert Voß}, + title = {Die mathematischen {F}unktionen von {P}ost{S}cript}, + journal = dtk, + year = 2002, + volume = {1/02}, + altvolume = 1, + altnumber = 14, + month = mar, + pages = {}, + annote = bretter, + keywords = {}, + abstract = { \PS, faktisch genauso alt wie {\TeX}, ist im + Verh{\"a}ltnis dazu allgemein noch weniger bekannt, wenn es + darum geht zu beurteilen, was es denn nun im eigentlichen + Sinne ist. Außerdem wird h{\"a}ufig vergessen, dass + sich mit den \PS-Funktionen viele Dinge erledigen lassen, + bei denen sonst auf externe Programme zur{\"u}ckgegriffen + wird. Dies wird im Folgenden f{\"u}r die mathematischen + Funktionen im Zusammenhang mit dem Paket \texttt{pst-plot} + gezeigt. } +} + +@Book{tlgc2, + author = {Michel Goosens and Frank Mittelbach and Sebastian Rahtz and Denis Roegel and Herbert Voß}, + title = {The {\LaTeX} {G}raphics {C}ompanion}, + publisher = {{Addison-Wesley Publishing Company}}, + edition = 2, + year = {2007}, + address = {Reading, Mass.} +} + + +@Article{girou:01:, + author = {Denis Girou}, + title = {Pr\'esentation de {PST}ricks}, + journal = {Cahier {GUT}enberg}, + year = 1994, + volume = {16}, + month = apr, + pages = {21-70} +} + +@Article{girou:02:, + author = {{Timothy van} Zandt and Denis Girou}, + title = {Inside {PST}ricks}, + journal = TUGboat, + year = 1994, + volume = {15}, + month = sep, + pages = {239-246} +} + +@Book{PostScript, + Author = {Kollock, Nikolai G.}, + Title = {Post{S}cript richtig eingesetzt: vom {K}onzept zum + praktischen {E}insatz}, + Publisher = {IWT}, + Address = {Vaterstetten}, + year = 1989, +} + +@online{pstricks, + Title = {PSTricks - {\PS} macros for generic {\TeX}}, + Author = {{Timothy van} Zandt}, + Organization = {}, + url = {http://www.tug.org/application/PSTricks}, + year = 1993 +} + +@Book{PSTricks2, + author = {Herbert Voß}, + title = {\texttt{PSTricks} -- {G}rafik f\"ur \TeX{} und \LaTeX}, + edition = {7}, + publisher = {DANTE -- Lehmanns}, + year = {2016}, + publisher = {Heidelberg and Berlin} +} + +@Book{PSTricks2-UIT, + author = {Herbert Voß}, + title = {PSTricks -- Graphics for \TeX\ and \LaTeX}, + publisher = {UIT}, + year = {2011}, + address = {Cambridge} +} + +@Book{LaTeXRef-UIT, + author = {Herbert Voß}, + title = {{\LaTeX} quick reference}, + publisher = {UIT}, + year = {2012}, + address = {Cambridge} +} + +@online{wolfram, + author = {Eric Weisstein}, + title = {Wolfram MathWorld}, + publisher = {{Wolfram}}, + year = {2007}, + url = {http://mathworld.wolfram.com} +} + +@ctan{pst-tools, + author = {Herbert Voß}, + title = {\texttt{pst-tools} -- Helper functions}, + year = {2012}, + url = {/graphics/pstricks/contrib/pst-tools} +} + +@online{ramirez, +title= {Properties and Generalizations of the Fibonacci Word Fractal Exploring Fractal Curves}, +url = {http://www.mathematica-journal.com/2014/02/properties-and-generalizations-of-the-fibonacci-word-fractal/}, +author= {José L. RamÃrez and Gustavo N. Rubiano}, +} +
\ No newline at end of file diff --git a/graphics/pstricks/contrib/pst-fractal/doc/pst-fractal-doc.pdf b/graphics/pstricks/contrib/pst-fractal/doc/pst-fractal-doc.pdf Binary files differnew file mode 100644 index 0000000000..28dfccc6a0 --- /dev/null +++ b/graphics/pstricks/contrib/pst-fractal/doc/pst-fractal-doc.pdf diff --git a/graphics/pstricks/contrib/pst-fractal/doc/pst-fractal-doc.tex b/graphics/pstricks/contrib/pst-fractal/doc/pst-fractal-doc.tex new file mode 100644 index 0000000000..884b7d5079 --- /dev/null +++ b/graphics/pstricks/contrib/pst-fractal/doc/pst-fractal-doc.tex @@ -0,0 +1,1589 @@ +%% $Id: pst-fractal-doc.tex 846 2018-11-30 21:44:45Z herbert $ +\documentclass[fontsize=11pt,english,BCOR=10mm,DIV=13,toc=bibliography,parskip=false, + headings=small, headinclude=false,footinclude=false,oneside]{pst-doc} +\usepackage[utf8]{inputenc} +\usepackage{pst-fractal} +\let\pstFV\fileversion +\renewcommand\bgImage{\includegraphics[scale=0.75]{images/demo}} +\def\PSLenv{\Lenv{pspicture}} +\usepackage{animate} + + +\def\pSTilingsFibonacci#1#2#3{% #1=n #2=nbre de lignes #3=type 1 ou 2 + \pstFPDiv\Nbr{#2}{2}% + \psset[pst-fractal]{n=#1}% + \pstVerb{/n0 #1 def /tabPell [0 1 2 5 12 29 70 169 408] def + /Type #3 def + Type 2 gt {/Type 1 def} if + Type 2 eq { +% (-1)^2P(n),(P(n+1) + /Y1 tabPell n0 1 add get def + /X1 -1 n0 exp tabPell n0 get mul def + }{ +% (P(n+1),(-1)^2P(n) + /X1 tabPell n0 1 add get def + /Y1 -1 n0 exp tabPell n0 get mul def + } ifelse + % le déplacement perpendiculaire + /X2 Y1 neg def + /Y2 X1 def +}% +\pstVerb{/ListColors [0 0 1] def}% +\multido{\I=-\Nbr+1}{#2}{5 \rput(!X2 \I\space mul Y2 \I\space mul){% + \multido{\i=-\Nbr+1}{#2}{% +%\definecolor[ps]{Couleur}{rgb}{ListColors aload pop}% + \definecolor[ps]{Couleur}{cmyk}{ListColors aload pop 0}% + \rput(!X1 \i\space mul Y1 \i\space mul){\psFibonacciPolyominoes[fillcolor=Couleur]}% + \pstVerb{/ListColors [ListColors aload pop 3 1 roll] def}% +}}}}% + + + +%\usepackage{auto-pst-pdf} + +\addbibresource{\jobname.bib} +\lstset{language=PSTricks,basicstyle=\footnotesize\ttfamily} +% +\begin{document} + +\title{\texttt{pst-fractal}} +\subtitle{Plotting fractals; v.\pstFV} +\author{Herbert Vo\ss} +\docauthor{} +\date{\today} +\maketitle + +\tableofcontents + +\vspace{3cm} + + +\begin{abstract} +\noindent +The well known \LPack{pstricks} package offers excellent macros to insert more or less complex +graphics into a document. \LPack{pstricks} itself is the base for several other additional packages, +which are mostly named \verb+pst-xxxx+, like \LPack{pst-fractal}. + +This version uses the extended keyval package \LPack{xkeyval}, so be sure that you have installed +this package together with the spcecial one \LPack{pst-xkey} for PSTricks. The \LPack{xkeyval} +package is available at \url{CTAN:/macros/latex/contrib/xkeyval/}. +It is also important that after \LPack{pst-fractal} no package is loaded, which uses the old keyval interface. + +The fractals are really big, which is the reason why this document is about 15 MByte +when you run it without using the external png-images. +\end{abstract}% + +All images in this documentation were converted to the \Lext{jpg} format to get +a small pdf file size. When using the pdf format for the images the file size will be +more than 20 MBytes. However, having a small file size will lead into a bad image +resolution. Run the examples as single documents to see how it will be in +high quality. + + +\section{Cantor set} + +The set is always plotted from the origin down to into negative $y$ values. + +\begin{BDef} +\Lcs{psCantor}\OptArgs\\ +\end{BDef} + +Possible optional arguments are \Lkeyword{linewidth}, \Lkeyword{linecolor}, +\Lkeyword{n} (recursion depth), \Lkeyword{xWidth}, and \Lkeyword{yWidth} (vertical increment). +The defaults are 2mm, black, 5, 10cm, and 5mm. + +\begin{LTXexample}[pos=l] +\begin{pspicture}(10,-2) + \psCantor +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample}[pos=l] +\begin{pspicture}(10,-2) + \psCantor[linewidth=3mm,linecolor=red, + n=7,xWidth=11,yWidth=4mm] +\end{pspicture} +\end{LTXexample} + + +\section{Sierpinski triangle and curve} + +The triangle must be given by three mandatory arguments. Depending to the kind of +arguments it is one of the two possible versions: + +\begin{BDef} +\Lcs{psSier}\OptArgs\coord0\coord1\coord2\\ +\Lcs{psSier}\OptArgs\coord0\Largb{Base}\Largb{Recursion}\\ +\Lcs{psSier}\OptArgs +\end{BDef} + +\subsection{Triangle} +In difference to \Lcs{psfractal} it doesn't reserve any space, this is the +reason why it should be part of a \PSLenv{} environment. + +\begin{LTXexample}[pos=l] +\begin{pspicture}(5,5) + \psSier(0,0)(2,5)(5,0) +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample}[pos=t] +\multido{\iA=1+1}{6}{% +\begin{pspicture}(2,1.7) +\psSier[linecolor=blue!70, + fillcolor=red!40](0,0){2cm}{\iA} +\end{pspicture} } +\end{LTXexample} + +\subsection{Curve} + +There are four special optional arguments for the Siepinski curve: +\begin{itemize} + \item \texttt{[n=4]} : number of iterations + \item \texttt{[N=all]} : number of placed points (only of interest for an animation) + \item \texttt{[dotcolor=red]} : in difference to linecolor for standard PSTricks + \item \texttt{[showpoints=false]} : show calculated points +\end{itemize} + +\begin{LTXexample}[pos=t] +\begin{pspicture}(-4,-4)(4,4) +\psframe*[linecolor=cyan](-4,-4)(4,4) +\psSier[unit=0.25,n=4,fillstyle=solid,fillcolor=yellow,linecolor=blue] +\psgrid[subgriddiv=0,gridcolor=blue,griddots=5,gridlabels=0pt,unit=0.5](-8,-8)(8,8) +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample}[pos=t] +\begin{pspicture}[showgrid](-4,-4)(4,4) +\psset{unit=0.25} +% n=4 => Nmax=4^(n+1)=1024 +% ici on marque la moitie des points +\psSier[n=4,N=512] +\end{pspicture} +\end{LTXexample} + + + +\begin{LTXexample}[pos=t] +\begin{pspicture}(-4,-4)(4,4) +\psframe*[linecolor=-yellow](-4,-4)(4,4) +\psSier[n=5,unit=0.125,fillstyle=solid,fillcolor=-cyan,linecolor=-blue] +\end{pspicture} +\end{LTXexample} + + +\begin{animateinline}[controls,% palindrome, + begin={\begin{pspicture}(-4,-4)(4,4)}, + end={\end{pspicture}}]{5}% 5 image/s +\multiframe{256}{i=1+1}{% + \psframe*[linecolor=yellow!20](-4,-4)(4,4) + \psgrid[subgriddiv=0,gridcolor=blue,griddots=5,gridlabels=0pt,unit=0.5](-8,-8)(8,8) +% n=3 => Nmax=4^(n+1)=256 points + \psSier[linecolor=blue,linewidth=0.05,n=3,showpoints,dotsize=0.1,N=\i,unit=0.5]} +\end{animateinline} + + +\begin{verbatim} +\begin{animateinline}[controls,% palindrome, + begin={\begin{pspicture}(-4,-4)(4,4)}, + end={\end{pspicture}}]{5}% 5 image/s +\multiframe{256}{i=1+1}{% +\psframe*[linecolor=yellow!20](-4,-4)(4,4) +\psgrid[subgriddiv=0,gridcolor=blue,griddots=5,gridlabels=0pt,unit=0.5](-8,-8)(8,8) +% n=3 => Nmax=4^(n+1)=256 points +\psSierpinskyCurve[linecolor=blue,linewidth=0.05,n=3,showpoints,dotsize=0.1,N=\i,unit=0.5]} +\end{animateinline} +\end{verbatim} + + + +\section{Julia and Mandelbrot sets} + +The syntax of the \Lcs{psfractal} macro is simple +% +\begin{BDef} +\Lcs{psfractal}\OptArgs\coord0\coord1 +\end{BDef} + + +All Arguments are optional, \Lcs{psfractal} is the same as \Lcs{psfractal}\verb+(-1,-1)(1,1)+. +The Julia and Mandelbrot sets are a graphical representation of the following sequence +$x$ is the real and $y$ the imaginary part of the complex number $z$. $C(x,y)$ is a complex constant +and preset by $(0,0)$. +\begin{align} +z_{n+1}(x,y) &= (z_n(x,y))^2 +C(x,y) +\end{align} + +\subsection{Julia sets} + +A Julia set is given with + +\begin{align} +z_{n+1}(x,y) &= (z_n(x,y))^2 +C(x,y)\\ +z_0 &= (x_0;y_0) +\end{align} +$(x_0;y_0)$ is the starting value. + +\psset{unit=1cm,opacity=0} + + + +\begin{LTXexample}[pos=l] +\psfractal +\end{LTXexample} + +\begin{LTXexample}[pos=l] +\psfractal[xWidth=4cm,yWidth=4cm, baseColor=white, dIter=20](-2,-2)(2,2) +\end{LTXexample} + + +\subsection{Mandelbrot sets} + +A Mandelbrot set is given with + +\begin{align} +z_{n+1}(x,y) &= (z_n(x,y))^2 +C(x,y)\\ +z_0 &= (0;0)\\ +C(x,y) &= (x_0;y_0) +\end{align} + +$(x_0;y_0)$ is the starting value. + +\begin{LTXexample}[pos=l] +\psfractal[type=Mandel] +\end{LTXexample} + + +\begin{LTXexample}[pos=l] +\psfractal[type=Mandel, xWidth=6cm, + yWidth=4.8cm, baseColor=white, + dIter=10](-2,-1.2)(1,1.2) +\end{LTXexample} + +\subsection{The options} + + +\subsection{\texttt{type}} +\Lkeyword{txpe} can be of \Lkeyval{Julia} (default) or \Lkeyval{Mandel}. + + +\begin{LTXexample}[pos=l] +\psfractal \qquad +\psfractal[type=Mandel] +\end{LTXexample} + +\subsection{\texttt{baseColor}} +The color for the convergent part is set by \Lkeyword{baseColor}. + +\begin{LTXexample} +\psfractal[xWidth=4cm,yWidth=4cm,dIter=30](-2,-2)(2,2) \qquad +\psfractal[xWidth=4cm,yWidth=4cm,baseColor=yellow,dIter=30](-2,-2)(2,2) +\end{LTXexample} + + +\subsection{\texttt{xWidth} and \texttt{yWidth}} +\Lkeyword{xWidth} and \Lkeyword{yWidth} + define the physical width of the fractal. + +\begin{LTXexample} +\psfractal[type=Mandel,xWidth=12.8cm,yWidth=10.8cm,dIter=5](-2.5,-1.3)(0.7,1.3) +\end{LTXexample} + + +\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\subsection{\texttt{cx} and \texttt{cy}}\xLkeyword{cx}\xLkeyword{cy} +Define the starting value for the complex constant number $C$. + +\begin{LTXexample} +\psset{xWidth=5cm,yWidth=5cm} +\psfractal[dIter=2](-2,-2)(2,2) \qquad +\psfractal[dIter=2,cx=-1.3,cy=0](-2,-2)(2,2) +\end{LTXexample} + + +\subsection{\texttt{dIter}} +The color is set by \Index{wavelength} to RGB conversion of the iteration number, where +\Lkeyword{dIter} is the step, predefined by 1. The wavelength is given by +the value of \Lps{iter} added by 400. + +\begin{LTXexample} +\psset{xWidth=5cm,yWidth=5cm} +\psfractal[dIter=30](-2,-2)(2,2) \qquad +\psfractal[dIter=10,cx=-1.3,cy=0](-2,-2)(2,2) +\end{LTXexample} + + +\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\subsection{\texttt{maxIter}} +\Lkeyword{maxIter} is the number of the maximum iteration until it leaves the loop. +It is predefined by 255, but internally multiplied by \Lkeyword{dIter}. + +\begin{LTXexample} +\psset{xWidth=5cm,yWidth=5cm} +\psfractal[maxIter=50,dIter=3](-2,-2)(2,2) \qquad +\psfractal[maxIter=30,cx=-1.3,cy=0](-2,-2)(2,2) +\end{LTXexample} + +\subsection{\texttt{maxRadius}} +If the square of distance of $z_n$ to the origin of the complex coordinate system +is greater as \Lkeyword{maxRadius} then the algorithm leaves the loop +and sets the point. \Lkeyword{maxRadius} should always be the square of the "`real"' +value, it is preset by 100. + +\begin{LTXexample} +\psset{xWidth=5cm,yWidth=5cm} +\psfractal[maxRadius=30,dIter=10](-2,-2)(2,2) \qquad +\psfractal[maxRadius=30,dIter=30,cx=-1.3,cy=0](-2,-2)(2,2) +\end{LTXexample} + + +\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%% + +\subsection{\texttt{plotpoints}}\xLkeyword{plotpoints} +This option is only valid for the Sierpinski triangle and preset by 2000. + +\begin{LTXexample} +\begin{pspicture}(5,5) + \psSier(0,0)(2.5,5)(5,0) +\end{pspicture} \quad +\begin{pspicture}(5,5) + \psSier[plotpoints=10000](0,0)(2.5,5)(5,0) +\end{pspicture} +\end{LTXexample} + + + +\section{Phyllotaxis} +The beautiful arrangement of leaves in some plants, called phyllotaxis, +obeys a number of subtle mathematical relationships. For instance, the florets +in the head of a sunflower form two oppositely directed spirals: 55 of them clockwise +and 34 counterclockwise. Surprisingly, these numbers are consecutive Fibonacci numbers. +The Phyllotaxis is like a Lindenmayer system. + +\begin{BDef} +\Lcs{psPhyllotaxis}\OptArgs\Largr{\CAny} +\end{BDef} + +The coordinates of the center are optional, if they are missing, then $(0,0)$ +is assumed. + + +\begin{LTXexample}[pos=l] +\psframebox{% +\begin{pspicture}(-3,-3)(3,3) + \psPhyllotaxis +\end{pspicture}} +\end{LTXexample} + + + +\begin{LTXexample}[pos=l] +\psframebox{% +\begin{pspicture}(-3,-3)(4,4) + \psPhyllotaxis(1,1) +\end{pspicture}} +\end{LTXexample} + +\subsection{\texttt{angle}}\xLkeyword{angle} + +\begin{LTXexample}[pos=l] +\psframebox{% +\begin{pspicture}(-2.5,-2.5)(2.5,2.5) + \psPhyllotaxis[angle=99] +\end{pspicture}} +\end{LTXexample} + + +\clearpage%%%%%%%%%%%%%%%%%%%%%%%% + + +\subsection{\texttt{c}}\xLkeyword{c} +This is the length of one element in the unit pt. + +\begin{LTXexample} +\psframebox{% +\begin{pspicture}(8,8) + \psPhyllotaxis[c=7](4,4) +\end{pspicture}} +\end{LTXexample} + +\begin{LTXexample} +\psframebox{% +\begin{pspicture}(-3,-3)(3,3) + \psPhyllotaxis[c=4,angle=111] +\end{pspicture}} +\end{LTXexample} + +\clearpage%%%%%%%%%%%%%%%%%%%%%%%% + + +\subsection{\texttt{maxIter}}\xLkeyword{maxIter} +This is the number for the iterations. + +\begin{LTXexample} +\psframebox{% +\begin{pspicture}(-3,-3)(3,3) + \psPhyllotaxis[c=6,angle=111,maxIter=100] +\end{pspicture}} +\end{LTXexample} + + + +\section{Fern} + +\begin{BDef} +\Lcs{psFern}\OptArgs\Largr{\CAny} +\end{BDef} + +The coordinates of the starting point are optional, if they are missing, then $(0,0)$ +is assumed. The default \Lkeyword{scale} is set to 10. + +\begin{LTXexample} +\psframebox{% +\begin{pspicture}(-1,0)(1,4) + \psFern +\end{pspicture}} +\end{LTXexample} + +\begin{LTXexample} +\psframebox{% +\begin{pspicture}(-1,0)(2,5) + \psFern(1,1) +\end{pspicture}} +\end{LTXexample} + +\begin{LTXexample} +\psframebox{% +\begin{pspicture}(-3,0)(3,11) + \psFern[scale=30,maxIter=100000,linecolor=green] +\end{pspicture}} +\end{LTXexample} + + +\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\section{Koch flake} + +\begin{BDef} +\Lcs{psKochflake}\OptArgs\Largr{\CAny} +\end{BDef} + +The coordinates of the starting point are optional, if they are missing, then $(0,0)$ +is assumed. The origin is the lower left point of the flake, marked as red +or black point +in the following example: + +\begin{LTXexample} +\begin{pspicture}[showgrid=true](-2.4,-0.4)(5,5) + \psKochflake[scale=10] + \psdot[linecolor=red,dotstyle=*](0,0) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample} +\begin{pspicture}(-0.4,-0.4)(12,4) + \psset{fillcolor=lime,fillstyle=solid} + \multido{\iA=0+1,\iB=0+2}{6}{% + \psKochflake[angle=-30,scale=3,maxIter=\iA](\iB,2.5)\psdot*(\iB,2.5) + \psKochflake[scale=3,maxIter=\iA](\iB,0)\psdot*(\iB,0)} +\end{pspicture} +\end{LTXexample} + +Optional arguments are \Lkeyword{scale}, \Lkeyword{maxIter} (iteration depth) and \Lkeyword{angle} +for the first rotation angle. + + +\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Apollonius circles} + +\begin{BDef} +\Lcs{psAppolonius}\OptArgs\Largr{\CAny} +\end{BDef} + +The coordinates of the starting point are optional, if they are missing, then $(0,0)$ +is assumed. The origin is the center of the circle: + +\begin{LTXexample} +\begin{pspicture}[showgrid=true](-4,-4)(4,4) + \psAppolonius[Radius=4cm] +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample} +\begin{pspicture}(-5,-5)(5,5) + \psAppolonius[Radius=5cm,Color] +\end{pspicture} +\end{LTXexample} + + +\section{Trees} + +\begin{BDef} +\Lcs{psPTree}\OptArgs\Largr{\CAny} +\Lcs{psFArrow}\OptArgs\Largr{\CAny}\Largb{fraction} +\end{BDef} + +The coordinates of the starting point are optional, if they are missing, then $(0,0)$ +is assumed. The origin is the center of the lower line, shown in the following examples +by the dot. Special parameters are the width of the lower basic line for the tree and the +height and angle for the arrow and for both the color option. The color step is given by \Lkeyword{dIter} +and the depth by \Lkeyword{maxIter}. Valid optional arguments are + +\medskip +\begin{center} +\begin{tabular}{@{}>{\ttfamily}lll@{}}\hline +\emph{Name} & \emph{Meaning} & \emph{default}\\\hline +\Lkeyword{xWidth} & first base width & 1cm\\ +\Lkeyword{minWidth} & last base width & 1pt\\ +\Lkeyword{c} & factor for unbalanced trees (0<c<1) & 0.5\\ +\Lkeyword{Color} & colored tree & false\\\hline +\end{tabular} +\end{center} + +\bigskip +\begin{LTXexample} +\begin{pspicture}[showgrid=true](-3,0)(3,4) + \psPTree + \psdot*(0,0) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample} +\begin{pspicture}[showgrid=true](-6,0)(6,7) + \psPTree[xWidth=1.75cm,Color=true] + \psdot*[linecolor=white](0,0) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample} +\begin{pspicture}(-7,-1)(6,8) + \psPTree[xWidth=1.75cm,c=0.35] +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample} +\begin{pspicture}(-5,-1)(7,8) + \psPTree[xWidth=1.75cm,Color=true,c=0.65] +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample} +\begin{pspicture}[showgrid=true](-1,0)(1,3) + \psFArrow{0.5} +\end{pspicture} +\quad +\begin{pspicture}[showgrid=true](-2,0)(2,3) + \psFArrow{0.6} +\end{pspicture} +\quad +\begin{pspicture*}[showgrid=true](-3,0)(3,3.5) + \psFArrow[linewidth=3pt]{0.65} +\end{pspicture*} +\end{LTXexample} + + +\begin{LTXexample} +\begin{pspicture}(-1,0)(1,3) + \psFArrow[Color]{0.5} +\end{pspicture} +\quad +\begin{pspicture}(-2,0)(2,3) + \psFArrow[Color]{0.6} +\end{pspicture} +\quad +\begin{pspicture*}(-3,0)(3,3.5) + \psFArrow[Color]{0.65} +\end{pspicture*} +\end{LTXexample} + + +\begin{LTXexample} +\begin{pspicture}(-3,-3)(2,3) + \psFArrow[Color]{0.6} + \psFArrow[angle=90,Color]{0.6} +\end{pspicture} +\quad +\begin{pspicture*}(-4,-3)(3,3) + \psFArrow[Color]{0.7} + \psFArrow[angle=90,Color]{0.7} +\end{pspicture*} +\end{LTXexample} + + +\section{Fibonacci fractals} +There are seven different commands which are all defined by Manuel Luque (for more informations see +\url{http://pstricks.blogspot.de}): + +\begin{BDef} +\Lcs{psFibonacciWord}\OptArgs\Largr{\CAny}\\ +\Lcs{psFibonacci}\OptArgs\\ +\Lcs{psNewFibonacci}\OptArgs\\ +\Lcs{psiFibonacci}\OptArgs\\ +\Lcs{pskFibonacci}\OptArgs\Largr{\CAny}\\ +\Lcs{psBiperiodicFibonacci}\OptArgs\Largr{\CAny}\\ +\Lcs{psFibonacciPolyominoes}\OptArgs\Largr{\CAny} +\end{BDef} + + +\begin{itemize} + \item \Lcs{psFibonacciWord} A Fibonacci word after n iterations + \item \Lcs{psFibonacci} Draw the fractal curve of a Fibonacci word + \item \Lcs{psNewFibonacci} Draw a bunch of curves obtained from the ``Dense Fibonacci Word'' + (DFW) by substitutions. + \item \Lcs{psiFibonacci} In the article \cite{ramirez} a new family of curves in a row is called + ``\texttt{i-Fibonacci Word Fractal}''. + \item \Lcs{pskFibonacci} study the + following k-Fibonacci and the curves associated with words in the article ``\textit{On the + k-Fibonacci + words}\footnote{\ url{http://www.acta.sapientia.ro/acta-info/C5-2/info52-4.pdf}}'', this + command allows to represent these curves. + \item \Lcs{psBiperiodicFibonacci} it is still José L. RamÃrez and Gustavo N. Rubiano who in the + article ``\textit{Biperiodic Fibonacci Word and Its Fractal Curve}''% + \footnote{\url{https://www.researchgate.net/publication/276406650_Biperiodic_Fibonacci_word_and_its_fractal_curve}} + extend the notion of Fibonacci sequence with 2 parameters (a, b). This command draws the + associated fractal curves. + \item \Lcs{psFibonacciPolyominoes} this command draws a Fibonacci tile, also called a Fibonacci + flake and allows you to pave the plane in two ways, following the rules established by A. + Blondin-Massé, S. Labbé, S. Brlek and M. Mendès-France in their article ``\textit{Fibonacci + snowflakes}\footnote{\url{www.slabbe.org/Publications/2011-fibo-snowflakes.pdf}}''. +\end{itemize} + +The valid optional arguments with its default values: + + +\begin{enumerate} + \item \texttt{[n=10]} : number of iterations; + \item \texttt{[k=5]} : k-Fibonacci series; + \item \texttt{[a=5,b=5]} : Biperiodic-Fibonacci series; + \item \texttt{[angle=90]} : turn right (-) or left (+) an angle of this value (see examples in + the article of José L. RamÃrez et Gustavo N. Rubiano. + \item \texttt{[i=6]} : sets the follow-up nature of generalized Fibonacci; + \item \texttt{morphism=(0) (1) (2)} : for the command \Lcs{psNewFibonacci}, we will write + in the 3 pairs of parentheses the substitutions to be performed (see section~\ref{dfw})). + \item \texttt{[PSfont=Times-Roman]} : PostScript font; + \item \texttt{[fontscale=8} : fontscale; + \item \texttt{[colorF]} : curve color \verb+n-1+ for construction by juxtaposition; + \item \texttt{[juxtaposition=false]} allows the juxtaposition of the \texttt{n} and + \texttt{n-1} curves to bring up the \texttt{n+1} curve by simply writing + \texttt{[juxtaposition]} in the options. + \item \texttt{[DFW=false]} to display the ``\textit{Dense Fibonacci Word}'' (DFW) with + \verb+\psFibonacciWord[DFW]+~; + \item \texttt{[iFibonacci=false]} to display the word ``\textit{i-Fibonacci}'' with + \verb+\psiFibonacciWord[iFibonacci]+, obtained with the \texttt{[i]} parameter after + \texttt{[n]} iterations. +\end{enumerate} + +The color and the thickness of the line of the fractal curve \texttt{n} are fixed with the usual +parameters of PSTricks: \texttt{linewidth} and \texttt{linecolor}. The starting point of the curve +is in $(0,0)$ and the unit is set by the PSTricks \texttt{unit =} option. + +This package does not pretend to exhaust the subject on the continuation of Fibonacci, the word of +Fibonacci and the various fractals which are inspired by it. The subject is very vast and the +studies very numerous. For those who discover the subject here are some tracks. + +The number 478 of the August 2017 issue of \textit{Pour la Science} contains an article by +Jean-Paul Delahaye ``\textit {The following of Fibonacci \ldots\ and its consequences}'' whose +title sums up the content of the article with, as usual, detailed explanations and beautiful +illustrations. + +Concerning all the variations on the fractal curve of the Fibonacci word, Alexis Monnerot-Dumaine's +article entitled ``\textit{The Fibonacci Word fractal}'' is the +reference\footnote{\url{https://hal.archives-ouvertes.fr/hal-00367972}}. + +The site \url{https://fr.wikipedia.org/wiki/Fractale_du_mot_de_Fibonacci} is also very rich in +information. + +The command \verb+\pSTilingsFibonacci+ allows the tiling of the +plane with the n order Fibonacci tile. + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid=false](-1,-1)(1,3) +\psgrid[style=gridstyleA] +\psFibonacci[unit=0.2,linecolor={[rgb]{0 0 0.5}},linewidth=0.05cm,n=5] +\rput(0,-0.45){$F_{5}=$} +\psFibonacciWord[n=5](0.5,-0.5) +\end{pspicture} +\begin{pspicture}[showgrid=false](-1,-1)(2,3) +\psgrid[style=gridstyleA] +\psFibonacci[unit=0.2,linecolor={[rgb]{0 0 0.5}},linewidth=0.05cm,n=6] +\rput(0,-0.45){$F_{6}=$} +\psFibonacciWord[n=6](0.5,-0.5) +\end{pspicture} +\begin{pspicture}[showgrid=false](-1,-1)(2,3) +\psgrid[style=gridstyleA] +\psFibonacci[unit=0.2,linecolor={[rgb]{0 0 0.5}},linewidth=0.05cm,n=7] +\rput(-0.5,-0.45){$F_{7}=$} +\psFibonacciWord[n=7](0,-0.5) +\end{pspicture} +\begin{pspicture}[showgrid=false](-1,-1)(2,3) +\psgrid[style=gridstyleA] +\psFibonacci[unit=0.2,linecolor={[rgb]{0 0 0.5}},linewidth=0.05cm,n=8] +\rput(-0.4,-0.45){$F_{8}=$} +\psFibonacciWord[n=8](0,-0.5) +\end{pspicture} +\begin{pspicture}[showgrid=false](-1,-1)(2,3) +\psgrid[style=gridstyleA] +\psFibonacci[unit=0.2,linecolor={[rgb]{0 0 0.5}},linewidth=0.05cm,n=9] +\psFibonacciWord[n=9](-0.5,-0.75) +\rput(-1,-0.75){$F_{9}=$} +\end{pspicture} +\end{LTXexample} + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid=false](-1,-1)(6,3) +\psgrid[style=gridstyleA] +\psFibonacci[unit=0.2,linecolor={[rgb]{0 0 0.5}},linewidth=0.05cm,n=10] +\psFibonacciWord[n=10](-0.5,-0.5) +\rput(-1,-0.45){$F_{10}=$} +\end{pspicture} +\end{LTXexample} + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](0,0)(12,8) +\psFibonacci[unit=0.02,linecolor={[rgb]{0.5 0 0}},n=23,linewidth=0.015cm] +\rput(5.5,4){n=23} +\end{pspicture} +\end{LTXexample} + + + +\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\subsection{Fractal curves with juxtaposition} +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](0,0)(7,7) +\psFibonacci[unit=0.1,linecolor=blue,n=15,linewidth=0.04cm,juxtaposition] +\rput(4,2.25){$F_{15}$} +\rput(5.25,3){$F_{14}$} +\psline[arrowinset=0.1,arrowsize=0.2]{->}(4.8,2)(3,2) +\psline[arrowinset=0.1,arrowsize=0.2]{->}(5,2.5)(5,4) +\end{pspicture} +\hfill +\begin{pspicture}[showgrid](0,0)(7,7) +\psFibonacci[unit=0.1,linecolor=blue,n=16,linewidth=0.04cm] +\rput(5,2){$F_{16}$} +\end{pspicture} +\end{LTXexample} + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](0,0)(8,5) +\psFibonacci[unit=0.05,linecolor=blue,n=17,linewidth=0.02cm,juxtaposition] +\rput(2.5,4){\blue$F_{17}$} +\rput(6,4){\red$F_{16}$} +\end{pspicture} +\hfill +\begin{pspicture}[showgrid](0,0)(8,5) +\psFibonacci[unit=0.05,n=18,linewidth=0.02cm] +\rput(4,4){$F_{18}$} +\end{pspicture} +\end{LTXexample} + + + + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](0,0)(10,7) +\psFibonacci[unit=0.1,linecolor=blue,n=16,linewidth=0.03cm,juxtaposition] +\rput(5,2){\blue$F_{16}$} +\rput(9,2){\red$F_{15}$} +\end{pspicture} +\end{LTXexample} + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](0,0)(10,7) +\psFibonacci[unit=0.1,n=17,linewidth=0.03cm] +\rput(5,2){$F_{17}$} +\end{pspicture} +\end{LTXexample} + + + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](0,0)(13,12) +\psFibonacci[unit=0.03,linecolor=blue,n=21,linewidth=0.02cm,juxtaposition] +\rput(1.5,3.5){\blue$F_{21}$} +\rput(8.5,10.5){\red$F_{20}$} +\end{pspicture} +\end{LTXexample} + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](0,0)(13,12) +\psFibonacci[unit=0.03,n=22,linewidth=0.025cm] +\rput(9,4){$F_{22}$} +\end{pspicture} +\end{LTXexample} + + + + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](0,0)(14,6) +\psFibonacci[unit=0.015,linecolor=blue,n=23,linewidth=0.01cm,juxtaposition] +\rput(4,2){\blue$F_{23}$} +\rput(10.5,4){\red$F_{22}$} +\end{pspicture} +\end{LTXexample} + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](0,0)(14,6) +\psFibonacci[unit=0.015,n=24,linewidth=0.01cm] +\rput(7,6.5){$F_{24}$} +\end{pspicture} +\end{LTXexample} + + + +\subsection{Curves with a big number of iterations} +With \texttt{n=30} it takes a long time and the number is not readable. + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](0,0)(14,6) +\psFibonacci[unit=0.0025,n=30,linewidth=0.001cm] +\end{pspicture} +\end{LTXexample} + + + +\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\subsection{Double color curves} + +Superposition of two curves are possible by choosing diffrent color and line thickness. + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}(-1,-1)(15,12) +\psgrid[style=gridstyleA] +\psFibonacci[unit=0.4,linecolor=blue,n=13,linewidth=0.2cm]% +\psFibonacci[unit=0.4,linecolor=red,n=13,linewidth=0.05cm]% +\end{pspicture} +\end{LTXexample} + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](-1,-1)(14,6) +\psFibonacci[unit=0.5,linecolor=red,n=12,linewidth=0.2cm]% +\psFibonacci[unit=0.5,linecolor=yellow,n=12,linewidth=0.05cm]% +\end{pspicture} +\end{LTXexample} + + + + +\section{``Dense Fibonacci Word'' and the command \Lcs{psNewFibonacci}}\label{dfw} + +In the chapter ``The dense Fibonacci word: a whole family of curves'', Alexis Monnerot-Dumaine +wrote: + +\begin{quote} +The odd-even design rule is not easy to manage and we can change to +a more practical rule. As Jean-Paul Allouche suggested, we can create a word of 3 +letters with \{0; 1; 2\} that can draw the Fibonacci fractal with the simplest drawing rules +following: + +\begin{itemize} +\item 0, draw a segment in line with the previous one +\item 1, draw a segment by turning to the right +\item 2, draw a segment by turning to the left +\end{itemize} +\end{quote} + + +By replacing in the Fibonacci word 00$\rightarrow$0, 01$\rightarrow$1 and 10$\rightarrow$2. Alexis Monnerot-Dumaine +defines the ``Dense Fibonacci Word'' (DFW). +From the DFW, we get a whole family of curves by doing, for example, substitutions +following: + +\begin{itemize} + \item $\mu_1$ : $1 \longrightarrow 10$ ; $0 \longrightarrow 12$ ; $2 \longrightarrow 02$ + \item $\mu_2$ : $1 \longrightarrow 010$ ; $0 \longrightarrow 0102$ ; $2 \longrightarrow 002$ + \item $\mu_3$ : $1 \longrightarrow 02$ ; $0 \longrightarrow 21$ ; $2 \longrightarrow 10$ + \item $\mu_4$ : $1 \longrightarrow 02$ ; $0 \longrightarrow 00$ ; $2 \longrightarrow 10$ +\end{itemize} + +We will find all these families of curves with explanations and references in the article +Alexis Monnerot-Dumaine. These are just brief explanations for using the commands +PSTricks to draw these families of curves. In their article "Properties and Gener- +Fractal Exploring Fractal Curves ``alizations of the Fibonacci'' \cite{ramirez} illustrate this +family of curves with Mathematica by designating them under the name of +New-Fibonacci. This name seems to me sensible the PSTricks command will be called \Lcs{psNewFibonacci}. + + +\subsection{``Dense Fibonacci Word''} + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid=false](-1,-0.2)(10,2) +\uput[r](-0.5,1){FW=}% +\psFibonacciWord[n=10,fontscale=12](0.5,0.9) +\uput[r](-0.75,0){DFW=}% +\psFibonacciWord[n=10,DFW,fontscale=12](0.5,-0.1) +\end{pspicture} +\end{LTXexample} + + + +\subsection{Fractal of ``\textit{Dense Fibonacci Word}''} + +The curve can be created with \verb+\psNewFibonacci+ + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](-3,0)(10,11) +\psNewFibonacci[unit=0.2,linecolor={[rgb]{0.5 0 0}},n=17,linewidth=0.03cm] +\rput(4,4){n=17} +\end{pspicture} +\end{LTXexample} + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](-4,0)(6,10) +\psNewFibonacci[unit=0.2,linecolor={[rgb]{0.5 0 0}},n=17,linewidth=0.03cm,morphism=() (1) (2)] +\rput(2,4){n=17} +\end{pspicture} +\end{LTXexample} + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](-1,0)(15,6) +\psNewFibonacci[unit=0.2,linecolor={[rgb]{0.5 0 0}},n=18,linewidth=0.03cm,morphism=(12) (1) (2)] +\rput(4,2){n=18} +\end{pspicture} +\end{LTXexample} + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](-7,0)(5,10) +\psNewFibonacci[unit=0.1,linecolor={[rgb]{0.5 0 0}},n=17,linewidth=0.03cm,morphism=(102) (2) (1)] +\rput(-2,4){n=17} +\end{pspicture} +\end{LTXexample} + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](-7,0)(4,10) +\psNewFibonacci[unit=0.1,linecolor={[rgb]{0.5 0 0}},n=17,linewidth=0.03cm,morphism=(210) (02) (10)] +\rput(-2,4){n=17} +\end{pspicture} +\end{LTXexample} + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](-5,0)(4,9) +\psNewFibonacci[unit=0.1,linecolor={[rgb]{0.5 0 0}},n=17,linewidth=0.03cm,morphism=(21) (02) (10)] +\rput(-1,4){n=17} +\end{pspicture} +\end{LTXexample} + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](-10,0)(4,12) +\psNewFibonacci[unit=0.1,linecolor={[rgb]{0.5 0 0}},n=17,linewidth=0.03cm,morphism=(210) (020) (10)] +\rput(-4,4){n=17} +\end{pspicture} +\end{LTXexample} + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](-10,0)(4,11) +\psNewFibonacci[unit=0.075,linecolor={[rgb]{0.5 0 0}},n=18,linewidth=0.025cm,morphism=(102) (2) (1)] +\rput(-4,2){n=18} +\end{pspicture} +\end{LTXexample} + + + + +\section{The command \Lcs{psiFibonacci}} + +\subsection{How it works} +Briefly, (read the article \cite{ramirez} for more details) more +``I-Fibonacci Word'' depends on the parameter i and the number of iterations n with the following rules, +according to the authors' notations: + +\begin{itemize} + \item $f_0^{[i]}$ =0 + \item $f_1^{[i]} =0^{i-1}1$ : this notation means that it is necessary to put (i-1) 0 before the 1 + \item $f_n^{[i]}= f_{n -1}^{[i]} f_{n -2}^{[i]}$ pour $n\geq 2$ et $i \geq 1$. +\end{itemize} + +The construction of the associated fractal curves follows the ``even-odd'' rule as for the fractal +of the word Fibonacci. + + + +\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +\subsection{Examples} + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](-7,0)(3,9) +\psiFibonacci[unit=0.2,linecolor={[rgb]{0.5 0 0}},n=10,linewidth=0.025cm,i=3] +\end{pspicture} +\end{LTXexample} + + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](0,0)(9,9.5) +\psiFibonacci[unit=0.2,linecolor={[rgb]{0.5 0 0}},n=10,linewidth=0.025cm,i=4] +\end{pspicture} +\end{LTXexample} + + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](-7,0)(3,9) +\psiFibonacci[unit=0.15,linecolor={[rgb]{0.5 0 0}},n=10,linewidth=0.025cm,i=5] +\end{pspicture} +\end{LTXexample} + + + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](0,0)(9,9.5) +\psiFibonacci[unit=0.15,linecolor={[rgb]{0.5 0 0}},n=10,linewidth=0.025cm,i=6] +\end{pspicture} +\end{LTXexample} + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](-6,0)(3,8) +\psiFibonacci[unit=0.1,linecolor={[rgb]{0.5 0 0}},n=10,linewidth=0.025cm,i=7] +\end{pspicture} +\end{LTXexample} + + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](-8,0)(3,12) +\psiFibonacci[unit=0.1,linecolor={[rgb]{0.5 0 0}},n=10,linewidth=0.025cm,i=11] +\end{pspicture} +\end{LTXexample} + + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](0,0)(6,14) +\psiFibonacci[unit=0.05,linecolor={[rgb]{0.5 0 0}},n=12,linewidth=0.025cm,i=12] +\end{pspicture} +\end{LTXexample} + + +\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\section{The command \Lcs{pskFibonacci}} +The 2 mandatory parameters are n and k. The following coordinates are optional but +put, possibly, to center the curve at the origin of the mark. + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}(-4,-4)(4,4) +\psgrid[gridlabels=0pt,subgriddiv=0,gridcolor=red,griddots=10] +\pskFibonacci[unit=0.02,linecolor={[rgb]{0 0 0.5}},linewidth=0.02cm,n=6,k=5](-2.3,-3.2) +\end{pspicture} +\end{LTXexample} + + + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}(-4,-4)(4,4) +\psgrid[gridlabels=0pt,subgriddiv=0,gridcolor=red,griddots=10] +\pskFibonacci[unit=0.4,linecolor={[rgb]{0 0 0.5}},n=3,k=5](2.8,-3.6) +\end{pspicture} +\end{LTXexample} + + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}(-4,-4)(4,4) +\psgrid[gridlabels=0pt,subgriddiv=0,gridcolor=red,griddots=10] +\pskFibonacci[unit=0.025,linecolor={[rgb]{0 0 0.5}},linewidth=0.02cm,n=6,k=6](3,0.5) +\end{pspicture} +\end{LTXexample} + + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}(-4,-4)(4,4) +\psgrid[gridlabels=0pt,subgriddiv=0,gridcolor={[rgb]{0 0 0.5}},griddots=10] +\pskFibonacci[unit=0.2,linecolor={[rgb]{0 0 0.5}},n=4,k=6,angle=60](-2,0) +\end{pspicture} +\end{LTXexample} + + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}(-4,-4)(2,1) +\psgrid[gridlabels=0pt,subgriddiv=0,gridcolor=red,griddots=10] +\pskFibonacci[unit=0.1,linecolor={[rgb]{0 0 0.5}},n=4,k=4,angle=60](0,0) +\end{pspicture} +\end{LTXexample} + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}(-8,-8)(8,8) +\psgrid[gridlabels=0pt,subgriddiv=0,gridcolor={[rgb]{0 0 0.5}},griddots=10] +\pskFibonacci[unit=0.02,linecolor={[rgb]{0.5 0 0}},linewidth=0.02cm,n=6,k=7](6,-4) +\end{pspicture} +\end{LTXexample} + + + + +\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{The command \Lcs{psBiperiodicFibonacci}} +The 3 mandatory parameters are n, a and b. As for the previous command, the coordinates +following are optional but allow, eventually, to center the curve at the origin of the +mark. + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid=false](-4,-4)(4,4) +\psgrid[gridlabels=0pt,subgriddiv=0,gridcolor=red,griddots=10] +\psBiperiodicFibonacci[unit=0.2,linecolor={[rgb]{0 0.5 0}},linewidth=0.1cm,n=5,a=6,b=6,angle=60](0,2.1) +\psBiperiodicFibonacci[unit=0.2,linecolor=white,n=5,a=6,b=6,angle=60](0,2.1) +\end{pspicture} +\end{LTXexample} + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid=false](-4,-4)(4,4) +\psgrid[gridlabels=0pt,subgriddiv=0,gridcolor=red,griddots=10] +\psBiperiodicFibonacci[unit=0.5,linecolor={[rgb]{0 0.5 0}},n=5,a=3,b=4,angle=120](-1.5,3.5) +\end{pspicture} +\end{LTXexample} + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid=false](-4,-4)(4,4) +\psgrid[gridlabels=0pt,subgriddiv=0,gridcolor=red,griddots=10] +\psBiperiodicFibonacci[unit=0.2,linecolor=black,linewidth=0.1cm,n=7,a=2,b=6,angle=72](2.62,2) +\psBiperiodicFibonacci[unit=0.2,linecolor=yellow,n=7,a=2,b=6,angle=72](2.62,2) +\end{pspicture} +\end{LTXexample} + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid=false](-5,-4)(5,4) +\psgrid[gridlabels=0pt,subgriddiv=0,gridcolor=red,griddots=10] +\psBiperiodicFibonacci[unit=0.1,linecolor=red,linewidth=0.1cm,n=10,a=2,b=5](3.5,-1.5) +\psBiperiodicFibonacci[unit=0.1,linecolor=yellow,n=10,a=2,b=5](3.5,-1.5) +\end{pspicture} +\end{LTXexample} + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}(-5,-5)(5,5) +\psgrid[gridlabels=0pt,subgriddiv=0,gridcolor=red,griddots=10] +\psBiperiodicFibonacci[unit=0.15,linecolor={[rgb]{0 0.5 0}},n=9,a=2,b=5](3.15,-1.35) +\end{pspicture} +\end{LTXexample} + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}(-5,-5)(5,5) +\psBiperiodicFibonacci[unit=0.8,linecolor=black,linewidth=0.1cm,,n=8,a=2,b=3,angle=120](-1,1) +\psBiperiodicFibonacci[unit=0.8,linecolor=white,n=8,a=2,b=3,angle=120](-1,1) +\end{pspicture} +\end{LTXexample} + + + +\section{The command \Lcs{psFibonacciPolyominoes}} + + +The only mandatory parameter is the order of the tile: n. Coordinates are optional, but +they will be used for paving the plan. + + + +\subsection{The order 0, 1, 2, 3, and 4} + +\psset{unit=1cm} +\begin{LTXexample} +\psset{linecolor={[rgb]{0 0.5 0}},fillstyle=solid,fillcolor=red} +\begin{pspicture}[showgrid](0,-1)(1,4) +\psFibonacciPolyominoes[n=0,unit=0.5] +\end{pspicture} +\quad +\begin{pspicture}[showgrid](-2,-1)(1,4) +\psFibonacciPolyominoes[n=1,unit=0.5] +\end{pspicture} +\quad +\begin{pspicture}[showgrid](-3,-1)(2,4) +\psFibonacciPolyominoes[unit=0.5,n=2] +\end{pspicture} +\quad +\begin{pspicture}[showgrid](-3,-1)(2,4) +\psFibonacciPolyominoes[unit=0.2cm,n=3] +\end{pspicture} +\end{LTXexample} + + + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}[showgrid](-7,-2)(4,10) +\psFibonacciPolyominoes[unit=0.2,n=4,fillcolor=cyan,linecolor=blue,fillstyle=solid] +\end{pspicture} +\end{LTXexample} + + + +\iffalse + + +\subsection{Paving the plan with Fibonacci tiles} +This tiling is done with the \Lcs{pSTilingsFibonacci}\Largb{n}\Largb{N}\Largb{T} command which has 3 arguments: the +first is the order of the tile (n = 0, 1, 2 etc.), the second the number of tiles per side of the square, +preferably it must be odd and T = 1 or 2 defines the type of paving. For tiles to be +colored, activate the \texttt{fillstyle=solid} option in a pre-command. + + +\begin{verbatim} +\def\pSTilingsFibonacci#1#2#3{% #1=n #2=nbre de lignes #3=type 1 ou 2 + \pstFPDiv\Nbr{#2}{2}% + \psset[pst-fractal]{n=#1}% + \pstVerb{/n0 #1 def /tabPell [0 1 2 5 12 29 70 169 408] def + /Type #3 def + Type 2 gt {/Type 1 def} if + Type 2 eq { + % (-1)^2P(n),(P(n+1) + /Y1 tabPell n0 1 add get def + /X1 -1 n0 exp tabPell n0 get mul def + }{ + % (P(n+1),(-1)^2P(n) + /X1 tabPell n0 1 add get def + /Y1 -1 n0 exp tabPell n0 get mul def + } ifelse + % le déplacement perpendiculaire + /X2 Y1 neg def + /Y2 X1 def +}% +\pstVerb{/ListColors [0 0 1] def}% +\multido{\I=-\Nbr+1}{#2}{5 + \rput(!X2 \I\space mul Y2 \I\space mul){% + \multido{\i=-\Nbr+1}{#2}{% +%\definecolor[ps]{Couleur}{rgb}{ListColors aload pop}% + \definecolor[ps]{Couleur}{cmyk}{ListColors aload pop 0}% + \rput(!X1 \i\space mul Y1 \i\space mul){\psFibonacciPolyominoes[fillcolor=Couleur]} + \pstVerb{/ListColors [ListColors aload pop 3 1 roll] def}% +}}}}% +\end{verbatim} + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture*}(-9,-7)(8,9) +\psset{unit=0.125,linestyle=solid} +\pSTilingsFibonacci{3}{13}{1}% +\psset{fillstyle=solid,linecolor=blue}% +\pSTilingsFibonacci{3}{7}{1}% +\end{pspicture*} +\end{LTXexample} + + + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture*}(-9,-7)(8,9) +\psset{unit=0.125,linestyle=solid} +\pSTilingsFibonacci{3}{13}{2}% +\psset{fillstyle=solid,linecolor=blue}% +\pSTilingsFibonacci{3}{7}{2}% +\end{pspicture*} +\end{LTXexample} + + +\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\fi + + +\section{The command \Lcs{psFibonacciWord}} + +\psset{unit=1cm} +\begin{LTXexample} +\begin{pspicture}(-1,0)(10,5) +\rput(0.15,5){\small$F_{1}=1$} +\rput(0.15,4.5){\small$F_{2}=0$} +\multido{\i=3+1,\I=3+1,\n=4.0+-0.5}{8}{% + \psFibonacciWord[n=\i](0.5,\n) + \rput(0,\n){$F_{\I}=$}} +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample} +\begin{pspicture}(-1,0)(10,6) +\psset{n=5} +\multido{\i=1+1,\I=1+1,\n=3.5+-0.5}{6}{% +\psFibonacciWord[i=\i,iFibonacci](0.5,\n\space 0.1 sub) +\rput(0,\n){$F_{5}^{[\i]}=$} +} +\end{pspicture} +\end{LTXexample} + + +\section{The Hilbert fractal} + +\begin{BDef} +\Lcs{psHilbert}\OptArgs\\ +\end{BDef} + + + +\begin{itemize} + \item \texttt{n=4} : Number of iterations; + \item \Lkeyset{N=all} : number of points to place, by default all. This option allows you to create an animation in +placing and connecting the successive points to the indicated number. + \item \Lkeyset{dotcolor=red} : color of the points, the size of the points is fixed with the option + \Lkeyword{dotsize} of PSTricks; + \item \Lkeyset{showpoints=false} : boolean of PSTricks to display the points. +\end{itemize} + +The color and the thickness of the lines are adjusted with the usual PSTricks options: + \Lkeyword{linecolor} and \Lkeyword{linewidth}. +The scale of the drawing is defined with the unit option. We can use the option \Lkeyset{linestyle=none}, as well as +\Lkeyset{fillstyle=solid}, \Lkeyword{fillcolor} but, in the latter case only, if all the points are kept +(\Lkeyset{N=all}). + + +\clearpage + + +\subsection{Examples} +\begin{LTXexample} +\begin{pspicture}(0,-1)(1,1) +\psgrid[subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=0pt](1,1) +\psHilbert[linecolor=red,n=0,linejoin=1,fillstyle=solid,fillcolor=blue] +\rput(0.5,-0.5){n=0} +\end{pspicture} +\qquad +\begin{pspicture}(0,-1)(3,3) +\psgrid[subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=0pt](3,3) +\psHilbert[linecolor=red,n=1,linejoin=1,fillstyle=solid,fillcolor=blue] +\rput(1.5,-0.5){n=1} +\end{pspicture} +\qquad +\begin{pspicture}(0,-1)(7,7) +\psgrid[subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=0pt](7,7) +\psHilbert[linecolor=blue,n=2,showpoints=false,dotsize=0.2,fillstyle=solid,fillcolor=red] +\rput(3.5,-0.5){n=2} +\end{pspicture} +\end{LTXexample} + + +Draw the first 220 of 256 points (n=3): + + +\begin{LTXexample} +\begin{pspicture}(0,0)(15,16) +% 4^(n+1)=4^4=256 +\psgrid[subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=0pt](15,15) +\psHilbert[unit=1,linecolor=blue,linewidth=0.1,n=3,showpoints=true,dotsize=0.25,N=220] +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample} +\begin{pspicture}(0,0)(16,16) +\psgrid[subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=0pt](16,16) +\psHilbert[unit=0.5,linecolor=red,linewidth=0.1,showpoints] +\end{pspicture} +\end{LTXexample} + + + + +\begin{LTXexample} +\begin{pspicture}(0,0)(16,16) +\psframe*(0,0)(15.75,15.75) +\psHilbert[unit=0.25,linecolor=-red,n=5,linewidth=0.2,linejoin=1,fillstyle=solid,fillcolor=-blue] +\end{pspicture} +\end{LTXexample} + + +\section{The Henon Sttractor} + +\begin{LTXexample} +\begin{pspicture}(-5,-6)(5,6) +\psclip{\psframe(-5,-5)(5,5)} +\psHenon +\endpsclip +\psgrid[unit=5,subgriddiv=10](-1,-1)(1,1) +\end{pspicture} +\end{LTXexample} + + + + +\subsection{En noir et blanc} +\begin{minipage}{10cm} +\begin{pspicture}(-5,-5)(5,5) +\psclip{\psframe(-5,-5)(5,5)} +\psHenon[pixelscolor=false] +\endpsclip +\psgrid[unit=5,subgriddiv=10](-1,-1)(1,1) +\end{pspicture} +\end{minipage} +\begin{minipage}{6cm} +\begin{verbatim} +\begin{pspicture}(-5,-5)(5,5) +\psclip{\psframe(-5,-5)(5,5)} +\psHenon[pixelscolor=false] +\endpsclip +\psgrid[unit=5,subgriddiv=10](-1,-1)(1,1) +\end{pspicture} +\end{verbatim} +\end{minipage} +\section{Animation pour illustrer le principe de l'attracteur de Hénon} +En fonction du tableau des points initiaux, la figure obtenue dépend de l'angle $a$. +Les commentaires de Robert Dony correspondent à la premiére figure pour $a=1.32837$ rd, les voici : +\begin{center} +\begin{pspicture}(-5,-5)(5,5) +\psclip{\psframe(-5,-5)(5,5)} +\psHenon[pixelscolor=false] +\endpsclip +%\psgrid[unit=5,subgriddiv=10](-1,-1)(1,1) +\psline{->}(-1,4)(-0.1,3)\uput[ul](-1,4){$S_1$} +\psline{->}(4,3.5)(3,2.5)\uput[ur](4,3.5){$S_2$} +\psline{->}(4,-1.5)(3,-.75)\uput[dr](4,-1.5){$S_3$} +\psline{->}(1.25,-3.75)(0.5,-3)\uput[dr](1.25,-3.75){$S_4$} +\psline{->}(-4,0.75)(-3,0.75)\uput[l](-4,0.75){$S_5$} +\psline{->}(2,4)(1.5,2.6)\uput[ur](2,4){$C_1$} +\psline{->}(4,1)(3,0.8)\uput[ur](4,1){$C_2$} +\psline{->}(2.5,-3)(1.5,-2.25)\uput[dr](2.5,-3){$C_3$} +\psline{->}(-3,-2)(-1.75,-1.4)\uput[l](-3,-2){$C_4$} +\psline{->}(-2.5,3)(-1.75,2)\uput[ul](-2.5,3){$C_5$} +\end{pspicture} +\end{center} + + +\subsection{Animation} + +\begin{center} +\begin{animateinline}[controls,palindrome, + begin={\begin{pspicture}(-1,-1)(16,16)}, + end={\end{pspicture}}]{5}% 5 image/s +\multiframe{256}{i=1+1}{% +\psframe*[linecolor=yellow!20](0,0)(15,15) +\psgrid[subgriddiv=1,gridcolor=red!30,gridlabels=0pt](0,0)(15,15) +\psHilbert[linecolor=blue,linewidth=0.05,n=3,showpoints,dotsize=0.2,N=\i]} +\end{animateinline} +\end{center} +\begin{verbatim} +\begin{animateinline}[controls,palindrome, + begin={\begin{pspicture}(-1,-1)(16,16)}, + end={\end{pspicture}}]{5}% 5 image/s +\multiframe{256}{i=1+1}{% +\psframe*[linecolor=yellow!20](0,0)(15,15) +\psgrid[subgriddiv=1,gridcolor=red!30,gridlabels=0pt](0,0)(15,15) +\psHilbert[linecolor=blue,linewidth=0.05,n=3,showpoints,dotsize=0.2,N=\i]} +\end{animateinline} +\end{verbatim} + + +\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{List of all optional arguments for \texttt{pst-fractal}} + + +\xkvview{family=pst-fractal,columns={key,type,default}} + +\nocite{*} +\printbibliography + +\printindex + +\end{document}
\ No newline at end of file diff --git a/graphics/pstricks/contrib/pst-fractal/dvips/pst-fractal.pro b/graphics/pstricks/contrib/pst-fractal/dvips/pst-fractal.pro new file mode 100644 index 0000000000..fcdc69bb99 --- /dev/null +++ b/graphics/pstricks/contrib/pst-fractal/dvips/pst-fractal.pro @@ -0,0 +1,953 @@ +%% $Id: pst-fractal.pro 679 2017-12-04 21:41:23Z herbert $ +%% +%% This is file `pst-fractal.pro', +%% +%% IMPORTANT NOTICE: +%% +%% Package `pst-fractal' +%% +%% Herbert Voss <voss _at_ PSTricks.de> +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +%% +%% DESCRIPTION: +%% `pst-fractal' is a PSTricks package to draw fractal objects +%% +%% +%% version 0.06 / 2017-12-04 Herbert Voss <hvoss _at_ tug.org> +% +/tx@fractalDict 100 dict def +tx@fractalDict begin +% +/tx@Fractal { +% \pst@temp@A +% \pst@temp@B +% \pst@number\pst@fractal@xWidth +% \pst@number\pst@fractal@yWidth +% \pst@fractal@cx +% \pst@fractal@cy +% \pst@fractal@maxIter +% \pst@fractal@dIter +% \pst@fractal@maxRadius +% {\pst@usecolor\pst@fractal@baseColor} +% \ifx\pst@fractal@type\pst@fractal@Julia true \else false \fi +% \ifPst@CMYK true \else false \fi +% tx@fractalDict begin tx@Fractal end + /ifCMYK ED + /ifJulia ED + /baseColor ED + /maxRadius ED + /dIter ED + /maxIter ED + /cy ED + /cx ED + /MaxYPixel ED + /MaxXPixel ED + /MaxY ED /MaxX ED + /MinY ED /MinX ED + /rPixel 1 def + /totMaxIter maxIter dIter mul def +% + /DX MaxX MinX sub def + /DY MaxY MinY sub def + /dx DX MaxXPixel div def /dy DY MaxYPixel div def +% + /convertX { MinX sub DX sub dx div } def % user -> pt + /convertY { MinY sub dy div } def % user -> pt + /convertXY { convertY exch convertX exch } def +% + /putPixel {% x y auf dem Stack in Benutzerkoordinaten + convertXY + rPixel 0 360 arc fill + } def +% + MinX dx MaxX { + ifJulia { /x exch def }{ /cx exch def /x 0.0 def } ifelse + MinY dy MaxY { + ifJulia { /y exch def }{ /cy exch def /y 0.0 def } ifelse + /iter 0 def + /zx x def + /zy y def + /plot true def + totMaxIter cvi { + zx dup mul zy dup mul add maxRadius gt { + /plot false def + exit + }{% Calculate next value + 2 zx zy mul mul cy add + /zx zx dup mul zy dup mul sub cx add def + /zy exch def + /iter iter dIter add def + } ifelse + } repeat + plot{ + baseColor x y putPixel + }{ iter 400 add + ifCMYK { tx@addDict begin wavelengthToCMYK Cyan Magenta Yellow Black end setcmykcolor + }{ tx@addDict begin wavelengthToRGB Red Green Blue end setrgbcolor } ifelse + ifJulia { x y }{ cx cy } ifelse + putPixel stroke + }ifelse % Plot point if point is in set + } for + } for +} def +% +/tx@Sierpinski { %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \pst@temp@A +% \pst@temp@B +% \pst@temp@C +% { \pst@usecolor\pslinecolor } +% \pst@fractal@plotpoints + /plotpoints ED + /setColor ED + /Coor ED + /Sx 0 def /Sy 0 def + /putPixel { 0.5 0 360 arc stroke } def % x y on stack + /newPosition { % point # on stack + Coor exch 2 getinterval aload pop + /y exch def /x exch def + x Sx sub 2 div Sx add /Sx exch def + y Sy sub 2 div Sy add /Sy exch def + Sx Sy putPixel + } def + /drawFrame { + Coor aload pop + newpath + moveto + nCoor 1 sub { lineto } repeat % n-1 times + gsave 0.9 setgray fill grestore + setColor + closepath + stroke + } def + /nCoor Coor length 2 div 0.5 add cvi def % # of dots + drawFrame + plotpoints cvi { + rand nCoor mod + dup add newPosition + } repeat +} def +% +/Rot-90 { + 2 dict begin + /y exch def /x exch def + y + x neg + end +} def +% +/tx@SierpinskiCurve { %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + /Pi [1.5 cmunit 1 cmunit + 1 cmunit 0.5 cmunit + 1 cmunit -0.5 cmunit + 1.5 cmunit -1 cmunit ] def +% + /P0 Pi def + /coefficient 1 def + 3 { + P0 + [ + 0 2 Pi length 2 sub {/i exch def + Pi i get Pi i 1 add get exch neg % Rot-90 + } for + ] /Pi exch def + P0 Pi concatarray /P0 exch def + } repeat +% +/P1 {[ + 0 2 P0 length 2 sub {/i exch def + P0 i get P0 i 1 add get % Rot-90 + -2 cmunit coefficient mul add exch + -2 cmunit coefficient mul add exch + } for +] } def +% +/P2 {[ + 0 2 P0 length 2 sub { + /i exch def + P0 i get P0 i 1 add get exch neg % Rot-90 + 2 cmunit coefficient mul add exch + -2 cmunit coefficient mul add exch + } for ] +} def +% +/P3 {[ + 0 2 P0 length 2 sub { + /i exch def + P0 i get P0 i 1 add get neg exch neg exch % Rot-90 Rot-90 + 2 cmunit coefficient mul add exch + 2 cmunit coefficient mul add exch + } for +] } def +% +/P4 {[ + 0 2 P0 length 2 sub {/i exch def + P0 i get P0 i 1 add get neg exch % Rot-90 Rot-90 Rot-90 + -2 cmunit coefficient mul add exch + 2 cmunit coefficient mul add exch + } for +] } def + n@ 1 eq {/Sierpinsky P0 def}{ + n@ 1 sub { + /Sierpinsky P1 P2 concatarray P3 concatarray P4 concatarray def + /Tab1 [ + 0 2 Sierpinsky length 2 sub {/i exch def + Sierpinsky i 2 getinterval + } for + ] def + /i@ Sierpinsky length 8 div 2.5 mul cvi def % + /Sierpinsky2 [ + Tab1 length { + Tab1 i@ get + /i@ i@ 1 add def + i@ Tab1 length ge {/i@ 0 def} if + }repeat + ] def + /P0 [ + 0 1 Sierpinsky2 length 1 sub {/i exch def + Sierpinsky2 i get aload pop + } for + ] def + /coefficient coefficient 2 mul def + } repeat + } ifelse +% + newpath + Sierpinsky 0 get Sierpinsky 1 get moveto + 0 2 Sierpinsky length 2 sub {/i exch def + i 2 div Npts ge {exit} if + Sierpinsky i get Sierpinsky i 1 add get lineto + } for + Npts 4 n@ 1 add exp cvi ge { closepath } if + useFill { gsave fillColor fill grestore } if +% + useLineStyle +} def +% +/tx@Phyllotaxis { %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \pst@tempA +% \pst@fractal@c +% \pst@fractal@angle +% \pst@fractal@maxIter CMYK + /ifCMYK ED + /maxIter ED + /fractalAngle ED + /c ED + translate + /angle fractalAngle dup 0 eq { pop 360 5 sqrt 1 add 2 div dup mul div } if def + maxIter cvi -1 0 { + angle rotate + 0 0 moveto + dup sqrt c mul c lineto + c c neg rlineto + c neg dup rlineto + closepath + gsave + 1 exch maxIter cvi div 90 mul cos 0 + ifCMYK { tx@addDict begin RGBtoCMYK end setcmykcolor }{ setrgbcolor } ifelse + fill + grestore + stroke + } for +} def +% +/tx@Fern { %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \pst@fractal@scale +% \pst@tempA +% \pst@fractal@maxIter +% \pst@fractal@radius +% \pst@number\pslinewidth +% { \pst@usecolor\pslinecolor } + /setColor ED + SLW + /radius ED + /maxIter ED + translate + dup scale + /m1 [ 0.00 0.00 0.00 0.16 0.00 0.00 ] def + /m2 [ 0.85 -0.04 0.04 0.85 0.00 1.60 ] def + /m3 [ 0.20 0.23 -0.26 0.22 0.00 1.60 ] def + /m4 [ -0.15 0.26 0.28 0.24 0.00 0.44 ] def + 1 setlinecap + setColor + 0 0 % start point + maxIter cvi { + % get a transformation matrix probabilistically + /r rand 100 mod def + r 1 lt { /m m1 def }{ r 86 lt + { /m m2 def }{ r 93 lt { + /m m3 def }{ /m m4 def } ifelse } ifelse } ifelse + % Make a linear transformation, then + % plot a point at current location + m transform 2 copy radius 0 360 arc + stroke + } repeat +} def +% +/tx@Kochflake { %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \pst@tempA +% { \pst@usecolor\pslinecolor } +% \pst@fractal@scale +% \pst@fractal@angle +% CLW +% \pst@fractal@maxIter + /maxIter ED + 10 10 scale + 45 rotate + /side { + dup 0 gt { + 1 sub 1 3 div dup scale side 60 rotate side + -120 rotate side 60 rotate side 3 dup scale 1 add + }{ 1 1 rlineto 1 1 translate } ifelse + } def + /star { + dup currentlinewidth 1 1 + 4 -1 roll { pop 3 div } for + setlinewidth + 0 0 moveto + side -120 rotate side -120 rotate side + pop + closepath + } def + maxIter star +} def +% +/tx@Appolonius { %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \pst@fractal@dIter +% \pst@number\pst@fractal@Radius +% \ifPst@fractal@Color true \else false \fi +% \ifPst@CMYK true \else false \fi +% gsave +% \pst@tempA translate +% \pst@usecolor\pslinecolor +% \pst@fractal@scale +% \pst@number\pslinewidth SLW +% + /ifCMYK ED + /ifColor ED + /Radius ED + /dIter ED + /icount 380 def + /setWaveColor { + /icount icount dup 780 gt { pop 380 }{ dIter add } ifelse def + tx@addDict begin icount + ifCMYK { wavelengthToCMYK Cyan Magenta Yellow Black end setcmykcolor + }{ wavelengthToRGB Red Green Blue end setrgbcolor } ifelse + } def + /collect { [ 4 1 roll ] } def + /nget { exch dup 3 1 roll exch get } def + /polydup { 1 add [ exch 1 roll ] aload aload pop } def + /circle { aload pop newpath 0 360 arc closepath + ifColor { gsave setWaveColor fill grestore } if + stroke } def + /inverse { + aload 4 1 roll 3 1 roll dup mul exch dup mul add exch dup mul sub + dup 0 eq not {1 exch div} if + exch + aload pop + 4 -1 roll dup 5 1 roll mul 3 1 roll + 4 -1 roll dup 5 1 roll mul 3 1 roll + 4 -1 roll dup 5 1 roll mul 3 1 roll + 4 -1 roll pop + dup 0 lt {neg} if + collect + } def + /between { + collect + 0 nget 2 get exch 1 nget 2 get exch 3 1 roll + lt {aload pop 3 1 roll exch 3 -1 roll collect} if + 0 nget 2 get exch 2 nget 2 get exch 3 1 roll + lt {aload pop 3 -1 roll exch 3 1 roll collect} if + 1 nget 0 get exch 2 nget 2 get exch + 2 nget 0 get exch 1 nget 2 get exch + 1 nget 2 get exch 2 nget 2 get exch + 7 1 roll add 5 1 roll mul 3 1 roll mul add exch div + /xdisp exch def + 1 nget 1 get exch 2 nget 2 get exch + 2 nget 1 get exch 1 nget 2 get exch + 1 nget 2 get exch 2 nget 2 get exch + 7 1 roll add 5 1 roll mul 3 1 roll mul add exch div + /ydisp exch def + 0 nget aload pop 3 1 roll ydisp sub 3 1 roll xdisp sub 3 1 roll + collect + inverse dup + /first exch def + /second exch def + 1 nget 1 get exch 2 nget 1 get exch 3 1 roll sub /xvect exch def + 2 nget 0 get exch 1 nget 0 get exch 3 1 roll sub /yvect exch def + xvect dup mul yvect dup mul add sqrt + dup 0.0 eq not { first 2 get 2 mul exch div} if + dup xvect mul /xvect exch def + yvect mul /yvect exch def + first aload pop 3 1 roll yvect add 3 1 roll xvect add 3 1 roll + collect + inverse /first exch def + second aload pop 3 1 roll yvect sub 3 1 roll xvect sub 3 1 roll + collect + inverse /second exch def + first second + first 2 get second 2 get sub + 0 gt { exch } if + pop + aload pop + 3 1 roll ydisp add 3 1 roll xdisp add 3 1 roll collect + exch pop + } def + /appol { + aload pop 3 polydup between + dup circle + 2 nget CLW gt { 1 1 3 { pop 3 polydup collect 5 1 roll 4 -1 roll } for } if + pop pop pop pop + } def + /inside { + /temp exch def + 0 120 240 { + /angle exch def + temp aload pop + 3 sqrt 2 div 1 add div + /radius exch def + angle sin radius mul + angle cos radius mul + exch 4 -1 roll add + 3 1 roll add + radius 3 sqrt 2 div mul + collect + } for + } def +% + [ 0 0 Radius ] dup inside 4 polydup + 1 1 4 { pop circle } for + 1 1 4 { pop 3 polydup collect 5 1 roll 4 1 roll } for + pop pop pop pop { count 0 eq { exit } if appol } loop +} def +% +/tx@Hugo { %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%Creator: Hugo M. Ayala'89, MIT +% \pst@fractal@scale +% \pst@tempA +% \pst@fractal@maxIter, which is the depth +% \pst@number\pslinewidth +% { \pst@usecolor\pslinecolor } +/setColor ED +SLW +/depth ED +translate +dup scale +2 setlinecap +setColor +% +/oldarrayx [0 540 72 72] def +/oldarrayy [0 396 720 72] def +% +/scl .1 def +% +realtime srand +/prorand { rand 32768 div 32768 div 1 sub scl mul} def +/findrow {8 mul 7 sub sqrt 1 add 2 div truncate} def +/findindex {dup 1 sub mul 2 div 1 add} def +/findcolumn {dup findrow findindex sub} def +/findnewrow {2 mul 1 sub} def +/findnewcolumn {2 mul} def +/findarraysize {dup 1 add mul 2 div 1 add} def +/findnumoflines {dup 1 sub mul 2 div 3 mul} def +/findnumpoints {dup 1 add mul 2 div} def +/gtol {2 exch exp 1 add} def +/fixangle {dup 180 ge {180 sub} if} def +/backangle {dup 180 ge {180 sub} {180 add} ifelse} def +/splitline { + tpx btx add 2 div /mdx exch def + tpy bty add 2 div /mdy exch def + tpy bty sub tpx btx sub atan + 90 add fixangle + /lineangle exch def + tpy bty sub dup mul + tpx btx sub dup mul + add sqrt /linelen exch def + prorand linelen mul dup + lineangle cos mul mdx add /mdx exch def + lineangle sin mul mdy add /mdy exch def +} def +% +/findnewindex{ cvi /oldindex exch def + oldindex findrow cvi dup /oldrow exch def + findindex oldindex exch sub cvi /oldcolumn exch def + oldrow findnewrow cvi dup /newrow exch def findindex + oldcolumn findnewcolumn cvi dup /newcolumn exch def add + cvi /newindex exch def +} def +% +/drawfractal { + 1 1 generation gtol 1 sub findnumpoints { + cvi /topindex exch def + topindex dup findcolumn exch findrow 1 add findindex add cvi + /leftindex exch def + leftindex 1 add cvi + /rightindex exch def + /tpx oldarrayx topindex get def + /tpy oldarrayy topindex get def + /btx oldarrayx leftindex get def + /bty oldarrayy leftindex get def + /mdx oldarrayx rightindex get def + /mdy oldarrayy rightindex get def + tpx tpy moveto + btx bty lineto + mdx mdy lineto + closepath stroke + } for +} def +% +1 1 depth { + /generation exch def + generation gtol findarraysize cvi dup array /newarrayx exch def + array /newarrayy exch def + 1 1 generation 1 sub gtol findnumpoints { + findnewindex + newarrayx newindex + oldarrayx oldindex get put + newarrayy newindex + oldarrayy oldindex get put + } for + 1 1 generation 1 sub gtol 1 sub findnumpoints { + findnewindex + newcolumn newrow 2 add findindex add cvi dup + /leftindex exch def + 2 add cvi /rightindex exch def + newcolumn newrow 1 add findindex add cvi + /mindex exch def + /tpx newarrayx newindex get def + /tpy newarrayy newindex get def + /btx newarrayx leftindex get def + /bty newarrayy leftindex get def + splitline + newarrayx mindex mdx put + newarrayy mindex mdy put + mindex 1 add cvi /mindex exch def + /btx newarrayx rightindex get def + /bty newarrayy rightindex get def + splitline + newarrayx mindex mdx put + newarrayy mindex mdy put + /mindex leftindex 1 add cvi def + /tpx newarrayx leftindex get def + /tpy newarrayy leftindex get def + splitline + newarrayx mindex mdx put + newarrayy mindex mdy put + } for + /oldarrayx newarrayx def + /oldarrayy newarrayy def + 7 generation sub 5 div setlinewidth +% drawfractal showpage +} for +drawfractal +} def % end of /tx@Hugo +% +/FibonacciFractal { + 20 dict begin + n@ 2 sub { + /Fi F2 F1 concatstrings def + /F1 F2 def + /F2 Fi def + } repeat + /S Fi def + /nS S length def % nombre de lettres + 0 1 nS 2 sub {/j exch def + x1 y1 translate + /x0 0 def /y0 0 def + /k S j 1 getinterval cvi def + k 0 eq { + j 2 mod 0 eq { + angle neg rotate + tx ty lineto + currentpoint /y1 exch def /x1 exch def + /flag 0 def + }{ + angle rotate + tx ty lineto + currentpoint /y1 exch def /x1 exch def + /flag 1 def + } ifelse + }{ + tx ty lineto + currentpoint /y1 exch def /x1 exch def + /flag 2 def + } ifelse + } for + setLineColor + stroke + Pst@juxtaposition { + x1 y1 translate + flag 1 eq {-1 1 scale} if + flag 2 eq {90 rotate 1 -1 scale } if + 0 0 moveto + /x0 0 def /y0 0 def + /F1 (1) def + /F2 (0) def + /x1 0 def /y1 1 cmunit def + x1 y1 lineto + n@ 3 sub{ + /Fi F2 F1 concatstrings def + /F1 F2 def + /F2 Fi def + } repeat + /S Fi def + /nS S length def % nombre de lettres + 0 1 nS 2 sub {/j exch def + x1 y1 translate + /x0 0 def /y0 0 def + /k S j 1 getinterval cvi def + k 0 eq { + j 2 mod 0 eq { + -90 rotate + tx ty lineto + currentpoint /y1 exch def /x1 exch def + }{ + 90 rotate + tx ty lineto + currentpoint /y1 exch def /x1 exch def + } ifelse + }{ + tx ty lineto + currentpoint /y1 exch def /x1 exch def + } ifelse + } for + ColorF + stroke + } if % end Pst@juxtaposition + end +} def +% +/newFibonacciFractal { + 20 dict begin + n@ 2 sub { + /Fi F2 F1 concatstrings def + /F1 F2 def + /F2 Fi def + } repeat + % The Dense Fibonacci Word + /DFW () def + 0 2 F2 length 2 sub { + /i exch def + /I F2 i 2 getinterval def + I (00) eq {DFW (0) concatstrings /DFW exch def } if + I (01) eq {DFW (1) concatstrings /DFW exch def } if + I (10) eq {DFW (2) concatstrings /DFW exch def } if + } for +% morphismes +% newFibonacci +% 0->"", 1->1, 2->2 + /F2 DFW def + /Fi () def + 0 1 F2 length 1 sub { + /i exch def + /I F2 i 1 getinterval def + I (0) eq {Fi m@0 concatstrings /Fi exch def} if + I (1) eq {Fi m@1 concatstrings /Fi exch def} if + I (2) eq {Fi m@2 concatstrings /Fi exch def} if + } for + /S Fi def + /nS S length def % nombre de lettres + 0 1 nS 1 sub { + /j exch def + x1 y1 translate + /x0 0 def /y0 0 def + /k S j 1 getinterval cvi def + k 1 eq {angle neg rotate + tx ty lineto + currentpoint /y1 exch def /x1 exch def + } if + k 2 eq { angle rotate + tx ty lineto + currentpoint /y1 exch def /x1 exch def + } if + k 0 eq { + tx ty lineto + currentpoint /y1 exch def /x1 exch def + } if + } for + setLineColor + stroke + end +} def +% +/i-FibonacciFractal { + 20 dict begin + /F0 (0) def + /Fi () def + i@ 1 sub { + Fi (0) concatstrings /Fi exch def + } repeat + Fi (1) concatstrings + /F1 exch def + n@ { + F1 F0 concatstrings + /Fi exch def + /F0 F1 def + /F1 Fi def + } repeat + /S Fi def + 0 0 translate + 0 0 moveto + currentpoint /y0 exch def /x0 exch def + 0 1 cmunit lineto + currentpoint /y1 exch def /x1 exch def + /tx {x1 x0 sub} def + /ty {y1 y0 sub} def +% + /nS S length def % nombre de lettres + 0 1 nS 2 sub { + /j exch def + x1 y1 translate + /x0 0 def /y0 0 def + /k S j 1 getinterval cvi def + k 0 eq { + j 2 mod 0 eq { + angle neg rotate + tx ty lineto + currentpoint /y1 exch def /x1 exch def + }{ + angle rotate + tx ty lineto + currentpoint /y1 exch def /x1 exch def + } ifelse + }{ + tx ty lineto + currentpoint /y1 exch def /x1 exch def + } ifelse + } for + setLineColor + stroke + end +} def +% +/k-FibonacciFractal { + 20 dict begin + /f0 (0) def + /fi (0) def + k@ 2 sub { + fi (0) concatstrings /fi exch def + } repeat + fi (1) concatstrings + /f1 exch def + /fi f1 def + n@ 1 sub { + k@ 1 sub { f1 fi concatstrings /f1 exch def } repeat + f1 f0 concatstrings /f1 exch def + /f0 fi def + /fi f1 def + } repeat + /S f1 def + t@x cmunit_1 28.45 mul t@y cmunit_1 28.45 mul translate + 0 0 moveto + currentpoint /y0 exch def /x0 exch def + 0 1 cmunit lineto + currentpoint /y1 exch def /x1 exch def + /tx {x1 x0 sub} def + /ty {y1 y0 sub} def + /nS S length def % nombre de lettres + 0 1 nS 1 sub {/j exch def + x1 y1 translate + /x0 0 def /y0 0 def + /k S j 1 getinterval cvi def + k 0 eq { + j 2 mod 0 eq { + angle neg rotate + tx ty lineto + currentpoint /y1 exch def /x1 exch def + } + { + angle rotate + tx ty lineto + currentpoint /y1 exch def /x1 exch def + } + ifelse +} { + tx ty lineto + currentpoint /y1 exch def /x1 exch def + } ifelse + } for + setLineColor + stroke + end +} def +% +/Biperiodic-FibonacciWords { + 20 dict begin +/f0 () def +/f1 (0) def +/f2 a@ 1 sub {(0) f0 concatstrings /f0 exch def} repeat f0 (1) concatstrings def +3 1 n@ {/i exch def +/fi () def +i 2 mod 0 eq { + a@ { fi f2 concatstrings /fi exch def } repeat + }{ + b@ { fi f2 concatstrings /fi exch def } repeat + } ifelse + fi f1 concatstrings /fi exch def + /f1 f2 def + /f2 fi def +} for +/S f2 def +t@x cmunit_1 28.45 mul t@y cmunit_1 28.45 mul translate +0 0 moveto +currentpoint /y0 exch def /x0 exch def +1 cmunit 0 cmunit lineto +currentpoint /y1 exch def /x1 exch def +/tx {x1 x0 sub} def +/ty {y1 y0 sub} def +/nS S length def % nombre de lettres +0 1 nS 1 sub {/j exch def +x1 y1 translate +/x0 0 def /y0 0 def +/k S j 1 getinterval cvi def +k 0 eq { +j 2 mod 0 eq { + angle neg rotate + tx ty lineto + currentpoint /y1 exch def /x1 exch def + } + { + angle rotate + tx ty lineto + currentpoint /y1 exch def /x1 exch def + } + ifelse +} { +tx ty lineto +currentpoint /y1 exch def /x1 exch def +} ifelse +} for + setLineColor +stroke +end + }def +% +/InverseLR { + 1 dict begin + /str exch def + 0 1 str length 1 sub {/i exch def + str i 1 getinterval (L) eq {str i (R) putinterval }{str i (L) putinterval }ifelse + } for + str + end +} def +% +/FibonacciPolyominoes { + 20 dict begin + gsave + t@x t@y translate + /q0 () def + /q1 (R) def + /N n@ 3 mul 1 add def + 2 1 N { + /n exch def + n 3 mod 2 eq {/qi q1 q0 concatstrings def} + {/qi q1 q0 InverseLR concatstrings def} ifelse + /q0 q1 def + /q1 qi def + } for + /q_1 q1 reversestring def + /qii () def + /Q 3 {qii q1 concatstrings /qii exch def } repeat + qii q_1 reversestring concatstrings def +% remarque +% identique /Q 4{qii q1 concatstrings /qii exch def} repeat qii def + /tx {x1 x0 sub} def + /ty {y1 y0 sub} def + /y0 0 def /x0 0 def + /x1 x0 0 cmunit add def /y1 y0 1 cmunit add def + newpath + x0 y0 moveto + x1 y1 lineto + 0 1 Q length 1 sub {/i exch def + x1 y1 translate + Q i 1 getinterval (L) eq { + 90 rotate + tx ty lineto + currentpoint /y1 exch def /x1 exch def + }{ + 90 neg rotate + tx ty lineto + currentpoint /y1 exch def /x1 exch def + }ifelse + } for + closepath + setFillColor + setLineColor + grestore + end +} def +% +/Rot2 { % Rot-90+translation + 2 dict begin + /y exch neg def /x exch def + y 2 n@ 1 add exp 1 sub add + x neg 2 n@ exp 1 sub add + end + } def +/Trans1 { + 2 dict begin + /y exch def /x exch def + x + y 2 n@ exp add + end +} def +/Trans2 { + 2 dict begin + /y exch def /x exch def + x 2 n@ exp add + y 2 n@ exp add + end +} def +% +/HilbertFractal { + /M0 [[0 0] [0 1] [1 1] [1 0]] def + /n@ 1 def + N@ { + /M1 [] def + /M2 [] def + /M3 [] def + /M4 [] def + 0 1 M0 length 1 sub {/i exch def + /M M0 i get def + /Mt [ + 0 2 M length 2 sub { + /k exch def + M k 2 getinterval + } for + ] def + M1 [Mt {aload pop exch } forall] concatarray /M1 exch def + M2 [Mt {aload pop Trans1} forall] concatarray /M2 exch def + M3 [Mt {aload pop Trans2} forall] concatarray /M3 exch def + M4 [Mt {aload pop Rot2 } forall] concatarray /M4 exch def + } for + /n@ n@ 1 add def + /M0 [M1 M2 M3 M4] def + } repeat +% tableau des points + /HilbertCurve [ + 0 1 M0 length 1 sub { + /i exch def + /lePt M0 i get def + 0 2 lePt length 2 sub { + /j exch def + lePt j get cmunit + lePt j 1 add get cmunit + } for + } for + ] def +% le dessin de la courbe + newpath + 0 0 moveto + 0 2 HilbertCurve length 2 sub { + /i exch def + i 2 div Npts ge {exit} if + HilbertCurve i get + HilbertCurve i 1 add get + lineto + } for +} def +% +end
\ No newline at end of file diff --git a/graphics/pstricks/contrib/pst-fractal/latex/pst-fractal.sty b/graphics/pstricks/contrib/pst-fractal/latex/pst-fractal.sty new file mode 100644 index 0000000000..17833d134c --- /dev/null +++ b/graphics/pstricks/contrib/pst-fractal/latex/pst-fractal.sty @@ -0,0 +1,12 @@ +%% $Id: pst-fractal-doc.tex 658 2017-11-26 16:55:41Z herbert $ +\RequirePackage{pstricks} +\ProvidesPackage{pst-fractal}[2007/09/25 package wrapper for + pst-fractal.tex (hv)] +\input{pst-fractal.tex} +\IfFileExists{pst-fractal.pro}{% + \ProvidesFile{pst-fractal.pro} + [2017/12/04 v. 0.06, PostScript prologue file (hv)] + \@addtofilelist{pst-fractal.pro}}{}% +\ProvidesFile{pst-fractal.tex} + [\filedate\space v\fileversion\space `PST-fractal' (hv)] +\endinput diff --git a/graphics/pstricks/contrib/pst-fractal/tex/pst-fractal.tex b/graphics/pstricks/contrib/pst-fractal/tex/pst-fractal.tex new file mode 100644 index 0000000000..b60dcaf3da --- /dev/null +++ b/graphics/pstricks/contrib/pst-fractal/tex/pst-fractal.tex @@ -0,0 +1,738 @@ +%% $Id: pst-fractal.tex 846 2018-11-30 21:44:45Z herbert $ +%% +%% This is file `pst-fractal.tex', +%% +%% IMPORTANT NOTICE: +%% +%% Package `pst-fractal.tex' +%% +%% Herbert Voss <hvoss _at_ 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 macros/latex/base/lppl.txt. +%% +%% DESCRIPTION: +%% `pst-fractal' is a PSTricks package to draw Julia and +%% Mandelbrot sets as well as Sierpinski, ... +%% +\csname PSTfractalLoaded\endcsname +\let\PSTfractalLoaded\endinput +\ifx\PSTricksLoaded\endinput\else \input pstricks.tex\fi +\ifx\PSTricksAddLoaded\endinput\else\input pstricks-add.tex\fi +\ifx\PSTXKeyLoaded\endinput\else \input pst-xkey \fi +% +\def\fileversion{0.10} +\def\filedate{2018/11/30} +\message{`PST-fractal' v\fileversion, \filedate\space (hv)} +% +\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax +\pst@addfams{pst-fractal} +\pstheader{pst-fractal.pro} +%\SpecialCoor +% +\newdimen\pst@fractal@xWidth +\define@key[psset]{pst-fractal}{xWidth}[1cm]{\pssetlength\pst@fractal@xWidth{#1}} +\newdimen\pst@fractal@yWidth +\define@key[psset]{pst-fractal}{yWidth}[1cm]{\pssetlength\pst@fractal@yWidth{#1}} +\psset[pst-fractal]{xWidth=1cm,yWidth=1cm} +\define@key[psset]{pst-fractal}{type}[Julia]{\def\pst@fractal@type{#1}} +\psset[pst-fractal]{type=Julia}% or type=Mandel +\def\pst@fractal@Julia{Julia}\def\pst@fractal@Mandel{Mandel} +\define@key[psset]{pst-fractal}{baseColor}[white]{\pst@getcolor{#1}\pst@fractal@baseColor} +\psset[pst-fractal]{baseColor=white} +% +\define@key[psset]{pst-fractal}{cx}[0]{\def\pst@fractal@cx{#1 }} +\define@key[psset]{pst-fractal}{cy}[0]{\def\pst@fractal@cy{#1 }} +\define@key[psset]{pst-fractal}{dIter}[1]{\def\pst@fractal@dIter{#1 }} +\psset[pst-fractal]{cx=0,cy=0,dIter=1} +\define@key[psset]{pst-fractal}{maxIter}[255]{\pst@checknum{#1}\pst@fractal@maxIter} +\define@key[psset]{pst-fractal}{maxRadius}[100]{\pst@checknum{#1}\pst@fractal@maxRadius} +\psset[pst-fractal]{maxIter=255,maxRadius=100} +\define@key[psset]{pst-fractal}{plotpoints}[2000]{\pst@checknum{#1}\pst@fractal@plotpoints} +\psset[pst-fractal]{plotpoints=2000} +% +\define@key[psset]{pst-fractal}{angle}[0]{\pst@getangle{#1}\pst@fractal@angle} +\define@key[psset]{pst-fractal}{c}[5]{\pst@checknum{#1}\pst@fractal@c} +\newdimen\pst@fractal@minWidth +\define@key[psset]{pst-fractal}{minWidth}[1pt]{\pssetlength\pst@fractal@minWidth{#1}} +\psset[pst-fractal]{angle=0,c=5,minWidth=1pt} +% +\define@key[psset]{pst-fractal}{scale}[1]{\pst@getscale{#1}{\pst@fractal@scale}% + \let\pst@fractal@Xscale\pst@tempg} +\psset[pst-fractal]{scale=1} +% +\def\pst@fractal@radius{0.001 } +% +\newdimen\pst@fractal@Radius +\define@key[psset]{pst-fractal}{Radius}[5cm]{\pssetlength\pst@fractal@Radius{#1}} +\define@boolkey[psset]{pst-fractal}[Pst@fractal@]{Color}[true]{} +\psset[pst-fractal]{Radius=5cm,Color=false} +% +\define@key[psset]{pst-fractal}{n}{\def\pst@fractal@n{#1 }} +\define@key[psset]{pst-fractal}{dotcolor}{\pst@getcolor{#1}\psdotcolor} +\define@key[psset]{pst-fractal}{N}{\def\pst@fractal@N{#1}} +\psset[pst-fractal]{n=3,N=all,dotcolor=red} + +\define@key[psset]{pst-fractal}{i}{\def\pst@fractal@i{#1 }} % i-Fibonacci +\define@key[psset]{pst-fractal}{morphism}{\def\pst@fractal@morphism{#1}} % les substitutions +\define@boolkey[psset]{pst-fractal}[Pst@]{juxtaposition}[true]{} % +\define@key[psset]{pst-fractal}{colorF}{\pst@getcolor{#1}\pscolorF} +\psset[pst-fractal]{morphism=(0) (1) (2),juxtaposition=false,colorF=red,i=6} +% +%=========================================================== +% +\def\psCantor{\pst@object{psCantor}} +\def\psCantor@i{% + \addbefore@par{n=5,xWidth=10cm,yWidth=5mm,linewidth=2mm} + \begin@SpecialObj + \addto@pscode{ + /N@ \pst@fractal@n def +% \pst@number\psunit dup scale + /v 0 def + /deltaV \pst@number\pst@fractal@yWidth def + 0 0 moveto + /cantor_set { % x0 x1 v n + 4 dict begin + /n exch def + /v exch def + /x1 exch def + /x0 exch def + x0 v moveto + x1 v lineto \pst@usecolor\pslinecolor \pst@number\pslinewidth stroke + n 1 gt { + x0 dup dup add x1 add 3 div v deltaV sub n 1 sub cantor_set + x0 x1 dup add add 3 div x1 v deltaV sub n 1 sub cantor_set + } if + end + } def + 0 \pst@number\pst@fractal@xWidth 0 N@ cantor_set + }% + \showpointsfalse + \end@SpecialObj + \ignorespaces} +% +\def\psHilbert{\pst@object{psHilbert}} +\def\psHilbert@i{% + \addbefore@par{n=4,N=all,dotcolor=red} + \begin@SpecialObj + \addto@pscode{ + /N@ \pst@fractal@n def + /NbrePts (\pst@fractal@N) def + NbrePts (all) eq {/Npts 4 N@ 1 add exp cvi def}{/Npts NbrePts cvi def Npts 4 N@ 1 add exp gt {/Npts 4 N@ 1 add exp cvi def} if } ifelse + /dotcolor {\pst@usecolor\psdotcolor } def + /cmunit {\pst@number\psunit mul} bind def + tx@fractalDict begin HilbertFractal + \psls@solid + \ifshowpoints + 0 2 HilbertCurve length 2 sub { + /i exch def + i 2 div Npts ge {exit} if + HilbertCurve i get + HilbertCurve i 1 add get + \psk@dotsize DS + 0 360 arc dotcolor fill + } for + \fi + end + }% + \showpointsfalse + \end@SpecialObj + \ignorespaces} +% +\def\psFibonacci{\pst@object{psFibonacci}} +\def\psFibonacci@i{% + \addbefore@par{n=10, angle=90}% + \begin@SpecialObj + \addto@pscode{ + /cmunit {\pst@number\psunit mul} bind def % mise à l'échelle + /angle \pst@fractal@angle def + /n@ \pst@fractal@n def + n@ 3 le {/n@ 3 def} if + /ColorF { \pst@usecolor\pscolorF } def + /setLineColor { \pst@usecolor\pslinecolor } def + /Pst@juxtaposition \ifPst@juxtaposition true \else false \fi def + /F1 (1) def + /F2 (0) def + /tx { x1 x0 sub } def + /ty { y1 y0 sub } def + /x0 0 def /y0 0 def + x0 y0 moveto + /x1 0 def /y1 1 cmunit def + x1 y1 lineto + tx@fractalDict begin FibonacciFractal end + }% + \showpointsfalse + \end@SpecialObj + \ignorespaces} +% +% +\def\psNewFibonacci{\def\pst@par{}\pst@object{psNewFibonacci}} +\def\psNewFibonacci@i{% + \addbefore@par{n=10, angle=90}% + \begin@SpecialObj + \addto@pscode{ + /cmunit {\pst@number\psunit mul} bind def % mise à l'échelle + /angle \pst@fractal@angle def + /n@ \pst@fractal@n def + n@ 3 le {/n@ 3 def} if + /morhism [\pst@fractal@morphism] def + /setLineColor { \pst@usecolor\pslinecolor } def + /m@0 morhism 0 get def + /m@1 morhism 1 get def + /m@2 morhism 2 get def + /F1 (1) def + /F2 (0) def + /tx {x1 x0 sub} def + /ty {y1 y0 sub} def + /x0 0 def /y0 0 def + x0 y0 moveto + /x1 0 def /y1 1 cmunit def + x1 y1 lineto + tx@fractalDict begin newFibonacciFractal end + }% + \showpointsfalse + \end@SpecialObj + \ignorespaces} +% +% i-Fibonacci +\def\psiFibonacci{\def\pst@par{}\pst@object{psiFibonacci}} +\def\psiFibonacci@i{% + \addbefore@par{angle=90}% + \begin@SpecialObj + \addto@pscode{ + /cmunit {\pst@number\psunit mul} def + /angle \pst@fractal@angle def + /n@ \pst@fractal@n def + n@ 3 le {/n@ 3 def} if + /i@ \pst@fractal@i def + /setLineColor { \pst@usecolor\pslinecolor } bind def + tx@fractalDict begin i-FibonacciFractal end + }% + \showpointsfalse + \end@SpecialObj + \ignorespaces} +% +% 30 septembre 2017 +% k-Fibonacci +\define@key[psset]{pst-fractal}{k}{\def\pst@fractal@k{#1 }} % k +\psset[pst-fractal]{k=5} +% +\def\pskFibonacci{\def\pst@par{}\pst@object{pskFibonacci}} +\def\pskFibonacci@i{\@ifnextchar({\pskFibonacci@ii}{\pskFibonacci@ii(0,0)}} +\def\pskFibonacci@ii(#1){% + \addbefore@par{k=5,angle=90}% + \begin@SpecialObj + \pst@@getcoor{#1}% + \addto@pscode{ + \pst@coor /t@y ED /t@x ED + /cmunit {\pst@number\psunit mul} bind def % mise à l'échelle + /cmunit_1 {\pst@number\psunit div} bind def % mise à l'échelle + /angle \pst@fractal@angle def + /n@ \pst@fractal@n def + /k@ \pst@fractal@k def + /setLineColor { \pst@usecolor\pslinecolor } def + tx@fractalDict begin k-FibonacciFractal end + }% + \showpointsfalse + \end@SpecialObj + \ignorespaces} +% +% 1 octobre 2017 +% Biperiodic-Fibonacci-Words +\define@key[psset]{pst-fractal}{a}{\def\pst@fractal@a{#1 }} % k +\psset[pst-fractal]{a=5} +\define@key[psset]{pst-fractal}{b}{\def\pst@fractal@b{#1 }} % k +\psset[pst-fractal]{b=5} +% +\def\psBiperiodicFibonacci{\def\pst@par{}\pst@object{psBiperiodicFibonacci}} +\def\psBiperiodicFibonacci@i{\@ifnextchar({\psBiperiodicFibonacci@ii}{\psBiperiodicFibonacci@ii(0,0)}} +\def\psBiperiodicFibonacci@ii(#1){% + \addbefore@par{a=5,b=5,angle=90,n=3,k=5} + \begin@SpecialObj + \pst@@getcoor{#1}% + \addto@pscode{ + \pst@coor /t@y ED /t@x ED + /cmunit {\pst@number\psunit mul} bind def + /cmunit_1 {\pst@number\psunit div} bind def + /a@ \pst@fractal@a def + /b@ \pst@fractal@b def + /angle \pst@fractal@angle def + /n@ \pst@fractal@n def + /k@ \pst@fractal@k def + /setLineColor { \pst@usecolor\pslinecolor } def + tx@fractalDict begin Biperiodic-FibonacciWords end + }% + \showpointsfalse + \end@SpecialObj + \ignorespaces} +% +% 3 octobre 2017 +% +\def\psFibonacciPolyominoes{\pst@object{psFibonacciPolyominoes}} +\def\psFibonacciPolyominoes@i{\@ifnextchar({\psFibonacciPolyominoes@ii}{\psFibonacciPolyominoes@ii(0,0)}} +\def\psFibonacciPolyominoes@ii(#1){% + \addbefore@par{n=3} + \begin@SpecialObj + \pst@@getcoor{#1}% + \addto@pscode{ + \pst@coor /t@y ED /t@x ED + /cmunit {\pst@number\psunit mul} bind def % mise à l'échelle + /n@ \pst@fractal@n def + /setFillColor { + \ifx\psk@fillstyle\relax\else + gsave \pst@usecolor\psfillcolor fill grestore + \fi } def + /setLineColor{ \ifx\pslinestyle\@none\else stroke \fi } def + tx@fractalDict begin FibonacciPolyominoes end + }% + \showpointsfalse + \end@SpecialObj + \ignorespaces} +% +% type de fonte et taille +\define@boolkey[psset]{pst-fractal}[Pst@]{DFW}[true]{} % +\define@boolkey[psset]{pst-fractal}[Pst@]{iFibonacci}[true]{} % +\psset[pst-fractal]{DFW=false,iFibonacci=false} % +% +\def\psFibonacciWord{\pst@object{psFibonacciWord}} +\def\psFibonacciWord@i{\@ifnextchar({\psFibonacciWord@ii}{\psFibonacciWord@ii(0,0)}} +\def\psFibonacciWord@ii(#1,#2){% + \addbefore@par{%PSfont=Times-Roman, + fontscale=8} + \begin@SpecialObj + \addto@pscode{ + /n@ \pst@fractal@n def + /i@ \pst@fractal@i def + n@ 3 le {/n@ 3 def} if + /cmunit {\pst@number\psunit mul} bind def % mise à l'échelle + /PSfont {\psk@PSfont} def + PSfont findfont \psk@fontscale scalefont setfont + /F1 (1) def + /F2 (0) def + n@ 2 sub{ + /Fi F2 F1 concatstrings def + /F1 F2 def + /F2 Fi def + } repeat + \ifPst@DFW + /Fi () def + 0 2 F2 length 2 sub {/i exch def + /I F2 i 2 getinterval def + I (00) eq {Fi (0) concatstrings /Fi exch def} if + I (01) eq {Fi (1) concatstrings /Fi exch def} if + I (10) eq {Fi (2) concatstrings /Fi exch def} if + } for + \fi + \ifPst@iFibonacci + /F0 (0) def + /Fi () def + i@ 1 sub { + Fi (0) concatstrings /Fi exch def + } repeat + Fi (1) concatstrings + /F1 exch def + n@ { + F1 F0 concatstrings + /Fi exch def + /F0 F1 def + /F1 Fi def + } repeat + \fi + #1 cmunit #2 cmunit moveto Fi show + }% + \showpointsfalse + \end@SpecialObj + \ignorespaces} + +% +\def\psfractal{\pst@object{psfractal}} +\def\psfractal@i{\@ifnextchar({\psfractal@ii}{\psfractal@ii(-1,-1)}}% +\def\psfractal@ii(#1){\@ifnextchar({\psfractal@iii(#1)}{\psfractal@iii(#1)(1,1)}}% +\def\psfractal@iii(#1)(#2){% + \begin@SpecialObj + \psset{unit=1pt}% + \pst@getcoor{#1}\pst@temp@A + \pst@getcoor{#2}\pst@temp@B + \pspicture(\pst@fractal@xWidth,\pst@fractal@yWidth)% + \addto@pscode{ + \pst@temp@A + \pst@temp@B + \pst@number\pst@fractal@xWidth + \pst@number\pst@fractal@yWidth + \pst@fractal@cx + \pst@fractal@cy + \pst@fractal@maxIter + \pst@fractal@dIter + \pst@fractal@maxRadius + { \pst@usecolor\pst@fractal@baseColor } + \ifx\pst@fractal@type\pst@fractal@Julia true \else false \fi + \ifPst@CMYK true \else false \fi ^^J + tx@fractalDict begin tx@Fractal end ^^J + }% end add@pscode + \endpspicture + \end@SpecialObj + \ignorespaces} +% +\def\psSier{\pst@object{psSier}} +\def\psSier@i{\@ifnextchar({\psSier@v}{\psSier@vi}} +% +\def\psSier@v(#1){\@ifnextchar({\psSier@ii(#1)}{\psSier@iii(#1)}} +\def\psSier@ii(#1)(#2)(#3){{% + \pst@getcoor{#1}\pst@temp@A + \pst@getcoor{#2}\pst@temp@B + \pst@getcoor{#3}\pst@temp@C + \begin@SpecialObj% + \addto@pscode{ + [ \pst@temp@A \pst@temp@B \pst@temp@C ] ^^J% + { \pst@usecolor\pslinecolor } ^^J% + \pst@fractal@plotpoints ^^J% + tx@fractalDict begin tx@Sierpinski end ^^J% + }% end add@pscode + \end@SpecialObj% +}} +\def\psSier@iii(#1)#2#3{% + \pst@getcoor{#1}\pst@tempA + \pst@getlength{#2}\pst@tempB + \begin@OpenObj% + \addto@pscode{ + /sierpy { + dup 1 ge + { 1 sub gsave 0.5 dup scale dup sierpy + 1 0 translate dup sierpy + -0.5 0.8660254 translate dup sierpy grestore + }{newpath + 0 0 moveto + 1 0 lineto 0.5 0.8660254 lineto closepath + gsave \pst@usecolor\pslinecolor + fill grestore } ifelse pop + } def + \pst@tempA\space translate + \pst@tempB\space dup scale + 0 setlinewidth + 0 0 moveto 1 0 lineto 0.5 0.8660254 lineto 0 setlinewidth closepath + gsave #3 0 gt { \pst@usecolor\psfillcolor }{ \pst@usecolor\pslinecolor } ifelse + fill grestore stroke + #3 dup 0 gt { sierpy } if }% + \end@OpenObj% +} +% +\def\psSier@vi{% Sierpinski curve + \addbefore@par{n=3,N=all,dotcolor=red}% + \begin@SpecialObj + \addto@pscode{ + /useFill \ifx\psk@fillstylename\@none false \else true \fi def + /fillColor { \pst@usecolor\psfillcolor } def +% \else +% /useFillColor { +% \ifx\psk@fillstylename\@none +% \else +% gsave \pst@usecolor\psfillcolor fill grestore +% \fi +% } def + /useLineStyle { \ifx\pslinestyle\@none\else \psls@solid stroke \fi } def + /n@ \pst@fractal@n def + /NbrePts (\pst@fractal@N) def + /dotcolor { \pst@usecolor\psdotcolor } def + /cmunit { \pst@number\psunit mul } def + NbrePts (all) eq {/Npts 4 n@ 1 add exp cvi def}{/Npts NbrePts cvi def Npts 4 n@ 1 add exp gt {/Npts 4 n@ 1 add exp cvi def} if } ifelse + tx@fractalDict begin tx@SierpinskiCurve + \ifshowpoints + 0 2 Sierpinsky length 2 sub { + /i exch def + i 2 div Npts ge {exit} if + Sierpinsky i get + Sierpinsky i 1 add get + \psk@dotsize DS + 0 360 arc dotcolor fill + } for + \fi + end + }% + \showpointsfalse + \end@SpecialObj + \ignorespaces} +% +\def\psPhyllotaxis{\pst@object{psPhyllotaxis}} +\def\psPhyllotaxis@i{\@ifnextchar({\psPhyllotaxis@ii}{\psPhyllotaxis@ii(0,0)}} +\def\psPhyllotaxis@ii(#1){{% + \pst@getcoor{#1}\pst@tempA + \begin@SpecialObj% + \addto@pscode{ + \pst@tempA + \pst@fractal@c + \pst@fractal@angle + \pst@fractal@maxIter + \ifPst@CMYK true \else false \fi ^^J% + tx@fractalDict begin tx@Phyllotaxis end ^^J% + }% end add@pscode + \end@SpecialObj% +}} +% +\def\pst@fractal@radius{0.001 } +\def\psFern{\pst@object{psFern}} +\def\psFern@i{\@ifnextchar({\psFern@ii}{\psFern@ii(0,0)}} +\def\psFern@ii(#1){{% + \addbefore@par{scale=10,linewidth=0.001pt,maxIter=20000,radius=0.001pt}% + \pst@getcoor{#1}\pst@tempA% + \begin@SpecialObj% + \addto@pscode{ + \pst@fractal@Xscale + \pst@tempA + \pst@fractal@maxIter + \pst@fractal@radius + \pst@number\pslinewidth + { \pst@usecolor\pslinecolor } + tx@fractalDict begin tx@Fern end + }% end add@pscode + \end@SpecialObj% +}} +% +\def\psHugo{\pst@object{psHugo}} +\def\psHugo@i{\@ifnextchar({\psHugo@ii}{\psHugo@ii(0,0)}} +\def\psHugo@ii(#1){{% + \addbefore@par{scale=0.1,linewidth=0.001pt,maxIter=5}% + \pst@getcoor{#1}\pst@tempA% + \begin@SpecialObj% + \addto@pscode{ + \pst@fractal@Xscale + \pst@tempA + \pst@fractal@maxIter + \pst@number\pslinewidth + { \pst@usecolor\pslinecolor } + tx@fractalDict begin tx@Hugo end + }% end add@pscode + \end@SpecialObj% +}} +% +\def\psKochflake{\pst@object{psKochflake}} +\def\psKochflake@i{\@ifnextchar({\psKochflake@ii}{\psKochflake@ii(0,0)}} +\def\psKochflake@ii(#1){{% + \addbefore@par{radius=0.25cm,maxIter=5}% + \pst@getcoor{#1}\pst@tempA% + \begin@SpecialObj% + \addto@pscode{ + gsave ^^J% + \pst@tempA translate + \pst@usecolor\pslinecolor + \pst@fractal@angle rotate ^^J + \pst@number\pslinewidth 10 div \pst@fractal@Xscale div SLW ^^J + \pst@fractal@maxIter ^^J + tx@fractalDict begin ^^J + \pst@fractal@scale ^^J + tx@Kochflake end ^^J + }% end add@pscode + \psk@fillstyle + \addto@pscode{stroke grestore } + \end@SpecialObj% +}} +% +\def\psAppolonius{\pst@object{psAppolonius}} +\def\psAppolonius@i{\@ifnextchar({\psAppolonius@ii}{\psAppolonius@ii(0,0)}} +\def\psAppolonius@ii(#1){{% + \addbefore@par{Radius=5cm,dIter=1,linewidth=0.1pt}% + \pst@getcoor{#1}\pst@tempA% + \begin@SpecialObj% + \addto@pscode{ + \pst@fractal@dIter + \pst@number\pst@fractal@Radius + \ifPst@fractal@Color true \else false \fi + \ifPst@CMYK true \else false \fi ^^J + tx@fractalDict begin ^^J + gsave ^^J + \pst@tempA translate ^^J + \pst@usecolor\pslinecolor + \pst@fractal@scale + \pst@number\pslinewidth SLW ^^J + tx@Appolonius end ^^J + }% end add@pscode + \psk@fillstyle% + \addto@pscode{stroke grestore}% + \end@SpecialObj% +}} +% +\def\psPTree{\pst@object{psPTree}} +\def\psPTree@i{\@ifnextchar({\psPTree@ii}{\psPTree@ii(0,0)}} +\def\psPTree@ii(#1){{% + \addbefore@par{xWidth=1cm,Color=false,c=0.5}% + \pst@getcoor{#1}\pst@tempA% + \begin@SpecialObj% + \addto@pscode{ + gsave ^^J% + \pst@tempA exch \pst@number\pst@fractal@xWidth 2 div sub exch translate ^^J% + \pst@usecolor\pslinecolor + \pst@fractal@scale + \pst@number\pslinewidth \pst@fractal@Xscale div SLW ^^J% + /sqrt2 1.41421356237310 def ^^J% + /minWidth \pst@number\pst@fractal@minWidth def + /r 1 def /g 0 def /b 0 def + /icount 380 def + /setWaveColor { + /icount icount dup 780 gt { pop 380 }{ \pst@fractal@dIter add } ifelse def ^^J% + tx@addDict begin icount ^^J% + \ifPst@CMYK wavelengthToCMYK Cyan Magenta Yellow Black end setcmykcolor ^^J% + \else wavelengthToRGB Red Green Blue end setrgbcolor \fi ^^J% + } def ^^J% + /Alpha1 { .5 1 \pst@fractal@c sub atan } bind def + /Alpha2 { .5 \pst@fractal@c atan } bind def + /box { \@percentchar stacksize ^^J % width on stack + /w ED + newpath % + 0 0 moveto % + w 0 rlineto % w 0 move right + 0 w rlineto % 0 w move up + w neg \pst@fractal@c mul w 0.5 mul % -c*w 0.5*w + rlineto % move left up + w \pst@fractal@c 1 sub mul % -(1-c)*w + w -0.5 mul rlineto % -(1-c)*w -0.5w move left down + closepath % close + \ifPst@fractal@Color + setWaveColor fill ^^J% +% r g b setrgbcolor fill r g b /g exch def /r exch def /b exch def + \else stroke \fi % + w minWidth gt { % w w limit gt + gsave % + 0 w translate + Alpha1 rotate + w dup 0.5 mul 1 \pst@fractal@c sub w mul Pyth box % one w to leave on stack + grestore + gsave + dup dup dup % w w w w + 1 \pst@fractal@c sub mul % w w w w*(1-c) + exch 1.5 mul % w w w*(1-c) w*1.5 + translate % w w + 360 Alpha2 sub rotate + 0.5 mul exch \pst@fractal@c mul Pyth box + grestore + } if + } def + \pst@number\pst@fractal@xWidth box ^^J% + }% end add@pscode + \end@SpecialObj% +}} +% +\def\psFArrow{\pst@object{psFArrow}} +\def\psFArrow@i{\@ifnextchar({\psFArrow@ii}{\psFArrow@ii(0,0)}} +\def\psFArrow@ii(#1)#2{{% + \addbefore@par{linewidth=10pt,yWidth=5cm,maxIter=10,Color=false,scale=1,dIter=1}% + \pst@getcoor{#1}\pst@tempA% + \begin@SpecialObj% + \addto@pscode{ + gsave ^^J% + \pst@tempA translate 0 0 moveto ^^J% + \pst@usecolor\pslinecolor ^^J% + \pst@fractal@scale ^^J% + /depth 0 def ^^J% + /depth++ { /depth depth 1 add def } def ^^J% + /depth-- { /depth depth 1 sub def } def ^^J% + /icount 380 def ^^J% + /setWaveColor { ^^J% + /icount icount dup 780 gt { pop 380 }{ \pst@fractal@dIter add } ifelse def ^^J% + tx@addDict begin icount ^^J% + \ifPst@CMYK wavelengthToCMYK Cyan Magenta Yellow Black end setcmykcolor ^^J% + \else wavelengthToRGB Red Green Blue end setrgbcolor \fi ^^J% + } def ^^J% + /DoLine { \@percentchar print a vert. line ^^J% + 0 \pst@number\pst@fractal@yWidth rlineto currentpoint ^^J% + \ifPst@fractal@Color setWaveColor \fi ^^J% + stroke ^^J% + translate 0 0 moveto ^^J% + } def ^^J% + /FractArrow { ^^J% + /sc exch def ^^J% + gsave ^^J% + sc dup scale ^^J% + \pst@number\pslinewidth SLW ^^J% + depth++ DoLine ^^J% + depth \pst@fractal@maxIter le { ^^J% + 135 rotate sc FractArrow ^^J% + -270 rotate sc FractArrow ^^J% + } if ^^J% + depth-- ^^J% + grestore ^^J% + } def ^^J% + \pst@fractal@angle rotate ^^J% + #2 FractArrow ^^J% +% 180 rotate #2 FractArrow +% stroke + }% end add@pscode + \end@SpecialObj% +}} +% +\define@key[psset]{pst-fractal}{NbrIter}{\def\pst@fractal@NbrIter{#1 }} % nombre d'itérations +\define@key[psset]{pst-fractal}{tabPts}{\def\pst@fractal@tabPts{#1 }} % tableau de points +\define@key[psset]{pst-fractal}{angleH}{\def\pst@fractal@angleH{#1 }} % angle en radians +\define@key[psset]{pst-fractal}{zoom}{\def\pst@fractal@zoom{#1 }} % grossissement +\psset[pst-fractal]{NbrIter=500,angleH=1.32837,zoom=5,tabPts=0.05 0.05 +0.1 0.1 +0.2 0.2 +0.3 0.2 +0.3 0.3 +0.4 0.3 +0.4 0.324 +0.4 0.326 +0.4 0.5 +0.5 0.3 +0.5 0.5 +0.6 0.5 +0.6 0.6 +0.57 0.575 +0.7 0.7 +0.7 0.9} +\define@boolkey[psset]{pst-fractal}[Pst@]{pixelscolor}[true]{} +\psset[pst-fractal]{pixelscolor=true} % pixels en couleurs + +\def\psHenon{\pst@object{psHenon}} +\def\psHenon@i{% + \addbefore@par{dotsize=0.75pt}% + \begin@SpecialObj + \addto@pscode{ +% échelle 2=> 10 cm pour zoom=5 + /zoom \pst@fractal@zoom def + /cm {\pst@number\psunit mul zoom mul} bind def + /NbreIter \pst@fractal@NbrIter def + /Angle \pst@fractal@angleH RadtoDeg def + /CosA Angle cos def + /SinA Angle sin def + /TabPts [\pst@fractal@tabPts] def + \ifPst@pixelscolor /pixelscolor true def \else /pixelscolor false def \fi + /AttracteurHenon { + 5 dict begin + /Y exch def /X exch def /Aux X def + NbreIter { + /Aux X def + /X X CosA mul Y X X mul sub SinA mul sub def + /Y Aux SinA mul Y Aux Aux mul sub CosA mul add def + X abs 1e12 ge Y abs 1e10 ge or { exit }{ + newpath + X cm \psk@@dotsize sub Y cm \psk@@dotsize sub moveto + \psk@@dotsize 0 rlineto % bottom of square + 0 \psk@@dotsize rlineto % right side of square + -\psk@@dotsize 0 rlineto % top of square + closepath + fill + }ifelse + } repeat + end + } def + /Hsb 0 def + 0 2 TabPts length 2 sub { + /i exch def + % 0 setgray + %TabPts i get TabPts i 1 add get 2 copy + %exch 200 mul exch 200 mul 2 0 360 arc fill + pixelscolor {Hsb 1 1 sethsbcolor}{0 setgray}ifelse + TabPts i get TabPts i 1 add get + AttracteurHenon + /Hsb i TabPts length div def + } for + }% + \showpointsfalse + \end@SpecialObj + \ignorespaces} +% +\catcode`\@=\PstAtCode\relax +% +%% END: pst-fractal.tex +\endinput + |