扩展 mandelbrot 以生成 julia

extending mandelbrot to generate julia

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

在 Mandelbrot 分形中,z 值在迭代开始时为 0,而在 Julia 分形中,它使用与屏幕坐标不同的值和一个固定的复数。

Mandelbrot 集是 Julia 集方面的一个特殊集,一些文档写道 Mandelbrot 集是所有 Julia 集的索引集(只有一个索引集 - Mandelbrot - 还有无数个 Julia 集。)

当您计算 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