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

判线段和矩形交+神坑——poj1410

时间:2020-02-17 22:35:58      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:inter   ble   ring   div   color   nbsp   swa   std   lse   

坑点:

  1.要重新组织一下左上右下的坐标

  2.在矩形内也算相交

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;

typedef double db;
const db eps=1e-6;
const db pi=acos(-1);
int sign(db k){if (k>eps) return 1; else if (k<-eps) return -1; return 0;}
int cmp(db k1,db k2){return sign(k1-k2);}

struct point{
    db x,y;
    point(){}
    point(db x,db y):x(x),y(y){}
    point operator + (const point &k1) const{return (point){k1.x+x,k1.y+y};}
    point operator - (const point &k1) const{return (point){x-k1.x,y-k1.y};}
    point operator * (db k1) const{return (point){x*k1,y*k1};}
    point operator / (db k1) const{return (point){x/k1,y/k1};}
};
db cross(point k1,point k2){return k1.x*k2.y-k1.y*k2.x;}
int intersect(db l1,db r1,db l2,db r2){
    if (l1>r1) swap(l1,r1); if (l2>r2) swap(l2,r2); return cmp(r1,l2)!=-1&&cmp(r2,l1)!=-1;
}
int checkSS(point k1,point k2,point k3,point k4){
    return intersect(k1.x,k2.x,k3.x,k4.x)&&intersect(k1.y,k2.y,k3.y,k4.y)&&
    sign(cross(k3-k1,k4-k1))*sign(cross(k3-k2,k4-k2))<=0&&
    sign(cross(k1-k3,k2-k3))*sign(cross(k1-k4,k2-k4))<=0;
}

point k1,k2,k3,k4,k5,k6;
int judgein(point k){
    if(k.x<=k4.x&&k.x>=k3.x&&k.y<=k3.y&&k.y>=k4.y)return 1;
    return 0;
}

int main(){
    int t;cin>>t;
    while(t--){
        scanf("%lf%lf",&k1.x,&k1.y);//start
        scanf("%lf%lf",&k2.x,&k2.y);//end
        scanf("%lf%lf",&k3.x,&k3.y);//left top
        scanf("%lf%lf",&k4.x,&k4.y);//right bottom
        if(k3.x>k4.x)swap(k3.x,k4.x);
        if(k3.y<k4.y)swap(k3.y,k4.y);
        k5.x=k3.x;k5.y=k4.y;        //left bottom
        k6.x=k4.x;k6.y=k3.y;        //right top
        if(checkSS(k1,k2,k3,k6) || 
           checkSS(k1,k2,k3,k5) || 
           checkSS(k1,k2,k4,k5) || 
           checkSS(k1,k2,k4,k6) )
            puts("T");
        else if(judgein(k1) || judgein(k2))puts("T");
        else puts("F");
    }
}

 

判线段和矩形交+神坑——poj1410

标签:inter   ble   ring   div   color   nbsp   swa   std   lse   

原文地址:https://www.cnblogs.com/zsben991126/p/12324039.html

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