如何分配 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()
时进行转置,因为它期望行对应于点,列对应于维度。
我想知道如何找到位于每个 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()
时进行转置,因为它期望行对应于点,列对应于维度。