Fractal Related Discussion > Fractal Mathematics And New Theories

Mandelbrot 2D projection using geometric algebra

**youhn**:

Been playing around with the mandelbrot formula, trying to work it out in geometric algebra:

\( x \rightarrow x^2 + c_0 \)

\( x_0 = 0 \)

\( c = a + be_{12} + ce_{23} + de_{31} \)

The \( e_{12} \) is short for \( e_1e_2 \), which in the context of geometric algebra (clifford algebra) is the bivector formed by vectors \( e_1 \) and \( e_2 \). This should be (about?) the same as quaternions, but somewhat less complex. Based on the specific algebra rules, I think this works out to the following iteration calculation step:

\( a = a^2 - b^2 - c^2 - d^2 + a_0 \)

\( b = 2\left(ab - cd\right) +b_0 \)

\( c = 2\left(ac + bd\right) +c_0 \)

\( d = 2\left(ad - bc\right) +d_0 \)

Based a simple python code from https://rosettacode.org/wiki/Mandelbrot_set this seems to work, as it results in a nice mandelbrot set if plotted on (a, b) or even (a, c) or (a, d).

The planes (b, c), (c, d) and (b, d) result in other shapes. In order:

Some questions I have due to my lack of math and programming skills:

Does this indeed give the same results as quaternions?

How this this look in 3D?

Some wobbly variation of parameters:

https://imgur.com/a/K0vrMcK

Python code:

--- Code: ---import matplotlib.pyplot as plt

import math

def linspace(start, stop, num):

return [start + (stop - start) / (num - 1) * k for k in range(num)]

def zeros(rows, cols):

return [[0 for j in range(cols)] for i in range(rows)]

d, n = 150, 120 # pixel density & number of iterations

r = 1 * 2 ** 2 # escape radius (must be greater than 2**2)

x = linspace(-2.2, 1.0, 4 * d + 1)

y = linspace(-1.2, 1.2, 3 * d + 1)

T = zeros(len(y), len(x))

var = linspace(0.0, 1*3.14159, 40) # parameter variation and no. of frames

# time loop

for m, varc in enumerate(var):

# C in geometric algebra [scalar, e12, e23, e31]

a0 = 0.0

b0 = 0.0

c0 = 0.0

d0 = 0.0

b0 = 0.45*math.sin(varc)

c0 = 0.45*math.sin(varc*2)

# vector factor (should be 2 for the standard mandelbrot)

f = 2

# image loop

for i, d0 in enumerate(y):

for j, a0 in enumerate(x):

a = 0.0

b = 0.0

c = 0.0

d = 0.0

# iteration loop to check for escape or bound

for k in range(n):

aa = a ** 2

bb = b ** 2

cc = c ** 2

dd = d ** 2

if aa + bb + cc + dd > r:

break

# set temp variables to prevent calcuation errors

ax = a

bx = b

cx = c

dx = d

a = aa - bb - cc - dd + a0

b = f * (ax*bx - cx*dx) + b0

c = f * (ax*cx + bx*dx) + c0

d = f * (ax*dx - bx*cx) + d0

T[i][j] = k + 1

filename = "mbga" + str(m).zfill(2) + ".png"

print(filename)

plt.imshow(T, cmap=plt.cm.twilight_shifted)

plt.axis('off')

plt.savefig(filename, dpi=230, bbox_inches="tight", pad_inches=0)

--- End code ---

Linkback: https://fractalforums.org/index.php?topic=3987.0

**youhn**:

Some first results for a julia set.

Still have some doubts if this is new, perhaps I posted in the wrong forum place. :confused:

//www.youtube.com/watch?v=CP3xWFBfX1g

**eiffie**:

https://nylander.wordpress.com/category/fractals/hypercomplex/

This is a hypercomplex brot. There are a few formulas pictured here. Not exactly the same as yours but with a similar 3d look. A quaternion brot is just a Mandelbrot rotated around the x-axis.

**youhn**:

Thanks for the link, very similar formulas indeed.

I've managed to add the formula to a local copy of Mandelbulber 2. Here are some renders:

**youhn**:

and some more:

Navigation

[0] Message Index

[#] Next page

Go to full version