Matlab 理解补丁行为
我不明白为什么Matlab 理解补丁行为,matlab,plot,Matlab,Plot,我不明白为什么patch不遵循此图中的行: 事实上,在我使用的代码中,行和补丁共享相同的输入变量X和Y: clearvars close all clc figure(1) z=peaks(50); % Create x,y coordinates of the data [x,y]=meshgrid(1:50); % Plot Data and the slicing curve surf(z); hold on X=[1 21 35 47 29 25 8]; Y=[5 19 24
patch
不遵循此图中的行:
事实上,在我使用的代码中,行和补丁共享相同的输入变量X
和Y
:
clearvars
close all
clc
figure(1)
z=peaks(50);
% Create x,y coordinates of the data
[x,y]=meshgrid(1:50);
% Plot Data and the slicing curve
surf(z);
hold on
X=[1 21 35 47 29 25 8];
Y=[5 19 24 26 14 39 47];
plot3(X,Y,-10*ones(1,numel(X)),'r','linewidth',3);
plot3(X,Y,10*ones(1,numel(X)),'r','linewidth',3);
patch([X fliplr(X)],[Y fliplr(Y)],[-10*ones(1,numel(X)) 10*ones(1,numel(X))],...
'r','FaceAlpha',0.21)
axis([0 50 0 50])
我搞砸了什么?您将错误的参数传递给了
补丁。Matlab文档中说
如果扩展数据是矩阵,则每列表示面片单个面的x坐标
因此,修补程序数据应如下所示:
XData= [
X(1) X(2) ... and so on
X(2) X(3)
X(2) X(3)
X(1) X(2)];
YData= [
Y(1) Y(2) ...
Y(2) Y(3)
Y(2) Y(3)
Y(1) Y(2)];
ZData= [
-10 -10 ...
-10 -10
10 10
10 10];
您可以通过以下方式使用patch
:
patch([X(1:end-1);X(2:end);X(2:end);X(1:end-1)],[Y(1:end-1);Y(2:end);Y(2:end);Y(1:end-1)],...
[-10*ones(1,numel(X)-1);-10*ones(1,numel(X)-1);10*ones(1,numel(X)-1);10*ones(1,numel(X)-1)],...
'r','FaceAlpha',0.21)
或者您可以使用surf
:
surf([X;X],[Y;Y],[-10*ones(1,numel(X)) ;10*ones(1,numel(X))],'FaceAlpha',0.21);