2015-11-29 8 views
1

У меня естьКак найти ближайшие две точки между двумя матрицами?

X = (Yt.*sin(W))-(Xt.*cos(W)); 
Y = (Yt.*cos(W))+(Xt.*sin(W)); % which give the coordinates X and Y. 
X_inv = R.*sin(B_involute); 
Y_inv = R.*cos(B_involute);  % which give the coordinates X_inv and Y_inv. 

Мне нужно найти ближайшие две точки между X, Y и X_inv, Y_inv.

большое спасибо.

+2

При появлении вопроса о упражнении/домашнем задании вы должны показать ** свои собственные попытки, прежде чем отправлять их на СО. SO не является фабрикой кодов. – Timofey

+0

Я мог бы показать всю свою программу, но мне просто нужен кто-нибудь, чтобы предложить мне способ/идею. не код! просто расслабься. Кстати, это не домашнее задание. просто пытаясь хорошо изучить Matlab. –

+0

Покажите, что вы уже пробовали, какую часть проблемы вы не понимаете. И тогда мы всегда рады помочь :) – Timofey

ответ

1

Вы можете вычислить попарные расстояния эффективно используя pdist2

D = pdist2([X(:) Y(:)], [X_inv(:) Y_inv(:)]); 

После того как вы попарные расстояния, легко найти минимальное расстояние

[md mi] = min(D(:)); 

линейный индекс Conver в пара индекс

[idx, inv_idx] = ind2sub(size(D), mi); 

Результат

fprintf(1, 'Closest points are [%d]: (%f,%f) -> [%d]: (%f,%f)\n',... 
     idx, X(idx), Y(idx), inv_idx, X_inv(inv_idx), Y_inv(inv_idx)); 
+0

Я ценю http://stackoverflow.com/questions/33984199/how-to-find-nearest-two-points-between-two-matrices/33984933#33984933 –

1

Я дам вам некоторые подсказки:

  1. Используйте loops перебрать каждый X и Y элементы в обеих матрицах.
  2. Используйте Euclidean Distance, чтобы получить расстояние между текущими точками.
  3. Принимайте минимальные расстояния, которые у вас есть.