2014-10-18 55 views
0

我已經寫了使用水平集函數的曲線傳播的程序。曲線由等值線圖中的零級表示。我如何隨着時間的推移獲得這些曲線的座標?從輪廓座標在MATLAB其中level是零

輪廓在每個時間步長獲得。如何獲得每一步的座標?

回答

0

從一組點Z(X,Y)的零電平的輪廓可以通過contourc獲得。例如,爲peaks -example MATLAB中,我們獲得與高度0輪廓線如下:

c = contourc(peaks, [0,0]); 

如果這個輪廓是單行線,這是所有你需要做的。但是,輪廓可能由多個島組成(這個例子就是這種情況),這意味着您需要以某種方式拆分(x,y)座標集合在c中。可以通過獲得基於NaN值的分割:

c(:,~c(1,:)) = NaN; 

,結果可以通過

plot(c(1,:),c(2,:),'k'); 

是情節如果這不是足夠,則也可以構建島嶼的單元陣列c_split

b = find(~c(1,:))+1; 
e = b+c(2,b-1)-1; 
c_split = arrayfun(@(idx) c(:,b(idx):e(idx)), 1:numel(b), 'uni', 0)'; 

和可視化是很相似:

idx = 1; 
plot(c_split{idx}(1,:),c_split{idx}(2,:),'k'); 

如果輪廓需要存儲多個時間步長,你把所有的結果到單元格:

c_all{idx} = c;