Calculating the distance between points using vectorization.
조회 수: 16 (최근 30일)
이전 댓글 표시
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.
댓글 수: 0
채택된 답변
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
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)
댓글 수: 0
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))
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Computational Geometry에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!