标签: voronoi

Voronoi Diagram边缘:如何从scipy.spatial.Voronoi对象中获取表单(point1,point2)中的边缘?

我花了很多时间试图从scipy.spatial.Voronoi图中获取边缘无济于事.以下是主要文档:http: //docs.scipy.org/doc/scipy-dev/reference/generated/scipy.spatial.Voronoi.html

如果你像这样创建一个Voronoi图:

points = np.array([[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2],
[2, 0], [2, 1], [2, 2]]) //Or feel free to use any set of points
Run Code Online (Sandbox Code Playgroud)

然后您可以访问以下对象属性:

vor.regions
vor.max_bound
vor.ndim
vor.ridge_dict
vor.ridge_points
vor.ridge_vertices
vor.npoints
vor.point_region
vor.points
Run Code Online (Sandbox Code Playgroud)

但目前还不清楚如何组合这些以获得2d voronoi图形式(point1,point2)的边缘?我知道边缘存在是因为您可以绘制voronoi图及其edgres和顶点,因为您可以执行以下操作:

voronoi_plot_2d(vor)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这清楚地描绘了voronoi edgres - 如何获得它们的列表及其起点和终点?没关系,如果我只获得坚实的边缘(不是虚线的那些无限制的情节)

python voronoi spatial matplotlib scipy

6
推荐指数
1
解决办法
3403
查看次数

如何计算基于曼哈顿距离的Voronoi tesselation

我正在尝试用2D中的曼哈顿距离计算Voronoi tesselation R.

理想情况下,这将是一个函数,它采用一组二维点并输出一个分隔空间的多边形列表.我不确定Voronoi tesselations的标志是什么.

当然也有很多方法可以做到这与欧几里德度量(包像deldirqhull使这很容易),但我还没有找到一种方法,为曼哈顿距离做到这一点.使用sos's 的搜索findFn('voronoi')也没有产生任何结果.

geometry voronoi r distance computational-geometry

6
推荐指数
1
解决办法
2048
查看次数

曼哈顿度量的 Voronoi 图

我正在使用scipy.spatialVoronoi 图的可视化。然而,这里使用的距离度量是欧几里德(L2)。我正在寻找一种在我的 Voronoi 图上进行曼哈顿 (L1) 度量的方法。有没有一种简单的(或多或少)方法可以做到这一点?

import numpy as np
import matplotlib.pyplot as plt

points = np.array([[1.5, 1.], [3.5, 1.], [5., 2.], [2.5, 3.], [3.5, 1.], [4., 4.]])
    
from scipy.spatial import Voronoi, voronoi_plot_2d
vor = Voronoi(points)

fig = plt.figure()
ax = fig.add_subplot('111')
ax.plot(points[:, 0], points[:, 1], 'o', color='k')
ax.set_xlim([-1, 9])
ax.set_ylim([-1, 9])
voronoi_plot_2d(vor, ax)
Run Code Online (Sandbox Code Playgroud)

基本上我想要得到类似的东西,但采用 L1 度量。

在此输入图像描述

我发现scipy.spatial.distance.cityblock可以处理感兴趣的指标,但不完全确定如何实现它才能正常工作?

python voronoi scipy

6
推荐指数
1
解决办法
1450
查看次数

创建具有圆形区域边缘的 Voronoi 艺术

我正在尝试创建一些艺术“情节”,如下所示:红色沃罗诺伊艺术 在此输入图像描述

区域的颜色并不重要,我想要实现的是沿着 Voronoi 区域的边缘的可变“厚度”(特别是,它们看起来像一个更大的圆形斑点,在拐角处相交,在拐角处相交处更薄)他们的中间点)。

我尝试根据到每个质心的最小距离“手动绘制”每个像素(每个像素与一种颜色相关联):

n_centroids = 10
centroids = [(random.randint(0, h), random.randint(0, w)) for _ in range(n_centroids)]
colors = np.array([np.random.choice(range(256), size=3) for _ in range(n_centroids)]) / 255

for x, y in it.product(range(h), range(w)):
    distances = np.sqrt([(x - c[0])**2 + (y - c[1])**2 for c in centroids])
    centroid_i = np.argmin(distances)
    img[x, y] = colors[centroid_i]
    
