Article 6ZFG2 A recipe for creating random fractals

A recipe for creating random fractals

by
John
from John D. Cook on (#6ZFG2)

Last week I gave an example of a randomly generated fractal and mentioned that it was a particularly special case of a more general algorithm for generating similar fractals found in [1]."

Here's the general pattern. First, create a non-singular matrixM with integer entries and let k be the determinant ofM.

LetP be the parallelogram spanned by the columns ofM. Choose a set of column vectors ri for i = 1, 2, 3, ..., k from the two columns ofM and from the interior ofP.

Pick a random starting vectorv then iterate

v =M-1v +ri

wherei is chosen at random on each iterations.

Here's an example suggested as an exercise in [2]. We start with

koss.svg

and look at the parallelogram spanned by the columns of M.

koss3.png

NB: The initial version of this post had an error in the grid, which led to an error in the code, and produced a different fractal.

Then the algorithm described above is implemented in the following Python code.

import numpy as npimport matplotlib.pyplot as pltA = np.linalg.inv(np.array([[2, -1], [1, 2]]))R = np.array([[2, -1, 0, 1, 1], [1, 2, 2, 2, 1]])v = np.random.random(size=2)for _ in range(100000): i = np.random.choice([0, 1, 2, 3, 4]) v = np.dot(A, v) + R[:, i] plt.plot(v[0], v[1], 'bo', markersize=1)plt.gca().set_aspect("equal")plt.show()

This produces the following fractal.

koss4.png

[1] Darst, Palagallo, and Price. Fractal Tilings in the Plane. Mathematics Magazine [71]:1, 1998.

[2] Lorelei Koss, Fractal Rep-tiles and Geometric Series. Math Horizons. Vol 30, Issue 1, September 2022.

The post A recipe for creating random fractals first appeared on John D. Cook.
External Content
Source RSS or Atom Feed
Feed Location http://feeds.feedburner.com/TheEndeavour?format=xml
Feed Title John D. Cook
Feed Link https://www.johndcook.com/blog
Reply 0 comments