如何从2 List <Point>中获取最近的2点

WiiMaxx

我有2个要点列表:

        var listA = new List<Point>();
        listA.Add(new Point(10, 1));
        listA.Add(new Point(5, 5));
        listA.Add(new Point(15, 35));

        var listB = new List<Point>();
        listB.Add(new Point(1, 1));
        listB.Add(new Point(5, 4));
        listB.Add(new Point(35, 15));

现在我想做类似的事情:

        getClosesPoints(listA,listB, Out pointA, Out pointB);

我目前处于可以再次检查列表的位置1点

        private int NearestPoint(Point srcPt, List<Point> lookIn)
        {
            if (lookIn.Count == 1)
                return 0;

            KeyValuePair<double, int> smallestDistance = new KeyValuePair<double, int>();

            for (int i = 0; i < lookIn.Count; i++)
            {
                double distance = Math.Sqrt(Math.Pow(srcPt.X - lookIn[i].X, 2) + Math.Pow(srcPt.Y - lookIn[i].Y, 2));

                if (i == 0)
                    smallestDistance = new KeyValuePair<double, int>(distance, i);
                else if (distance < smallestDistance.Key)
                        smallestDistance = new KeyValuePair<double, int>(distance, i);
            }

            Console.WriteLine("smallest Distance:" + smallestDistance.Key);
            return smallestDistance.Value;
        }

但是我不确定如何扩展此代码以检查2个列表。

马修·沃森

我假设您想在两个列表中找到最接近的两个点,其中一个点在一个列表中,另一个点在另一个列表中。

您可以通过使用内部和外部循环来解决此问题。外循环遍历第一个列表中的所有点。对于这些点中的每一个,您都可以使用内部循环将其与第二个列表中的所有点进行比较。

然后,您无需记住所有距离;您只需要记住到目前为止找到的两个最接近点之间的距离,以及到目前为止它们本身最接近的点。

您也可以创建一个简单的小类,仅返回最接近的两个点,而不是通过out参数返回结果为了方便起见,您可以Distance()在此类中添加一个函数,因此您无需存储实际距离。(但是,如果您经常使用此值,那么您可能希望将距离缓存在本地字段中,而不是每次都进行计算。)

最后,FindClosestPoints()方法的参数可以是,IEnumerable<Point>而不是List<Point>,它允许您将其与更多的收集类型一起使用。

将所有内容放在一起可以得到以下内容(可编译的控制台应用程序):

using System;
using System.Collections.Generic;
using System.Drawing;

namespace Demo
{
    // Class just used to return the result from FindClosestPoints()

    public sealed class ClosestPoints
    {
        public ClosestPoints(Point p1, Point p2)
        {
            _p1 = p1;
            _p2 = p2;
        }

        public Point P1 { get { return _p1; } }
        public Point P2 { get { return _p2; } }

        public double Distance()
        {
            double dx = P1.X - P2.X;
            double dy = P1.Y - P2.Y;

            return Math.Sqrt(dx*dx + dy*dy);
        }

        private readonly Point _p1;
        private readonly Point _p2;
    }

    public static class Program
    {
        public static void Main()
        {
            var listA = new List<Point>();
            listA.Add(new Point(10, 1));
            listA.Add(new Point(5, 5));
            listA.Add(new Point(15, 35));

            var listB = new List<Point>();
            listB.Add(new Point(1, 1));
            listB.Add(new Point(5, 4));
            listB.Add(new Point(35, 15));

            var answer = FindClosestPoints(listA, listB);

            Console.WriteLine("Closest points are {0} and {1}", answer.P1, answer.P2);
        }

