void inOrder(point root){ if (root){ root->print(); inOrder(root->left); inOrder(root->right); } return; }
void findConvexHull(vector<point> points , vector<point> &convexHull){ point minPoint = points[0]; for(int i=1;i<points.size();i++){ if((points[i].x < minPoint.x) || ((points[i].x ==minPoint.x) && (points[i].y < minPoint.y))) minPoint = points[i]; } cout<<"Base point is "; basePoint = minPoint; basePoint.print(); cout<<endl<<"----------------------"<<endl; sort(points.begin() , points.end() , pointlt); for(int i=0;i<points.size();i++){ points[i].print(); cout<<endl; } cout<<"-------------------------------"<<endl; convexHull.push_back(points[0]); int nPoints = points.size(); twoD curr_vec;// = AB(points[0] , points[1]); point last_point;// = points[1]; //convexHull.push(points[1]); int i = 1; while(i < nPoints){ // curr_vec.print(); last_point.print(); cout<<endl; if(convexHull.size()<2){ curr_vec = AB(points[0] , points[i]); last_point = points[i]; convexHull.push_back(points[i]); i++; continue; } if(crossProduct(AB(last_point , points[i]) , curr_vec) > 0) { //all's well convexHull.push_back(points[i]); curr_vec = AB(last_point , points[i]); last_point = points[i]; i++; continue; } else{ convexHull.pop_back(); last_point = convexHull.back(); curr_vec = AB(convexHull[convexHull.size() -2] , convexHull[convexHull.size() - 1]); continue; } } }