Azzera filtri
Azzera filtri

Calculating the distance between points using vectorization.

17 visualizzazioni (ultimi 30 giorni)
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.

Risposta accettata

Jan
Jan il 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));

Più risposte (2)

Azzi Abdelmalek
Azzi Abdelmalek il 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 il 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))

Categorie

Scopri di più su Computational Geometry in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by