2012-05-08 4 views
4

私は、MATLABの各ボロノイセルの面積を計算しようとしていますが、私は立ち往生しています。このコードはオンラインで見つかりました:ボロノイセルエリアを計算する

[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のポイントの1つが[Inf、Inf]であるため、このコードは機能しません。これは無限にある点です。どうすればこの問題を回避できますか?

答えて

4

「voronoin」のドキュメントの例によると、vの最初の点は常に[Inf、Inf]です。ここに引用があります:

Vの最初の行は無限遠点です。 のセル内のインデックスが1の場合、対応するVoronoiセルには、Vの最初の点(無限遠点)が含まれます。これは、Voronoiセルが であることを意味します。

あなたはNaNを得ることなく、頂点vに「polyarea」を使用したい場合は、私の素朴な答えが「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 

しかし、それはあなたが "働いていない"という意味ではない場合は、おそらくあなたはあなたが見たいと思ったものについて詳しく説明することができますか?

1

これは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 
0

はあなたが興味のある空間の境界を定義する必要がありますたとえば、あなたがあなたのボロノイ・セルを囲む四角形を描画した場合、サイズによって異なります。あなたの広場の細胞は、異なる領域を持つことになります。

ボロノイ分割だけでは、セルの外側境界を設定できません。

Matlabにポリゴン交差関数がある場合は、それを行うのが簡単です。いくつかの関連スレッドは次のようになります。

intersection and union of polygons

What is an simple way to compute the overlap between an image and a polygon?

MATLABはこれを持っていない場合は、手動でボロノイ線や、あなたのポリゴンの境界線との交点を計算して、計算することができますそれに基づいて新しいポリゴンを作成し、そこから面積を計算します。