Как найти самые дальние координаты x, y из многих точек? - PullRequest
1 голос
/ 09 февраля 2020

У меня есть набор случайных точек на плоскости, и я хочу поместить другую точку в самое «разреженное» положение.

Например, если есть несколько точек в 0

# this python snippet just generates the plot blow.
import matplotlib.pyplot as plt

# there are actually a lot more, ~10000 points.
xs = [8.36, 1.14, 0.93, 8.55, 7.49, 6.55, 5.13, 8.49, 0.15, 3.48]
ys = [0.65, 6.32, 2.04, 0.51, 4.5, 7.05, 1.07, 5.23, 0.66, 2.54]
plt.xlim([0, 10])
plt.ylim([0, 10])
plt.plot(xs, ys, 'o')
plt.show()

enter image description here

Где я должен поместить новую точку в этой плоскости, чтобы новая точка стала наиболее удаленной от другие? Обратите внимание, что я хочу максимизировать минимальное расстояние до другой точки, но не максимизировать среднее расстояние до всех остальных точек (благодаря комментарию user985366 ).

" Как можно Я нахожу самую дальнюю точку из набора существующих точек?"- это та, по крайней мере, которую я смог найти, но я не уверен, что страница непосредственно решает мою ситуацию (на самом деле связанный случай выглядит более сложным, чем мой случай) .

[edit] Кстати, я заметил, что общая ограниченная глобальная оптимизация может найти возможное решение (если я добавлю точку в каждом углу) [4.01, 5.48] в этом случае, но я думаю, что это не так. не сработает, если их намного больше, скажем, ~ 10000 баллов.

1 Ответ

4 голосов
/ 09 февраля 2020

Ваша проблема может быть решена путем вычисления диаграммы Вороного из набора точек. Это деление плоскости на регионы, так что в исходном наборе есть одна область на точку, а внутри этой области соответствующая точка ближе, чем другие точки из набора.

Границы этих областей являются прямыми линиями, так что любая точка на этой линии равноудалена от двух точек, соответствующих областям, которые встречаются на этой границе. Поэтому вершины, где встречаются несколько границ, равноудалены как минимум от трех точек от исходного набора.

Самая редкая точка на плоскости - это либо вершина на диаграмме Вороного, либо пересечение ребра на диаграмме Вороного. с границей плоскости или одним из углов плоскости. Диаграмма Вороного может быть вычислена с помощью стандартных алгоритмов за O (n log n) времени; после этого самая редкая точка может быть найдена за линейное время, так как вы знаете, к каким областям Вороного каждая вершина / ребро примыкает, и, следовательно, к какой точке из исходного набора для измерения расстояния.

...