Welcome, guest | Sign In | My Account | Store | Cart

Draws a random 2D slice from 4D Mandelbrot fractal.

Python, 77 lines
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77``` ```# Random 2D Slice Of 4D Mandelbrot Fractal # FB - 20120707 import math import random from PIL import Image imgx = 512 imgy = 512 image = Image.new("RGB", (imgx, imgy)) pixels = image.load() # drawing area (xa < xb & ya < yb) xa = -2.0 xb = 2.0 ya = -2.0 yb = 2.0 maxIt = 256 # max number of iterations allowed # random rotation angles to convert 2d plane to 4d plane xy = random.random() * 2.0 * math.pi xz = random.random() * 2.0 * math.pi xw = random.random() * 2.0 * math.pi yz = random.random() * 2.0 * math.pi yw = random.random() * 2.0 * math.pi zw = random.random() * 2.0 * math.pi sxy = math.sin(xy) cxy = math.cos(xy) sxz = math.sin(xz) cxz = math.cos(xz) sxw = math.sin(xw) cxw = math.cos(xw) syz = math.sin(yz) cyz = math.cos(yz) syw = math.sin(yw) cyw = math.cos(yw) szw = math.sin(zw) czw = math.cos(zw) origx = (xa + xb) / 2.0 origy = (ya + yb) / 2.0 for ky in range(imgy): b = ky * (yb - ya) / (imgy - 1) + ya for kx in range(imgx): a = kx * (xb - xa) / (imgx - 1) + xa x = a y = b z = 0 # c = 0 w = 0 # d = 0 # 4d rotation around center of the plane x = x - origx y = y - origy x0=x*cxy-y*sxy;y=x*sxy+y*cxy;x=x0 # xy-plane rotation x0=x*cxz-z*sxz;z=x*sxz+z*cxz;x=x0 # xz-plane rotation x0=x*cxw-z*sxw;w=x*sxw+z*cxw;x=x0 # xw-plane rotation y0=y*cyz-z*syz;z=y*syz+z*cyz;y=y0 # yz-plane rotation y0=y*cyw-w*syw;w=y*syw+w*cyw;y=y0 # yw-plane rotation z0=z*czw-w*szw;w=z*szw+w*czw;z=z0 # zw-plane rotation x = x + origx y = y + origy cx = x cy = y cz = z cw = w for i in range(maxIt): # iteration using quaternion numbers x0 = x * x - y * y - z * z - w * w + cx y = 2.0 * x * y + cy z = 2.0 * x * z + cz w = 2.0 * x * w + cw x = x0 # iteration using hyper-complex numbers # x0 = x * x - y * y - z * z - w * w + cx # y0 = 2.0 * x * y - 2.0 * z * w + cy # z0 = 2.0 * x * z - 2.0 * y * w + cz # w = 2.0 * x * w + 2.0 * z * y + cw # x = x0 # y = y0 # z = z0 if x * x + y * y + z * z + w * w > 4.0: break pixels[kx, ky] = (i % 4 * 64, i % 8 * 32, i % 16 * 16) image.save("4D_Mandelbrot_Fractal.png", "PNG") ```

1 comment

FB36 (author) 12 years, 11 months ago

Mandelbrot fractal can easily be calculated in 8D (using Octonions) and 16D (using Sedenions) also but there is not much point to it unless you own a super-computer. :-)

 Created by FB36 on Sun, 22 May 2011 (MIT)