簡體   English   中英

如何從多個點找到最遠的 x, y 坐標?

[英]How to find the farthest x, y coordinates from many points?

我在平面上有一組隨機點,我想在最“稀疏”的位置放置另一個點。

例如,如果在 0 < x < 10 和 0 < y < 10 中有一些點:

# 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()

在此處輸入圖片說明

我應該在這個平面的什么地方放置一個新點,以便新點與其他點最遠? 請注意,我想最大化到另一個點的最小距離,而不是最大化到所有其他點的平均距離(感謝user985366 的評論)。

如何從一組現有點中找到最遠的點? ”至少是我能找到的,但我不確定該頁面是否直接解決了我的情況(實際上鏈接的案例看起來比我的案例更復雜) .

[編輯] 順便說一句,我注意到在這種情況下,一般約束全局優化可以找到一個可能的解決方案(如果我在每個角落添加一個點)[4.01, 5.48],但我認為如果有還有很多,比如說~10000點。

您的問題可以通過計算點集的Voronoi 圖來解決。 這是將平面划分為多個區域,使得原始集合中的每個點有一個區域,並且在該區域內,對應點比集合中的其他點更近。

這些區域的邊界是直線,使得該線上的任何點與在該邊界處相交的區域對應的兩個點的距離相等。 因此,多個邊界相交的頂點與原始集合的至少三個點等距。

平面中最稀疏的點要么是 Voronoi 圖中的一個頂點,要么是 Voronoi 圖中的一條邊與該平面的邊界或該平面的一個角的交點。 Voronoi 圖可以通過標准算法在 O(n log n) 時間內計算出來; 在此之后,可以在線性時間內找到最稀疏的點,因為您知道每個頂點/邊與哪些 Voronoi 區域相鄰,因此您知道原始集合中的哪個點要測量到的距離。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM