%% %% 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}