我正在尝试生成一组点,其中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
如果您取消注释评论,那么代码也会绘制集群和点内的位置。我提到的问题主要是避免必须聚集一个相当精细的统一网格,以使代码更有效。