在Matlab中绘制方形表面

时间:2013-10-25 21:17:03

标签: matlab plot

如何在Matlab中绘制方形曲面?

更确切地说,我想绘制一个方形正方形,其值为0.5表面,位于X:-1到X = 1,Y:2.5到3.5。

我尝试了以下

[X,Y] = meshgrid(-3.5:.5:3.5);
Z = zeros(15);
Z(end-2:end,5:9) = 0.5;
surf(X,Y,Z);

这不会产生垂直边缘。如何存档?

3 个答案:

答案 0 :(得分:2)

您需要提供多个Z值以及相同的X,Y值。一个小例子:

>> [X, Y]= meshgrid([1,2,2,3,4], 1:2)
X =
     1     2     2     3     4
     1     2     2     3     4
Y =
     1     1     1     1     1
     2     2     2     2     2
>> Z = [0,0,1,1,0;0,0,1,1,0]
Z =
     0     0     1     1     0
     0     0     1     1     0
>> surf(X, Y, Z)

产生这个:

Step at X=2, slope at X=3..4

这在2D中应该是相同的,你只需要绕过哪些X和Y值来复制并相应地调整Z-Matrix。

答案 1 :(得分:2)

这是patch函数的用途。

Matlab documentation

所以对你的情况来说:

X = [ -1  -1   1   1];
Y = [3.5 2.5 2.5 3.5];
Z = [0.5 0.5 0.5 0.5];

patch(X,Y,Z,'red')
view(45,45)

example

答案 2 :(得分:0)

我最终得到了

figure;
hold on;

X = [ -2  -2   2 2];
Y = [2 4 4 2];
Z = [0 0 0 0];
patch(X,Y,Z,'blue');

X = [ -1  -1   1   1];
Y = [3.5 2.5 2.5 3.5];
Z = [0.5 0.5 0.5 0.5];
h = patch(X,Y,Z,'red');

X = [ -1 -1 1 1];
Y = [2.5 2.5 2.5 2.5];
Z = [0 0.5 0.5 0];
patch(X,Y,Z,'red');

X = [1, 1, 1, 1];
Y = [2.5 2.5 3.5 3.5];
Z = [0 0.5 0.5 0];
patch(X,Y,Z,'red');

view(45,30)
legend(h, 'F(u,v)')
xlabel('u')
ylabel('v')
zlabel('F(u,v)')