poj1410——Intersection

大致題意:就是判斷矩形有沒有和線段相交的水題,等等,爲什麼別人說還要判斷是不是在矩形內???但是我沒判斷啊???我怎麼就過了????可能是數據水吧,其實判斷線段在不在矩形內也很簡單,大不了就多一點點代碼量判斷一下。算了,不添了,就當是生活給的一點小樂趣吧。

最後,代碼:

#include<iostream>
using namespace std;
struct line
{
    double x1,y1,x2,y2;
};
double multiple_cross(double x1,double y1,double x2,double y2)
{
    return x1*y2-x2*y1;
}
bool check(line a,line b)
{
    if(!(min(a.x1,a.x2)<=max(b.x1,b.x2)&&min(a.y1,a.y2)<=max(b.y1,b.y2)&&min(b.x1,b.x2)<=max(a.x1,a.x2)&&min(b.y1,b.y2)<=max(a.y1,a.y2)))
        return false;
    double u,v,w,z;
    u=multiple_cross(a.x1-b.x1,a.y1-b.y1,b.x2-b.x1,b.y2-b.y1);
    v=multiple_cross(a.x2-b.x1,a.y2-b.y1,b.x2-b.x1,b.y2-b.y1);

    w=multiple_cross(b.x1-a.x1,b.y1-a.y1,a.x2-a.x1,a.y2-a.y1);
    z=multiple_cross(b.x2-a.x1,b.y2-a.y1,a.x2-a.x1,a.y2-a.y1);
    if(u*v<=0&&w*z<=0)
        return true;
    return false;
}
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        line a,b,c;
        cin>>a.x1>>a.y1>>a.x2>>a.y2;
        cin>>b.x1>>b.y1>>b.x2>>b.y2;
        bool flag=false;
        c.x1=b.x1;
        c.y1=b.y1;
        c.x2=b.x1;
        c.y2=b.y2;
        if(check(a,c))
            flag=true;
        c.x2=b.x2;
        c.y2=b.y1;
        if(check(a,c))
            flag=true;
        c.x1=b.x2;
        c.y1=b.y1;
        if(check(a,c))
            flag=true;
        c.x1=b.x1;
        c.y1=b.y2;
        if(check(a,b))
            flag=true;
        if(flag)
            cout<<"T"<<endl;
        else
            cout<<"F"<<endl;
    }
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章