필터 지우기
필터 지우기

put line segements in order according to their endpoint

조회 수: 3 (최근 30일)
Katherine Zheng
Katherine Zheng 2022년 10월 5일
답변: Ayush 2023년 9월 4일
I have 5 line segements and their endpoints. The 5 line segements are suppose to connected as a closed shape. But the order of the line segements are mess. What is the best way to easily determine the order of the segements by their endpoints.
For examples I have
endpoint1 =
1 1.012 0.25605
1.744 1 0.15908
1 1 0.25511
1.744 1 0.15908
1 1 0.25511
endpoint2 =
2.104 1 0.18321
1.336 1 0.17942
1.336 1 0.17942
2.104 1 0.18321
1 1.012 0.25605
These endpoints can clearly shows how to connect the line segements but I just couldn't figure out how to tell MATLAB to do it. Please help!

답변 (1개)

Ayush
Ayush 2023년 9월 4일
To determine the order of line segments based on their endpoints, you can use a simple approach in MATLAB. Here's a step-by-step guide:
1. Store the endpoints of each line segment in separate arrays. Let's call them `endpoint1` and `endpoint2`, as given in your example.
2. Create a matrix `distances` to store the distances between each pair of endpoints. Initialize it with zeros.
3. Calculate the Euclidean distance between each pair of endpoints and store it in the `distances` matrix. MATLAB's `pdist2` function can be used for this purpose.
4. Find the indices of the minimum distances in each row of the `distances` matrix. MATLAB's `min` function can be used for this.
5. Use the indices obtained in the previous step to determine the order of the line segments. The line segment with the minimum distance between its endpoints should be the first segment. The line segment with the maximum distance between its endpoints should be the last segment.
Here's an example code snippet to illustrate this process:
% Step 1: Define the endpoints
endpoint1 = [
1 1.012 0.25605
1.744 1 0.15908
1 1 0.25511
1.744 1 0.15908
1 1 0.25511
];
endpoint2 = [
2.104 1 0.18321
1.336 1 0.17942
1.336 1 0.17942
2.104 1 0.18321
1 1.012 0.25605
];
% Step 2: Initialize the distances matrix
distances = zeros(size(endpoint1, 1), size(endpoint2, 1));
% Step 3: Calculate the distances
for i = 1:size(endpoint1, 1)
for j = 1:size(endpoint2, 1)
distances(i, j) = pdist2(endpoint1(i, :), endpoint2(j, :));
end
end
% Step 4: Find the indices of minimum distances in each row
[minDistances, segmentIndices] = min(distances, [], 2);
% Step 5: Determine the order of line segments
[~, firstSegmentIndex] = min(minDistances);
[~, lastSegmentIndex] = max(minDistances);
% Display the order of line segments
order = [firstSegmentIndex; setdiff(1:size(endpoint1, 1), [firstSegmentIndex, lastSegmentIndex])'; lastSegmentIndex];
disp(order);
This code will display the order of line segments, where the first and last segments are determined based on the minimum and maximum distances between their endpoints, respectively. The remaining segments are ordered based on their distances.
To learn more about the functions used kinldy view the following documentations:
Hope this helps!

카테고리

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

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by