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

how to assign the dotes to which Voronoi cell belongs?

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

例如(简单)

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

这里有3个单元格,我想找出哪个单元格里面有哪个点

Voronoi diagram 由一组种子点定义。这导致将 space 划分为单元格,每个种子点一个单元格。在您的示例中,种子点是 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() 时进行转置,因为它期望行对应于点,列对应于维度。