您的位置:首页 > 其它

计算几何之两线段相交

2015-12-23 20:13 253 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: