How to fix this error “Index exceeds the number of array elements (57)” while using minboundquad function

조회 수: 2 (최근 30일)
%x = randn(50,1);
%y = randn(50,1);
points=importdata('points1.txt');
x=points(:,1);
y=points(:,2);
[qx,qy] = minboundquad(x,y);
plot(x,y,'ro',qx,qy,'b-')
Error shown is
The function is working for randomly generated points but not working for my pointset.
Can someone please help me solve this? This is the function minboundquad

채택된 답변

Gowtham HariHara
Gowtham HariHara 2021년 5월 26일
편집: Gowtham HariHara 2021년 5월 26일
Along with the modification suggested by @Sindhu Karri and Modifying another line in minboundquad.m from
if ( A_i < quadarea)
to
if (( A_i < quadarea)&& all(abs([qxi qyi]) < 1e15))
resolves the issue.

추가 답변 (3개)

Sindhu Karri
Sindhu Karri 2021년 5월 11일
Hii,
Modifying the line in minboundquad.m from
edges = convhull(x,y);
to
edges = convhull(x,y,'Simplify',true);
resolves the issue.
Refer to below link for further information on 'Simplify' parameter
minboundquad is one of the several submissions in MATLAB File Exchange on MATLAB Central which is a forum for our product users to interact, exchange information and knowledge, without MathWorks involvement. Feel free to contact the author of this submission directly for specific questions about any further clarification on implementation.
  댓글 수: 3
Gowtham HariHara
Gowtham HariHara 2021년 5월 14일
@Sindhu Karri As per your suggestion, I contacted the author of the toolbox for further clarification. But, unfortunately, due to some confusions, we could not solve it for different pointset.
If possible, will you please help me to solve this? It'll be really helpful. I attached the pointset.
Gowtham HariHara
Gowtham HariHara 2021년 5월 25일
@Sindhu Karri I tried alot to find what the error might be. I could not find. Will you help me find the error?

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


John D'Errico
John D'Errico 2021년 5월 11일
That code was written so long ago, I forgot I ever wrote it. But also, it was written in the days when the convex hull and triangulation tools in MATLAB were far less mature/sophisticated than they are now.
If I look at your dataset, it is just a huge number of points that all fall on a nice integer lattice. You probably extracted them as pixels from an image.
plot(xy(:,1),xy(:,2),'.')
All of the codes in that toolbox generally first took the convex hull of the data. Anything inside the convex hull is meaningfless in terms of a bounding polygon anyway. It dramatically reduces the problem, since it needs only to work with the edges of the convex hull.
T = convhull(xy(:,1),xy(:,2));
plot(xy(T,1),xy(T,2),'-o')
The problem arises since your data lives purely on an integer lattice. And that means that at least a few of those edges were collinear edges in the simple convex hull. In turn, that got the code confused.
The simple fix is to use what was suggested by @Sindhu Karri
T2 = convhull(x,y,'Simplify',true);
plot(xy(T2,1),xy(T2,2),'r-s')
As you can see here, the simplify option was smart to replace those multiple collinear edges with a single edge. That resolves the problem in the code, and it will make the code run faster too.
I must post new versions of the codes in that toolbox.
  댓글 수: 1
Gowtham HariHara
Gowtham HariHara 2021년 5월 12일
편집: Gowtham HariHara 2021년 5월 12일
@John D'Errico Thank you so much sir for your time and reply.
Though the modification in the function worked for the above pointset, unfortunately it did not work for some of the other cases like point-set2_this. The result for the linked pointset is like this.
Will you please help me find the possible error? This is the pointset

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


AMO
AMO 2021년 5월 29일
편집: AMO 2021년 5월 29일
Hi,
In minboundquad.m line 115, when removing consecutive edges that have the same angles the variable nedges is not updated. so adding
nedges = size(edges,1);
after line 122 seems to solve the problem. But I am not sure if this is the right way.

카테고리

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

제품


릴리스

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by