计算几何之两线段相交

http://poj.org/problem?id=2653

const double eps=1e-8;
int cmp(double x){
    if(fabs(x)<eps)return 0;
    if(x>0)return 1;
    return -1;
}
struct point{
    double x,y;
    point(){}
    point(double a,double b):x(a),y(b){}
    void input(){
        scanf("%lf%lf",&x,&y);
    }
};
double det(const point &a,const point &b){
    return a.x*b.y-b.x*a.y;
}
struct line{
    point a,b;
    line(){}
    line(point x,point y):a(x),b(y){}
}l[100010];
bool judge(const line a,const line b){//判断线段a,b是否相交
    double x1=a.a.x,x2=a.b.x,x3=b.a.x,x4=b.b.x;
    double y1=a.a.y,y2=a.b.y,y3=b.a.y,y4=b.b.y;
    if(max(x1,x2)<min(x3,x4))return false;
    if(max(y1,y2)<min(y3,y4))return false;
    if(max(x3,x4)<min(x1,x2))return false;
    if(max(y3,y4)<min(y1,y2))return false;
    if(cmp(det(point(x2-x1,y2-y1),point(x4-x1,y4-y1))*det(point(x2-x1,y2-y1),point(x3-x1,y3-y1)))>0)return false;
    if(cmp(det(point(x4-x3,y4-y3),point(x1-x3,y1-y3))*det(point(x4-x3,y4-y3),point(x2-x3,y2-y3)))>0)return false;
    return true;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值