poj1113 求凸包+计算凸包周长

经典的求凸包题,模板题。

要求用资源最少,那肯定这个多边形是个凸多边形,也就是凸包。

所以先求出凸包,计算它的周长。还有就是这道题所说的,要离城墙L远,其实就是在加上一个圆的周长,圆的半径就是L。

都说到这了,这道题还差什么?还差一个经典的凸包模板!哈哈~

代码如下:

#include
#include
#include
#include
#include
#define eps 1e-8
#define MAX 1111
#define pi acos(-1.0)
using namespace std;
struct Point
{
    double x,y;
    Point(double x=0,double y=0):x(x),y(y) {}
};
Point point[MAX];
Point ch[MAX];
int N,L;
double ans;
typedef Point Vector;
Vector operator + (Vector A, Vector B) {return Vector(A.x+B.x,A.y+B.y);}
Vector operator - (Point A, Point B) {return Vector(A.x-B.x,A.y-B.y);}
Vector operator * (Vector A, double p) {return Vector(A.x*p,A.y*p);}
Vector operator / (Vector A, double p) {return Vector(A.x/p,A.y/p);}
bool operator < (const Point &a,const Point &b) {return a.x1&&Cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=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-2])<=0) m--;
        ch[m++]=p[i];
    }
    if(n>1) m--;
    return m;
}
void input()
{
    int i,j;
    for(i=0;i


 

你可能感兴趣的:(计算几何)