我想知道如何找到位于每个Voronoi单元格中的点的索引。
例如(简单地)
x=rand(2,6)*10
voronoi(x(1,1:3),x(2,1:3),'*')
hold on
plot(x(2,:),x(1,:),'o')
这里有3个单元格,我想在哪个单元格中找到哪个点
答案 0 :(得分:1)
Voronoi diagram由一组种子点定义。这导致空间分裂成细胞,每个种子点有一个细胞。在您的示例中,种子点是x
中的前3个点。每个Voronoi单元包含更接近其种子点的所有点的集合,而不是任何其他种子点。例如,要确定单元格1中的哪些点,请找到最接近种子点1的点集。
您可以使用knnsearch()
执行此操作。按照你的例子:
% Seed points
s = x(:, 1:3);
% Find enclosing Voronoi cell for each data point
idx = knnsearch(s', x', 'k', 1)
% idx(i) = Index of nearest seed point to data point i
在这里,我们将x
的每一列视为数据点。第一行是x坐标,第二行是y坐标。这与您在调用voronoi()
时使用的相同。但是,我认为你在调用plot()
时不小心(?)交换了x和y坐标。我们在将矩阵传递给knnsearch()
时进行转置,因为它希望行对应于点和列对应维度。