0

V1 = {p0(x0、y0)、p1(x1、y1)、p2(x2、y2)、p3(x3、y3)、p4(x4、y4)}のセットがあると想像してください。

そして、V2 = {M0(x0、y0)、......... Mn(xn、yn)}を設定します。

V1のメンバーの数は一定です[たとえば、5セットのポイント}

関数minDifference()が呼び出されるたびに、V1のポイントとの差が最小であるV2からのポイントのセットを返す必要があります。

この例では、出力はV2から5セットのポイントを返す必要があります。これは、V1のポイントとの最小/最小値の差があります。

4

1 に答える 1

1

これを試して:

List<Point> V1 = new List<Point>();
V1.Add(new Point(2, 2));
V1.Add(new Point(4, 4));
V1.Add(new Point(6, 6));
V1.Add(new Point(8, 8));
V1.Add(new Point(10, 10));

List<Point> V2 = new List<Point>();
V2.Add(new Point(1, 1));
V2.Add(new Point(3, 3));
V2.Add(new Point(5, 5));
V2.Add(new Point(7, 7));
V2.Add(new Point(9, 9));

List<Point> result = new List<Point>();

foreach (Point p1 in V1)
{
    Point minPoint = Point.Empty;
    double minDist = double.MaxValue;
    foreach (Point p2 in V2)
    {
        double dist = Math.Sqrt(Math.Pow(p1.X - p2.X, 2) + Math.Pow(p1.Y - p2.Y, 2));
        if (dist < minDist)
        {
            minDist = dist;
            minPoint = p2;
        }
    }
    result.Add(minPoint);
}

追加の最適化として、Math.Sqrt正確な距離は実際には必要ないため、を削除できます。

于 2012-04-16T17:58:01.880 に答える