我试图在Chebyshev距离下找到一组点的质心。我写了一个程序,显然适用于我尝试的案例,但显然给出了一些我无法访问的边缘案例的错误答案。 [Meta评论:我会标记这个作业,但标签已经过时了]
要进行追逐,质心是与点集之间的最小平均距离的点。二维点p和q的切比雪夫距离是
另外,我被限制在积分坐标的点上。
这是我的代码:
sum_x=0; sum_y=0
for p in points:
sum_x = sum_x + p[0]
sum_y = sum_y + p[1]
center_x = int(sum_x/N)
center_y = int(sum_y/N)
directions = [(-1,-1),
(-1,0),
(-1,1),
(0,-1),
(0,0),
(0,1),
(1,-1),
(1,0),
(1,1)]
distances = [0] * len(directions)
for p in points:
for i in range(len(directions)):
distances[i] = distances[i] + max(abs(center_x+directions[i][0]-p[0]),abs(center_y+directions[i][1]-p[1]))
best_direction = min(range(len(directions)), key = lambda i:distances[i])
print "centroid = (", center_x+directions[best_direction][0],",", center_y+directions[best_direction][1],")"
print "total distance = ", distances[best_direction]
这是我的理由:切比雪夫指标与2维中旋转的曼哈顿距离相同。我基本上找到曼哈顿质心,它与点的常规平均值相同,然后只搜索相邻的积分点以获得实际的切比雪夫质心。但我似乎无法在我的代码中找到错误。
答案 0 :(得分:1)
您的理由在一次计数中是不正确的。曼哈顿质心不点的平均值。例如,取点集(0,0); (1,0); (100,0)。平均值是(33.66,0),但我们可以通过选择(1,0)来做得更好。再做几个例子,你应该很容易看到真正的答案。
另外,您提到切比雪夫指标相当于旋转时的曼哈顿距离 ,但您不会在代码中的任何位置旋转点。这似乎至少是不一致的:你不应该在旋转的空间中计算曼哈顿的质心吗?