在一个项目中,我需要使用相同的代码,注意在同一个文件中生成mandelbrot集和julia集,我有一个工作的mandelbrot集,但是可以看到如何使用相同的代码扩展到julia集。也许我不明白两者之间的区别?有人能详细说明吗?
import numpy as np
import matplotlib.pyplot as plt
import math
def Mandelbrot(zmin, zmax, m, n, tmax=256):
xs = np.linspace(zmin, zmax, n)
ys = np.linspace(zmin, zmax, m)
X, Y = np.meshgrid(xs, ys)
Z = X + 1j * Y
C = np.copy(Z)
M = np.ones(Z.shape) * tmax
for t in xrange(tmax):
mask = np.abs(Z) <= 2.
Z[ mask] = Z[mask]**2 + C[mask]
M[-mask] -= 1.
return M
list=Mandelbrot(-2,2,500,500)
plt.imshow(list.T, extent=[-2, 1, -1.5, 1.5])
plt.gray()
plt.savefig('mandelbrot.png')发布于 2015-05-01 09:06:38
Mandelbrot 集是茱莉亚集的一个特殊集合,一些文献指出,Mandelbrot集是所有Julia集的索引集(只有一个索引集--Mandelbrot--并且有无穷多个朱莉娅集)。
当您在Mandelbrot集上计算一个点并在z^2 + c上迭代时,这个c的值与您试图确定它是否是映射的一部分的值相同。如果转到下一个点(这就是计算过程中所做的),这个c就会改变。
换句话说,在进行迭代时,您有一个常数的值,但是每个不同的点都会发生变化。
计算朱莉娅集时,计算值为99.9%,但您必须使用c值,该值在整个计算期间是常数,而不仅仅是单个点。这就是为什么它不被命名为c以避免混淆,但通常是k。
如果我把你搞糊涂了,解决办法很简单。你必须改变这一点:
Z[ mask] = Z[mask]**2 + C[mask]对此:
Z[ mask] = Z[mask]**2 + (-0.8+0.156j)检查这里的同一组:rez.png
发布于 2015-05-01 08:59:35
在Mandelbrot分形中,z值在迭代开始时为0,在Julia分形中,它使用与屏幕坐标不同的值和一个固定的复数。
https://stackoverflow.com/questions/29948730
复制相似问题