当前位置: 代码迷 >> 综合 >> Andrew算法求凸包
  详细解决方案

Andrew算法求凸包

热度:42   发布时间:2023-09-23 04:03:11.0
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;
}