2014-07-09 35 views
1

假設我生成以下列方式曲線滿足不等式:在倍頻3D繪圖

x=linspace(-2,2,50); 
y=linspace(-2,2,50); 
[xx,yy]=meshgrid(x,y); 
mesh(xx,yy,4-(xx.^2+yy.^2)) 

反正是有強加的不平等,使得我只積值,其中x <ÿ?

回答

0

這與已經提供的另一個答案非常相似,但可能有助於您提到答案的「奇怪偏差」導致您的數據。基本上,創建一個面具是1其中xx < yy0否則:

mask = xx < yy; 

那麼這個面膜適用於您的xxyy網:

xx_mask = xx.*mask; 
yy_mask = yy.*mask; 

才把你繪製結果:

mesh(xx_mask, yy_mask, 4-(xx_mask.^2 + yy_mask.^2)); 

基本上唯一的區別就是這種方式你是將您的xxyy矩陣中的不需要的值設置爲零,然後對其進行平方和繪製。

enter image description here

注意,這是用MATLAB代替八度測試,但他們應該給類似的結果。

+0

完美修復了事物!謝謝你們指導我解決問題!如果我有更高的代表,我會投你一票! – mjnichol

+0

@Engineero,你的回答完全是我的,除了我錯過了'mesh'的最後一個參數(我的bug)中的面具。你應該修好我的,而不是回答你自己。 – juliohm

+0

@ juliohm你是對的。我開始試着用'find'完全不同的做法,甚至用'稀疏'來嘗試一下,但最終它只是融合到你的解決方案中。我會刪除它,因爲你一定會先刪除它。 **編輯:**我無法刪除。希望OP會看到這個並且標記你的。 – Engineero

1

一個可能的黑客攻擊:

x = y = linspace(-2, 2, 50); 
[xx, yy] = meshgrid(x, y); 
cond = xx < yy; 
xx = xx .* cond; 
yy = yy .* cond; 
mesh(xx, yy, 4-(xx.^2+yy.^2)); 

嚴格地說,這將舉動所有座標對(x,y)不從他們目前的位置符合標準x < y到圖的原點:

enter image description here

+0

這在我的情況下幾乎奏效,但它在我實際生產的情節中引起了一種奇怪的畸變。雖然非常接近! – mjnichol

+0

@mjnichol,這是一個微不足道的錯誤:我錯過了'mesh'最後一個參數中的'cond'。我會解決它。 – juliohm

0

上述解決方案只有在點(0,0)是圖表的一部分時纔有用。否則,它將該點添加到圖表中,然後嘗試繪圖,創建奇怪的效果,如下所示。

[![x=linspace(1,3,50); 
y=linspace(1,3,50); 
\[xx,yy\]=meshgrid(x,y); 
mask = xx < yy; 
xx_mask = xx.*mask; 
yy_mask = yy.*mask; 
mesh(xx_mask, yy_mask, 4-(xx_mask.^2 + yy_mask.^2));][1]][1] 

什麼可以替代地進行是離開x和作爲是和只轉換的z軸值NA在礦井範圍不滿足條件y軸的值。

x=linspace(1,3,50); 
y=linspace(1,3,50); 
[xx,yy]=meshgrid(x,y); 
mask = xx < yy; 

function result = applyCondition(cond) 
    result = ifelse(cond, 0, NA); 
endfunction 

zz = 4-(xx.^2 + yy.^2); 
mesh(xx, yy, zz + arrayfun(@applyCondition, mask)); 

此解決方案適用於所有情況,無論(0,0)是否屬於您的一部分,都不是。