如何在N点中间找到一个点?

时间:2015-12-10 20:09:37

标签: javascript algorithm

假设我的坐标(X,Y)定义了N个点。我怎样才能找到另一个点X的坐标,它位于N个点的中间(即X与N之间的每个点之间的距离或多或少相等)。有没有算法呢?

3 个答案:

答案 0 :(得分:2)

你可能会误以为这个问题是认为“中间”一点与其他所有人都是等距的。

由于你无法做到这一点,更好的方法是尽量减少中心到N点的总欧几里德距离。

事实证明,这个问题没有简单的分析解决方案,因为你需要最小化

D = Σ √(X - Xc)² + (Y - Yc)²

导出Xc,你得到

D'x = Σ (X - Xc) / √(X - Xc)² + (Y - Yc)² = 0

复杂的非线性表达式。这个问题被称为“几何中位数”,你会发现更多信息here(特别是Weiszfeld的算法)。

相反,最小化平方距离的总和

D = Σ (X - Xc)² + (Y - Yc)²

是微不足道的

D'x = 2 Σ (X - Xc) = 0

产生质心。

Xc = Σ X / N, Yc = Σ Y / N.

您还可以考虑点的 medoid ,这是给定集合中的点,可以最小化与其他点的距离之和。需要N(N-1)/2距离计算才能找到它。

答案 1 :(得分:1)

可能没有这样的观点。你可以平均X和Y并得到一个中间点(a.k.a"质心")。

答案 2 :(得分:1)

对于2分,这个“中间”存在。更多信息,我们无法确定。

您可以使用点的平均x和y来计算质心。

if (points.length > 0) {
  var x_acc = 0;
  var y_acc = 0;

  for (var i = 0; i < points.length; i++) {
    x_acc += points[i].x;
    y_acc += points[i].y;
  }

  var centroid_x = x_acc / points.length;
  var centroid_y = y_acc / points.length;
}