计算几何_多边形的有向面积和确保多边形的点是逆时针排列

来源:互联网 发布:淘宝店铺被关闭了24分 编辑:程序博客网 时间:2024/05/28 14:57

原文地址: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);}}

原创粉丝点击