我試圖生成一組點,其中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