1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
// Now make a list of the visible points. There are 3 on average.
visible.clear();
edgeoff=edgelist.size();
for (k=left,n=0,m=1;m;k++,n++,m++)
{if (k==convexhull.end())
k=convexhull.begin();
if (k!=inspos) // skip the point just added - don't join it to itself
{visible.push_back(k->second);
edgelist.resize(edgelist.size()+1);
edgelist[edgelist.size()-1].a=j->second;
edgelist[edgelist.size()-1].b=k->second;
//printf("Adding edge from %p to %p\n",j->second,k->second);
}
if (k==right || n==maxedges) m=-1;
}
val=--n; //subtract one for the point itself
printf("%d points visible\n",n);
// Now delete old convex hull points that are now in the interior.
//for (k=left,n=0;n<=val;k++,n++)
for (k=left,n=cycles=0;n<=val-2 && cycles<val;k++,cycles++)
{if (k==convexhull.end())
k=convexhull.begin();
printf("Trying to delete %f %p\n",k->first,k->second);
for (m=1;m<visible.size()-1;m++)
if (k->second==visible[m])
{printf("Deleting %p, #%d in visible, from convexhull\n",visible[m],m);
convexhull.erase(k);
n++;
break;
}
}
|