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

3 に答える 3

4

'voronoin'のドキュメントの例によると、vの最初のポイントは常に[Inf、Inf]になります。引用は次のとおりです。

Vの最初の行は無限遠点です。セル配列のセル内のいずれかのインデックスが1の場合、対応するボロノイセルには、Vの最初の点、つまり無限遠点が含まれます。これは、ボロノイセルに制限がないことを意味します。

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

しかし、それが「機能しない」という意味ではない場合は、予想される内容についてさらに詳しく説明することができますか?

于 2012-05-08T05:20:30.913 に答える
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
于 2013-10-24T15:53:53.837 に答える
0

関心のある空間の境界を定義する必要があります。たとえば、ボロノイ セルを囲む正方形を描くと、正方形のサイズに応じて、セルの領域が異なります。

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

Matlab に多角形交差関数があれば、簡単に実行できるはずです。関連するスレッドは次のとおりです。

ポリゴンの交差と結合

画像とポリゴンの重なりを計算する簡単な方法は何ですか?

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

于 2015-06-01T21:03:50.203 に答える