2

我编写了一个程序来计算 mandelbrot 集中的点。对于不属于 mandelbrot 集的点,我会跟踪起始点需要多少次迭代才能发散到幅度大于 2 的位置。基本上对于不在 mandelbrot 集中的每个点,我都有一个计数器它的速度有多快在 1 到 256 的范围内发散。id 喜欢做的是根据每个点发散的速度给每个点一个颜色。例如,在 255 次迭代中发散的点可能是白色的,发散得越快,颜色就越多。我做了一个简单的调整,将超过 20 步的发散点涂成红色,以 10-19 步发散的发散点为蓝色,以 5-9 步发散的发散点为黄色,看起来像这样。

在此处输入图像描述

现在我不能对所有可能的 255 发散率都这样做。如何制作毕业规模并在 Matlab 中实现。提前感谢您的帮助。如果有人想知道更多,请询问。谢谢!

编辑我很抱歉,但图像似乎不起作用。基本上我需要它这个。我正在绘制点,为每个点分配一个 1 到 255 之间的值,我希望颜色根据分配给它的值逐渐变化。谢谢!

4

3 回答 3

6

A simple approach to plotting the mandelbrot set in Matlab is as follows

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

This just keeps track of the number of iterations until divergence in the array k, and plots it using a linear color scale by using imagesc. The result is

>> mandelbrot(800, 40)

enter image description here

于 2013-12-30T17:49:00.790 回答
1

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

于 2013-12-30T17:47:10.743 回答
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
于 2019-12-08T04:47:51.600 回答