我正在尝试通过比较从pointsToSearchFrom列表中的每个点到pointCloudToSearchList中的每个点的距离来检索集合中最远的点。您可以从所附图像中看到示例方案。我仍然不是导航这些数据结构的专家,并且该算法超出了我目前对遍历二维数组的了解。

这是我直到知道的代码。任何帮助都会很棒。

public static void Test(List<Point3d> pointsToSearchFrom, List<Point3d> pointCloudToSearch)
{
    int rows = pointsToSearchFrom.Count;
    int columns = pointCloudToSearch.Count;
    double[,] arrayDistance = new double [rows, columns];

    for (int i = 0; i < pointsToSearchFrom.Count; i++)
    {
        for (int j = 0; j < pointCloudToSearch.Count; j++)
        {
            arrayDistance[i, j] = (pointsToSearchFrom[i] - pointCloudToSearch[j]).magnitude;
        }
    }
}


c# - 二维阵列最远点搜索-LMLPHP

最佳答案

您可以为此使用二维数组,但不必这样做。

您需要的是MaxBy方法,可以在这里找到:

https://github.com/morelinq/MoreLINQ/blob/master/MoreLinq/MaxBy.cs

我们从构造一对对开始:

var pairs = from first in pointsToSearchFrom
            from second in pointCloudToSearch
            select new { first, second };


请注意,在C#7中,您将使用元组,而不是匿名类型。

现在我们有了所有可能对的序列。使用MaxBy查找使给定数量最大化的对:

var maxPair = pairs.MaxBy(pair => (pair.first - pair.second).magnitude);


现在您完成了:

Console.WriteLine($"{maxPair.first} --> {maxPair.second});


如果您有大量的点集(例如成千上万个),则必须使用特殊的技术,因为如果有成千上万的点,那么将有数百万个点对,并且如果有数百万个点将是数万亿对。但是,如果您只有少数几个,则此方法效果很好。

08-19 13:01