码迷,mamicode.com
首页 > 其他好文 > 详细

cf14C Four Segments(计算几何)

时间:2015-03-06 16:12:19      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:

题意:

给四个线段(两个端点的坐标)。

判断这四个线段能否构成一个矩形。(矩形的四条边都平行于X轴或Y轴)

 

思路:

计算几何

 

代码:

class Point{
public:
    int x,y;
    void readd(int xx,int yy){
        x=xx;
        y=yy;
    }
};

class Segment{
public:
    Point startt,endd;
    int length;
    int Type; //1:横 2:竖 -1:斜
    void readd(int x1,int y1,int x2,int y2){
        startt.readd(x1,y1);
        endd.readd(x2,y2);
        length=(int)sqrt((double)(x2-x1)*(x2-x1)+(double)(y2-y1)*(y2-y1));
    }
    int typeCheck(){
        Type=-1;
        if(startt.x==endd.x){
            Type=2;
        }
        if(startt.y==endd.y){
            Type=1;
        }
    }
};
Segment S[5];

bool samePoint(Point a,Point b){
    if(a.x==b.x&&a.y==b.y){
        return true;
    }
    return false;
}


bool solve(){
    if(S[1].startt.y<S[2].startt.y){
        swap(S[1],S[2]);
    }
    if(S[1].startt.x>S[1].endd.x){
        swap(S[1].startt,S[1].endd);
    }
    if(S[2].startt.x>S[2].endd.x){
        swap(S[2].startt,S[2].endd);
    }

    if(S[3].startt.x>S[4].startt.x){
        swap(S[3],S[4]);
    }
    if(S[3].startt.y<S[3].endd.y){
        swap(S[3].startt,S[3].endd);
    }
    if(S[4].startt.y<S[4].endd.y){
        swap(S[4].startt,S[4].endd);
    }
    if(samePoint(S[1].startt,S[3].startt)&&
        samePoint(S[1].endd,S[4].startt)&&
        samePoint(S[3].endd,S[2].startt)&&
        samePoint(S[2].endd,S[4].endd)
       ){
            return true;
       }

    return false;
}



bool cmp1(Segment a,Segment b){
    return a.Type<b.Type;
}
int main(){

    rep(i,1,4){
        int x1,y1,x2,y2;
        cin>>x1>>y1>>x2>>y2;
        S[i].readd(x1,y1,x2,y2);
        S[i].typeCheck();
    }
    rep(i,1,4){
        if(S[i].length==0 || S[i].Type==-1){
            puts("NO");
            return 0;
        }
    }
    sort(S+1,S+5,cmp1);
    if(!(S[1].length==S[2].length&&S[3].length==S[4].length)){
        puts("NO");
        return 0;
    }
    if(solve()){
        puts("YES");
    }
    else{
        puts("NO");
    }
    return 0;
}

 

cf14C Four Segments(计算几何)

标签:

原文地址:http://www.cnblogs.com/fish7/p/4318377.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!