是否有可能改變Mandelbrot集的式(其爲f(z)的= Z^2 + c。通過默認)爲不同的一種(F(Z)= Z^2 + C * E ^( - z)是我需要)時使用逃生時間算法,如果可能的話怎麼樣? 我目前使用此代碼由FB36多線程Mandelbrot集
# Multi-threaded Mandelbrot Fractal (Do not run using IDLE!)
# FB - 201104306
import threading
from PIL import Image
w = 512 # image width
h = 512 # image height
image = Image.new("RGB", (w, h))
wh = w * h
maxIt = 256 # max number of iterations allowed
# drawing region (xa < xb & ya < yb)
xa = -2.0
xb = 1.0
ya = -1.5
yb = 1.5
xd = xb - xa
yd = yb - ya
numThr = 5 # number of threads to run
# lock = threading.Lock()
class ManFrThread(threading.Thread):
def __init__ (self, k):
self.k = k
threading.Thread.__init__(self)
def run(self):
# each thread only calculates its own share of pixels
for i in range(k, wh, numThr):
kx = i % w
ky = int(i/w)
a = xa + xd * kx/(w - 1.0)
b = ya + yd * ky/(h - 1.0)
x = a
y = b
for kc in range(maxIt):
x0 = x * x - y * y + a
y = 2.0 * x * y + b
x = x0
if x * x + y * y > 4:
# various color palettes can be created here
red = (kc % 8) * 32
green = (16 - kc % 16) * 16
blue = (kc % 16) * 16
# lock.acquire()
global image
image.putpixel((kx, ky), (red, green, blue))
# lock.release()
break
if __name__ == "__main__":
tArr = []
for k in range(numThr): # create all threads
tArr.append(ManFrThread(k))
for k in range(numThr): # start all threads
tArr[k].start()
for k in range(numThr): # wait until all threads finished
tArr[k].join()
image.save("MandelbrotFractal.png", "PNG")
這絕對是可能的,但公式會變得更加複雜。 (x'= x * x-y * y + exp(-x)*(a * cos(y)+ b * sin(y))'和'y = 2.0 * x * y + exp(-x) *(b *的COS(Y) - A *罪(Y))' 從我的頭頂,我不能回答是否逃逸啓發式(| Z | 2> 4)在這裏仍然有效,但它可能是可以找到類似的一個。 –
所以這是我用你的公式,如果你想知道 https://www.dropbox.com/s/qtbh7bobrt9nhql/fractal.PNG?dl=0 – Leizer