2017-08-30 55 views
2

我不明白爲什麼patch不遵守行此圖像中:理解補丁的行爲

ex

事實上,在我使用的代碼,行和貼片共享相同的輸入變量XY

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]) 

我在搞什麼?

回答

2

您將錯誤的參數傳遞給patch。 Matlab文檔說

如果XData是一個矩陣,那麼每列表示該補丁的單個面的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);