在Matlab中着色Mandelbrot集

时间:2013-12-30 17:35:34

标签: matlab mandelbrot

我制作了一个程序来计算mandelbrot集中的点。对于不属于mandelbrot集的点,我会跟踪起始点发散多少次迭代到幅度大于2的位置。基本上对于不在mandelbrot集中的每个点,我都有一个计数器,它的速度有多快在1到256的范围内发散。想要做的就是根据它的发散速度给每个点一个颜色。例如,在255次迭代中发散的点可以是白色,并且它发散的越快,它被着色的越多。我已经做了一个简单的调整,其中分歧超过20步的发散点被涂成红色,10-19步中发散的那些是蓝色的,而在5-9步中发散的是黄色的,它看起来像这样。 / p>

enter image description here

现在我无法对所有可能的255种分歧进行此操作。如何制作一个毕业比例并在Matlab中实现它。在此先感谢您的帮助。如果有人想知道更多,请询问。谢谢!

编辑我很抱歉,但图片似乎无效。基本上我需要它。我正在绘制点,每个点分配1到255之间的值,我希望颜色根据分配给它的值逐渐改变。谢谢!

3 个答案:

答案 0 :(得分:5)

在Matlab中绘制mandelbrot集的简单方法如下

function mandelbrot(n, niter)

x0 = -2;   x1 = 1;
y0 = -1.5; y1 = 1.5;

[x,y] = meshgrid(linspace(x0, x1, n), linspace(y0, y1, n));

c = x + 1i * y;
z = zeros(size(c));
k = zeros(size(c));

for ii = 1:niter
    z   = z.^2 + c;
    k(abs(z) > 2 & k == 0) = niter - ii;
end

figure,
imagesc(k),
colormap hot
axis square

这只是跟踪数组k中的发散之前的迭代次数,并使用imagesc使用线性色标来绘制它。结果是

>> mandelbrot(800, 40)

enter image description here

答案 1 :(得分:1)

图像不在链接中,我不知道Matlab,但是你不能让每个点的颜色成为它的发散函数吗?许多工具允许您指定RGB值,例如0-255。您是否可以输入所有三个RGB值(或您使用的任何颜色标度)的偏差来获得灰色阴影?即RGB(20,20,20)

答案 2 :(得分:0)

我对代码进行了一些改进,现在将在给定(x,y)的特定起点和起始位置的情况下运行。对于那些希望进一步放大的人。

function mandelbrot(n, n2, x0, y0, g)

x1 = x0 - g;   x2 = x0 + g;
y1 = y0 - g; y2 = y0 + g;

[x,y] = meshgrid(linspace(x1, x2, n), linspace(y1, y2, n));

c = x + 1i * y;
z = zeros(size(c));
k = zeros(size(c));

for ii = 1:n2
    z   = z.^2 + c;
    k(abs(z) > 2 & k == 0) = n2 - ii;
end

figure,
imagesc(k),
colormap hot
axis square
end