Sort coordinates based on closest connectivity?

조회 수: 12 (최근 30일)
Eric Chadwick
Eric Chadwick 2018년 2월 20일
댓글: Walter Roberson 2018년 8월 29일
Hello,
I have an nx3 array representing x,y,z coordinates in space. These coordinates are all connected and represent a tortuous line. I would like to calculate the length of this line, however the coordinates I have are not in order of connectivity. Is it possible to reorder them such that I can simply calculate the length by doing a for loop like:
length = 0;
for i = 1:length(array)-1
length = norm([coords(i,1)-coords(i+1,1),coords(i,2)-coords(i+1,2),coords(i,3)-coords(i+1,3)]);
end
I have tried just finding the neighbours of each coordinate and reordering that way, but this gets very convoluted quickly and requires that I "walk" through the line. For the total dataset I am trying to analyze I will literally have millions of these lines, so I am trying to avoid slow solutions like that.
Edit: The lines I'm working with are in an image, and the points on the line must have a max distance from each consecutive point of (1,1,1). That is, 1 pixel in x,y, and z.

채택된 답변

Image Analyst
Image Analyst 2018년 2월 20일
  댓글 수: 7
Image Analyst
Image Analyst 2018년 8월 28일
I don't see any rationale for how you're connecting the points in the figure
in that order, [1-2-3-4-1-3-6-7]. How is that order decided? If it's just arbitrary, then you can still do
outputArray = inputArray(Order);
with whatever order you want.
Walter Roberson
Walter Roberson 2018년 8월 29일
Asyran Abdullah comments to Image Analyst
Thanks it's good

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

Community Treasure Hunt

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

Start Hunting!

Translated by