【问题标题】:How to get coordinates of border meeting points from scipy.spatial.Voronoi如何从 scipy.spatial.Voronoi 获取边界会合点的坐标
【发布时间】:2025-12-21 18:25:11
【问题描述】:

我正在使用 scipy.spatial.Voronoi 来计算 Voronoi 图:

import numpy as np
from scipy.spatial import Voronoi

points = np.array([[51.129378, 17.02925 ],
                   [51.086225, 17.012689],
                   [50.913433, 15.765608],
                   [53.121764, 17.987906],
                   [53.134083, 17.995708],
                   [51.75805 , 19.529786]])


vor = Voronoi(points)

我收到以下图表:

如何获取橙色点的坐标?似乎没有(至少记录在案的)属性。

动机:我的目标是计算没有蓝点的最大圆。所以我打算计算每个橙色和蓝色点之间的距离。然后我将检查每个橙色点并选择一个具有最高最小距离值的点。它将是我的目标圈子的中心。如果没有 Voronoi,也许还有其他方法可以做到这一点?

【问题讨论】:

    标签: python scipy voronoi scipy-spatial


    【解决方案1】:

    这些点在vertices 属性中可用。 documentation of Voronoivertices 属性描述为“Voronoi 顶点的坐标”。 (在链接的网页中向下滚动以查找属性的描述。)

    这是你的例子:

    In [5]: import numpy as np
    
    In [6]: from scipy.spatial import Voronoi
    
    In [7]: points = np.array([[51.129378, 17.02925 ],
       ...:                    [51.086225, 17.012689],
       ...:                    [50.913433, 15.765608],
       ...:                    [53.121764, 17.987906],
       ...:                    [53.134083, 17.995708],
       ...:                    [51.75805 , 19.529786]])
       ...:                    
    
    In [8]: vor = Voronoi(points)
    

    这些是绘制为橙色点的点:

    In [9]: vor.vertices
    Out[9]: 
    array([[52.56952748, 18.87348869],
           [51.7974129 , 18.19059283],
           [56.91850562, 12.00665177],
           [52.80703622, 16.09228084],
           [50.53735155, 18.50739102],
           [51.36995954, 16.33786426]])
    

    请注意,voronoi_plot_2d(vor) 在绘图上选择的 x 和 y 限制太小而无法看到所有顶点。这是一个显示所有内容的图:

    In [15]: import matplotlib.pyplot as plt
    
    In [16]: from scipy.spatial import voronoi_plot_2d
    
    In [17]: voronoi_plot_2d(vor)
    Out[17]: <Figure size 1280x960 with 1 Axes>
    
    In [18]: plt.xlim(50, 58)
    Out[18]: (50, 58)
    
    In [19]: plt.ylim(11, 20)
    Out[19]: (11, 20)
    

    【讨论】:

    • 这让我很尴尬。看起来我在脑海中错误地翻译了顶点。但修剪后的情节也增加了一些混乱。感谢您展示如何扩展此情节。