Calculating the distance between points using vectorization.

조회 수: 16 (최근 30일)
Giuseppe
Giuseppe 2014년 3월 23일
댓글: Giuseppe 2014년 3월 24일
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.

채택된 답변

Jan
Jan 2014년 3월 23일
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));

추가 답변 (2개)

Azzi Abdelmalek
Azzi Abdelmalek 2014년 3월 23일
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 2014년 3월 23일
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))

카테고리

Help CenterFile Exchange에서 Computational Geometry에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by