plt.imshow(img, cmap='gray')
Run Code Online (Sandbox Code Playgroud)

沃罗诺伊图

或者通过scipy.spatial.Voronoi,这也给了我顶点,尽管我仍然不知道如何以所需的可变厚度通过它们画一条线。

from scipy.spatial import Voronoi, voronoi_plot_2d

# make up data points
points = [(random.randint(0, 10), random.randint(0, 10)) for _ in range(10)]

# …
Run Code Online (Sandbox Code Playgroud)

python opencv voronoi matplotlib generative-art

6
推荐指数
1
解决办法
1410
查看次数

使用 python/scipy 进行 voronoi 和 lloyd 松弛

如何使用 Qhull 确定哪些 voronoi 单元(按索引)是“正确的”(由“现有顶点”组成)

我正在尝试使用 LLoyds 算法和由 scipy.spatial Voronoi(它是 Qhull 的包装器)生成的输入来执行约束松弛。

在代码方面,它看起来像:

points = [n  for n in itertools.product(xrange(3),xrange(3))]
vor = Voronoi(points)

vor2 = lloyd(vor) # my relaxation function  - not relevant to the question
Run Code Online (Sandbox Code Playgroud)

代码生成的输出图看起来不错(见下文),但 vor 结构中的数据不足以执行劳埃德松弛。这是因为我应该只移动有效 voronoi 单元格内的点(图像中的 #4)。另一个应该保持原样。Qhull 弄乱了点/区域的顺序,所以我无法估计哪个区域属于哪个点。

这是问题的说明:

print vor.vertices
#[[ 0.5  0.5]
# [ 1.5  0.5]
# [ 0.5  1.5]
# [ 1.5  1.5]]

print vor.regions  
# [[], [-1, 0], [-1, 1], [1, -1, 0], [3, -1, 2], [-1, 3], [-1, 2], [3, …
Run Code Online (Sandbox Code Playgroud)

python voronoi scipy qhull

5
推荐指数
1
解决办法
2483
查看次数

无法导入 scipy.spatial.voronoi

我正在尝试使用 scipy 的 Voronoi 镶嵌

http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.spatial.Voronoi.html

但python不会导入它

from scipy.spatial import Voronoi
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name Voronoi
Run Code Online (Sandbox Code Playgroud)

但是,我从 scipy.spatial 导入其他类没有问题

from scipy.spatial import Delaunay
Run Code Online (Sandbox Code Playgroud)

import voronoi scipy

5
推荐指数
0
解决办法
974
查看次数

如何合并相邻的多边形

我正在使用Fortune算法的Javascript实现来计算voronoi单元格(https://github.com/gorhill/Javascript-Voronoi).我要计算的网站是地图上的点(所以(lat,lng)).我首先做了投影(lat,lng) -> (x,y),然后我计算了voronoi单元格,并以另一种方式进行了半边投影.
它工作正常,我使用传单显示结果,但我需要做一件事.

我最初计算的每个站点都取决于ID,我按ID重新分类voronoi单元格,最后,对于每个具有标准数据结构的ID,如下所示:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [[
          [9.994812, 53.549487],
          [10.046997, 53.598209],
          [10.117721, 53.531737],
          [9.994812, 53.549487]
        ]]
      }
    }, {
      "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [[
          [10.000991, 53.50418],
          [10.03807, 53.562539],
          [9.926834, 53.551731],
          [10.000991, 53.50418]
        ]]
      }
    }
  ]
};
Run Code Online (Sandbox Code Playgroud)

给定ID的一组多边形(由voronoi单元格的一半边缘构成).

我需要通过ID合并这些多边形,我打算使用turf.merge(),但我有拓扑错误

 turf.min.js:13 Uncaught TopologyError: side location conflict
Run Code Online (Sandbox Code Playgroud)

