POJ 1410 计算几何

本文介绍了一种通过快速排斥实验和跨立实验相结合的方法来判断两个矩形是否相交的算法实现。该方法适用于实心矩形,并通过具体代码示例展示了如何使用C++编程语言实现矩形相交的检测。

思路:

快速排斥实验+跨立实验

注意矩形是实心的,即在内部也算相交。

 

 

 

//By SiriusRen
#include <cstdio>
#include <algorithm>
using namespace std;
int cases,xs,ys,xe,ye,xl,yt,xr,yb;
bool chaji(int x1,int y1,int x2,int y2){return x1*y2-x2*y1>=0;}
bool kl(int x1,int y1,int x2,int y2){
    return chaji(xs-x1,ys-y1,x2-x1,y2-y1)!=chaji(xe-x1,ye-y1,x2-x1,y2-y1)
         &&chaji(x1-xs,y1-ys,xe-xs,ye-ys)!=chaji(x2-xs,y2-ys,xe-xs,ye-ys);
}
bool check(int x1,int y1,int x2,int y2){
    int Y1=min(ys,ye),Y2=max(ys,ye);
    int minx=max(x1,xs),maxx=min(x2,xe);
    int miny=max(Y1,y1),maxy=min(Y2,y2);
    return minx<=maxx&&miny<=maxy&&kl(x1,y1,x2,y2);
}
bool ck2(){return xl<=xs&&yb<=ys&&xr>=xe&&yt>=ye;}
signed main(){
    scanf("%d",&cases);
    while(cases--){
        scanf("%d%d%d%d%d%d%d%d",&xs,&ys,&xe,&ye,&xl,&yt,&xr,&yb);
        if(xs>xe)swap(xs,xe),swap(ys,ye);
        if(xl>xr)swap(xl,xr);if(yt<yb)swap(yt,yb);
        if(check(xl,yt,xr,yt)||check(xl,yb,xr,yb)||check(xl,yb,xl,yt)||check(xr,yb,xr,yt)||ck2())puts("T");
        else puts("F");
    }
}

 

转载于:https://www.cnblogs.com/SiriusRen/p/9381990.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值