我有一个平坦的欧几里德矩形表面但是当一个点移动到右边界时,它将出现在左边界(在相同的y值处)。反之亦然,跨越顶部和底部边界。我希望能够计算出一组点的质心。有问题的一组点大多聚集在一起。
我知道我可以通过平均所有x和y值来计算一组点的质心。我如何在环绕地图中做到这一点?
答案 0 :(得分:1)
如果簇大小相对较小(小于网格的一半),则可以使用简单的方法:
让表面宽度和高度分别为W和H.想象一下,表面尺寸是三倍的,所以你有-W..2 * W和-H..2 * H轴范围。展开包装值。
XMin = X[0]; XMax = X[0]
the same for Y
for i = 1..N-1
Check distance from X[i] to XMax and XMin
Get largest of them D
If D is larger than W/2, shift X[i] by W
//example1: W=100, Xmin = 70, XMax = 90, X[i]=10 => X[i]=20+100 = 120
//example2: W=100, Xmin = 5, XMax = 12, X[i]=98 => X[i]=98-100 = -2
the same for Y
update Min/Max
Calc (W + Average(X[i])) %% W //modulo operation
答案 1 :(得分:0)
我之前为Ramachandran情节做过这个。我会检查,但我似乎记得我使用的算法是:
因此,假设您的点在X轴上分开,您会发现点集的最小X坐标大于该区域的中点轴。然后找到 d 到Y轴边缘的距离。然后通过 d 移动整个群集。