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中的点具有最小/最小值差异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>();
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中的点多得多,我的解决方案也可以工作。试试看。