Matlab中表面顶部和底部的颜色不同

时间:2014-07-03 17:29:13

标签: matlab graphics 3d matlab-figure

我想在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 && 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

http://i.stack.imgur.com/DdMDX.jpg

这个例子用不同的顶部/底部颜色来说明我所追求的东西(但是,它是用gnuplot完成的):

gnuplot example

1 个答案:

答案 0 :(得分:0)

以下内容并不完全符合您的要求,但可能有所帮助:

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

enter image description here

如您所见,在这种类型的表示中,边缘未显示;相反,功能形状由面部的颜色显示。因此,使用更精细的采样可能会更好(如果您的问题可能)。当然,因为0对于你的函数是一个有问题的值,所以应该避免,因为你的原始采样确实(linspace具有偶数个点也可以实现这一点)。例如,使用

[X, Y] = meshgrid(linspace(-10,10,500),linspace(-10,10,500));

你得到了更好看的图片

enter image description here