【问题标题】:How to find the closest matching pair in two arrays to find result in last array如何在两个数组中找到最接近的匹配对以在最后一个数组中查找结果
【发布时间】:2021-07-22 17:31:03
【问题描述】:

我有三个 ArrayList 的双打。一个用于纬度、经度和温度。数组都是未排序的。用户在地球上有一个光标位置,它应该尝试在表中找到最近的纬度和经度对。纬度和经度对分别对应表格中的温度。

我的问题是我想不出一个好方法来遍历这些数组以找到最接近的匹配值。

我尝试做的是遍历整个数组并尝试找到最接近的经度和纬度值,但由于它们未排序,它总是会找到最接近的第一个值并停止。另一个问题是这些值在十进制范围内,所以光标位置永远不会在表中找到精确值,所以我认为它必须在 +/- .00005 度内。

如果光标位置确实包含与表格相对应的确切值,我想这会简单得多,但需要有某种范围可以落入(.00005),所以我实际上返回了一个温度结果。

例子

    CLonArray = new ArrayList<>();
    CLatArray = new ArrayList<>();
    BolometricBrightnessArray = new ArrayList<>();

    double CenterLonCoord = Double.parseDouble(CenterLon);
    CLonArray.add(CenterLonCoord);

    double CenterLatCoord = Double.parseDouble(CenterLat);
    CLatArray.add(CenterLatCoord);

    double Tbol = Double.parseDouble(BolometricBrightness);
    BolometricBrightnessArray.add(Tbol);

Table

网上有很多关于在一个数组中找到最接近目标值的信息,但我需要在两个数组中找到最接近的值,并使用这两个值来找到温度的匹配项。

任何关于如何解决这个问题的想法都将不胜感激!不一定要寻找最有效的方法,而只是我可以检查结果的解决方案。

【问题讨论】:

    标签: java arrays data-structures


    【解决方案1】:

    我的第一个答案是评论:对数组进行排序。

    然后,写它我想我知道你真正的问题是什么:你有一个点(由用户选择),你需要从列表中找到最近的点。因此,排序是没有意义的。您可以使第一个值非常接近,但另一个值非常远:比另一个点更远。这是因为这些点由几个值(纬度和经度,但 x 和 y 相同)标识。

    所以,得到你的问题是什么,我认为解决方案是为每一对点找到彼此之间的相对距离。我认为获取距离是一个简单的函数,因为您知道所有值:(userLat, userLon) 和 (pntLat, pntLon)。

    一旦您获得了值列表,您只需扫描列表即可非常快速地找到最接近的值。

    【讨论】:

    • 谢谢,这很有帮助,找到所有点之间的相对距离似乎可以返回更好的结果。
    • 不客气。还要记住,正如另一个答案中所说,你有一个球体,它的距离与平面不同。您需要一个考虑到这对纬度、经度的公式。
    【解决方案2】:

    这里有 2 条信息可以帮助你

    1. 您不应将经度和纬度列表视为单独的列表。相反,它们应该被视为一个单一的点列表。然后,在列表中查找最接近用户选择的点的点就像检查列表中的每个点与用户选择的点的距离一样简单,然后选择距离最小的点。
    2. 请记住,经度和纬度与球体上的点相​​关,而不是正方形。即这两个点中的哪一个更接近(-89.5, 0):(-89.5, 180)或(-88, 0)。 https://keisan.casio.com/exec/system/1359534351 给出了从纬度和经度转换为笛卡尔坐标的公式。 (您可能可以安全地假设地球的半径是恒定的)

    【讨论】:

      猜你喜欢
      • 2020-01-30
      • 2019-11-02
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      相关资源
      最近更新 更多