标签:计几 return sta point int 凸包 二维 dcmp
andrew算法求凸包
模板:
//判断大小注意精度,容易被卡
struct point{
double x,y;
bool operator < (point a){
if(dcmp(x, a.x)) return dcmp(x, a.x) < 0;
return dcmp(y, a.y) < 0;
}
bool operator == (point a) { return !dcmp(x, a.x) && !dcmp(y, a.y); }
};
point P[N];
int sta[N];
int andrew(int n)
{
sort(P, P + n);
n = unique(P, P + n) - P;
int m = 0;
for(int i=0; i<n; i++) //先求下凸包
{
while(m > 1 && sign(area(P[sta[m - 2]], P[sta[m - 1]], P[i])) <= 0) m--;
sta[m++] = i;
}
int v = m;
for(int i=n - 2; i>=0; i--) //再求上凸包
{
while(m > v && sign(area(P[sta[m - 2]], P[sta[m - 1]], P[i])) <= 0) m--;
sta[m++] = i;
}
if(n > 1) m--; // 删去末尾多余的起始点,最后凸包是闭合的
return m;
}
- PS:凸包(convex hall)和凸多边形(convex polygon)是不一样的,凸包有可能退化为线段,后者是前者的子集。
标签:计几,return,sta,point,int,凸包,二维,dcmp 来源: https://blog.csdn.net/weixin_51948235/article/details/120614763
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。