我将处理数以千计的问题。我可以实现或使用Fortunes算法的现有实现来生成点的Voronoi图,但是我的应用程序还要求我了解每个Voronoi单元的邻接关系。
更具体地说,对于任何Voronoi细胞,我需要知道与之相邻的细胞。在这一点上,我不必担心输出或存储方法,因为我很可能可以对实现进行优化以使其对我有利。
有谁知道一种算法,或者更好地意识到一种可以完成小区邻接确定的算法?我将做的工作是在python中进行,但是任何事情都将是很棒的,因为我可以轻松地翻译代码。
谢谢!
我想制作统计数据的voronoi树图,比如
newsgraphy
你知道我怎么能在Perl,PHP,Ruby或Python中做到这一点吗?
我正在研究一个使用Voronoi创建地图的Java程序.我正在使用一个生成Voronoi的Java库,它非常快(http://sourceforge.net/projects/simplevoronoi/).
我面临的问题是,然后,我必须扫描每个Voronoi边缘,以了解边缘左边和右边的点,以创建包含每个点的多边形.它是包含每个Voronoi边缘的类:
public class GraphEdge
{
public double x1, y1, x2, y2;
public int site1;
public int site2;
}
Run Code Online (Sandbox Code Playgroud)
坐标x1, y1, x2, y2
是边缘开始和结束坐标,site1
并且site2
是边缘左侧和右侧的点的索引.因此,要创建包含每个点的多边形,我会这样做:
for(int n = 0; n < xValues.length; ++n){
polygonsList.add(new GPolygon());
for(GraphEdge mGraphEdge : edgesList){
if( (xValues[mGraphEdge.site1] == xValues[n] || xValues[mGraphEdge.site2] == xValues[n])
&& (yValues[mGraphEdge.site1] == yValues[n] || yValues[mGraphEdge.site2] == yValues[n]) ){
polygonsList.get(n).addPoint((int)mGraphEdge.x1, (int)mGraphEdge.y1);
polygonsList.get(n).addPoint((int)mGraphEdge.x2, (int)mGraphEdge.y2);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在哪里xValues
和yValues
是我生成Voronoi图的点坐标,并且GPolygon
是我创建的Polygon类,它是从java.awt.Polygon
.这些是我测量的时间:
我正在尝试自定义绘制二维中随机点的Voronoi区域
import matplotlib.pyplot as plt
%matplotlib inline
from scipy.spatial import Voronoi
pt = np.random.random((10,2))
x = sp.spatial.Voronoi(pt)
# trial an error to figure out the type structure of [x]
plt.plot(x.vertices[:,0], x.vertices[:,1], '.', markersize=5)
# how to iterate through the x.regions object?
for poly in x.regions:
z = np.array([ x.vertices[k] for k in poly])
print z
if z.shape[0] > 0:
plt.plot( z[:,0], z[:,1])
plt.xlim([0,2])
plt.ylim([0,2])
Run Code Online (Sandbox Code Playgroud)
为什么区域重叠?绘制无限区域的任何建议?
数据点只是随机数:
x.vertices
array([[ 0.59851675, 0.15271572],
[ 0.24473753, 0.70398382],
[ 0.10135325, 0.34601724],
[ 0.42672008, …
Run Code Online (Sandbox Code Playgroud) 给定 Voronoi 图,如何定位包含查询点 q 的多边形?如果 q 是 Voronoi 站点之一,那会有什么不同吗?
我们是否遍历每个多边形并检查多边形中的点?这样做既昂贵又缓慢。
我正在尝试删除 Voronoi 图中的外部多边形。主要情节是这样的:
require(ggplot2)
require(ggvoronoi)
set.seed(2023)
N <- 80
x <- runif(N)
y <- runif(N)
df <- data.frame(x, y)
df$dist <- rnorm(N)
ggplot(df, aes(x, y, fill = dist)) +
geom_voronoi() +
stat_voronoi(geom = "path") +
theme_void()
Run Code Online (Sandbox Code Playgroud)
如果我对轴设置限制,就会发生接近我想要的情况。然而,仍然填充了一些外部多边形:
ggplot(df, aes(x, y, fill = dist)) +
geom_voronoi() +
stat_voronoi(geom = "path") +
theme_void() +
xlim(0.1, 0.9) +
ylim(0.1, 0.9)
Run Code Online (Sandbox Code Playgroud)
[
隔离/识别图形边缘周围最外层的多边形并使它们透明或统一颜色的最佳方法是什么?