将区域有效地划分为N个凸区域

时间:2017-08-09 18:52:35

标签: matlab performance

我正在尝试生成一组点,其中m个点的组均匀分布在大区域上。我已经解决了这个问题(下面的解决方案),但我正在寻找更优雅或更快的解决方案。

假设我们想要在由x=[0,5]y=[0,5]指定的区域中以3个为一组放置9个点。然后我首先在这个区域生成一个网格

meshx = 0:0.01:5;
meshy = 0:0.01:5;
[X,Y] = meshgrid(meshx,meshy);
X = X(:); Y = Y(:);

然后平均放置9/3 = 3组我应用kmeans聚类

idx = kmeans([X,Y],3);

然后对于每个群集,我现在可以绘制一个3点的随机样本,我将其保存到列表中:

pos = zeros(9,2);
for i = 1:max(idx)
    spaceX = X(idx==i);
    spaceY = Y(idx==i);
    %on = convhulln([spaceX,spaceY]);
    %plot(spaceX(on),spaceY(on),'black')
    %hold on
    sample = datasample([spaceX,spaceY],3,1);
    %plot(sample(:,1),sample(:,2),'black*')
    %hold on
    pos((i-1)*3+1:i*3,:) = sample;
end 

如果您取消注释评论,那么代码也会绘制集群和点内的位置。我提到的问题主要是避免必须聚集一个相当精细的统一网格,以使代码更有效。

0 个答案:

没有答案