int ConvexHull(Point* p, int n, Point* ch){ //p是待凸包的点,ch是保存凸包的点
sort(p, p+n);
int m=0;
for(int i=0;i<n;i++){
while(m>1 && Cross(ch[m-1]-ch[m-2], p[i]-ch[m-1]) <= 0) m--;
ch[m++]=p[i]; /*要包含边上的点,把"<="改为"<"就好*/
}
int k=m;
for(int i=n-2;i>=0;i--){
while(m>k && Cross(ch[m-1]-ch[m-2], p[i]-ch[m-1]) <= 0) m--;
ch[m++]=p[i]; /*要包含边上的点,把"<="改为"<"就好*/
}
if(n > 1) m--; // p[0]被重复收录;
return m;
}
Andrew算法求凸包
最新推荐文章于 2022-04-23 21:58:17 发布