繁体   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