【问题标题】:How to find the coordinate that is closest to the point of origin?如何找到离原点最近的坐标?
【发布时间】:2014-09-07 14:02:39
【问题描述】:

我知道有很多关于按多个值对 javascript 数组进行排序的问题,但没有一个答案能解决我的问题。

我有一个坐标数组,例如:

x  |  y
--------
10    20
12    18
20    30
5     40
100   2

如何获得离原点最近的坐标?

【问题讨论】:

    标签: javascript arrays google-maps coordinates coordinate-systems


    【解决方案1】:

    计算每个点的距离

    Math.sqrt( Math.pow(x, 2) + Math.pow(y, 2) );
    

    取最低的结果


    var points = [
      {x: 10, y: 20},
      {x: 12, y: 18},
      {x: 20, y: 30},
      {x: 5, y: 40},
      {x: 100, y: 2}
    ];
    
    function d(point) {
      return Math.pow(point.x, 2) + Math.pow(point.y, 2);
    }
    
    var closest = points.slice(1).reduce(function(min, p) {
      if (d(p) < min.d) min.point = p;
      return min;
    }, {point: points[0], d:d(points[0])}).point;
    
    closest;
    // {x: 12, y:18}
    

    您会注意到我们在这里跳过了Math.sqrt 步骤。正如 Mark Setchell 所指出的,计算平方根是一种“最小公分母”运算;我们仍然可以通过获取最小的x^2 + y^2 值来确定最近的点。

    【讨论】:

    • 不需要平方根。如果 a^2 > b^2 它遵循 a>b.
    • 是的,感谢您的反馈。我会更新我的答案。
    • @naomik 那是曼哈顿距离,它用于某些应用程序-我不知道它是否适用于此。
    • 想一想,曼哈顿距离在这里不适用,因为它会使点 2,0 与原点的距离 (2) 与 1,1 的距离相同 (2) 显然更接近 squareroot(2) .
    • 如果 d(p)
    【解决方案2】:

    对于每个 x,y 对,平方 x,平方 y 并相加。最小的数字离原点最近。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 2018-02-06
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多