Giter Club home page Giter Club logo

pyfracgen's Introduction

Authors

  • Ryther Anderson

Description

Python Fractal Generation is a package for making interesting/aesthetic fractal images quickly (for Python) and (hopefully) easily. Many unique fractal images can be generated using only a few functions.

Installation

pyfracgen can currently be installed from the following sources (if you want to install from GH, probably do so using poetry).

Git

git clone https://github.com/rytheranderson/pyfracgen.git
cd pyfracgen
poetry install

PyPI

pip install pyfracgen

Example Images

All the package functions can be accessed from a single import:

import pyfracgen as pf
from matplotlib import pyplot as plt
from matplotlib import colormaps

Mandelbrot Set

Image produced with this code:

# x and y bounds, x is the real part and y is the imaginary part
xbound = (
    0.3602404434376143632361252444495 - 0.00000000000003,
    0.3602404434376143632361252444495 + 0.00000000000025,
)
ybound = (
    -0.6413130610648031748603750151793 - 0.00000000000006,
    -0.6413130610648031748603750151793 + 0.00000000000013,
)
res = pf.mandelbrot(
    xbound, ybound, pf.funcs.power, width=4, height=3, dpi=300, maxiter=5000
)
stacked = pf.images.get_stacked_cmap(colormaps["gist_gray"], 50)
pf.images.image(res, cmap=stacked, gamma=0.8)
plt.savefig("example_images/mandelbrot_ex.png")

Julia Set Animation

Animation produced with this code:

import itertools as itt

reals = itt.chain(np.linspace(-1, 2, 60)[0:-1],  np.linspace(2, 3, 40))
series = pf.julia(
    (complex(real, 0.75) for real in reals),
    xbound=(-1, 1),
    ybound=(-0.75, 1.25),
    update_func=pf.funcs.magnetic_2,
    maxiter=300,
    width=5,
    height=4,
    dpi=200,
)
pf.images.save_animation(
    list(series),
    cmap=colormaps["ocean"],
    gamma=0.6,
    file=Path("example_images/julia_animation_ex"),
)

Markus-Lyapunov Fractal

Image produced with this code:

string = "AAAAAABBBBBB"
xbound = (2.5, 3.4)
ybound = (3.4, 4.0)
res = pf.lyapunov(
    string, xbound, ybound, width=4, height=3, dpi=300, ninit=2000, niter=2000
)
pf.images.markus_lyapunov_image(
    res, colormaps["bone"], colormaps["bone_r"], gammas=(8, 1)
)
plt.savefig("example_images/lyapunov_ex.png")

Random Walk

Image produced with this code:

moves = pf.construct_moves((1, 0), (0, 1))
res = pf.randomwalk(moves, niter=1000000, width=4, height=3, dpi=300)
pf.images.image(res, cmap=colormaps["gnuplot"], gamma=1.0)
plt.savefig("example_images/randomwalk_ex.png")

Buddhabrot with Nebula Coloring

Image produced with this code:

xbound = (-1.75, 0.85)
ybound = (-1.10, 1.10)
res = pf.buddhabrot(
    xbound,
    ybound,
    ncvals=10000000,
    update_func=pf.funcs.power,
    horizon=1.0e6,
    maxiters=(100, 1000, 10000),
    width=4,
    height=3,
    dpi=300,
)
pf.images.nebula_image(tuple(res), gamma=0.4)  # type: ignore[arg-type]
plt.savefig("example_images/buddhabrot_ex.png")

Fractal "Types" Supported

  • Mandelbrot
  • Julia
  • Buddhabrot
  • Markus-Lyapunov
  • 2D random walks

Image Creation

  • Function image wrapping matplotlib.pyplot.imshow
  • Function nebula_image for Buddhabrot "nebula" coloration
  • Function markus_lyapunov_image for Markus-Lyapunov coloration
  • Function save_animation for animating a sequence of results

More than Quadratic Polynomials

Mandelbrot, Julia, and Buddhabrot fractal images are almost always created by iterating the function $f_c(z) = z^2 + c$. Makes sense, since this function is part of the definition of the Mandelbrot set. However, you can iterate lots of other functions to produce similarly striking images: see the iterfuncs module of pyfracgen for a few examples.

pyfracgen's People

Contributors

dependabot[bot] avatar rytheranderson avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

lians-coder

pyfracgen's Issues

Installation via PyPi does not work

Hi, thanks creating this very interesting repository. I was about to try out the package however when I install it via PyPi i.e. pip install pyfracgen and I try to import it I get this error:

Python 3.8.10 (default, Jun  4 2021, 15:09:15) 
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyfracgen as pf
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/jfrtunikj/python/lib/python3.8/site-packages/pyfracgen/__init__.py", line 1, in <module>
    from .buddhabrot import buddhabrot, compute_cvals
  File "/home/jfrtunikj/python/lib/python3.8/site-packages/pyfracgen/buddhabrot.py", line 7, in <module>
    from pyfracgen.mandelbrot import _mandelbrot
  File "/home/jfrtunikj/python/lib/python3.8/site-packages/pyfracgen/mandelbrot.py", line 12, in <module>
    xbound: tuple[float, float],
TypeError: 'type' object is not subscriptable

I use Python 3.8.10. Could you please assist what I am doing wrong? Thx!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.