
Find a 4-point polygon enclosing scattered points
    조회 수: 14 (최근 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:

추가 답변 (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!


