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