在Matlab中给Mandelbrot集合着色

3
我写了一个程序来计算 Mandelbrot 集合中的点数。对于不属于Mandelbrot集的点,我记录起始点发散到模大于2需要多少次迭代。基本上,对于每个不在Mandelbrot集中的点,我都有一个1到256刻度下快速发散的计数器。我想做的是根据发散的速度给每个点赋予一种颜色。例如,255次发散的点可以是白色的,发散得越快,颜色就越深。我已经进行了简单的调整,发散超过20步的点会变成红色,10-19 步发散的是蓝色的,5-9 步发散的是黄色的,结果如下图所示。
图片链接:https://istack.dev59.com/u52oO.webp 现在我无法为所有可能的 255 种分歧率执行此操作。我该如何制作渐变刻度并在 Matlab 中实现它呢?谢谢您的帮助。如果有人想知道更多信息,请问。谢谢!
3个回答

7
在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


嘿,谢谢你的回答。我对Matlab中的图形编程还很陌生,如果你能称之为图形编程的话,但即使是最基本的东西对我来说也很麻烦。非常感谢! - Slugger

1

这个链接中没有图片,而且我不懂Matlab,但您是否可以按其发散性将每个点的颜色设置为函数?许多工具允许您指定RGB值,例如从0到255。您不能将发散性输入所有三个RGB值(或使用的任何颜色比例尺)以获取灰度吗?即RGB(20,20,20)。


是的,那就是我想做的,但我不确定该如何实现。上面的答案提供了一个好方法。还是谢谢你的回答! - Slugger

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接