我使用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种颜色的边界。
如果您想查看此计划的完整代码,请与我们联系。谢谢
添加聚合作为颜色所需的迭代次数。在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。
这是您可以在维基百科中找到的牛顿分形的技术,例如: