您的位置:首页 > 其它

计算几何模板——凸包

2017-08-19 23:27 218 查看
bool cmp_x(const point &a,const point &b){
if(a.x!=b.x)
return a.x<b.x;
return a.y<b.y;
}
vector<point> ps;
vector<point> convex_hull(){
int n=(int)ps.size();
sort(ps.begin(),ps.end(),cmp_x);
int k=0;
vector<point> qs(n*2);
for(int i=0;i<n;i++){
while(k>1&&cmp(det(qs[k-1]-qs[k-2],ps[i]-qs[k-1]))<=0){
k--;
}
qs[k++]=ps[i];
}
for(int i=n-2,t=k;i>=0;i--){
while(k>t&&cmp(det(qs[k-1]-qs[k-2],ps[i]-qs[k-1]))<=0){
k--;
}
qs[k++]=ps[i];
}
qs.resize(k-1);
return qs;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: