FIX find_longest_line on edge case

This commit is contained in:
avana 2017-02-23 01:27:59 +01:00
parent 979d5a5a09
commit bbd5210514

View file

@ -22,8 +22,8 @@ unsigned* max2_distance(std::vector<cv::Point> hull)
for(auto p: hull) {
std::cout << p << " ";
}
#endif
std::cout << std::endl;
#endif
unsigned *idx = (unsigned*) calloc(2, sizeof(int));
double distance[2] = {0};
for( unsigned i=0; hull.size()>i; i++ )
@ -126,11 +126,11 @@ find_longest_line(std::vector<cv::Point> hull, unsigned begin, unsigned end) //t
thisline.push_back(hull[(begin+1)%hull.size()]);
for(unsigned i=(begin+2)%hull.size(); i!=end; i++)
{
assert(2<=thisline.size());
assert(2<=thisline.size());
if(i==hull.size()) {
i=0;
}
assert(i < hull.size());
}
assert(i < hull.size());
if(similar_fit(thisline, hull[i])) {
thisline.push_back(hull[i]);
} else { // considering if the just-finished line is the best
@ -145,9 +145,10 @@ find_longest_line(std::vector<cv::Point> hull, unsigned begin, unsigned end) //t
thisline.push_back(hull[i]);
};
}
if(bestline.size()==0) { // this is the case only when the first line is the best line
assert(0==bestdistance);
double thisdistance = dist(thisline[0],thisline[thisline.size()-1]);
if(thisdistance>bestdistance) { // this is relevant if the best line ends at the last point
bestline = thisline;
bestdistance = thisdistance;
}
assert(bestline.size()>=2);
return bestline;