扩展mandelbrot生成朱莉娅

时间:2015-04-29 15:51:38

标签: fractals mandelbrot

处理一个项目,要求我使用相同的代码,注意在同一个文件中生成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')

2 个答案:

答案 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分形中,它使用与屏幕坐标不同的值和固定的复数。