凸包模板

在给模型加支撑的项目中我用了凸包的算法,这是几何中的一个经典算法,单独拿出来作为以后使用的模板。

double dis_2d(Point2d a, Point2d b)
{
	Point2d c = a - b;
	return sqrt(c.x*c.x + c.y*c.y);
}
//叉乘
double X_2d(Point2d a, Point2d b)
{
	return a.x*b.y - a.y*b.x;
}
Point2d temp_2d;//point_2d[0]左下角的点
bool bottom_cmp(const  Point2d& a, const Point2d& b)
{
	double x = X_2d(a - temp_2d, b - temp_2d);
	if (x>0) return 1;
	if (x == 0 && dis_2d(a, temp_2d)bottom_point;
	point_2d.clear();
	for (int i = 0; i=2&&multi(s[t-1],s[t],p[i])<=0) t--;
		while (1)
		{
			int t = bottom_point.size() - 1;
			if (t >= 2 && multi(bottom_point[t - 1], bottom_point[t], point_2d[i]) <= 0)
				bottom_point.pop_back();
			else
				break;
		}
		bottom_point.push_back(point_2d[i]);
	}
	
}

 

你可能感兴趣的:(图形学常用算法模板,长夜漫漫,论文作伴)