2015-06-01 5 views
0

Я хотел бы построить трехмерную поверхность, используя функцию Matlab surf. Вся поверхность должна быть в сером цвете, тогда мне нужно выделить конкретный разрез поверхности, используя другой цвет.Поверхностный участок с высоким вырезом резки

Я думал, что этот код работал бы, но это не так.

Mat = randi(100);  % Matrix to be plotted in gray scale 

    ind_highlight = 10; % Row of the matrix to be highlighted 
    Mat2 = Mat; 
    Mat2([1:ind_highlight-1, ind_highlight+1:end] ,:) = NaN; 


    figure 
    surf(X,Y,Mat) 
    colormap gray 
    hold on 

    % Highlight the ind_highlight row 
    surf(X,Y,Mat2) 
    colormap hsv 

Любая помощь была бы высоко оценена!

+0

вещь с использованием «удержания» для сюжета для серфинга заключается в том, что перекрытие не выполняется по слою (как вы могли себе представить), что часто приводит к плохим результатам. Я думаю, что лучший способ - на самом деле сделать пост-обработку, сгенерировать график и перейти к чему-то вроде Photoshop, чтобы сделать замену цвета. – GameOfThrows

ответ

1

Кажется, что нет никакого способа использовать разные colormap, чтобы получить желаемый эффект, поскольку цветовая палитра «принадлежит» к figure.

Я нашел возможное решение, которое не использует colormap.

Он основан на задании цветовой матрицы при вызове surf, один для всей матрицы, один для выделенного раздела, затем наложение второго на первый.

К сожалению, я не смог установить первое объявление серого цвета.

Я использовал peaks матрицу вместо вашей «randi» для того, чтобы иметь более гладкую поверхность, чтобы работать и вставить скрипт в for loop, чтобы выделить различные части матрицы

% Mat = randi(100,100,100);  % Matrix to be plotted in gray scale 
% Alternative definition of the Matrix to be displayed 
n_pt=50; 
Mat=peaks(n_pt); 
% Generate meshgrid 
x=1:n_pt; 
y=1:n_pt; 
[X,Y]=meshgrid(x,y); 
ind_highlight_2 = 5; % Number of rows of the matrix to be highlighted 
% Generate two set of color matrix 
% The first on for the whole surf 
% The second one for the section to be highlighted 
a=randi(2,n_pt,n_pt); 
b=randi(10,n_pt,n_pt); 

for i=1:n_pt-ind_highlight_2 
    ind_highlight_1 = i; % Starting row of the matrix to be highlighted 
    Mat2 = Mat; 
    % Modified set of data (in the original just one row was left 
    % Mat2([1:ind_highlight-1, ind_highlight+1:end] ,:) = NaN 
    Mat2(ind_highlight_1:ind_highlight_1+ind_highlight_2,:) = NaN; 
    COL=a; 
    COL(ind_highlight_1:ind_highlight_1+ind_highlight_2,:)=b(ind_highlight_1:ind_highlight_1+ind_highlight_2,:); 
    % Plot the surf specifying the color 
    s_h=surf(X,Y,Mat,COL); 
    shading interp 
% view([0 90]) 
% f_name=['jpg_name_' num2str(i)] 
% print('-djpeg75',f_name) 
    pause(.1); 
end 

enter image description here

Надеюсь, это поможет.

Смежные вопросы