Ejemplo n.º 1
0
void inOrder(point root){
	if (root){
		root->print();
		inOrder(root->left);
		inOrder(root->right);
	}
	return;
}
Ejemplo n.º 2
0
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; 
	  } 	
   }
}