【问题标题】:How to get color gradient for Newton Method basin of attraction fractal如何获得吸引力分形牛顿法盆地的颜色梯度
【发布时间】:2019-03-12 14:03:09
【问题描述】:

我正在使用 MATLAB 在复平面中通过 NxN 网格,x 是实部,y 是虚部。对于该网格上的每个点,我将其用作牛顿法的起点。根据它收敛到哪个根,它被分配一个数字。这个数字与 pcolor 一起使用来绘制分形。

它绘制得很好,但是,我还想根据收敛到根的时间来绘制颜色暗度。我在使用 pcolor 时遇到问题。我能够获得 3 个根的 3 种颜色,但我不太确定如何添加更多颜色以使其更具描述性。

这是获取情节后的代码
xp - x 点数组
yp - y 点数组
col - 具有 1、2、3 的 NxN 矩阵(对应于哪个根)

% thresholds for color
caxis([1 3]); 

% sets colors Red, Green, Blue
mycolors = [1 0 0; 0 1 0; 0 0 1];
colormap(mycolors);

% real component on x and imaginary component on y
h=pcolor(xp, yp, col');
set(h, 'LineStyle', 'none' );

那么,我怎样才能在 pcolor 中有一个渐变,似乎 pcolor 只是自己计算出所有的颜色。而 caxis 只允许 2 种颜色的边界。

如果您想查看该程序的完整代码,请告诉我。 谢谢

【问题讨论】:

  • @AnderBiguri 我如何将 col 矩阵合并到 hsv 中。

标签: matlab matlab-figure fractals


【解决方案1】:

将达到收敛所需的迭代次数添加为颜色。定义 HSV 中的颜色,并将迭代次数映射到 HSV 的值 S。这将为您提供漂亮而有意义的颜色渐变,而不会真正改变颜色。

伪代码为:

为此,生成您的 3 种颜色 mycolors。将其颜色空间更改为mycolorshsv=rgb2hsv(mycolors);

您现在想要的是为每种颜色生成一堆(您选择的)颜色。

mycolorshsv=repelem(mycolorshsv,N,1);

现在让我们为每种颜色生成N 渐变。

mycolorshsv(    1:  N,2)=linspace(0,1,N);
mycolorshsv(  N+1:2*N,2)=linspace(0,1,N);
mycolorshsv(2*N+1:3*N,2)=linspace(0,1,N);

你想要例如您获得的最长迭代 maxiter 是最亮的。我们现在需要将您的col 矩阵从[1,2,3] 转换为我们当前的范围。为此,只需

col=(col-1)*N+1; % make 1=>1, 2=>N, 3=>2*N;
col=col+iteration_matrix; %max(iteration_matrix) must be maxiter. You may want to normalize so min(iteration_matrix) is 0

现在只需设置colormap(mycolors);,我会使用imagesc 而不是pcolor,但它不太重要。

使用颜色值的范围和限制以获得更好的地图。通常也使用非线性映射,其中函数f 应用于迭代值,例如sigmoid。

这是用于牛顿分形的技术,您可以在维基百科中找到,例如:

【讨论】:

    猜你喜欢
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 2019-03-23
    • 1970-01-01
    • 2020-05-04
    • 2012-08-17
    • 1970-01-01
    相关资源
    最近更新 更多