Calculating the distance between points using vectorization.

16 vues (au cours des 30 derniers jours)
Giuseppe
Giuseppe le 23 Mar 2014
Commenté : Giuseppe le 24 Mar 2014
Hi I have the matrix;
points = [2 5; 6 9; 7 8; 9 10; 6 10]
These points relate to a set of x and y coordinates. I want to calculate the distance between each of the points e.g. distance between 2 5 and 6 9 and 6 9 and 7 8 and so on until 6 10 is last point and the distance between it and 2 5. These points create an area such that I want to calculate the perimeter.
I know the distance formula is;
distance_between_two_points = sqrt((x2-x1)^2 + (y2-y1)^2)
So that the distance between 2 5 and 6 9 would be;
distance_between_two_points = sqrt((6-2)^2 + (9-5)^2)
How would I use vectorization to calculate the distance between all of the points. I also then need to calculate perimeter but I have figured I will use the sum function. Also how could I make it such that if the values for the points changed I would get the answer and so that if extra points were added this would be accounted for.
Thanks.
NOTE: No built in functions for perimeter or distance are to be used.

Réponse acceptée

Jan
Jan le 23 Mar 2014
points = [2 5; 6 9; 7 8; 9 10; 6 10];
Diff = [diff(points, 1); points(end, :)-points(1, :)];
Dist = sqrt(sum(Diff .* Diff, 2));

Plus de réponses (2)

Azzi Abdelmalek
Azzi Abdelmalek le 23 Mar 2014
points = [2 5; 6 9; 7 8; 9 10; 6 10]
for k=1:size(points,1)-1
p1=points(k,:);
p2=points(k+1:end,:);
a=bsxfun(@minus,p2,p1)
d{k,1}=sqrt(sum(a.^2,2))
end
out=cell2mat(d)

Mischa Kim
Mischa Kim le 23 Mar 2014
Giuseppe, would this do?
points = [2 5; 6 9; 7 8; 9 10; 6 10];
b = points - circshift(points,-1,1);
len = sqrt(sum(b.*b,2))

Catégories

En savoir plus sur Computational Geometry dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by