首页 > 其他 > 详细

求凸包(两遍扫描,求上下凸包的方法)

时间:2016-07-25 14:24:04      阅读:238      评论:0      收藏:0      [点我收藏+]

求凸包模版

struct point
{
    double x,y;
    double val,len;
}points[20];
point points1[20];
point points2[20];

const int INF=1e8;

bool cmp(point a,point b)
{
    if(a.x==b.x)
        return a.y<b.y;
    return a.x<b.x;
}

double chaji(point a,point b,point c,point d)
{
    return (b.x-a.x)*(d.y-c.y)-(b.y-a.y)*(d.x-c.x);
}

int real[20];

int cover(int potnum,int n)
{
    sort(points1,points1+potnum,cmp);
    int ansnum=0;
    for(int i=0;i<potnum;i++)
    {
        while(ansnum>1&&chaji(points2[ansnum-2],points2[ansnum-1],points2[ansnum-1],points1[i])<0)
            ansnum--;
        points2[ansnum++]=points1[i];
    }
    int k=ansnum;
    for(int i=potnum-2;i>=0;i--)
    {
        while(ansnum>k&&chaji(points2[ansnum-2],points2[ansnum-1],points2[ansnum-1],points1[i])<0)
            ansnum--;
        points2[ansnum++]=points1[i];
    }
    if(n>1)
        ansnum--;
    return ansnum;
}

double way(point a,point b)
{
    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}

 

求凸包(两遍扫描,求上下凸包的方法)

原文:http://www.cnblogs.com/wsruning/p/5703112.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!