3

如何绘制正方形表面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);

这不会导致垂直边缘。如何存档?

4

3 回答 3

4

这就是patch函数的用途。

Matlab 文档

所以对于你的情况:

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)

例子

于 2013-10-26T12:45:14.517 回答
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)

产生这个:

X=2 处的步长,X=3..4 处的斜率

这在 2D 中应该是相同的,您只需要围绕哪些 X 和 Y 值来复制并相应地调整 Z 矩阵。

于 2013-10-25T21:32:40.417 回答
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)')
于 2013-10-26T13:20:47.683 回答