Effacer les filtres
Effacer les filtres

Find closest coordinates to a point from a list of coordinates where the list also contains that point

3 vues (au cours des 30 derniers jours)
I need to find closest point to A=[X2,Y2] among ListofNodes=[X1,Y1; X2,Y2; X3,Y3; ...], and I need to draw a line joining A and the closest point. I am using the following code:
A = [X2,Y2];
%compute Euclidean distances:
distances = sqrt(sum(bsxfun(@minus, ListofNodes , A).^2,2));
%find the smallest distance and use that as an index into ListofNodes:
closest = ListofNodes(distances==min(distances),:);
%draw a line joining the point and the closest coordinates
h = line(A,closest);
set(h, 'LineWidth', 0.01, 'Color','blue');
The problem is that ListofNodes also contains A. So, I am getting closest = A. How to solve this problem?
  3 commentaires
Rik
Rik le 31 Juil 2018
Modifié(e) : Rik le 31 Juil 2018
If you are not going to use KSSV's suggestion, you should use sort and use the second element. That would also solve the possibility of ties if there happen to be any.
KSSV
KSSV le 31 Juil 2018
If you don't want to use in built finction...get the distance of the point from each point, sort the distances and pick the least distant point. :) . knnsearch also does the same.

Connectez-vous pour commenter.

Réponses (1)

KSSV
KSSV le 31 Juil 2018
Modifié(e) : KSSV le 31 Juil 2018
Have a look on knnsearch. It will give you what you want.
A = rand(10,2) ;
idx = knnsearch(A,A(2,:),'k',2) ; % get two close points
idx(1) = [] ; % remove the pomnt itself
plot(A(:,1),A(:,2),'.r') ;
hold on
plot(A(2,1),A(2,2),'Ob') ;
plot([A(2,1), A(idx,1)],[A(2,2), A(idx,2)])

Catégories

En savoir plus sur Coordinate Transformations dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by