我面临一个问题如下:我已经创建了一个Voronoi图,现在我想为每个区域分配一个值,即我想扩展这个Voronoi图以在Matlab中形成一个2变量函数。例如,让其中一个单元格命名为,我希望我要分配一个常量值的 2 变量函数(例如,) 到所有点. 对于其他单元格也是如此。
编辑:我在此处包含有关如何存储 Voronoi 图的信息。我正在使用的是voronoin函数,它返回多边形和单元格的顶点以及它们组成的相应顶点。此外,由于 Voronoi 图中划分的边是直线,因此可以追踪单元格。
我面临一个问题如下:我已经创建了一个Voronoi图,现在我想为每个区域分配一个值,即我想扩展这个Voronoi图以在Matlab中形成一个2变量函数。例如,让其中一个单元格命名为,我希望我要分配一个常量值的 2 变量函数(例如,) 到所有点. 对于其他单元格也是如此。
编辑:我在此处包含有关如何存储 Voronoi 图的信息。我正在使用的是voronoin函数,它返回多边形和单元格的顶点以及它们组成的相应顶点。此外,由于 Voronoi 图中划分的边是直线,因此可以追踪单元格。
您可以使用griddata带有'nearest'选项的功能来完成此操作。为了在多次调用您的函数时获得更好的性能,请使用 kd-tree 最近邻搜索。
要使用该griddata方法,只需F为单元定义一组值,并使用确定 Voronoi 图的点X, Y进行最近邻插值。为此,您显然需要知道定义 Voronoi 图的点。我猜你有这些观点,因为你说你正在使用该voronoin函数来生成 Voronoi 图。您可以将函数定义为f = @(x_in,y_in) griddata(X,Y,F,x_in,y_in,'nearest');,然后将其称为f(x,y).
如果您需要对函数的许多单独调用执行此操作,那么定义搜索树然后重新使用它会更快。如果您有统计工具箱,您可以使用 KD Trees 执行此操作,如下所示:
clear
X=rand(15,1);
Y=rand(15,1);
kdtree = KDTreeSearcher([X(:),Y(:)]);
F(:,1)=(1:15);
f = @(x_in,y_in) F( kdtree.knnsearch([x_in(:),y_in(:)]) );
x=rand(1000,1);
y=rand(1000,1);
fvals = f(x,y);
figure(1)
clf
hold on
voronoi(X,Y,'kx')
scatter(x,y,100,fvals,'.')
