Date Редакция Категория sci Теги matlab

Многоцветная линия, т.е. линия, составленная из отрезков, окрашенных в разные цвета, может оказаться полезна, когда нужно отобразить некий параметр, значения которого распределены по линии. Например, линия может представлять собой нагретую проволоку, а ее цвет — температуру проволоки. Если бы температура была задана в отдельных точках, то можно было бы отметить эти точки маркерами разных цветов. Но температура — параметр распределенный (поле). Как быть в этом случае?

Приведенная ниже функция строит кривую x=x(t), y=y(t), z=z(t), для заданных векторов координат x,y,z, и окрашивает каждый ее отрезок в цвета, заданные вектором c (число элементов с должно совпадать с таковым у x,y,z).

function multicolor_line( x,y,z,c,cmap )
%MULTICOLOR_LINE Строит в пространстве кривую X(t),Y(T),Z(t), 
%                каждый отрезок которой окрашен в цвет из палитры CMAP 
%                и соответствует значению, заданному вектором C.

  n = numel(x);

  if nargin < 5
    cmap = jet;
  end

  % Масштабируем значения, которые хотим представить в виде цвета линии.
  cn = (c - min(c)) / (max(c) - min(c));
  % Вычисляем номер цвета в палитре (индекса массива), соответствующий
  % значению cn.
  cn = ceil(cn * size(cmap,1)); 
  % Проверяем, чтобы среди индексов массива цветов (палитры) 
  % не оказалось меньших 1.
  cn = max(cn, 1);

  for i=1:n-1
      % Рисуем линию нужного цвета между двумя соседними точками.
      line(x(i:i+1),y(i:i+1),z(i:i+1), ...
                'color',cmap(cn(i),:), ...
                'linewidth',2);
  end

end

Пример использования:

N = 20;

x = 1:N;
y = 1:N;
z = 1:N;
color = 1:N;  % цвет отрезка линии

multicolor_line( x,y,z,color );

colorbar;
caxis([1 N]); % иначе отображаться будут не реальные значения color, 
              % а индексы цветов
grid on

mcline.png



Комментарии

comments powered by Disqus