        public static ClosestPoints FindClosestPoints(IEnumerable<Point> seq1, IEnumerable<Point> seq2)
        {
            double closest = double.MaxValue;
            ClosestPoints result = null;

            foreach (var p1 in seq1)
            {
                foreach (var p2 in seq2)
                {
                    double dx = p1.X - p2.X;
                    double dy = p1.Y - p2.Y;

                    double distance = dx*dx + dy*dy;

                    if (distance >= closest)
                        continue;

                    result = new ClosestPoints(p1, p2);
                    closest = distance;
                }
            }

            return result;
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在List <>中初始化Point2D

来自分类Dev

如何从2表中获取最近的DateTime

来自分类Dev

存储在Point2f向量中的OpenCV排序点

来自分类Dev

如何在 Mat 中存储 1D vector<point2f> 以及如何访问 Mat 中的这些点?

来自分类Dev

如何获取地球上从Point1到Point2的角度

来自分类Dev

在 Point Chart Flutter 中实现 List

来自分类Dev

最近对算法,用于比较2个不同阵列中的点

来自分类Dev

如何以latlng获取point1(startPoint)的point2(destinationPoint),以米为单位获取距离

来自分类Dev

移除stat_density_2d(geom ='point')中密度为0的点(无数据)

来自分类Dev

如何删除vector <Point2f>的重复坐标

来自分类Dev

table1.total + table2.point = 如何?

来自分类Dev

如何在geom_point ggplot中删除点组

来自分类Dev

如何将float变量添加到List <Point>?

来自分类Dev

如何编写一个函数来在 Java 中的 2D 维数组中找到 2 个最近的点?

来自分类Dev

如何获取Point2D的X轴和Y轴?

来自分类Dev

从数组中找到2个最近的点

来自分类Dev

2D数组最近点坐标

来自分类Dev

从数组中找到2个最近的点

来自分类Dev

Java的如何字符串化点流转换为一个ArrayList <Point2D.Double>

来自分类Dev

从opencv中的vector <Point2f>获取奇怪的坐标值

来自分类Dev

在设计时无法编辑Point []或List <Point>

来自分类Dev

ggplot2 geom_point 50000点-输出为pdf-需要在Illustrator中打开

来自分类Dev

如何从Point对象获取双精度数

来自分类Dev

如何更改ggplot2的geom_point中缺失值的颜色?

来自分类Dev

如何在Android中添加2个org.opencv.core.Point对象?

来自分类Dev

如何更改ggplot2的geom_point中缺失值的颜色?

来自分类Dev

2D平面中与任何点(自身除外)最近的邻居

来自分类Dev

如何从select2关闭按钮获取最近的ID?

来自分类Dev

如何使用 SQL 获取最近 2 周的日期

Related 相关文章

  1. 1

    在List <>中初始化Point2D

  2. 2

    如何从2表中获取最近的DateTime

  3. 3

    存储在Point2f向量中的OpenCV排序点

  4. 4

    如何在 Mat 中存储 1D vector<point2f> 以及如何访问 Mat 中的这些点?

  5. 5

    如何获取地球上从Point1到Point2的角度

  6. 6

    在 Point Chart Flutter 中实现 List

  7. 7

    最近对算法,用于比较2个不同阵列中的点

  8. 8

    如何以latlng获取point1(startPoint)的point2(destinationPoint),以米为单位获取距离

  9. 9

    移除stat_density_2d(geom ='point')中密度为0的点(无数据)

  10. 10

    如何删除vector <Point2f>的重复坐标

  11. 11

    table1.total + table2.point = 如何?

  12. 12

    如何在geom_point ggplot中删除点组

  13. 13

    如何将float变量添加到List <Point>?

  14. 14

    如何编写一个函数来在 Java 中的 2D 维数组中找到 2 个最近的点?

  15. 15

    如何获取Point2D的X轴和Y轴?

  16. 16

    从数组中找到2个最近的点

  17. 17

    2D数组最近点坐标

  18. 18

    从数组中找到2个最近的点

  19. 19

    Java的如何字符串化点流转换为一个ArrayList <Point2D.Double>

  20. 20

    从opencv中的vector <Point2f>获取奇怪的坐标值

  21. 21

    在设计时无法编辑Point []或List <Point>

  22. 22

    ggplot2 geom_point 50000点-输出为pdf-需要在Illustrator中打开

  23. 23

    如何从Point对象获取双精度数

  24. 24

    如何更改ggplot2的geom_point中缺失值的颜色?

  25. 25

    如何在Android中添加2个org.opencv.core.Point对象?

  26. 26

    如何更改ggplot2的geom_point中缺失值的颜色?

  27. 27

    2D平面中与任何点(自身除外)最近的邻居

  28. 28

    如何从select2关闭按钮获取最近的ID?

  29. 29

    如何使用 SQL 获取最近 2 周的日期

热门标签

归档