Как сгенерировать точки с расстоянием между ними выше некоторой метки? - PullRequest
1 голос
/ 29 ноября 2011

Мне нужно сгенерировать (в matlab) L точек в d -мерном пространстве, которое должно удовлетворять условию, что расстояние между любыми двумя точками в наборе D (определено ниже) превышает некоторый заданный порог r .

Набор D = {L Объединение Комбинация из L} .Другие различные комбинации L генерируются как среднее значение.Например, комбинация точки 1,5,6 генерируется как (точка_1 + точка_5 + точка_6) / 3, аналогично комбинация 1,2,5,6 генерируется как (точка_1 + точка_2 + точка_5 + точка_6) / 4.

Как правило, множество D будет иметь $ \ sum_ {i = 1} ^ {L} L C_ {i} $ точек.

1 Ответ

1 голос
/ 29 ноября 2011

Я сделал код, который (я думаю) делает то, что вы объясняете, скажите мне, что вы думаете.

nL=6;
d=2;
r=0.1;
L=rand(d,nL); %%% generate nL random d-dimentional points

Lfinal=[];
for nn=1:nL %% for all passible size of subset of (1:nL)
  sets=nchoosek(1:nL,nn); %% all sub-set of 1:nL of size nn
  Ls=reshape(L(:,sets'),d,nn,[]); %% the corresponding Ls
  newL=squeeze(sum(Ls,2))/nn; %% their sums
  Lfinal=[Lfinal newL]; %% concatante to the final set of Ls.
end

L=Lfinal;
dists=pdist2(L',L'); %%% compute the distances between each point
dists(dists==0)=inf; %%% fill the diagonal with infinity to not use the distance between a point and it self
L=L*r/min(dists(:)); %%% multiply the points by "r/min(dists(:))" to make sure all points are at leat at distance r

L
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...