10

空間データを使用してマップ上のポイントのクラスターを表すソリューションがあります。クラスターの範囲を表す座標を使用して、ポイントのクラスターを含むことができる最小の境界四角形を見つける必要があります。

これを計算できる単純なアルゴリズムは存在しますか、それとも C# にはこれを達成するための機能が組み込まれていますか。私は NetTopologySuite を認識していますが、これを使用して同じ目標を達成する方法/方法がわかりません。座標のリストがあるので、この文字列のリストをそれに渡し、MBR を取得する必要があります。

4

3 に答える 3

18

最も簡単な解決策は、あなたが探している可能性が最も高いと思いますが、軸に沿った境界ボックスを計算することです。これは、最小/最大の x と y の値を見つけてから、それらの。

ジオメトリが表現されているタイプを投稿していないことを考えると、そのための疑似コードを提供します...

type point { float x; float y; }
type box { point topleft; point topright; point bottomleft; point bottomright; }

function bounding_box(points)
{
  xmin = min(points.x)
  xmax = max(points.x)
  ymin = min(points.y)
  ymax = max(points.y)

  return new box{
    topleft = { x = xmin, y = ymax },
    topright = { x = xmax, y = ymax },
    bottomleft = { x = xmin, y = ymin },
    bottomright = { x = xmax, y = ymin }
  };
}

したがって、これらを考えると:

point[] points = [[x = -2, y = 0], [x = 1, y = 2], [x = 1, y = 1], [x = -1, y = -2]];
box bounds = bounding_box(points);

次のすべてが true になります。

bounds.topleft == [x = -2, y = 2];
bounds.topright == [x = 1, y = 2];
bounds.bottomleft == [x = -2, y = -2];
bounds.bottomright == [x = -1, y = -2];

もちろん、座標系の座標が一番上にある場合 (たとえば、典型的なディスプレイのように)、計算を逆にする必要があります。または、最初にオブジェクト空間で結果を計算してから、後で論理空間に変換します。

将来、任意に配置されたボックスに更新することを決定した場合に備えて、四隅すべてを表すボックスのタイプを選択したことに注意してください (ただし、同じトークンで、点 + 2 つのベクトルを使用することもできます)。それ)。

于 2012-01-27T09:37:42.080 に答える
9

簡単ではありますが、次のような方法が考えられます。

public Rectangle Test(List<Point> points)
{
    // Add checks here, if necessary, to make sure that points is not null,
    // and that it contains at least one (or perhaps two?) elements

    var minX = points.Min(p => p.X);
    var minY = points.Min(p => p.Y);
    var maxX = points.Max(p => p.X);
    var maxY = points.Max(p => p.Y);

    return new Rectangle(new Point(minX, minY), new Size(maxX-minX, maxY-minY));
}

もちろん、これは、垂直方向と水平方向に整列された長方形を探していることを前提としています。そのため、可能な限り最小の長方形を探している場合、どのように回転させても、これは適していません。

于 2012-01-27T09:32:45.313 に答える
0

http://www.ceometric.com/products/g.htmlで G# を試してください。

最小の面積と最小の周囲の囲み長方形、および最小の囲み円があります。

于 2012-11-04T23:10:28.827 に答える