找到两组具有最小差异的点?

时间:2012-04-16 17:45:29

标签: c#-4.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()时,它都应返回V2中的一组点,其中与V1中的点的最小差异

在这个例子中:输出应该从V2返回5组点,其与V1中的点具有最小/最小值差异

1 个答案:

答案 0 :(得分: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,因为您并不需要确切的距离。