%%
%% Ein Beispiel der DANTE-Edition
%%
%%
%% Copyright (C) 2010 Herbert Voss
%%
%% It may be distributed and/or modified under the conditions
%% of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%%
%% See
http://www.latex-project.org/lppl.txt for details.
%%
%%
%% ====
% Show page(s) 1
%%
\documentclass[]{exaarticle}
\pagestyle{empty}
\setlength\textwidth{392.64803pt}
\StartShownPreambleCommands
\usepackage{pstricks,pst-xkey}
\SpecialCoor
\makeatletter
\pst@addfams{pst-chaos} % eine eigene Familie festlegen
\newdimen\psk@chaos@xWidth
\define@key[psset]{pst-chaos}{xWidth}{\pssetlength\psk@chaos@xWidth{#1}}
\newdimen\psk@chaos@yWidth
\define@key[psset]{pst-chaos}{yWidth}{\pssetlength\psk@chaos@yWidth{#1}}
\define@key[psset]{pst-chaos}{dColor}{\def\psk@dColor{#1 }}
\define@boolkey[psset]{pst-chaos}[Pst@]{Julia}[true]{}
\psset[pst-chaos]{xWidth=1cm,yWidth=1cm,dColor=1,Julia}
\define@key[psset]{pst-chaos}{plotpoints}{\pst@checknum{#1}\pst@chaos@plotpoints}
\psset[pst-chaos]{plotpoints=100}
\def\psSier{\pst@object{psSier}}
\def\psSier@i(#1)(#2)(#3){%
\pst@getcoor{#1}\pst@tempA
\pst@getcoor{#2}\pst@tempB
\pst@getcoor{#3}\pst@tempC
\begin@SpecialObj%
\addto@pscode{
/Koor [ \pst@tempA
\pst@tempB
\pst@tempC ] def
/Sx 0 def /Sy 0 def
/setzePixel { % x y auf dem Stack
0.5 0 360 arc stroke
} def
/neuePosition { % Punktnummer auf dem Stack
Koor 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 setzePixel
} def
/zeichneRahmen {
Koor aload pop
newpath
moveto
nKoor 1 sub { % nur noch n-1 mal
lineto
} repeat
gsave 0.9 setgray fill grestore
\pst@usecolor\pslinecolor
closepath
stroke
% 0 setgray
} def
/nKoor Koor length 2 div 0.5 add cvi def % Anzahl Punkte
zeichneRahmen
\pst@chaos@plotpoints\space cvi {
rand nKoor mod
dup add neuePosition
} repeat
}% end add@pscode
\end@SpecialObj%
}
\def\pschaos{\pst@object{pschaos}}
\def\pschaos@i{\@ifnextchar({\pschaos@ii}{\pschaos@ii(-1,-1)}}%
\def\pschaos@ii(#1,#2){\@ifnextchar({\pschaos@iii(#1,#2)}{\pschaos@ii(#1,#2)(1,1)}}%
\def\pschaos@iii(#1,#2)(#3,#4){%
\begin@SpecialObj%
\pspicture(\psk@chaos@xWidth,\psk@chaos@yWidth)%
\addto@pscode{
/MinX #1 def
/MaxX #3 def
/MinY #2 def
/MaxY #4 def
/MaxXPixel \pst@number\psk@chaos@xWidth def
/MaxYPixel \pst@number\psk@chaos@yWidth def
/PixelDicke 0.5 def
/maxIter 100 def
/maxR 100 def
%
/dx MaxX MinX sub MaxXPixel div def
/dy MaxY MinY sub MaxYPixel div def
%
/convertX {% erwartet x-Wert auf dem Stack
MaxX sub dx div % Umrechnung in Pixel
} def
/convertY {% erwartet x-Wert auf dem Stack
MinY sub dy div % Umrechnung in Pixel
} def
/convertXY {% erwartet x y auf dem Stack
convertY exch convertX exch
} def
%
/setzePixel {% x y auf dem Stack in Benutzerkoordinaten
convertXY
PixelDicke 0 360 arc fill
} def
MinX dx MaxX {
/x exch def
MinY dy MaxY {
/y exch def
/iter 0 def
\ifPst@Julia
/cx 0 def
/cy 0 def
/zx x def
/zy y def
\else
/cx x def
/cy y def
/zx 0 def
/zy 0 def
\fi
/plot true def
maxIter {
zx dup mul zy dup mul add maxR 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 \psk@dColor add def
} ifelse
} repeat
plot{
0 0 0 setrgbcolor
x y setzePixel
}{
1 iter sub 0 1 setrgbcolor
iter 1 ge {0 iter 1 sub 2 iter sub setrgbcolor} if
iter 2 ge {iter 2 sub 1 0 setrgbcolor} if
iter 3 ge {1 4 iter sub .35 mul .65 add 0 setrgbcolor} if
iter 4 ge {1 5 iter sub .65 mul 0 setrgbcolor} if
x y setzePixel stroke
}ifelse % Plot point if point is in set
} for
} for
}% end add@pscode
\endpspicture% end box
\end@SpecialObj%
}
\makeatother
\StopShownPreambleCommands
\begin{document}
\begin{center}
\begin{minipage}{0.45\textwidth}\centering
Eine Mandelbrotmenge: \\[10pt]
\begin{pspicture}(6,6)
\pschaos[xWidth=6cm,yWidth=6cm,dColor=1,Julia=false](-2,-1.25)(0.5,1.25)
\end{pspicture}
\end{minipage}~
\begin{minipage}{0.45\textwidth}\centering
Ein Sierpinskidreieck: \\[10pt]
\begin{pspicture}(6,6)
\psSier[plotpoints=5000](0,0)(2,6)(6,0)
\end{pspicture}
\end{minipage}
\bigskip
Eine Juliamenge:\\[10pt]
\pschaos[xWidth=5cm,yWidth=5cm,dColor=0.5](-1.5,-1.5)(1.5,1.5)
\end{center}
\end{document}