我尝试在matlab中计算每个Voronoi单元的面积,但是我卡住了。我在网上找到了这段代码:
[v , c] = voronoin(sdata);
for i = 1 : size(c ,1)
ind = c{i}';
tess_area(i,1) = polyarea( v(ind,1) , v(ind,2) );
end
这段代码无法运行,因为v中的一个点是[Inf,Inf],这是一个无限远的点。我该如何解决这个问题?
我尝试在matlab中计算每个Voronoi单元的面积,但是我卡住了。我在网上找到了这段代码:
[v , c] = voronoin(sdata);
for i = 1 : size(c ,1)
ind = c{i}';
tess_area(i,1) = polyarea( v(ind,1) , v(ind,2) );
end
这段代码无法运行,因为v中的一个点是[Inf,Inf],这是一个无限远的点。我该如何解决这个问题?
sdata = [ 0.5 0
0 0.5
-0.5 -0.5
-0.2 -0.1
-0.1 0.1
0.1 -0.1
0.1 0.1 ]
[v , c] = voronoin(sdata);
for i = 1 : size(c ,1)
ind = c{i}';
tess_area(i,1) = polyarea( v(2:end,1), v(2:end,2))
end
[ v, c] = voronoin ( sdata );
tess_area=zeros(size(c,1),1);
for i = 1 : size(c ,1)
ind = c{i}';
if ind~=1
tess_area(i,1) = polyarea( v(ind,1) , v(ind,2) );
end
end
您需要定义您感兴趣的空间边界。例如,如果您绘制一个正方形来包围您的 Voronoi 单元格,那么根据正方形的大小,单元格的面积将不同。
Voronoi 分割本身无法设置单元格的外部边界。
如果 Matlab 有多边形相交函数,那么应该很容易实现。一些相关的线程可能是:
如果 Matlab 没有这个功能,您可以手动计算 Voronoi 线和多边形边界线之间的交点,然后基于此计算一个新的多边形,从中计算面积。