Добавьте количество итераций, необходимое для достижения конвергенции, в качестве цвета.Определите цвета в HSV и установите число итераций в соответствии со значением S HSV.Это даст вам хороший и значимый градиент цвета без реального изменения цвета.
Псевдокод:
Для этого сгенерируйте 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
, но это менее важно.
Играть с диапазоном,и пределы значений colro для более хороших карт.Часто также используются нелинейные карты, где функция f
применяется к значениям итерации, таким как сигмоида.
Это техника, используемая для фракталов Ньютона, которую вы можете найти в Википедии, например: