zoukankan      html  css  js  c++  java
  • 计算几何_多边形的有向面积和确保多边形的点是逆时针排列

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

  • 相关阅读:
    Python-手动安装第三方包
    SQL SERVER-根据jobID查job
    python-包模块等概念
    锁表
    Python-try异常捕获
    胶水语言
    C++之多态性与虚函数
    android
    开源许可协议
    hal
  • 原文地址:https://www.cnblogs.com/java20130723/p/3212073.html
Copyright © 2011-2022 走看看