Многоцветная линия, т.е. линия, составленная из отрезков, окрашенных в разные цвета, может оказаться полезна, когда нужно отобразить некий параметр, значения которого распределены по линии. Например, линия может представлять собой нагретую проволоку, а ее цвет — температуру проволоки. Если бы температура была задана в отдельных точках, то можно было бы отметить эти точки маркерами разных цветов. Но температура — параметр распределенный (поле). Как быть в этом случае?
Приведенная ниже функция строит кривую 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
Комментарии
comments powered by Disqus