如何分配Voronoi单元所属的点?

时间:2016-06-26 00:14:29

标签: matlab matrix voronoi

我想知道如何找到位于每个Voronoi单元格中的点的索引。

例如

(简单地)

x=rand(2,6)*10
voronoi(x(1,1:3),x(2,1:3),'*')
hold on
plot(x(2,:),x(1,:),'o')

这里有3个单元格,我想在哪个单元格中找到哪个点

1 个答案:

答案 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()时进行转置,因为它希望行对应于点和列对应维度。