Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 找到差异最小的两组点?_C# 4.0 - Fatal编程技术网

C# 4.0 找到差异最小的两组点?

C# 4.0 找到差异最小的两组点?,c#-4.0,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个点集} 每次调用函数mindDifference()时,它都应该返回V2中的一组点,其中与V1中的点的差值最小 在本例中:输出应返回V2中的5组点,这些点与V1中的点具有最小/最小值差异 List<Point> V1 = new List<Point>();

假设我们有一组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个点集}

每次调用函数mindDifference()时,它都应该返回V2中的一组点,其中与V1中的点的差值最小

在本例中:输出应返回V2中的5组点,这些点与V1中的点具有最小/最小值差异

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);
}
List V1=新列表();
V1.增加(新的点(2,2));
V1.增加(新的第(4,4)点);
V1.增加(新的第(6,6)点);
V1.增加(新的第(8,8)点);
V1.增加(新的点(10,10));
列表V2=新列表();
V2.增加(新的点(1,1));
V2.增加(新的第(3,3)点);
V2.增加(新的第(5,5)点);
V2.增加(新的第(7,7)点);
V2.增加(新的第(9,9)点);
列表结果=新列表();
foreach(V1中的点p1)
{
Point minPoint=Point.Empty;
双重意识=双重价值;
foreach(V2中的点p2)
{
double dist=Math.Sqrt(Math.Pow(p1.X-p2.X,2)+Math.Pow(p1.Y-p2.Y,2));
if(dist

作为额外的优化,您可以删除
Math.Sqrt
,因为您并不需要精确的距离。

谢谢,这是一个很好的方法,但问题是V2中的点数远大于V1中的点数。例如)V1中的点数={5};V2中的点数={15}我们想从V2中提取5组点,其中与V1中的设置点的差异最小。如果V2中的点比V1中的点多得多,我的解决方案也可以工作。试试看。