Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

23 Mär '14, 22:30

stefan's gravatar image

stefan
18.4k163148

Fraktale mit pgfplots

Nach dem Start von [PGFplots.net][1] experimentierte ich ein bisschen mehr mit pgfplots. Dabei fragte ich mich, wie ich das bei jeder Grafiksoftware tue, wie sich damit Fraktale darstellen lassen und ob es dabei evtl. nützliche oder interessante Aspekte gibt. Geschwindigkeit und Speicherplatz sind hier nebensächlich, Kapazitäten ändern sich eh mit der Zeit. Mich interessiert beispielsweise - ob ich iterativ definierte Funktionen übergeben und plotten kann - ob sich Farbräume (colormaps) nutzen lassen, wie für die Iterationszahl - sind geometrische Transformationen gut einsetzbar, wie bei iterierten Funktionssystemen (IFS, wie Barnsley Farn) - geht es auch dreidimensional Es sind viele Fragen - wenn es sich ergibt, teilen wir das gern auf (kommentiert gern hierzu), jede interessante Antwort mit Beispiel ist willkommen. Hier habe ich ein Beispiel gemacht, inspiriert von [Herberts][2] Darstellung einer [Weierstraß-Funktion][3]. Die mit Lua errechneten Werte werden in einer Tabelle gespeichert (hier 0,6 MB groß), die dann mit geringem Aufwand geplottet wird. Kann pgfplots hier mehr übernehmen, während der Berechnung, so dass ich keine externen Tabelle brauche? Kann man Farbigkeit einbringen, wie in den bekannten bunten Mandelbrot-Bildern? \documentclass[border=10pt]{standalone} \usepackage{pgfplots} \pgfplotsset{width=7cm,compat=1.8} \usepackage{luacode} \begin{luacode} function mandelbrot(x0, x1, y0, y1, steps, max_iter, max) local dx = (x1-x0)/steps local dy = (y1-y0)/steps local cx = x0 local out=assert(io.open("tmp.data","w")) local x,y,cy,xtemp,ytemp,squaresum,iter while (cx <= x1) do cy = y0 while (cy <= y1) do squaresum = 0 x = 0 y = 0 iter = 0 while (squaresum <= max) and (iter < max_iter) do xtemp = x * x - y * y + cx ytemp = 2 * x * y + cy x = xtemp y = ytemp iter = iter + 1 squaresum = x * x + y * y end if (iter >= max_iter) then out:write(cx, " ", cy, " ", "\string\n") end cy = cy + dy end cx = cx + dx end out:close() end \end{luacode} \begin{document} \begin{tikzpicture} \directlua{mandelbrot(-2,1,-2,2,500,10000,9999)} \directlua{mandelbrot(-2,1,-2,2,500,1000,4)} \begin{axis}[domain=-2:2,tick label style={font=\tiny},] \addplot [only marks, mark=*, mark size=0.06pt] table {tmp.data}; \end{axis} \end{tikzpicture} \end{document} ![Mandelbrot-Menge][4] [1]: http://pgfplots.net [2]: http://texwelt.de/wissen/benutzer/15/herbert [3]: http://pgfplots.net/tikz/examples/weierstrass-function/ [4]: http://texwelt.de/wissen/upfiles/mandelbrot-menge.pnghttp://texwelt.de/wissen/upfiles/mandelbrot-menge.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 2
minimal, Speichergröße aktualisiert

23 Mär '14, 22:20

stefan's gravatar image

stefan
18.4k163148

Fraktale mit pgfplots

Nach dem Start von [PGFplots.net][1] experimentierte ich ein bisschen mehr mit pgfplots. Dabei fragte ich mich, wie ich das bei jeder Grafiksoftware tue, wie sich damit Fraktale darstellen lassen und ob es dabei evtl. nützliche oder interessante Aspekte gibt. Geschwindigkeit und Speicherplatz sind hier nebensächlich, Kapazitäten ändern sich eh mit der Zeit. Mich interessiert beispielsweise - ob ich iterativ definierte Funktionen übergeben und plotten kann - ob sich Farbräume (colormaps) nutzen lassen, wie für die Iterationszahl - sind geometrische Transformationen gut einsetzbar, wie bei iterierten Funktionssystemen (IFS, wie Barnsley Farn) - geht es auch dreidimensional Es sind viele Fragen - wenn es sich ergibt, teilen wir das gern auf (kommentiert gern hierzu), jede interessante Antwort mit Beispiel ist willkommen. Hier habe ich ein Beispiel gemacht, inspiriert von [Herberts][2] Darstellung einer [Weierstraß-Funktion][3]. Die mit Lua errechneten Werte werden in einer Tabelle gespeichert (hier 0,8 0,6 MB groß), die dann mit geringem Aufwand geplottet wird. Kann pgfplots hier mehr übernehmen, während der Berechnung, so dass ich keine externen Tabelle brauche? Kann man Farbigkeit einbringen, wie in den bekannten bunten Mandelbrot-Bildern? \documentclass[border=10pt]{standalone} \usepackage{pgfplots} \pgfplotsset{width=7cm,compat=1.8} \usepackage{luacode} \begin{luacode} function mandelbrot(x0, x1, y0, y1, steps, max_iter, max) local dx = (x1-x0)/steps local dy = (y1-y0)/steps local cx = x0 local out=assert(io.open("tmp.data","w")) local x,y,cy,xtemp,ytemp,squaresum,iter while (cx <= x1) do cy = y0 while (cy <= y1) do squaresum = 0 x = 0 y = 0 iter = 0 while (squaresum <= max) and (iter < max_iter) do xtemp = x * x - y * y + cx ytemp = 2 * x * y + cy x = xtemp y = ytemp iter = iter + 1 squaresum = x * x + y * y end if (iter >= max_iter) then out:write(cx, " ", cy, " ", "\string\n") end cy = cy + dy end cx = cx + dx end out:close() end \end{luacode} \begin{document} \begin{tikzpicture} \directlua{mandelbrot(-2,1,-2,2,500,10000,9999)} \begin{axis}[domain=-2:2,tick label style={font=\tiny},] \addplot [only marks, mark=*, mark size=0.06pt] table {tmp.data}; \end{axis} \end{tikzpicture} \end{document} ![Mandelbrot-Menge][4] [1]: http://pgfplots.net [2]: http://texwelt.de/wissen/benutzer/15/herbert [3]: http://pgfplots.net/tikz/examples/weierstrass-function/ [4]: http://texwelt.de/wissen/upfiles/mandelbrot-menge.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

23 Mär '14, 22:18

stefan's gravatar image

stefan
18.4k163148