处理一个项目,要求我使用相同的代码,注意在同一个文件中生成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')
答案 0 :(得分:2)
Mandelbrot 集是Julia集的特殊集合,有些文档写道Mandelbrot集是所有Julia集的索引集(只有一个索引集 - Mandelbrot - 并且有无限数量的朱莉娅集。)
当您在Mandelbrot集合上计算一个点并迭代z^2 + c
时,此c
取与您尝试确定它是否是地图一部分的点相同的值。如果你进入下一个点(这就是你在计算中的表现),这个c
会改变。
换句话说,当你完成迭代时,你有一个常量的值,但是每个不同的点都会改变。
计算Julia集时,计算结果为99.9%,除非您必须在整个计算期间使用一个恒定的c
值,而不仅仅是单个点。这就是为什么它没有被命名为c
以避免混淆,但通常是k
。
现在如果我把你弄糊涂了,解决方案就变得简单了。你必须改变这个:
Z[ mask] = Z[mask]**2 + C[mask]
到此:
Z[ mask] = Z[mask]**2 + (-0.8+0.156j)
在此处检查相同的设置:http://en.wikipedia.org/wiki/File:Julia_set_camp4_hi_rez.png
答案 1 :(得分:0)
在Mandelbrot分形中,z值在迭代开始时为0,在Julia分形中,它使用与屏幕坐标不同的值和固定的复数。