c# - 二维数组最远点搜索

标签 c# arrays search

我试图通过比较 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;
        }
    }
}

enter image description here

最佳答案

你可以为此使用一个二维数组,但你不是必须的。

您需要的是可以在此处找到的 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});

如果你有大量的点——比如几千或几百万——那么你必须使用特殊的技术,因为如果有几千个点,就会有几百万对,如果有几百万对点将有数万亿对。但是,如果您只有一小部分,则此技术效果很好。

关于c# - 二维数组最远点搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51940145/

相关文章:

Postgresql:可能在 lob 内进行全文搜索吗?

c# - 在 Swagger 中禁用 "Try It Out"

arrays - TextEncodings.Base64Url.Decode 与 Convert.FromBase64String

javascript - 找不到动态 asp :Control inside a Gridview using JQuery

java - 在 Java 中制作/初始化类结构对象数组

arrays - 使用 Excel VBA 评估一维数组中可变长度字符串的最大长度

带有添加/删除条件的 Javascript 搜索小部件

python - 使用正则表达式在地址中查找电子邮件域

c# - 如何防止在类准备就绪之前调用该类的方法?

c# - ASP.NET 网络 API 2 : ExceptionLogger and Exception Handler