У меня есть матрица измеренных углов между плоскостями MНайти близкие расстояния, соответствующие набор точек на расстоянии матрицы в Matlab
0 52 77 79
52 0 10 14
77 10 0 3
79 14 3 0
У меня есть список известных углов между плоскостями, который представляет собой N- by-N, которую я называю rho
. Вот это подмножество (он слишком велик для отображения):
0 51 68 75 78 81 82
51 0 17 24 28 30 32
68 17 0 7 11 13 15
75 24 7 0 4 6 8
78 28 11 4 0 2 4
81 30 13 6 2 0 2
82 32 15 8 4 2 0
Моя миссия состоит в том, чтобы найти множество М плоскостей, чьи углы в rho
ближе всего к измеренным углам. Например, измеренные углы для плоскостей, показанных выше, относительно близки к известным углам между плоскостями 1, 2, 4 и 6.
По-другому, мне нужно найти набор точек в матрице расстояний (которая использует расстояния, связанные с косинусом), которые соответствуют набору измеренных расстояний. Это также можно рассматривать как сопоставление шаблона с формой.
В моей проблеме у меня есть M = 5 и N = 415.
Я действительно пытался обвести голову, но у меня закончилось время. Поэтому в настоящее время я использую простейший метод: итерацию по любой возможной комбинации из трех плоскостей, но это медленно и в настоящее время написано только для M = 3. Затем я возвращаюсь список соответствия самолетов, отсортированных по согласующему баллу:
function [scores] = which_zones(rho, angles)
N = size(rho,1);
scores = zeros(N^3, 4);
index = 1;
for i=1:N-2
for j=(i+1):N-1
for k=(j+1):N
found_angles = [rho(i,j) rho(i,k) rho(j,k)];
score = sqrt(sum((found_angles-angles).^2));
scores(index,:)=[score i j k];
index = index + 1;
end
end;
end
scores=scores(1:(index-1),:); % was too lazy to pre-calculate #
scores=sortrows(scores, 1);
end
У меня есть ощущение pdist2
может помочь, но не знает, как. Я был бы признателен за любую помощь в этом.
Спасибо за ваш ответ. Однако, поскольку я специально хотел использовать решение без грубой обработки, я не могу его принять. Я не согласен с тем, что вы сказали об этом, не являясь общей проблемой. То, как я это описал, действительно специфично, но я думаю, что это вариант очень общий. Я думаю, вы можете сузить его до нахождения пересечения нескольких наборов. Я буду работать над этим больше, и если я не найду лучшего решения (или получу лучший ответ), я соглашусь с вами. – Yuval
Вам не нужно принимать, я только что видел ваш способ сделать это и сразу подумал, что это уже можно ускорить.На самом деле не было/иметь время/знания, чтобы найти прямое решение. –