我想計算每個Voronoi細胞在matlab中的面積,但我被卡住了。我在網上找到這個代碼:計算Voronoi細胞區域
[v , c] = voronoin(sdata);
for i = 1 : size(c ,1)
ind = c{i}';
tess_area(i,1) = polyarea(v(ind,1) , v(ind,2));
end
這段代碼不起作用,因爲v中的一個點是[Inf,Inf]。這是無限的一點。我怎樣才能繞過這個問題?
我想計算每個Voronoi細胞在matlab中的面積,但我被卡住了。我在網上找到這個代碼:計算Voronoi細胞區域
[v , c] = voronoin(sdata);
for i = 1 : size(c ,1)
ind = c{i}';
tess_area(i,1) = polyarea(v(ind,1) , v(ind,2));
end
這段代碼不起作用,因爲v中的一個點是[Inf,Inf]。這是無限的一點。我怎樣才能繞過這個問題?
根據'voronoin'文檔中的例子,v的第一個點總是[Inf,Inf]。這是一個報價:
V的第一行是無窮遠處的一個點。如果單元格中的任何索引的單元格數組爲1,則相應的Voronoi單元格包含V中的第一個點,即無窮遠處的一個點。這意味着Voronoi單元格是無限的 。
如果你想使用「polyarea」上的頂點v在未得到NaN的然後我天真的回答是輸入成「polyarea」之前砍掉V的第一行:
sdata = [ 0.5 0
0 0.5
-0.5 -0.5
-0.2 -0.1
-0.1 0.1
0.1 -0.1
0.1 0.1 ]
[v , c] = voronoin(sdata);
for i = 1 : size(c ,1)
ind = c{i}';
tess_area(i,1) = polyarea(v(2:end,1), v(2:end,2))
end
但如果這不是「不工作」的意思,那麼也許你可以詳細說明你期望看到什麼?
這樣可以避免NaN的事情:
[ v, c] = voronoin (sdata);
tess_area=zeros(size(c,1),1);
for i = 1 : size(c ,1)
ind = c{i}';
if ind~=1
tess_area(i,1) = polyarea(v(ind,1) , v(ind,2));
end
end
你需要定義一個你有興趣在空間的邊界。例如,如果你畫一個正方形環繞你的Voronoi單元中,根據大小你的廣場,細胞將有不同的領域。
Voronoi分區本身不能設置單元格的外邊界。
如果Matlab有一個多邊形相交函數,那麼它應該很容易做到。一些相關的主題可能是:
intersection and union of polygons
What is an simple way to compute the overlap between an image and a polygon?
如果Matlab的沒有這個,你可以手動計算沃羅諾伊線和您的多邊形的邊界線之間的交點,然後計算基於此的新多邊形,然後計算該區域。