![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/646535/image.jpeg)
Find a 4-point polygon enclosing scattered points
조회 수: 4 (최근 30일)
이전 댓글 표시
I have a set of scattered points (x,y) as in the attached figure and I want to find the polygon defined only by 4 points that encloses those scattered points. Those 4 points will belong to the original set of (x,y) points because they are quite regularly spaced as in the figure. How could I find the vertices of the shape? thanks
댓글 수: 0
채택된 답변
Scott MacKenzie
2021년 6월 8일
편집: Scott MacKenzie
2021년 6월 8일
No doubt this can be simplified, but I think it meets your objective of finding the vertices (4) enclosing the points:
% create sample of regularly-spaced points, as per question
g = 0:0.1:1;
x = [];
y = [];
for i=1:10
x = [x i+g];
y = [y i-g];
end
ax = gca;
ax.XTick = 0:12;
ax.YTick = -2:12;
hold on;
plot(x,y,'.');
k = boundary(x',y');
[~, xMinIdx] = min(x(k));
[~, xMaxIdx] = max(x(k));
[~, yMinIdx] = min(y(k));
[~, yMaxIdx] = max(y(k));
xx = x(k);
yy = y(k);
p = polyshape([xx(xMinIdx) xx(yMinIdx) xx(xMaxIdx) xx(yMaxIdx)], ...
[yy(xMinIdx) yy(yMinIdx) yy(xMaxIdx) yy(yMaxIdx)]);
plot(p);
v = p.Vertices % output vertices (4)
Command window output:
v =
1 1
10 10
11 9
2 0
Figure window:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/646535/image.jpeg)
추가 답변 (1개)
Matt J
2021년 7월 8일
k=convhull(x,y);
xc=x(k); yc=y(k); %corners
댓글 수: 5
Matt J
2021년 7월 8일
편집: Matt J
2021년 7월 8일
@Scott MacKenzie similar to your solution, polyshape is a pretty good tool for weeding out the non-vertex boundary points that convhull() doesn't manage to find:
g = 0:0.1:1;
x = [];
y = [];
for i=1:10
x = [x i+g];
y = [y i-g];
end
k=convhull(x,y);
p=polyshape(x(k),y(k));
v=p.Vertices
참고 항목
카테고리
Help Center 및 File Exchange에서 Elementary Polygons에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!