根据这篇文章(http://lists.refractions.net/pipermail/jts-devel/2009-March/002939.html),我试图将(lat,lng)这对夫妇从10 ^ -14 圈到10 ^ -7但是它没有真正奏效.在寻找扭结并尝试删除它们之前,我打印了一些数据样本,我知道问自己是否使用了Fortune算法中的好数据.当我显示所有ID的所有多边形时,我有正确的图表,但是当我显示一个ID的所有多边形或一个ID的一些多边形时,我最终会得到不完整的图表:

完整图表的一部分

完整图表的一部分

在此输入图像描述

一个ID的部分图表 …

javascript geometry voronoi leaflet turfjs

5
推荐指数
1
解决办法
2126
查看次数

MATLAB中voronoi图的彩色无界单元格

我有两组点,plot它们分别是蓝星和红点。然后我plotvoronoi(X,Y)函数的两个集合的 Voronoi 图。我想指定每个单元格的颜色取决于它的站点属于哪个集合。我几乎通过patch这种方式使用函数来完成这个:

     [v,c]=voronoin(D);
     for p=1:TheNumberOfSets
       r=rand()/2+0.5;    % random gray color
       col=[r r r];
       for s=1:PointsInSet(p)
           l=l+1;
           patch(v(c{l},1),v(c{l},2),col);  % color
           axis([0 10 0 10]);
       end
     end
Run Code Online (Sandbox Code Playgroud)

D集合点的坐标在哪里,TheNumberOfSets显示我们有多少个集合(在这个特定的部分我们只有 2 个集合),col指定一个随机的灰色,PointsInSet指定我们在每个集合中有多少个点,l用于枚举Voronoi 图的单元格。

这是结果: 在此处输入图片说明

现在我的问题(如你所见!)是关于无界细胞。此代码只是更改有界单元格的颜色,我想在轴框范围内(即您可以在图像中看到的框)使用其指定集的颜色为无界单元格着色。

有什么建议吗?

matlab plot voronoi

5
推荐指数
1
解决办法
1277
查看次数

SciPy 中的 voronoi_plot_2d,虚线和实线的区别?和警告?

所以我使用了 voronoi_plot_2d() 函数,它是 SciPy 的一部分,当我绘制我的图表时,我得到了下面的图表,其中一些在集群之间有实心边界,有些有虚线边界。(隐藏每个聚类的散点图)

它们背后有不同的含义吗?如果它们是同一件事,例如,我如何指定我只想绘制实心边框?文档(http://scipy.github.io/devdocs/generated/scipy.spatial.voronoi_plot_2d.html)没有提及任何内容。

在此处输入图片说明

另外,我收到以下警告

MatplotlibDeprecationWarning: The ishold function was deprecated in version 2.0.
MatplotlibDeprecationWarning: axes.hold is deprecated.
Run Code Online (Sandbox Code Playgroud)

当我使用 voronoi_plot_2d() 函数时。我正在运行 Python 3.5,有没有办法让警告消失?我在我的代码中既没有使用 ishold 函数也没有使用axes.hold,所以警告一定来自 voronoi_plot_2d() 内部。

python voronoi scipy

5
推荐指数
1
解决办法
679
查看次数

如何通过 Python 的 scipy.spatial.Voronoi 获得与 MATLAB 的 voronoin 相同的输出

我使用voronoinMATLAB来判断单元格之间的连接,我想把这个函数转换成Python。

当我使用scipy.spatial.VoronoiPython 时,输出有点不同。例如,我对 MATLAB 和 Python 使用了相同的输入,您可以在下一个代码中看到。

MATLAB:

seed = [ 17.746    -0.37283   -0.75523;
         6.1704     1.3404     7.0341;
        -7.7211     5.4282     4.5016;
         5.8014     2.1252    -6.2491;
       -16.047     -2.8472    -0.024795;
        -2.2967    -6.7334     0.60707]
[vvern_mat, vceln_mat] = voronoin(seed);
Run Code Online (Sandbox Code Playgroud)

Python:

import numpy as np
from scipy.spatial import Voronoi
seed = np.array([[ 17.746   ,  -0.37283 ,  -0.75523 ],
       [  6.1704  ,   1.3404  ,   7.0341  ],
       [ -7.7211  ,   5.4282  ,   4.5016  ],
       [  5.8014  ,   2.1252  ,  -6.2491  ],
       [-16.047   ,  -2.8472  , …
Run Code Online (Sandbox Code Playgroud)

python matlab voronoi scipy

5
推荐指数
1
解决办法
114
查看次数