2012-09-18 49 views
0

我想繪製一個由一組不等式組成的MATLAB區域。如何在matlab上繪製3d不等式

例如:

0 <= x <= 1 

sqrt(x) <= y <= 1 

0 <= z <= 1 - y 

我發現了一個2D的例子,有人已經在這個網站這樣做,但我不知道如何將其轉換成3D。 How to plot inequalities

編輯: From @ Tobold的幫助我修改了代碼,將繪製的點限制爲由所有三個區域定義的那些點,但它只繪製了2或3個點。看起來向量X1,Y1和Z1中的點是正確的,但由於某種原因,它只繪製了幾個點。任何想法爲什麼它只繪製X1,Y1和Z1向量中的幾個點而不是所有的點?

[X,Y,Z]=meshgrid(0:0.1:1,0:0.1:1,0:0.1:1); % Make a grid of points between 0 and 1 
p1=0.1; p2=0.2; % Choose some parameters 
X1 = (X >= 0 & X <= 1) & (Y >= sqrt(X) & Y <= 1) & (Z >= 0 & Z <= 1 - Y); 
Y1 = (X >= 0 & X <= 1) & (Y >= sqrt(X) & Y <= 1) & (Z >= 0 & Z <= 1 - Y); 
Z1 = (X >= 0 & X <= 1) & (Y >= sqrt(X) & Y <= 1) & (Z >= 0 & Z <= 1 - Y); 
ineq1 = (X >= 0 & X <= 1) * 2; 
ineq2 = (Y >= sqrt(X) & Y <= 1) * 4; 
ineq3 = (Z >= 0 & Z <= 1 - Y) * 8; 
all = ineq1 & ineq2 & ineq3; 
colors = zeros(size(X))+ineq1+ineq2+ineq3; 
scatter3(X1(:),Y1(:),Z1(:),3,colors(:)','filled') 

回答

0

您可以做的事情與您鏈接到的2d案例幾乎相同。請寫下你的三個不平等現象,使用3D meshgrid,從一組三個數字有獨特的子集總和乘以一個數每不等式(例如,2,4,8),並使用scatter3:

[X,Y,Z]=meshgrid(0:0.1:1,0:0.1:1,0:0.1:1); % Make a grid of points between 0 and 1 
p1=0.1; p2=0.2; % Choose some parameters 
ineq1 = (X >= 0 & X <= 1) * 2; 
ineq2 = (X >= sqrt(X) & Y <= 1) * 4; 
ineq3 = (Z >= 0 & Z <= 1 - Y) * 8; 
colors = zeros(size(X))+ineq1+ineq2+ineq3; 
scatter3(X(:),Y(:),Z(:),3,colors(:),'filled') 
+0

我感謝您的幫助,並試圖通過將繪製的點限制爲由所有3個區域定義的點來改進您的代碼,但結果不符合要求。看到我上面編輯的帖子。 – user1680079

0

我我一直試圖弄清楚同樣的事情,訣竅是把所有東西的大小都放在交集0中.Dobold的scatter3行使用'3'作爲大小的選項,這意味着所有的點都會顯示爲第3點。可用一組大小替代與X1大小相等的矩陣。最簡單的方法就是讓s = 3 *全部:

all = ineq1 & ineq2 & ineq3; 
colors = zeros(size(X))+all; 
sizes = 3 * all; 
scatter3(X1(:),Y1(:),Z1(:),sizes,colors(:)','filled') 

這應該讓你知道十字路口的區域。

- 編輯:顏色變量也需要改變。你只是想要交集,而不是其他不平等。