找到阵列中彼此相距最远的点

时间:2017-04-06 16:04:43

标签: python

我有5个x,y坐标点,我也有一个允许的x,y偏移量。我可以将这个偏移量应用于每个点以使其正向和反向移动。这意味着在应用所有允许的位移后,每个点有四个可能的位置。

import numpy as np
import matplotlib.pyplot as plt

# xy data for 5 points
xy = [[1929.39695287, 1579.6, 1548.0451124, 1561.47793473, 1053.18163361],
      [2020.79329391, 1869.4327316, 1800.71748721, 2112.769, 1840.28]]
xy = zip(*xy)

# Define xy offset
offset = [201.8445, 202.9015]

# Create the 4 possible offset combinations for each of the 5 points
xy_offset = []
for pt in xy:
    xy_offset.append([
        [pt[0] + offset[0], pt[1] + offset[1]],
        [pt[0] + offset[0], pt[1] - offset[1]],
        [pt[0] - offset[0], pt[1] + offset[1]],
        [pt[0] - offset[0], pt[1] - offset[1]]])

plt.scatter(*zip(*xy), c='k')
for xy in xy_offset:
    plt.scatter(*zip(*xy))
plt.show()

原始点以黑色显示如下,其中4个可能的新位置着色(每个点的4个偏移位置颜色相同):

enter image description here

我需要为所有点找到5个“新”位移位置的组合,以便最大化每个点与最近点之间的距离之和。

1 个答案:

答案 0 :(得分:1)

那么......近似求解算法......

  1. 计算现有点的质心。
  2. 对于每个点的4个选择,选择距离质心最远的那个。
  3. 计算总距离;这是你的第一个近似值。
  4. 对于集合中的每个点,检查移动到其他三个选项中的每一个的效果。如果其中任何一个提供了更好的总距离,请改为该位置。
  5. 重复步骤4,直到没有进一步的更改。