我试图生成一组点,其中m个点的组均匀分布在一个大区域中。我已经解决了这个问题(下面的解决方案),但我正在寻找更优雅或至少更快的解决方案。将区域有效地划分为N个凸区域
假设我们有9个积分,我们希望在3个小组中放置一个x=[0,5]
和y=[0,5]
指定的区域。然后,我首先在这个区域产生的网状
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
如果取消注释的意见,然后代码也将绘制集群和点中的位置。我所提到的问题主要是避免为了使代码更高效而对一个相当精细的统一网格进行聚类。
如果有图像处理工具箱可以生成'M'随机点,并使用[bwdist](HTTPS的第二输出://www.mathworks .com/help/images/ref/bwdist.html)来分区空间。 – rahnema1
你想举个例子吗? –
kmeans的结果是不确定的。根据中心开始的随机配置,您可能会得到不同的结果。你想要具有几乎相同面积的多边形?或者你想要多边形具有不同的面积?应该随机放置还是应该定期放置。 – rahnema1