在阵列寻找最近点(Finding the closest points in an array)

2019-11-04 21:12发布

我想找到不只是最近的点,但在5点对象的数组3个最近点。 我已尝试仅使用距离(几个实验d每个点)变量。 但我无法弄清楚如何通过每个点迭代,比较它利用勾股定理/距离公式另一点,然后找到最接近3.如果数组有5个点,我猜我需要存储的结果在具有距离(阵列每次迭代d )值,排序由所述距离值,然后删除新的数组中的最后一项。 这里是数组:

 var points = [
   { id: 1, x: 0.0, y: 0.0 },
   { id: 2, x: 10.1, y: -10.1 },
   { id: 3, x: -12.2, y: 12.2 },
   { id: 4, x: 38.3, y: 38.3 },
   { id: 5, x: 79.0, y: 179.0 },
 ]; 

我有一个基于一个查找最近的3个点的函数d的距离键值:

 function closest(n, { id, d }) {
    return points
      .filter(o => o.id !== id)
      .sort((a, b) => Math.abs(a.d - d) - Math.abs(b.d - d))
      .slice(0, n);
 };

我有办法把这个函数和控制台日志结果让它打印“ID:1stClosest,2ndClosest,3rdClosest”:

 result = points.map(o => 
   Object.assign({}, o, { closest: closest(3, o) }));

 result.forEach((item) => {
   console.log(item.id + ': ' + item.closest[0].id + ', ' + item.closest[1].id + ', ' + item.closest[2].id);}); 

现在,我只是想通过每一个点进行迭代,应用距离公式来获得D:值对于每个点的比较,把它推到一个新的数组,我假设,然后应用以上的部分( resultclosest函数)。 我怎样才能做到这一点? 这是我到目前为止有:

 points.forEach((item) => {
  var newArray = [item];
  var pt = null;
  var d = null;
  for (var i = 0; i < points.length; i = i + 1) {
      //compare this point with all of the other points
      for (var j = i + 1; j < points.length; j = j + 1) {
          //compute distance
          var curr = Math.sqrt(Math.pow(points[i][0] - points[j][0], 2) + Math.pow(points[i][1] - points[j][1], 2));
      //get the distance between each point and push to a new array
          if (d === null || curr < d) {
            o = points.id[i];
            pt = points.id[j];
            d = curr;
          }
       }
     }
  newArray.push = {
   "id": o,
   "pt": pt,
   "d": d
  };
  console.log(newArray);
});

Answer 1:

如果我理解正确的话,这是类似的最接近点对问题。 一(直观的,但也许是低效的)方法是简单地蛮力集合中的项目。 也就是说,对于两个点,你用两个for循环。 对于三个点,那么,你可以使用三个嵌套循环。 然后,你会发现最大的“亲密关系。” 我不知道你想怎么定义亲近,但我想的距离的总和,从A到B,B到C,而C到A将工作做好。 测试最小“距离”的点分组的每一个枚举会导致最接近的配对。

所以,我不知道在您的其他功能将发挥作用。 更大的问题是找到如何确定“最近”,所以调用一个函数做一个子问题是更大的问题不退房。

如果你不知何故要分三个最接近的那么你就需要跟踪每个配对的距离,并确定你想如何让它们彼此不同。 也就是说,你要允许的相同点是在另一组点?



文章来源: Finding the closest points in an array