原文地址:http://www.myexception.cn/program/776883.html
const double eps = 1e-8;
int sign(double d){
return d < -eps ? -1 : (d > eps);
}
//多边形类
struct poly{
static const int N = 1005; //点数的最大值
point ps[N+5]; //逆时针存储多边形的点,[0,pn-1]存储点
int pn; //点数
poly() { pn = 0; }
//加进一个点
void push(point tp){
ps[pn++] = tp;
}
//第k个位置
int trim(int k){
return (k+pn)%pn;
}
void clear(){ pn = 0; }
};
//多边形org的有向面积
double signArea(poly org){
int i, g;
double ans;
point* ps = org.ps;
for(ans = i = 0; i < org.pn; i++){
g = org.trim(i+1);
ans += (ps[g].y*ps[i].x-ps[g].x*ps[i].y);
}
return ans / 2.0;
}
//如果org的点是逆时针的,则调整为逆时针的
void makeAntclockwise(poly& org){
if(sign(signArea(org)) < 0){
reverse(org.ps, org.ps+org.pn);
}
}

本文介绍了一个用于计算平面多边形有向面积的算法,并提供了调整多边形顶点顺序以确保逆时针方向的方法。通过使用点结构和多边形类,实现了多边形顶点的存储与操作。

3092

被折叠的 条评论
为什么被折叠?



