#matlab #graphics #3d #matlab-figure
#matlab #графика #3D #matlab-рисунок
Вопрос:
Я хочу построить функцию в Matlab, но с другим цветом сверху и снизу поверхности. Мой код:
close all;
clear all;
[X, Y] = meshgrid(-10:.45:10,-10:.45:10)
x=X(1,:)'; %'
y=Y(:,1);
N=length(x(:,1))
f = -1.*ones(size(X));
for i = 1:N
for j=1:N
if (x(i)~=0 amp;amp; y(j)~=0)
f(i,j) = (x(i).^2- y(j).^2)./(x(i).^2 y(j).^2);
end
end
end
figure(1)
surf(X,Y,f, 'FaceColor','white','EdgeColor','blue', 'LineWidth',.5)
view(-61,41)
title('Funktion f(x,y)', 'FontSize',12)
xlabel('x','FontSize',12)
ylabel('y', 'FontSize',12)
grid off
Этот пример иллюстрирует, чего я добиваюсь, с точки зрения разного цвета верха / низа (однако, это было сделано с помощью gnuplot):
Ответ №1:
Следующее не совсем то, что вы хотите, но это может помочь:
h = surf(X,Y,f, 'FaceColor','blue','EdgeColor','none'); %// no edges
lightangle(-30, 80) %// change values as needed
set(h,'DiffuseStrength',.9) %// change value as needed
set(h,'AmbientStrength',.3) %// change value as needed
Как вы видите, в этом типе представления ребра не отображаются; скорее, форма функции раскрывается по цветам граней. В результате может быть лучше (если это возможно в вашей проблеме) использовать более точную выборку. Конечно, поскольку 0 является проблемным значением для вашей функции, его следует избегать, как это делает ваша исходная выборка ( linspace
при четном количестве точек это также достигается). Например, с
[X, Y] = meshgrid(linspace(-10,10,500),linspace(-10,10,500));
вы получаете более привлекательную картинку
Комментарии:
1. Большое вам спасибо. Но возможно ли это с помощью сетки, именно в GNUplot?
2. Извините, я никогда не использовал GNUplot. Чтобы сохранить сетку в Matlab, измените первую строку на что-то вроде
h = surf(X,Y,f, 'FaceColor','blue','EdgeColor','black');